Commit graph

832 commits

Author SHA1 Message Date
Mark Walters
4c822aecc7 emacs: search face bugfix
In commit 2a7b11b064 the default faces
for unread and flagged were accidentally swapped. This swaps them back.
2016-10-19 08:39:58 -03:00
Mark Walters
a4331bf138 emacs: fix notmuch-search-line-faces defcustom
In commit 2a7b11b064 the default value
for notmuch-search-line-faces was changed so that it didn't match the
specification in the corresponding defcustom. This meant that it was
difficult for the user to customize this variable as they got a type
mismatch error.

Note anyone who had already customised this variable would not see
this bug as their customisation would match the defcustom.
2016-10-19 08:39:36 -03:00
Mark Walters
2f643ac763 emacs: add global keybinding M-= for refresh all buffers
We can't use c-u = as some of the notmuch-show refresh function
already uses that. This is a global keybinding for a relatively
infrequent function but M-= seems unlikely to cause conflicts.
2016-10-17 09:07:54 -03:00
Ioan-Adrian Ratiu
02d3c76102 emacs: notmuch-lib: add refresh all buffers function
notmuch-refresh-all-buffers calls each buffer's major mode specific
refresh function using the generic notmuch-refresh-this-buffer function.

Since the earlier changesets have stopped the refresh functions from
forcing the buffers to be redisplayed this can refresh buffers that
are not currently displayed without disturbing the user.  This is very
useful for silent async background updating the emacs display when new
mail is fetched.

Signed-off-by: Ioan-Adrian Ratiu <adi@adirat.com>
2016-10-17 09:07:32 -03:00
Ioan-Adrian Ratiu
4954bc50e8 emacs: notmuch-show: refresh all windows displaying buffer
This updates all windows displaying a notmuch-show buffer when the
buffer refresh function is called.

Each window displaying a notmuch-show buffer has its own currently
displayed message based on the (point) location. We store the state
of all displayed windows when refreshing a notmuch-show buffer and
re-apply the current shown message (point) for all windows.

Implementation note: Each window has it's own (point) value, besides
the buffer's (point) value. Sometimes these values are identical like
in the case where a single window displays a buffer. When multiple
windows display a buffer, (point) returns each window's specific value.
What we are storing in this changeset is the window values not the
buffer point values. The buffer's point is returned only if no window
is displaying the buffer, a case we do not care about here.

Signed-off-by: Ioan-Adrian Ratiu <adi@adirat.com>
2016-10-17 09:05:22 -03:00
Ioan-Adrian Ratiu
fae3d361f2 emacs: notmuch-search-refresh-view: reuse buffer
There's no reason to completely kill a buffer while refreshing its
search results because the buffer name is constant between refreshes
(based on the search query), only its contents may change and notmuch
search kills all local variables, so it's safe to reuse.

Reusing the same buffer also makes it possible to do things like
refreshing a buffer which is not focused or even not shown in any
window - this will be used in the next commits to add auto-refresh
capabilities to all existing notmuch buffers + a function to call
after syncing mail to refresh everything.

Signed-off-by: Ioan-Adrian Ratiu <adi@adirat.com>
2016-10-17 09:05:05 -03:00
Ioan-Adrian Ratiu
e37a64da7a emacs: notmuch-search: add no-display functionality
If no-display is non-nil when calling notmuch-search then do not force
the search buffer to be displayed.

Signed-off-by: Ioan-Adrian Ratiu <adi@adirat.com>
2016-10-17 09:04:53 -03:00
Mark Walters
a9ab5e42af emacs: hello: stop update from forcing the buffer to be displayed
Make the notmuch-hello refresh function (notmuch-hello-update) not
force the buffer to be displayed. All the callers call it when the
buffer is already displayed so it will only affect non-interactive
callers. Since it is just a trivial wrapper of notmuch-hello anyone
who wants to force the buffer to be displayed should just call
notmuch-hello.
2016-10-17 09:04:38 -03:00
Mark Walters
5e83fe979d emacs: make the refresh functions more consistent
The different refreshed functions were called differently: some were
called interactively and some were not. Make them all interactive.
2016-10-17 09:01:52 -03:00
Mark Walters
cd7e497d07 emacs: tree: make refresh use generic binding
Not using the generic binding is an anomaly from when tree was in
contrib (as pick).
2016-10-17 09:01:40 -03:00
Matthew Lear
0301055f07 Fix reply to encrypted mail when discouraging plain text.
If an encrypted multipart message is received which contains html and
notmuch-multipart/alternative-discouraged is set to discourage "text/plain",
any encrypted parts are not decrypted during generation of the reply
text. This fixes that problem by making sure notmuch-mua-reply does
that.
2016-10-17 08:55:04 -03:00
Mark Walters
fae577cc48 emacs: jump: make multilevel keys do multilevel jump
notmuch jump allows the user to specify a key sequence rather than
just a single key for its bindings. However, it doesn't show what has
already been typed so it can be difficult to see what has
happened. This makes each key press appear, and the jump menu reduce
to the possible follow up keys.

