aboutsummaryrefslogtreecommitdiffhomepage
path: root/emacs/notmuch-show.el
Commit message (Collapse)AuthorAge
* emacs: show: make buttons select windowGravatar Mark Walters2013-02-18
| | | | | | | | | | | | | | Emacs has two button type objects: widgets (as used for saved searches in notmuch-hello) and buttons as used by parts/citations and id links in notmuch-show. These two behave subtly differently when clicked with the mouse: widgets select the window clicked before running the action, buttons do not. This patch makes all of these behave the same: clicking always selects the clicked window. It does this by defining a notmuch-button-type supertype that the other notmuch buttons can inherit from. This supertype binds the mouse-action to select the window and then activate the button.
* emacs: show: w3m/invisibility workaroundGravatar Mark Walters2013-01-14
| | | | | | | | | | | | | | | | | | There is a bug in the current notmuch code with w3m and invisible parts. w3m sets a keymap, and if we have a hidden [text/html] point at the start of the following line still gets this w3m keymap which causes some strange effects. For example, RET gives an error "No URL at Point" rather than hiding the message, <down> goes to the next link rather than just down a line. These keybinding are also inconvenient when the text/html part is displayed so we ask w3m not to install a keymap. This is only likely to be a problem for emacs 23 as shr is preferred as html renderer on emacs 24 (although the user can set the renderer to w3m even on emacs 24). This solution was suggested by Tomi Ollila <tomi.ollila@iki.fi>
* emacs: show: set default show-all-multipart/alternatives to nilGravatar Mark Walters2012-12-21
| | | | | | Now that the invisibility display of parts is present we no longer need to force the display of all multipart/alternatives: users can toggle them for themselves when needed.
* emacs: show: add invisibility button actionGravatar Mark Walters2012-12-21
| | | | | | | | | This adds a button action to show hidden parts. In this version "RET" toggles the visibility of any part which puts content in the buffer (as opposed to attachments such as application/pdf). The button is used to hide parts when appropriate (eg text/html in multipart/alternative).
* emacs: show: add overlays for each partGravatar Mark Walters2012-12-21
| | | | | | | | | | | This makes notmuch-show-insert-bodypart add an overlay for any non-trivial part with a button header (currently the first text/plain part does not have a button). At this point the overlay is available to the button but there is no action using it yet. In addition the argument HIDE is passed down to notmuch-show-insert-part-overlays to request that the part be hidden by default but this is not acted on yet.
* emacs: show: modify insert-part-header to save the button textGravatar Mark Walters2012-12-21
| | | | | | | This just make notmuch-show-insert-part-header save the basic button text for parts as an attribute. This makes it simpler for the button action (added in a later patch) to reword the label as appropriate (eg append "(not shown)" or not as appropriate).
* emacs: Eliminate buffer invisibility specs from show and washGravatar Austin Clements2012-12-21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously, all visibility in show buffers for headers, message bodies, and washed text was specified by generating one or more symbols for each region and creating overlays with their 'invisible property set to carefully crafted combinations of these symbols. Visibility was controlled not by modifying the overlays directly, but by adding and removing the generated symbols from a gigantic buffer invisibilty spec. This has myriad negative consequences. It's slow because Emacs' display engine has to traverse the buffer invisibility list for every overlay and, since every overlay has its own symbol, this makes rendering O(N^2) in the number of overlays. It composes poorly because symbol-type 'invisible properties are taken from the highest priority overlay over a given character (which is often ambiguous!), rather than being gathered from all overlays over a character. As a result, we have to include symbols related to message hiding in the wash code lest the wash overlays un-hide parts of hidden messages. It also requires various workarounds for isearch to properly open overlays, to set up buffer-invisibility-spec for remove-from-invisibility-spec to work right, and to explicitly refresh the display after updating the buffer invisibility spec. None of this is necessary. This patch converts show and wash to use simple boolean 'invisible properties and to not use the buffer invisibility spec. Rather than adding and removing generated symbols from the invisibility spec, the code now directly toggles the 'invisible property of the appropriate overlay. This speeds up rendering because the display engine only has to check the boolean values of the overlays over a character. It composes nicely because text will be invisible if *any* overlay over it has 'invisible t, which means we can overlap invisibility overlays with abandon. We no longer need any of the workarounds mentioned above. And it fixes a minor bug for free: now, when isearch opens a washed region, the button text will update to say "Click/Enter to hide" rather than remaining unchanged.
* emacs: add support for stashing the thread id in show viewGravatar Jani Nikula2012-12-09
| | | | | Add a prefix argument to notmuch-show-stash-message-id to stash thread id instead of message id.
* emacs: show: refresh buffer did not remove overlaysGravatar Mark Walters2012-12-06
| | | | | | | | | Previously refreshing the notmuch show buffer did not remove overlays which meant that if the user refreshed a message with images the images would remain and then the new text was added after. One might have guessed that erase-buffer would have removed them but it seems not. Thus force the removal of overlays with remove-overlays.
* emacs: Split the function notmuch-show-clean-addressGravatar Mark Walters2012-12-01
| | | | | | | | This function is also used by pick so split it out in preperation for moving to lib. In fact, pick and show want a slightly different combination of name and email on return so make the separated function return them as a pair, and let show or pick extract the combination they want from that.
* emacs: less guessing of character set in messagesGravatar Tomi Ollila2012-11-26
| | | | | | | | | | | | | | | The macro with-current-notmuch-show-message executes command `notmuch show --format=raw id:...` which just outputs the contents of the mail file verbatim (into temporary buffer). In case e.g. utf-8 locale is used the temporary buffer has buffer-file-coding-system as utf-8. In this case Emacs converts the data to multibyte format, guessing that input is in utf-8. However, the "raw" (MIME) message may contain octet data in any other 8bit format, and as no (MIME-)content spesific handling to the message is done at this point, conversion to other formats may lose information. By setting coding-system-for-read 'no-conversion drops the conversion part and makes this handle input as notmuch-get-bodypart-internal() does. This marks the broken test in previous change fixed.
* notmuch-show.el: handle the case where icalendar-import-buffer returns nilGravatar Tomi Ollila2012-11-25
| | | | | | | | | | | icalendar-import-buffer can fail by an error signal (which have been witnessed) but according to its docstring it can also return nil when failing (it returns t when succeeding). Now that the error is caught by the caller of notmuch-show-inset-part-* functions in case icalendar-import-buffer returns nil an explicit error is signaled and unwind-protect takes care of deleting the temporary file (just in case, it is usually not written to the fs yet).
* notmuch-show.el: import calendar data with public function after CR removalGravatar Tomi Ollila2012-11-25
| | | | | | | | | | | notmuch-get-bodypart-content provides raw data to its caller so that it can be stored verbatim whenever needed. icalendar functions expect Emacs to do EOL conversion for the data given to these. Therefore it the CRLF -> LF conversion is now done explicitly. The calls to private functions icalendar--convert-ical-to-diary and icalendar--read-element are replaced with call to public function icalendar-import-buffer.
* emacs: Buttonize mid: linksGravatar Austin Clements2012-11-15
| | | | This adds support for RFC 2392 mid: message ID links.
* emacs: Improve the regexp used to match id:'s in messagesGravatar Austin Clements2012-11-15
| | | | | | | | | | | | | | | This regexp agrees with Xapian query syntax much more closely, though we specifically disallow various cases that would be confusing in the context of an email body (e.g., punctuation at the end of an id: link is not considered part of the id: link because it's probably part of the surrounding text). In particular, this handles id: links that are not surrounded by quotes much better, which stash is much more likely to generate now that we don't quote id's that don't need to be quoted. It also handles quoted id: links better. We update the buttonization test to reflect the new pattern.
* emacs/notmuch-show.el: handle bodypart insert errorGravatar Tomi Ollila2012-11-07
| | | | | | When inserting of email bodypart failes, insert a failure message to the buffer (and continue) instead of halting the insertion of the rest of that email thread in question.
* emacs: rename `notmuch-show-toggle-headers' to ↵Gravatar Pieter Praet2012-10-20
| | | | | | | | | | | | | | | | | | | | | | | | `notmuch-show-toggle-visibility-headers' * emacs/notmuch-show.el (notmuch-show-toggle-headers): Rename to `notmuch-show-toggle-visibility-headers'. (notmuch-show-mode-map): Update "h" binding wrt renamed `notmuch-show-toggle-headers'. (notmuch-message-headers): Update docstring wrt renamed `notmuch-show-toggle-headers'. (notmuch-message-headers-visible): Update docstring wrt renamed `notmuch-show-toggle-headers'. Also fixed a small typo. * test/emacs: Update subtest wrt renamed `notmuch-show-toggle-headers': - "notmuch-show: hide message headers (w/ notmuch-show-toggle-headers)"
* Run `notmuch-show-hook' after setting `header-line-format'Gravatar Damien Cassou2012-09-27
| | | | | | | This patch makes it possible for notmuch-show hooks to change the header line. Signed-off-by: Damien Cassou <damien.cassou@gmail.com>
* emacs: add support for reversing notmuch-show-mark-read tag changesGravatar Jani Nikula2012-09-19
| | | | | | | | | | Since marking a message as read can now be a user customized set of tag changes, make reversing this easier. Allow a prefix argument to notmuch-show-mark-read to reverse the marking as read, similar to the unarchiving in notmuch-show-archive-message. While at it, update the relevant documentation to match that of other automatic tagging (i.e. archive and reply).
* emacs: add support for custom tag changes on message/thread archiveGravatar Jani Nikula2012-09-19
| | | | | | | Add support for customization of the tag changes that are applied when a message or a thread is archived. Instead of hard-coded removal of the "inbox" tag, the user can now specify a list of tag changes to perform.
* emacs: make notmuch-show return its bufferGravatar Mark Walters2012-09-01
| | | | | notmuch-pick uses the returned buffer to try and make sure it does not close the wrong buffer.
* notmuch-show: add notmuch-show-mark-read-tags optionGravatar Michal Nazarewicz2012-08-29
| | | | | | | | The `notmuch-show-mark-read-tags' lists tags that are to be applied when message is read. By default, the only value is "-unread" which will remove the unread tag. Among other uses, this variable can be used to stop notmuch-show from modifying tags when message is shown (by setting the variable to an empty list).
* emacs: Make moving to the previous message move to the previous boundaryGravatar Austin Clements2012-08-12
| | | | | | | | | | | Previously, notmuch-show-previous-message would move to the beginning of the message before the message containing point. This patch makes it instead move to the previous message *boundary*. That is, if point isn't already at the beginning of the message, it moves to the beginning of the current message. This is consistent with notmuch-show-next-message, which can be thought of as moving to the next message boundary. Several people have expressed a preference for this.
* emacs: show: exclude bug fixGravatar Mark Walters2012-08-02
| | | | | | The pipe message function (when used with a prefix) uses a search of the form "id:<id1> or id:<id2>" etc. Since the user says precisely which messages are wanted by opening them it should not use excludes.
* emacs: make elide messages use notmuch-show for omitting messages.Gravatar Mark Walters2012-06-29
| | | | | | | | | Previously the elide messages code got the entire-thread from notmuch-show.c and then threw away all non-matching messages. This version calls notmuch-show.c without the --entire-thread flag so it never receives the non-matching messages in the first place. This makes it substantially faster.
* emacs: add pipe attachment commandGravatar Mark Walters2012-06-22
| | | | | | | Allow the user to pipe the attachment somewhere. Bound to '|' on the attachment button. Signed-off-by: Jameson Graef Rollins <jrollins@finestructure.net>
* emacs: only strip "re:" in the beginning of subjectGravatar Jani Nikula2012-06-07
| | | | | Fix notmuch-show-strip-re by matching "re:" only in the beginning of the input string.
* emacs: Correctly quote non-text/plain parts in replyGravatar Adam Wolfe Gordon2012-05-06
| | | | | | | | | | Quote non-text parts nicely by displaying them with mm-display-part before calling message-cite-original to quote them. HTML-only emails can now be quoted correctly. We re-use some code from notmuch-show (notmuch-show-mm-display-part-inline), which has been moved to notmuch-lib.el. Mark the test for this feature as not broken.
* emacs: modify show tag functions to use new notmuch-tag interfaceGravatar Jameson Graef Rollins2012-04-29
| | | | | | The main change here is to modify argument parsing so as to not force tag-changes to be a list, and to let notmuch-tag handle prompting the user when required. doc strings are also updated and cleaned up.
* emacs: create notmuch-tag.el, and move appropriate functions from notmuch.elGravatar Jameson Graef Rollins2012-04-29
| | | | | | | | Tagging functions are used in notmuch.el, notmuch-show.el, and notmuch-message.el. There are enough common functions for tagging that it makes sense to put them all in their own library. No code is modified, just moved around.
* emacs: fix archive thread/message function documentation.Gravatar Jameson Graef Rollins2012-04-29
| | | | | This removes an inaccuracy in the thread archiving function, and adds a clarification to the message archiving function.
* emacs: Don't move to the next thread unless the cursor is at the end of the ↵Gravatar David Edmondson2012-04-29
| | | | | | | | | buffer. When using the spacebar to scroll through a thread, hitting 'space' when the bottom of the last message is visible should take the cursor to the end of the buffer rather than immediately archiving the thread and moving to the next thread.
* emacs-show: open excluded matches if no other matchesGravatar Mark Walters2012-04-29
| | | | | | | | Currently emacs show does not open matching but excluded messages. This is normally the desired behaviour but is probably not ideal if only excluded messages match. This patch opens all the matching (necessarily excluded) messages in this case and goes to the first one.
* emacs: do not modify subject in search or showGravatar Jameson Graef Rollins2012-04-28
| | | | | | | | | | | | | A previous patch [0] replaced blank subject lines with '[No Subject]' in search and show mode. Apparently this was needed to circumvent some bug in the printing code, but there was no need for it search or show, and it is definitely not desirable, so we undo it here (a revert is no longer feasible). We should not be modifying strings in the original message without good reason, or without a clear indication that we are doing so, neither of which apply in this case. For further discussion see [0]. [0] id:"1327918561-16245-3-git-send-email-dme@dme.org"
* emacs: make show set --exclude=falseGravatar Mark Walters2012-04-07
| | | | | | Show has to set --exclude=false to deal with cases where it is asked to show a single excluded message. It uses JSON so it can easily pass the exclude information to the user.
* emacs: Escape all message ID queriesGravatar Austin Clements2012-03-30
| | | | | | | | | | This adds a lib function to turn a message ID into a properly escaped message ID query and uses this function wherever we previously hand-constructed ID queries. Wherever this new function is used, documentation has been clarified to refer to "id: queries" instead of "message IDs". This fixes the broken test introduced by the previous patch.
* emacs: Use the new JSON reply format and message-cite-originalGravatar Adam Wolfe Gordon2012-03-19
| | | | | | | | | | | | | | | | | Use the new JSON reply format to create replies in emacs. Quote HTML parts nicely by using mm-display-part to turn them into displayable text, then quoting them with message-cite-original. This is very useful for users who regularly receive HTML-only email. Use message-mode's message-cite-original function to create the quoted body for reply messages. In order to make this act like the existing notmuch defaults, you will need to set the following in your emacs configuration: message-citation-line-format "On %a, %d %b %Y, %f wrote:" message-citation-line-function 'message-insert-formatted-citation-line The tests have been updated to reflect the (ugly) emacs default.
* emacs: Factor out useful functions into notmuch-libGravatar Adam Wolfe Gordon2012-03-19
| | | | | Move a few functions related to handling multipart/alternative parts into notmuch-lib.el, so they can be used by future reply code.
* emacs: show: recognize the exclude flag.Gravatar Mark Walters2012-03-02
| | | | | | | Show mode will recognize the exclude flag by not opening excluding messages by default, and will start at the first matching non-excluded message. If there are no matching non-excluded messages it will go to the first matching (necessarily excluded) message.
* emacs: Clarify description of thread manipulating functionsGravatar Michal Sojka2012-02-29
| | | | | | | | | | | It is not clear whether the term "thread" refers to the thread in the database or to the thread currently shown in a buffer. Those two meanings may refer to different sets of messages, e.g. when a new email is added to the database while the buffer shows the state before the new email arrived. This patch replaces the term thread with the term current buffer, which is hopefully less ambiguous.
* emacs: Fix out of date commentGravatar Austin Clements2012-02-27
| | | | | | The behavior of the header line in show-mode changed from showing the subject of the first open message to showing the subject of the first message in 4d77f18b. Update a comment to reflect this.
* emacs: Reverse the meaning of notmuch-show-refresh-view's argumentGravatar Austin Clements2012-02-25
| | | | | | | | Consensus seems to be that people prefer that refreshing show buffers retains state by default, rather than resetting it by default. This turns out to be the case in the code, as well. In fact, there's even a test for this that's been marked broken for several months, which this patch finally gets to mark as fixed.
* emacs: When refreshing a show buffer, only mark read when resetting stateGravatar Austin Clements2012-02-25
| | | | | | | | | | | | | | | If we retain state while refreshing a show buffer, it should not mark any messages read since it's not a navigation operation (it especially shouldn't mark the first message matching the query read, which is what it did previously). If the user or caller requests that refresh reset the state of the buffer, then we consider that a navigation operation, so we do mark the message under point after the refresh read. This is implemented by moving responsibility for initial positioning and read-marking out of notmuch-show-worker and into its caller. Since notmuch-show-worker is now exclusively about building the show buffer, we rename it to notmuch-show-build-buffer.
* emacs: add `notmuch-show-stash-mlarchive-link{, -and-go}'Gravatar Pieter Praet2012-02-25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * emacs/notmuch-show.el (notmuch-show-stash-mlarchive-link-alist): New defcustom of type `alist' (key = name, value = URI), containing Mailing List Archive URI's for searching by Message-Id. (notmuch-show-stash-mlarchive-link-default): New defcustom, default MLA to use when `notmuch-show-stash-mlarchive-link' received no user input whatsoever. Available choices are generated using the contents of `notmuch-show-stash-mlarchive-link-alist'. (notmuch-show-stash-map): Added keybinds "l" and "L" for `notmuch-show-stash-mlarchive-link' respectively `notmuch-show-stash-mlarchive-link-and-go'. (notmuch-show-stash-mlarchive-link): New function, stashes a URI pointing to the current message at one of the MLAs configured in `notmuch-show-stash-mlarchive-link-alist'. Prompts user with `completing-read' if not provided with an MLA key. (notmuch-show-stash-mlarchive-link-and-go): New function, uses `notmuch-show-stash-mlarchive-link' to stash a URI, and then visits it using the browser configured in `browse-url-browser-function'. Based on original work [1] by David Edmondson <dme@dme.org>. [1] id:"1327397873-20596-1-git-send-email-dme@dme.org"
* emacs: `notmuch-show-get-message-id': optionally return Message-Id sans prefixGravatar Pieter Praet2012-02-25
| | | | | | | | | | | | * emacs/notmuch-show.el (notmuch-show-get-message-id): Add optional arg BARE. When non-nil, return a Message-Id without quotes and prefix, thus obviating the need to strip them off again in various places. (notmuch-show-stash-message-id-stripped): Update wrt changes in `notmuch-show-get-message-id'.
* emacs: support text/calendar mime typeGravatar Jani Nikula2012-02-25
| | | | | | | Replace text/x-vcalendar with text/calendar, while maintaining support and backwards compatibility for text/x-vcalendar. Code by David Edmondson <dme@dme.org>
* emacs: allow to set RETAIN-STATE for `notmuch-show-refresh-view' interactivelyGravatar Dmitry Kurochkin2012-02-14
| | | | | | The notmuch-show view refresh function (`notmuch-show-refresh-view', bound to "=") accepts an optional RETAIN-STATE argument. The patch allows to set this argument interactively by using "C-u =".
* emacs: cleanup and simplify `notmuch-show-archive-thread' and related functionsGravatar Dmitry Kurochkin2012-02-12
| | | | | | | | | | | | Recent changes in notmuch-show tagging introduced some code duplication. The patch cleanups and simplifies `notmuch-show-archive-thread' function by using `notmuch-show-tag-all', no longer used function are removed. After the change, `notmuch-show-archive-thread' function becomes symmetric with `notmuch-show-archive-message'. A side effect of these changes is that `notmuch-show-archive-thread' no longer calls "notmuch tag" for each message in the thread.
* emacs: A prefix argument to `notmuch-show' should invert the matching ↵Gravatar David Edmondson2012-02-12
| | | | | | | | message behaviour. Allow the user to open a thread with inverted `notmuch-show-only-matching-messages' behaviour using a prefix argument.
* emacs: Add `notmuch-show-only-matching-messages'.Gravatar David Edmondson2012-02-12
| | | | | Allow the user to choose that only matching messages are shown by default.