We also bind backspace (emacs symbol DEL) to go back up a level in the
subjumpmaps, and to exit from the top level.
2016-10-15 21:51:17 -03:00
Mark Walters
190a30b263 emacs: tag-jump: docstring fix
In commit 297d091e1c the key for
switching to the reverse keymap was changed from r to k but the
docstring for the defcustom was not updated. This changeset updates
the documentation to match.
2016-10-15 21:49:48 -03:00
David Bremner
5d05523659 merge buttonise-links patch to master 2016-10-11 22:42:26 -03:00
David Bremner
f575a346df emacs/show: force notmuch-show-buttonise-links to act on lines
This seems to fix a problem with emacs 25 creating partial buttons by
calling n-s-b-l with a region that does not include the whole button.
I'm not 100% sure it's legit to act outside the region passed by
jit-lock, but goto-address-fontify-region (where I borrowed the code
from) already does this, so this patch to not make things worse.
2016-10-11 22:40:25 -03:00
Mark Walters
9259c7971d emacs: mua: check for misplaced secure mml tags
Emacs message-send seems to ignore a secure mml tag anywhere except at
the start of the body, and it must be followed by a newline. Since
this is almost certainly not desired we check for it, and require user
confirmation before sending.

As the setup before message-send or message-send-and-exit is getting
more complicated it is convenient to unify the two correspoinding
notmuch functions.
2016-10-09 08:53:14 -03:00
Mark Walters
025bf3cd4a emacs: mua: extract a common message-send function.
This commit adds a common message-send function for message-send and
message-send-and-exit. At the moment the overlap is small, but the
message-send function will get more complex.
2016-10-09 08:53:01 -03:00
Mark Walters
0c52b5d3b2 emacs: include first match in address completion
The current code for address completion takes the list of possible
completions (whether generated internally or externally), makes the
first match the initial value for the completion, and puts all the
others (but not the first match) into the possible completions.

This has the nice effect that the <down> key takes you immediately to
the next completion (whereas if the first match were included in the
possible completions it would take you to the first match
again).

However, it has two side effects. First, once you have completed to
the full match you find it says and try completing again you get told
"no match" not "sole completion". Secondly, if you delete some of the
text and try completing you don't get the first match as an option.

This tries to get round most of these problems by including the full
list of possible completions, but with the first match moved to the
very end of the list.
2016-10-09 08:50:32 -03:00
Mark Walters
385413e059 emacs: add mimetype completions to searches 2016-10-09 08:50:02 -03:00
Mark Walters
297d091e1c emacs: tag-jump: make k binding for the reverse tag change map
Currently, by default k invokes the tag-jump menu, and following it by
r invokes the reverse tag change jump menu. This is awkward to type
(e.g. k r u for undoing a -unread change). This changes it so that k
followed by k invokes the reverse menu. We make the key for the
reverse map a variable as that makes it possible for a user to
change it by editing their .emacs file.
2016-10-07 22:35:42 -03:00
Mark Walters
ae06fbfc76 emacs: add a tag jump menu
Add a customisable "jump" style menu for doing tagging operations.
2016-10-04 07:55:16 -03:00
Mark Walters
0b138c2686 emacs: fcc: say we are doing Fcc
Since doing the Fcc with notmuch insert could be slow (if the indexing
takes some time) add a message saying we are doing it.
2016-09-30 07:13:54 -03:00
Mark Walters
4266e76eed emacs: document notmuch-fcc-dirs
This updates the docstring for the variable notmuch-fcc-dirs to match
the new insert code.
2016-09-29 08:07:38 -03:00
Mark Walters
9966720453 emacs: tree: make b bounce a message and backspace scroll message pane up
This tweaks the keybindings in tree-mode. It make b do bounce/resend
matching show-mode. Since b was already bound to scroll message pane
back, we now use backspace for that.

This means space/backspace scroll the message pane forwards/backwards,
and page-up/page-down scrolls the tree pane forwards/backwards.
2016-09-26 13:01:31 -03:00
Mark Walters
51d27e0855 emacs: tag deleted face bugfix
Commit d25d33ff cleaned up some of the tag face code. However, for the
face notmuch-tag-deleted it used the test

((class color) (supports :strike-through))

to decide whether to use red strikethrough or inverse-video (emacs in
a terminal typically doesn't support red strikethrough, but in X it does).

However, it seems that test often returns true even though red
strikethrough is not supported. This breaks the tag update code -- the
wrong thing is displayed to the user.

Thus we make the test explicitly more specific, changing the test to

((class color) (supports :strike-through "red"))
2016-09-25 07:42:01 -03:00
Mark Walters
7b2d7d6512 emacs: tree: make jump close message pane
j is in the global notmuch keymap bound to notmuch jump. In tree-mode
it makes sense to close the message pane first (otherwise the new
search runs in the small top pane of tree-mode).
2016-09-24 10:08:24 -03:00
Mark Walters
a448879e49 emacs: reply: remove wrong sig/enc status buttons
This stops the (usually incorrect) sigstatus and encstatus buttons
appearing when replying in emacs, and updates the test suite to match.

Overriding the status button functions is a little unusual but much
less intrusive than passing an argument all the way down the call
chain. It also makes it clear exactly what it does.

We also hide the application/pgp-encrypted part as it can only contain
"Version: 1". We do this in notmuch show, which means it also happens
when replying.
2016-09-18 10:57:27 -03:00
Matt Armstrong
d25d33ff2d emacs: make the remaining faces configurable.
I believe this moves all "anonymous" face specifications in notmuch
code into a configurable defface.
2016-09-12 08:12:10 -03:00
Matt Armstrong
3856286e21 emacs: implement notmuch-search-color-line with dolist.
While passing a lambda to mapc is idiomatic elisp, dolist is easier
to understand, and there are a few other calls to it in this file.
2016-09-12 08:08:45 -03:00
Mark Walters
7b7960ea22 emacs: wash: make word-wrap bound message width
Previously if notmuch-wash-wrap-lines-length was set then all messages
would be wrapped at this value (or window-width if that is
smaller). This was done regardless of the message's depth in a thread --
for example, if the n.w.w.l.l is 80 and the messages depth is 20
(so indented 20 by default) the messages text only got 60 characters
of space.

This commit changes that so a message always gets the full n.w.w.l.l
of width regardless of its indentation (unless that goes over
window-width of course).
2016-09-12 08:06:00 -03:00
Mark Walters
f949215207 emacs: show: let the user override the mime-type of an attachment
This allows the user to override the mime-type of a part in the show
buffer. This takes the simple option of displaying the part with the
specified mime-type in its own buffer (in view mode). This avoids
further complicating the part handling code.

Bound to ". m" (i.e., m in the part map). Then the user can either
enter a mime-type (with completion to all mime types that mailcap (and
thus notmuch) knows about, or press return for the default choice of
text/plain.
2016-09-12 08:03:34 -03:00
Steven Allen
e954310d70 emacs: use define-derived-mode for defining modes.
This sets up and runs all the correct hooks and reduces some redundancy.
2016-09-10 13:07:54 -03:00
Mark Walters
fce8146a8b emacs: maildir: add the actual insert code
With all the preparation it is now simple to add the actual insert
code. Since insert can fail for many reasons we let the user decide
interactively deal with it.

We modify test-lib.el to set file fcc, so that all the old tests and
emacs_fcc_message from test-lib.sh still work
2016-09-04 08:23:14 -03:00
Mark Walters
cf59859b20 Modify our local copy of message-do-fcc
Since we also need to use this code for the draft handling we split
message-do-fcc into convenient sub-chunks (functions or macros as
appropriate).
2016-09-04 08:23:04 -03:00
Mark Walters
aa1e8352de emacs: simplify our local copy of message-do-fcc
message-do-fcc has lots of functionality we don't need, so remove it.
2016-09-04 08:22:56 -03:00
Mark Walters
967bbc0792 emacs: maildir import message-do-fcc
We will need our own local copy of message-do-fcc so this commit just
copies the code straight from message.el so that it is easier to see
our local changes coming in the next commit.
2016-09-04 08:22:48 -03:00
Mark Walters
37859d1fcb emacs: maildir-fcc: prepare for use of notmuch insert
We move some code around in preparation for the use of notmuch
insert. In particular, we move the check for a valid maildir for the
fcc to when the message is sent rather than when the fcc header is
inserted. The main motivation is consistency with the insert version
(coming later) where we cannot check the validity until send.

We allow the user some chance to correct the header; the choice here
is intended to be consistent with the insert version to come.
2016-09-04 08:22:39 -03:00
Mark Walters
74b54fb0fa emacs: notmuch-check-exit-status bugfix
This function prints diagnostic information in the event of an
error. However, one of the callers has an optional :stdin-string
keyword argument. This causes the error printing routine to error
itself.

Rather than reach notmuch-check-exit-status about the possible keyword
arguments (currently only one but could be more in the future) this
commit just tells notmuch-check-exit-status how to print non-string arguments.
2016-09-04 08:22:30 -03:00
Mark Walters
827c28a04e emacs: address: allow internal completion on an individual basis
This commit makes two changes. The first allows the user to override
an external completion method with the internal notmuch address based
completion for an individual buffer.

Secondly, if the user has company-mode enabled then it sets up company
mode (based on internal completion) but disables the automatic timeout
completion -- the user can still activate it in when desired with
standard company commands such as company-complete.
2016-09-04 08:07:59 -03:00
Mark Walters
2cf0ef3998 emacs: address completion, allow sender/recipient and filters
This commit lets the user customize the address completion. It makes
two changes.

The first change controls whether to build the address completion list
based on messages you have sent or you have received (the latter is
much faster).

The second change add a possible filter query to limit the messages
used -- for example, setting this to date:1y..  would limit the
address completions to addresses used in the last year. This speeds up
the address harvest and may also make the search less cluttered as old
addresses may well no longer be valid.
2016-09-04 08:07:46 -03:00
Daniel Kahn Gillmor
1ba73d1437 Omit User-Agent: header by default
The User-Agent: header can be fun and interesting, but it also leaks
quite a bit of information about the user and their software stack.

This represents a potential security risk (attackers can target the
particular stack) and also an anonymity risk (a user trying to
preserve their anonymity by sending mail from a non-associated account
might reveal quite a lot of information if their choice of mail user
agent is exposed).

This change also avoids hiding the User-Agent header by default, so
that people who decide they want to send it will at least see it (and
can edit it if they want to) before sending.

It makes sense to have safer defaults.
2016-08-11 20:16:00 +09:00
Mark Walters
999d473299 emacs: wash: word-wrap bugfix
Previously notmuch-wash made the width of the text (approximately) the
window-width minus the depth in thread. This is correct for the
default indentation of 1 per message depth, but is incorrect for any
other setting of notmuch-show-indent-messages-width.

As notmuch-show-indent-messages-width is customisable, and notmuch-tree
sets it to zero to avoid indenting messages in the message pane, this
bug can show up in real use.

Two of the tests had to be updated: when
notmuch-show-indent-messages-width is 0, then the new (correct) word
wrapping happens later, when notmuch-show-indent-messages-width is 4,
then the new word wrapping happens sooner.
2016-08-09 09:34:25 +09:00
Matt Armstrong
2a7b11b064 emacs: express n-search-line-faces in terms of two new faces
The two new faces (notmuch-search-flagged-face and
notmuch-search-unread-face) make it easier to find the relevant face by
customizing notmuch-faces.  I plan to do the same to the other alists of
faces found elsewhere.
2016-08-02 13:40:44 +09:00
Mark Walters
dd5cd6964f emacs: show: improve handling of mark read tagging errors
Previously if a marking read tag change (i.e., removing the unread
tag) failed for some reason, such as a locked database, then no more
mark read tag changes would be attempted in that buffer.

This handles the error more gracefully. There is not much we can do
yet about dealing with the error itself, and marking read is probably
not important enough to warrant keeping a queue of pending changes or
anything.

However this commit changes it so that

- we do try and make future mark read tag changes.

- we display the tag state correctly: i.e. we don't display the tag as
  deleted (no strike through)

- and since we know the tag change failed we can try to mark this
  message read in the future. Indeed, since the code uses the
  post-command hook we will try again on the next keypress (unless the
  user has left the message).

We indicate to the user that these mark read tag changes may have
failed in the header-line.
2016-06-28 09:20:54 +02:00
Daniel Kahn Gillmor
6a833a6e83 Use https instead of http where possible
Many of the external links found in the notmuch source can be resolved
using https instead of http.  This changeset addresses as many as i
could find, without touching the e-mail corpus or expected outputs
found in tests.
2016-06-05 08:32:17 -03:00
Tomi Ollila
fd3503e99e emacs: bind notmuch-show-resend-message to 'b' in notmuch-show mode
This binding is similar to mutt's, which is

bind {mode} b   "bounce-message"    # remail a message to another user

where {mode} is 'index', 'pager' or 'attach'.
2016-05-19 07:53:51 -03:00
Tomi Ollila
c13ff402c4 emacs: add function to resend message to new recipients
The new function notmuch-show-message-resend re-sends
message to new recipients using #'message-resend.

Recipients are read from minibuffer as a comma-separated
string (with some keyboard support including tab completion).

Final confirmation before sending is asked.
2016-05-19 07:53:40 -03:00
David Edmondson
64b0d21da0 emacs: Tell `message-mode' that outgoing messages are email.
When composing messages (including replies, etc.), indicate to
`message-mode' definitively that the message is email (as opposed to
Usenet news) rather than having it attempt to determine this for itself.

This causes `message-mode' to observe such variables as
`message-default-mail-headers', which previously happened haphazardly.
2016-05-01 08:06:24 -03:00
David Edmondson
fdce7eb545 emacs: Observe the charset of MIME parts when reading them.
`notmuch--get-bodypart-raw' previously assumed that all non-binary MIME
parts could be successfully read by assuming that they were UTF-8
encoded. This was demonstrated to be wrong, specifically when a part was
marked as ISO8859-1 and included accented characters (which were
incorrectly rendered as a result).

Rather than assuming UTF-8, attempt to use the part's declared charset
when reading it, falling back to US-ASCII if the declared charset is
unknown, unsupported or invalid.
2016-05-01 08:04:07 -03:00
David Edmondson
bfd8100cff emacs: Don't indent multipart sub-parts during reply.
When generating cited messages for replay, override any existing
setting for `notmuch-show-indent-multipart' to ensure that no
indentation occurs.
2016-04-16 09:40:14 -03:00
Chunyang Xu
e5548d52b9 emacs: Add notmuch homepage to package header
So user can find out notmuch's homepage with:

  C-h P ('describe-package') notmuch
2016-04-16 08:25:10 -03:00
Chunyang Xu
0cf457b73b emacs: Fix packaging
Refer to (info "(elisp) Library Headers") for package conventions.
2016-04-16 08:24:42 -03:00
aeuii@posteo.de
fd6f65f241 emacs: make use of `message-make-from'
Please put my address in CC when replying.  Thanks!

From 4b9ab261a0ea8a31065e310c5150f522be86d37b Mon Sep 17 00:00:00 2001
From: stefan <aeuii@posteo.de>
Date: Fri, 8 Apr 2016 22:47:06 +0200
Subject: [PATCH] emacs: make use of `message-make-from'

Will respect `mail-from-style'.
2016-04-10 20:53:48 -03:00
David Edmondson
f8effea9a3 emacs: Always insert crypto buttons.
When no decryption or signature examination is
happening (i.e. `notmuch-crypto-process-mime' is `nil') insert buttons
that indicate this, rather than remaining silent.
2016-04-10 20:46:58 -03:00
David Edmondson
f0881394bd emacs: Allow part preferences to depend on message content.
Currently the preference for which sub-part of a multipart/alternative
part is shown is global. Allow to the user to override the settings on a
per-message basis by providing the ability to call a function that has
access to the message to return the discouraged type list.

The original approach is retained as the default.
2016-04-09 16:17:20 -03:00
David Edmondson
c41d0db077 emacs: Improve the acquisition of text parts.
`notmuch-get-bodypart-text' assumed that it is always possible to
acquire text/* parts via the sexp output format. This is not true if the
part in question has a content type of application/octet-stream but is
being interpreted as text/* based on the extension of the part filename.

Rework `notmuch-get-bodypart-text' to use the raw output format to
address this and make the implementation common with that of
`notmuch-get-bodypart-binary'.
2016-03-27 17:44:24 -03:00
David Edmondson
742b566cac emacs: Neaten `notmuch-show-insert-bodypart-internal'. 2016-03-27 17:42:31 -03:00
David Edmondson
cb4e90e476 emacs: `notmuch-show-insert-part-multipart/encrypted' should not assume the presence of a button.
Missed in c802d12a1e.
2016-03-27 17:42:06 -03:00
David Edmondson
dc13fcbf87 emacs: notmuch-show-forward-message' can use notmuch-mua-new-forward-messages'
Which allows `notmuch-mua-new-forward-message' to be removed.
2016-03-24 08:02:15 -03:00
David Edmondson
a982773dfb emacs: Add `notmuch-show-forward-open-messages'.
Add a function to forward all open messages in the current view of a
thread. Bind this to "F".
2016-03-24 08:01:50 -03:00
David Edmondson
3b63856568 emacs: Improve crypto button labels.
Make the labels for both encryption and signature buttons share a common
format, in which both report the status if it is not one of those known.
2016-03-24 07:58:52 -03:00
Nicolas Petton
e253c94888 emacs: Change the default notmuch-mua-reply-insert-header-p-function
Set notmuch-show-reply-insert-header-p-never as the default value for
notmuch-mua-reply-insert-header-p-function.
2016-03-19 11:18:03 -03:00
Jani Nikula
b8a136187a emacs: hello: promote '?' as the universal help key
Move the brief help text at the bottom of the hello screen to the
notmuch-hello-mode help, and promote '?' as the universal help key
across Notmuch. This unclutters the hello screen, and allows for a
more verbose description in the mode help. Hopefully, this change is
useful for both experienced and new users alike.

While at it, improve the links to Notmuch and hello screen
customization.
2016-03-14 19:54:32 -03:00
David Edmondson
d27d90875d emacs/mua: Let user specify which parts get a header in citations.
Add a customizable function specifying which parts get a header when
replying, and give some sensible possiblities. These are,

1) all parts except multipart/*. (Subparts of a multipart part do
receive a header button.)

2) only included text/* parts.

3) Exactly as in the show buffer.

4) None at all. This means the reply contains a mish-mash of all the
original message's parts.

In the test suite we set the choice to option 4 to match the
previous behaviour.
2016-02-21 08:37:48 -04:00
David Edmondson
adefa734e3 emacs/show: Remove the 'no-buttons option of `notmuch-show-insert-bodypart'
No code uses the 'no-buttons argument to
`notmuch-show-insert-bodypart', so remove it.
2016-02-21 08:37:39 -04:00
David Edmondson
e103f0a971 emacs/mua: Generate improved cited text for replies
Use the message display code to generate message text to cite in
replies.

For now we set insert-headers-p function to
notmuch-show-reply-insert-header-p-never so that, as before, we don't
insert part buttons.

With that choice of insert-headers-p function there is only one
failing test: this test has a text part (an email message) listed as
application/octet-stream. Notmuch show displays this part, but the
reply code omitted it as it had type application/octet-stream. The new
code correctly includes it. Thus update the expected output to match.
2016-02-21 08:37:26 -04:00
David Edmondson
c802d12a1e emacs/show: Accommodate the lack of part header buttons
Various pieces of code assumed (reasonably) that part header buttons
are present. Modify them to avoid problems if no part headers were
inserted.
2016-02-21 08:37:17 -04:00
David Edmondson
92a1f9ba17 emacs/show: Make the insertion of part headers overridable.
This allows callers of notmuch-show-insert-bodypart to use a `let'
binding to override the default function for specifying when part
headers should be inserted.

We also add an option to never show part buttons which will be used by
the test suites for the reply tests.
2016-02-21 08:37:08 -04:00
David Edmondson
65a2a58a81 emacs/show: Re-arrange determination if a part header is necessary
Move the determination of whether a part header is required to a
distinct function.
2016-02-21 08:37:00 -04:00
David Edmondson
c689d1ff13 emacs: Report a lack of matches when calling `notmuch-show'.
If the basic query passed to `notmuch-show' generates no results, ring
the bell and inform the user that no messages matched the query rather
than displaying an empty buffer and showing an obscure error.

Similarly when refreshing a `notmuch-show' buffer and no messages match.
2016-02-20 08:52:50 -04:00
Mark Walters
7edba1d17d emacs: Bind filter in search to 'l'
Change the key binding for filter (or "limit") in search-mode. This
gives consistency with the new filter in show-mode, and frees 'f' for
forward-thread in the future.
2016-02-13 12:40:01 -04:00
David Edmondson
8d3d92bd8e emacs: Fix compiler warnings.
notmuch-mua.el should declare functions that it uses from
notmuch-maildir-fcc.el.
2016-02-13 12:31:42 -04:00
Michal Sojka
10f4724a8d emacs: Don't use nconc on quoted list
As pointed out by David Bremner, Elisp manual says "A common pitfall
is to use a quoted constant list as a non-last argument to ‘nconc’."
Since this was the case in recently added code, we fix it here.
2016-01-08 08:32:49 -04:00
Michal Sojka
1de4d5bb0d emacs: Handle switch-function argument of notmuch-mua-mail
notmuch-mua-mail ignored the switch-function argument and always used
the function returned by notmuch-mua-get-switch-function instead. In
order to support standard emacs interfaces (compose-mail in this
case), this commit changes notmuch-mua-mail to use the switch-function
argument if it is non-nil and notmuch-mua-get-switch-function
otherwise.
2016-01-08 08:32:48 -04:00
Michal Sojka
332b593775 emacs: Refactor notmuch-mua-mail
This should be more readable.
2016-01-08 08:32:48 -04:00
Michal Sojka
7e20d26480 emacs: Fix mail composition under Emacs 23
Commit 570c0aeb40 reworked
notmuch-mua-mail function in a way that worked only under Emacs 24.
The reason was that message-setup-1 took one argument less in Emacs
23.

We fix this by only supplying the return-action argument when it is
actually set by the caller.
2016-01-08 08:32:48 -04:00
Michal Sojka
570c0aeb40 emacs: Improve notmuch-message-mode initialization
Recent addition of notmuch-message-mode introduced several problems:

1. When message-setup-hook is used to set buffer local variables,
   these settings are not effective, because all buffer local
   variables are immediately erased by notmuch-message-mode
   initialization.

2. message-mode-hook gets invoked twice - first when message-mail
   invokes message-mode and second when notmuch-mua-mail invokes
   notmuch-message-mode.

This commit fixes these problems by replacing a call to message-mail
with notmuch-specific code that is (hopefully) equivalent to
message-mail functionality before introduction of
notmuch-message-mode.

We first initialize notmuch-message-mode with
notmuch-mua-pop-to-buffer, which is a modified version of
message-pop-to-buffer and then call message-setup-1, which is the only
functionality of message-mail that is needed for notmuch.
2016-01-01 10:58:19 -04:00
David Bremner
bceb6516ce Merge branch 'release'
Merge bugfixes applied directly to release
2015-11-23 08:40:40 -04:00
Mark Walters
4c7a592d49 emacs: poll: return useful errors when poll fails.
Previously poll called from emacs would fail silently. This makes it
return a useful error message.

In the non-deprecated case of notmuch new and appropriate hooks, it
uses notmuch-call-notmuch-process which gives an error and
additionally puts the stdout/stderr etc in the *Notmuch errors*
buffer.

In the deprecated case of a custom poll script it only returns an
error message.

Commit based on a bug report, and a potential fix, by Ketil Malde.
2015-11-23 08:37:19 -04:00
Mark Walters
3270eea39f emacs: hello: fix accidental modification of widget-keymap
In emacs24 we use make-composed-keymap. It seems that if only a single
map is specified then emacs just resuses it rather than creating a
copy of it. Thus use make-sparse-keymap to force a copy.
2015-11-23 08:36:52 -04:00
Tomi Ollila
a79936cd6f emacs/Makefile.local: notmuch-lib.elc depend on notmuch-version.elc
emacs/make-depend.el will compute all other related dependencies
except this one:

notmuch-version is not top-level `require' expression in
notmuc-lib.el[c] but conditional based on the existence of
notmuch-version.el[c].

emacs/make-depend.el does not know now notmuch-version.el[c] becomes
into existence but emacs/Makefile.local does know.
2015-11-23 08:14:46 -04:00
Tomi Ollila
bfb7098514 emacs: notmuch-show-view-raw-message clears buffer, makes it read-only
notmuch-show-view-raw-message() re-uses buffer created with same
name (same Message-Id:) but it did not erase it before filling.
If this ever happened, there were duplicated (potentially overlapping)
content in the buffer. Now this is fixed.
Apparently since emacs 24.5 the (view-buffer) makes the buffer read-only;
so this problem would not have happened there, just that
notmuch-show-view-raw-message() failed. This is fixed by setting
inhibit-read-only t before erasing and filling the buffer. The emacs 24.5
feature having raw message buffer read-only is also now explicitly set to
the buffer so the same experience is available with emaces < 24.5.
2015-11-21 08:02:10 -04:00
Michal Sojka
55fb7da650 emacs: Make notmuch-message-mode play nicely with flyspell
Flyspell mode uses a special setting for message-mode to not
spell-check message headers except Subject. Apply this setting also to
notmuch-message-mode.
2015-11-09 22:25:25 -04:00
H. J. Illikainen
cbf2448bb1 emacs: Fontify From with message-header-other
Commit e26d767897 changed the
fontification of the body associated with the From header to
message-header-from.  However, that face is non-existent, and in
message.el (message-font-lock-keywords) the From-header falls through
and is attributed the message-header-other face.

This commit removes the fontification of the [Ff]rom header in
notmuch-show-mode in order to fontify it using the message-header-other
face.

This only affects non-default configurations where
notmuch-message-headers is set to display From.
2015-11-09 22:25:05 -04:00
Michal Sojka
4acbc1f7d3 Emacs: Add address completion based on company-mode
When company-mode is available (Emacs >= 24), address completion
candidates are shown in a nice popup box. This is triggered either by
pressing TAB or by waiting a while during typing an address. The
completion is based entirely on the asynchronous address harvesting
from notmuch-address.el so the GUI is theoretically not blocked for
long time.

The completion works similarly as the TAB-initiated completion from
notmuch-address.el, i.e. quick harvest based on user input is executed
first and only after full harvesting is finished, in-memory cached data
is used.

[Improved by David Bremner]
2015-10-27 08:01:15 -03:00
Michal Sojka
89f78d38c1 Emacs: Add address completion mechanism implemented in elisp
Currently, notmuch has an address completion mechanism that requires
external command to provide completion candidates. This commit adds a
completion mechanism inspired by https://github.com/tjim/nevermore,
which is implemented in Emacs lisp only.

The preexisting address completion mechanism, activated by pressing
TAB on To/Cc lines, is extended to use the new mechanism when
notmuch-address-command to 'internal, which is the new default.

The core of the new mechanism is the function notmuch-address-harvest,
which collects the completion candidates from the notmuch database and
stores them in notmuch-address-completions variable. The address
harvesting can run either synchronously (same as with the previous
mechanism) or asynchronously. When the user presses TAB for the first
time, synchronous harvesting limited to user entered text is performed.
If the entered text is reasonably long, this operation is relatively
fast. Then, asynchronous harvesting over the full database is triggered.
This operation may take long time (minutes on rotating disk). After it
finishes, no harvesting is normally performed again and subsequent
completion requests use the harvested data cached in memory. Completion
cache is updated after 24 hours.

Note that this commit restores (different) completion functionality for
users when the user used external command named "notmuch-addresses",
i.e. the old default.  The result will be that the user will use
the new mechanism instead of this command. I believe that many users may
not even recognize this because the new mechanism works the same as
http://commonmeasure.org/~jkr/git/notmuch_addresses.git and perhaps also
as other commands suggested at
http://notmuchmail.org/emacstips/#address_completion.

[This feature was significantly improved by David Bremner and Mark Walters]
2015-10-27 08:01:05 -03:00
David Bremner
0e671478c6 emacs: replace use of notmuch-address-message-insinuate
This allows e.g. Gnus users to load this file without changing
message-mode behaviour.

This will disable completion for those that did not customize the
variable but relied on the existence of a file named "notmuch-addresses"
in their path. In the next commit the default behaviour will change to
use a "workalike" internal completion mechanism.
2015-10-27 08:00:49 -03:00
Mark Walters
32becfa37a emacs: hello: bugfix: update docs for saved-searches
Update the documentation string for notmuch-saved-searches to include
the new :search-type option.
2015-10-22 07:43:54 -03:00
Mark Walters
f9d2ccf67b emacs: tree: bind S to run current query in search mode 2015-10-21 09:14:07 -03:00
Mark Walters
391d9f9420 emacs: allow saved searches to select tree-view
This patch allows the user to customize a saved search to choose tree
view rather than the default search view. It also updates notmuch-jump
so that it respects this choice.
2015-10-21 09:13:55 -03:00
Mark Walters
ff1fb5027c emacs: show: increase default max-text-part-size
Currently notmuch-show-max-text-part-size is 10000 which means some
relatively normal messages have all parts hidden by default. Increase
this to 100000 by default.

The setting was introduced to alleviate problems with notmuch being
very slow on large threads. Users hitting these problems may wish to
customize this variable to something smaller (like 10000).
2015-10-17 09:07:36 -03:00
Mark Walters
3d38baf352 emacs: tree bugfix
Formerly replying to an encrypted message in tree-view did not work:
the message was not decrypted. This commit makes notmuch-tree respect
the setting of notmuch-crypto-process-mime. In particular, if
notmuch-crypto-process-mime is set to t, then replying to encrypted
messages in tree mode will now decrypt the reply (as it already did in
show mode).
2015-10-17 09:07:16 -03:00
Uli Scholler
9a5143abbc emacs: wrap current search in parens when filtering
When filtering the current search further with notmuch-search-filter,
wrap the current search in parens (if necessary).

This fixes unexpected behavior when the current search is
complex (like "(tag:this and date:one_week_ago..) or tag:that").
2015-09-07 09:27:09 -03:00
David Bremner
d02e4dee71 emacs/notmuch-mua.el: whitespace cleanup
M-x whitespace-cleanup in Emacs.
2015-08-07 21:33:57 +02:00
David Bremner
d0553ad524 emacs: make modifications to message Fcc vars buffer-local
Previously we globally modified these variables, which tended to cause
problems for people using message-mode, but not notmuch-mua-mail, to
send mail.

User visible changes:

- Calling notmuch-fcc-header-setup is no longer optional. OTOH, it
  seems to do the right thing if notmuch-fcc-dirs is set to nil.

- The Fcc header is visible during message composition

- The name in the mode line is changed, and no longer matches exactly
  the menu label.

- Previously notmuch-mua-send-and-exit was never called.  Either we
  misunderstood define-mail-user-agent, or it had a bug.  So there was
  no difference if the user called message-send-and-exit directly. Now
  there will be.

- User bindings to C-c C-c and C-c C-s in message-mode-map are
  overridden. The user can override them in notmuch-message-mode-map,
  but then they're on their own for Fcc handling.
2015-08-07 21:18:59 +02:00
David Bremner
03aff8499d emacs: define a notmuch-compose-mode based on message mode.
This is to provide a clean way of overriding e.g. keybindings when
sending mail from notmuch.

This is needed in particular to allow somewhere to dynamically bind
certain message-mode variables which are not respected when buffer-local. See e.g.

     http://debbugs.gnu.org/cgi/bugreport.cgi?bug=21174
2015-08-07 21:17:26 +02:00
Tomi Ollila
3c1eea5646 emacs: prefer notmuch-emacs-version in User-Agent: header
Now that we have `notmuch-emacs-version' defined in notmuch emacs MUA
use that as a part of User-Agent: header to provide more accurate
version information when sending emails.

In case some incomplete installation of notmuch emacs MUA is used and
`notmuch-emacs-version' is defined as "unknown" then fall back to ask
version info from cli (as it used to be before this commit).

Requiring notmuch-version[.elc] and if that is missing setting
"fallback" notmuch-emacs-version (to "unknown") was moved from
notmuch.el to notmuch-lib.el as notmuch-mua.el (which provides
User-Agent: information) require's the latter.
2015-08-04 20:56:38 +02:00
Tomi Ollila
0c565fa29f emacs: renamed function notmuch-version to notmuch-cli-version
As it asks `notmuch` binary for its version number.
2015-08-04 20:56:28 +02:00
Mark Walters
2982d70ac6 emacs: add a filter option to show
Show the current thread with a different filter (i.e., open messages
in the thread matching the new query).

Bound to 'l' for "limit".

Note that it is not the same as filter in search mode as it replaces
the existing query rather than ANDing with it (but it does keep the
thread-id part of the query).
2015-08-04 09:15:23 +02:00
Mark Walters
d4053be21a emacs: split notmuch-show-apply-state
Separate out a notmuch-show-goto-msg-id sub-function from
notmuch-show-apply-state. There should be no functional change but the
next patch will call the new function.
2015-08-04 09:15:13 +02:00