[PATCH V3 1/1] test/test-lib.sh: use vt100 as dtach terminal if TERM dumb or unset/empty
The TERM environment variable is set to 'dumb' when running tests, but the original value of it is stored for echoing colors and running emacs (somewhat interactively) in detached session. Emacs requires some terminal control sequences to be available for interactive operation. In case original TERM is (also) 'dumb' (or unset/empty) emacs cannot run interactively. To fix this problem dtach (and emacs as it's child process) is run with TERM=vt100 in case original TERM was unset, empty or 'dumb'. This way there is a chance to run emacs tests with different user terminals and potentially find problems there. --- Obsoletes id:1359011360-15591-1-git-send-email-tomi.oll...@iki.fi To be accurate (instead of potentially confusing), the commit message and comments have been edited to mention 'unset or empty' instead of 'nonexistent'. No functional changes (to neither v1 or v2 of this patch). test/test-lib.sh | 9 +++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/test/test-lib.sh b/test/test-lib.sh index 6ce3b31..1567178 100644 --- a/test/test-lib.sh +++ b/test/test-lib.sh @@ -41,6 +41,10 @@ esac # Keep the original TERM for say_color and test_emacs ORIGINAL_TERM=$TERM +# dtach(1) provides more capable terminal environment to anything +# that requires more than dumb terminal... +[ x"${TERM:-dumb}" = xdumb ] && DTACH_TERM=vt100 || DTACH_TERM=$TERM + # For repeatability, reset the environment to known value. LANG=C LC_ALL=C @@ -996,9 +1000,10 @@ test_emacs () { fi server_name="notmuch-test-suite-$$" # start a detached session with an emacs server - # user's TERM is given to dtach which assumes a minimally + # user's TERM (or 'vt100' in case user's TERM is unset, empty + # or 'dumb') is given to dtach which assumes a minimally # VT100-compatible terminal -- and emacs inherits that - TERM=$ORIGINAL_TERM dtach -n "$TEST_TMPDIR/emacs-dtach-socket.$$" \ + TERM=$DTACH_TERM dtach -n "$TEST_TMPDIR/emacs-dtach-socket.$$" \ sh -c "stty rows 24 cols 80; exec '$TMP_DIRECTORY/run_emacs' \ --no-window-system \ $load_emacs_tests \ -- 1.8.0 ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
[PATCH 1/1] test/test-lib.sh: use vt100 as dtach terminal if TERM nonexistent or dumb
The TERM environment variable is set to 'dumb' when running tests, but the original value of it is stored for echoing colors and running emacs (somewhat interactively) in detached session. Emacs requires some terminal control sequences to be available for interactive operation. In case original TERM is (also) 'dumb' (or nonexistent) emacs cannot run interactively. To fix this problem dtach (and emacs as it's child process) is run with TERM=vt100 in case original TERM was nonexistent or dumb. This way there is a chance to run emacs tests with different user terminals and potentially find problems there. --- Obsoletes id:1358933736-300-1-git-send-email-tomi.oll...@iki.fi The 2 typos Jani mentioned fixed (Thanks; I noticed the former but not the latter) Diffdiff of the content changes (in git format-patch generated files): : @@ -8 +8 @@ : -the original value of it is stored for echoing colors and running (emacs : +the original value of it is stored for echoing colors and running emacs : @@ -40 +40 @@ : -+# user's TERM (or 'vt100' om case user's term is nonexistent : ++# user's TERM (or 'vt100' in case user's term is nonexistent test/test-lib.sh | 9 +++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/test/test-lib.sh b/test/test-lib.sh index 6ce3b31..1567178 100644 --- a/test/test-lib.sh +++ b/test/test-lib.sh @@ -41,6 +41,10 @@ esac # Keep the original TERM for say_color and test_emacs ORIGINAL_TERM=$TERM +# dtach(1) provides more capable terminal environment to anything +# that requires more than dumb terminal... +[ x"${TERM:-dumb}" = xdumb ] && DTACH_TERM=vt100 || DTACH_TERM=$TERM + # For repeatability, reset the environment to known value. LANG=C LC_ALL=C @@ -996,9 +1000,10 @@ test_emacs () { fi server_name="notmuch-test-suite-$$" # start a detached session with an emacs server - # user's TERM is given to dtach which assumes a minimally + # user's TERM (or 'vt100' in case user's term is nonexistent + # or 'dumb') is given to dtach which assumes a minimally # VT100-compatible terminal -- and emacs inherits that - TERM=$ORIGINAL_TERM dtach -n "$TEST_TMPDIR/emacs-dtach-socket.$$" \ + TERM=$DTACH_TERM dtach -n "$TEST_TMPDIR/emacs-dtach-socket.$$" \ sh -c "stty rows 24 cols 80; exec '$TMP_DIRECTORY/run_emacs' \ --no-window-system \ $load_emacs_tests \ -- 1.8.0 ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
Linking to emails via notmuch
On Wed, Jan 23, 2013 at 01:32:42PM +0100, Rainer M Krug wrote: > -BEGIN PGP SIGNED MESSAGE- > Hash: SHA1 > > Hi > > I would like to cross-reference emails via notmuch, i.e. I would like to > include a link to an > email in a git commit message (this is a private gip repo and I am the only > developer and > committer, so no problem from that side). Is it possible to get a link to an > email which, when > clicked in emacs, opens the corresponding email using notmuch? Or should I > use a different approach? > You can take a look at how org-notmuch handles this and try something similar. Hope this helps, -- Suvayu Open source is the future. It sets us free.
[Daniel Kahn Gillmor] Bug#698810: notmuch: Internal error: add_message returned unexpected value: 4 (notmuch-new.c:543)
--- Begin Message --- Package: notmuch Version: 0.15-2 Severity: normal i run notmuch over a mailstore that is also served by a dovecot instance (which is the reason for much of the spew below). However, after a recent switch to notmuch 0.15, i got this one-time error during "notmuch new": Internal error: add_message returned unexpected value: 4 (notmuch-new.c:543) fwiw, i think that "unexepected value: 4" is NOTMUCH_STATUS_FILE_ERROR. Unfortunately, i don't remember if this is the first time i've run notmuch new since the 0.15 upgrade or if it has to do with some particular message. as you can see from the transcript below, running "notmuch new" a second time didn't reproduce the error. If you have any suggestions on how i could supply better information, please let me know. sorry for the vagueness of this report. --dkg 0 dkg@alice:~$ notmuch new Note: Ignoring non-mail file: /home/dkg/mail/messages/.Archives.2013/dovecot-keywords Note: Ignoring non-mail file: /home/dkg/mail/messages/.Archives.2013/dovecot-uidlist Note: Ignoring non-mail file: /home/dkg/mail/messages/.Archives.2013/dovecot.index Note: Ignoring non-mail file: /home/dkg/mail/messages/.Archives.2013/dovecot.index.cache Note: Ignoring non-mail file: /home/dkg/mail/messages/.Archives.2013/dovecot.index.log Note: Ignoring non-mail file: /home/dkg/mail/messages/.Archives.2013/maildirfolder Note: Ignoring non-mail file: /home/dkg/mail/messages/.Drafts/dovecot-uidlist Note: Ignoring non-mail file: /home/dkg/mail/messages/.Drafts/dovecot.index Note: Ignoring non-mail file: /home/dkg/mail/messages/.Drafts/dovecot.index.cache Note: Ignoring non-mail file: /home/dkg/mail/messages/.Drafts/dovecot.index.log Note: Ignoring non-mail file: /home/dkg/mail/messages/.Sent/dovecot-uidlist Error opening /home/dkg/mail/messages/.Sent/dovecot-uidlist.lock: No such file or directory Internal error: add_message returned unexpected value: 4 (notmuch-new.c:543) 1 dkg@alice:~$ notmuch new Note: Ignoring non-mail file: /home/dkg/mail/messages/.Archives.2013/dovecot-keywords Note: Ignoring non-mail file: /home/dkg/mail/messages/.Archives.2013/dovecot-uidlist Note: Ignoring non-mail file: /home/dkg/mail/messages/.Archives.2013/dovecot.index Note: Ignoring non-mail file: /home/dkg/mail/messages/.Archives.2013/dovecot.index.cache Note: Ignoring non-mail file: /home/dkg/mail/messages/.Archives.2013/dovecot.index.log Note: Ignoring non-mail file: /home/dkg/mail/messages/.Archives.2013/maildirfolder Note: Ignoring non-mail file: /home/dkg/mail/messages/.Drafts/dovecot-uidlist Note: Ignoring non-mail file: /home/dkg/mail/messages/.Drafts/dovecot.index Note: Ignoring non-mail file: /home/dkg/mail/messages/.Drafts/dovecot.index.cache Note: Ignoring non-mail file: /home/dkg/mail/messages/.Drafts/dovecot.index.log Note: Ignoring non-mail file: /home/dkg/mail/messages/.Sent/dovecot-uidlist Note: Ignoring non-mail file: /home/dkg/mail/messages/.Sent/dovecot.index Note: Ignoring non-mail file: /home/dkg/mail/messages/.Sent/dovecot.index.cache Note: Ignoring non-mail file: /home/dkg/mail/messages/.Sent/dovecot.index.log Processed 48 total files in almost no time. Added 34 new messages to the database. Removed 31 messages. 0 dkg@alice:~$ notmuch new No new mail. 0 dkg@alice:~$ -- System Information: Debian Release: 7.0 Architecture: amd64 (x86_64) Kernel: Linux 3.7-trunk-amd64 (SMP w/4 CPU cores) Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Versions of packages notmuch depends on: ii libc6 2.13-37 ii libglib2.0-02.33.12+really2.32.4-3 ii libgmime-2.6-0 2.6.10-1 ii libnotmuch3 0.15-2 ii libtalloc2 2.0.7+git20120207-1 Versions of packages notmuch recommends: ii gnupg-agent2.0.19-2 ii notmuch-emacs 0.14-1 notmuch suggests no packages. -- no debconf information --- End Message --- ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
[PATCH 1/1] test/test-lib.sh: use vt100 as dtach terminal if TERM nonexistent or dumb
On Wed, 23 Jan 2013, Tomi Ollila wrote: > The TERM environment variable is set to 'dumb' when running tests, but > the original value of it is stored for echoing colors and running (emacs Extra ( there? > (somewhat interactively) in detached session. Emacs requires some > terminal control sequences to be available for interactive operation. > In case original TERM is (also) 'dumb' (or nonexistent) emacs cannot run > interactively. To fix this problem dtach (and emacs as it's child > process) is run with TERM=vt100 in case original TERM was nonexistent or > dumb. This way there is a chance to run emacs tests with different user > terminals and potentially find problems there. > --- > test/test-lib.sh | 9 +++-- > 1 file changed, 7 insertions(+), 2 deletions(-) > > diff --git a/test/test-lib.sh b/test/test-lib.sh > index 6ce3b31..3bc67f7 100644 > --- a/test/test-lib.sh > +++ b/test/test-lib.sh > @@ -41,6 +41,10 @@ esac > # Keep the original TERM for say_color and test_emacs > ORIGINAL_TERM=$TERM > > +# dtach(1) provides more capable terminal environment to anything > +# that requires more than dumb terminal... > +[ x"${TERM:-dumb}" = xdumb ] && DTACH_TERM=vt100 || DTACH_TERM=$TERM That's just a tiny bit more trickery than I usually like... but then it's shell after all... :) > + > # For repeatability, reset the environment to known value. > LANG=C > LC_ALL=C > @@ -996,9 +1000,10 @@ test_emacs () { > fi > server_name="notmuch-test-suite-$$" > # start a detached session with an emacs server > - # user's TERM is given to dtach which assumes a minimally > + # user's TERM (or 'vt100' om case user's term is nonexistent > + # or 'dumb') is given to dtach which assumes a minimally Nitpick, s/om/in/ Otherwise LGTM, and works as advertised. Jani. > # VT100-compatible terminal -- and emacs inherits that > - TERM=$ORIGINAL_TERM dtach -n > "$TEST_TMPDIR/emacs-dtach-socket.$$" \ > + TERM=$DTACH_TERM dtach -n "$TEST_TMPDIR/emacs-dtach-socket.$$" \ > sh -c "stty rows 24 cols 80; exec > '$TMP_DIRECTORY/run_emacs' \ > --no-window-system \ > $load_emacs_tests \ > -- > 1.8.1 > > ___ > notmuch mailing list > notmuch at notmuchmail.org > http://notmuchmail.org/mailman/listinfo/notmuch
[PATCH v3 01/20] cli: add stub for insert command
On Tue, 22 Jan 2013 23:45:43 +0200, Jani Nikula wrote: > > Though it could be used as an alternative to notmuch new, the reason > > I want this is to allow my notmuch frontend to add postponed or sent > > messages to the mail store and notmuch database, without resorting to > > another tool (e.g. notmuch-deliver) nor directly modifying the maildir. > > This review is based on the following patches squashed together: > > cli: add stub for insert command > insert: open Maildir tmp file > insert: copy stdin to Maildir tmp file > insert: move file from Maildir tmp to new > insert: add new message to database > insert: apply default tags to new message > insert: parse and apply command-line tag operations > insert: fsync after writing tmp file > insert: trap SIGINT and clean up > insert: add copyright line from notmuch-deliver > > It's much easier for me to grasp the big picture this way. > So there *is* a limit to how fine-grained notmuchers want their patches ;-) > > +static notmuch_bool_t > > +maildir_move_tmp_to_new (const char *tmppath, const char *newpath) > > +{ > > +if (rename (tmppath, newpath) != 0) { > > + fprintf (stderr, "Error: rename() failed: %s\n", strerror (errno)); > > + return FALSE; > > +} > > + > > +return TRUE; > > +} > > IMO you could just use rename() inline in the caller, without a wrapper. A subsequent patch fsyncs the directory here. > > +/* Copy the contents of standard input (fdin) into fdout. */ > > +static notmuch_bool_t > > +copy_stdin (int fdin, int fdout) > > The comment and the function name imply the function has something to do > with stdin, while it only cares about file descriptors. Tomi pointed out that the error message refers to standard input. > > +/* Add the specified message file to the notmuch database, applying tags. > > + * The file is renamed to encode notmuch tags as maildir flags. */ > > +static notmuch_bool_t > > +add_file_to_database (notmuch_database_t *notmuch, const char *path, > > + tag_op_list_t *tag_ops) > > +{ > > +notmuch_message_t *message; > > +notmuch_status_t status; > > + > > +status = notmuch_database_add_message (notmuch, path, &message); > > +switch (status) { > > +case NOTMUCH_STATUS_SUCCESS: > > + break; > > +case NOTMUCH_STATUS_DUPLICATE_MESSAGE_ID: > > + fprintf (stderr, "Warning: duplicate message.\n"); > > This is not uncommon. Why the warning? > I put in the warning because I wasn't sure, then forgot to revisit it. > Also, notmuch new does not apply new.tags in this case. Are you sure we > want to do that here? (You get mail, you read and archive it, you get > the dupe, it pops up unread in your inbox again.) Should command-line tags to be applied to duplicate messages? I'm thinking not. I'll fix the other problems you found. Peter
[PATCH v2] emacs: Disambiguate point placement after hiding message
On Wed, Jan 09 2013, Austin Clements wrote: > Currently, if point is in the middle of a message when the user > collapses it, Emacs then displays the cursor on the header line of the > next message, even though point is still on the collapsed message and > even though, if you explicitly move point to the same visual location, > it will be on the next message. As a result, following actions like > re-expanding the message or modifying tags apply to the collapsed > message, even though, visually, it looks like they will apply to the > message following the collapsed message. > > This patch addresses this by explicitly moving point when a message is > collapsed so it is visually unambiguous that the point is still on the > collapsed message. > --- > > v2 should fix the strange behavior observed in v1. The added code is > essentially identical to v1, but v2 adds it to > notmuch-show-toggle-message---which is only used > interactively---rather than the core notmuch-show-message-visible > function. > > emacs/notmuch-show.el | 28 +++- > 1 file changed, 23 insertions(+), 5 deletions(-) > > diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el > index 5751d98..6ab926c 100644 > --- a/emacs/notmuch-show.el > +++ b/emacs/notmuch-show.el > @@ -1789,12 +1789,30 @@ See `notmuch-tag' for information on the format of > TAG-CHANGES." >(force-window-update)) > > (defun notmuch-show-toggle-message () > - "Toggle the visibility of the current message." > + "Toggle the visibility of the current message. > + > +If this hides the current message, it will also move point to > +make it obvious it's still on the current message." >(interactive) > - (let ((props (notmuch-show-get-message-properties))) > -(notmuch-show-message-visible > - props > - (not (plist-get props :message-visible > + (let* ((props (notmuch-show-get-message-properties)) > + (visible-p (not (plist-get props :message-visible > +(notmuch-show-message-visible props visible-p) > +(when (not visible-p) > + (let ((ov (plist-get props :message-overlay))) > + ;; If point was contained in the overlay, move it to a > + ;; sensible spot that is visible and still on the same > + ;; message. Strangely, the Emacs event loop doesn't move the > + ;; point out of the invisible region for us like it normally > + ;; does (perhaps because it doesn't know which way to go), so > + ;; if we don't do this, it's visually ambiguous which message > + ;; an action will apply to. > + (let ((start (overlay-start ov)) > + (end (overlay-end ov))) > + (dolist (win (get-buffer-window-list nil nil t)) > + (with-selected-window win > + (when (and (<= start (point)) (< (point) end)) > + (goto-char (1- start)) > + (beginning-of-visual-line Soo. the problem with this is still the behaviour of (beginning-of-visual-line), which "leaks" to previous message if (point) is in the first header line. Interestingly (beginning-of-line) does not -- and this is supposed to move more than beginning-of-visual-line... But this and the defadvice in id:1357855176-31653-1-git-send-email-amdragon at mit.edu could fix this problem -- if the "sketchy" approach were used... Austin: have you got further with the "alternate" approach you mentioned in the other mail ? In the meanwhile I played a bit how those overlays are positioned -- basically moved those to one character position closer to the beginning of buffer -- so that overlays start with "\n" and end just before "\n". My naive attempts just to move brought some interesting side effects (line counts in button change, header line coloring doesn't go to the end of file and cursor is sometimes positioned interesting -- but the cursor no longer leak to previous (or next) message. For reference, The changes I made attached. I don't bother to make proper patch until/unless we know this is definite way to proceed (and this definitely have some implementation issues, too)... >From bd3571c578aa45a23a120fc82b89f7e1649617fd Mon Sep 17 00:00:00 2001 From: Tomi Ollila Date: Wed, 23 Jan 2013 11:34:20 +0300 Subject: [PATCH] these email headers copied just to make git am happy --- diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el index 1864dd1..7ee6d1d 100644 --- a/emacs/notmuch-show.el +++ b/emacs/notmuch-show.el @@ -870,7 +870,7 @@ message at DEPTH in the current thread." (defun notmuch-show-create-part-overlays (msg beg end hide) "Add an overlay to the part between BEG and END" (let* ((button (button-at beg)) -(part-beg (and button (1+ (button-end button) +(part-beg (and button (button-end button ;; If the part contains no text we do not make it toggleable. We ;; also need to check that the button is a genuine part button not @@ -898,7 +898,7 @@ If HIDE is non-nil then initially hide this part." ;; Ensure that the part ends with
[PATCH] emacs: hello: use batch count
On Wed, Jan 16 2013, Mark Walters wrote: > This modifies notmuch hello to use the new count --batch > functionality. It should give exactly the same results as before but > under many conditions it should be much faster. In particular it is > much faster for remote use. > > The code is a little ugly as it has to do some working out of the > query when asking the query and some when dealing with the result. > However, the code path is exactly the same in both local and remote > use. > --- Well, the code Looks Good To Me (not Bad or Ugly). Pretty straightforward conversion. Can we have newlines in query string^H^H^H^H^H^H^H^H^H^H^H^H^H^H^H^H^H^H^H Tomi > > It's a little ugly but seems to work and does give a useful speedup. > > Best wishes > > Mark > > emacs/notmuch-hello.el | 52 +-- > 1 files changed, 32 insertions(+), 20 deletions(-) > > diff --git a/emacs/notmuch-hello.el b/emacs/notmuch-hello.el > index 6db62a0..2244892 100644 > --- a/emacs/notmuch-hello.el > +++ b/emacs/notmuch-hello.el > @@ -381,26 +381,38 @@ The result is the list of elements of the form (NAME > QUERY COUNT). > The values :show-empty-searches, :filter and :filter-count from > options will be handled as specified for > `notmuch-hello-insert-searches'." > - (notmuch-remove-if-not > - #'identity > - (mapcar > -(lambda (elem) > - (let* ((name (car elem)) > - (query-and-count (if (consp (cdr elem)) > - ;; do we have a different query for the > message count? > - (cons (second elem) (third elem)) > - (cons (cdr elem) (cdr elem > - (message-count > - (string-to-number > -(notmuch-saved-search-count > - (notmuch-hello-filtered-query (cdr query-and-count) > - (or (plist-get options > :filter-count) > - (plist-get options > :filter))) > - (and (or (plist-get options :show-empty-searches) (> message-count 0)) > - (list name (notmuch-hello-filtered-query > - (car query-and-count) (plist-get options :filter)) > -message-count > -query-alist))) > + (with-temp-buffer > +(dolist (elem query-alist nil) > + (let ((count-query (if (consp (cdr elem)) > + ;; do we have a different query for the message > count? > + (third elem) > +(cdr elem > + (insert > + (notmuch-hello-filtered-query count-query > +(or (plist-get options :filter-count) > +(plist-get options :filter))) > + "\n"))) > + > +(call-process-region (point-min) (point-max) notmuch-command > + t t nil "count" "--batch") > +(goto-char (point-min)) > + > +(notmuch-remove-if-not > + #'identity > + (mapcar > + (lambda (elem) > + (let ((name (car elem)) > + (search-query (if (consp (cdr elem)) > + ;; do we have a different query for the > message count? > + (second elem) > + (cdr elem))) > + (message-count (prog1 (read (current-buffer)) > + (forward-line 1 > + (and (or (plist-get options :show-empty-searches) (> message-count 0)) > +(list name (notmuch-hello-filtered-query > +search-query (plist-get options :filter)) > + message-count > + query-alist > > (defun notmuch-hello-insert-buttons (searches) >"Insert buttons for SEARCHES. > -- > 1.7.9.1 > > ___ > notmuch mailing list > notmuch at notmuchmail.org > http://notmuchmail.org/mailman/listinfo/notmuch
[PATCH 3/5] cli: add --batch option to notmuch count
On Tue, Jan 15 2013, Jani Nikula wrote: > Add support for reading queries from stdin, one per line, and writing > results to stdin, one per line. Jani's parts LGTM, except one IMPORTANT part -- results are written to STDOUT! (hopefully...yes) instead of STDIN! ;) I don't see a reason why this particular way to get counts could not be supported in notmuch into foreseeable future; the implementation is simple and clean. Next to look Mark's changes... Tomi > > This will bring considerable performance improvements when utilized in > Emacs notmuch-hello, especially so when running remote notmuch. > --- > notmuch-count.c | 52 ++-- > 1 file changed, 50 insertions(+), 2 deletions(-) > > diff --git a/notmuch-count.c b/notmuch-count.c > index 0e14b48..4bc4215 100644 > --- a/notmuch-count.c > +++ b/notmuch-count.c > @@ -62,6 +62,27 @@ print_count (notmuch_database_t *notmuch, const char > *query_str, > return 0; > } > > +static int > +count_file (notmuch_database_t *notmuch, FILE *input, const char > **exclude_tags, > + size_t exclude_tags_length, int output) > +{ > +char *line = NULL; > +ssize_t line_len; > +size_t line_size; > +int ret = 0; > + > +while (!ret && (line_len = getline (&line, &line_size, input)) != -1) { > + chomp_newline (line); > + ret = print_count (notmuch, line, exclude_tags, exclude_tags_length, > +output); > +} > + > +if (line) > + free (line); > + > +return ret; > +} > + > int > notmuch_count_command (void *ctx, int argc, char *argv[]) > { > @@ -73,6 +94,9 @@ notmuch_count_command (void *ctx, int argc, char *argv[]) > int exclude = EXCLUDE_TRUE; > const char **search_exclude_tags = NULL; > size_t search_exclude_tags_length = 0; > +notmuch_bool_t batch = FALSE; > +FILE *input = stdin; > +char *input_file_name = NULL; > int ret; > > notmuch_opt_desc_t options[] = { > @@ -84,6 +108,8 @@ notmuch_count_command (void *ctx, int argc, char *argv[]) > (notmuch_keyword_t []){ { "true", EXCLUDE_TRUE }, > { "false", EXCLUDE_FALSE }, > { 0, 0 } } }, > + { NOTMUCH_OPT_BOOLEAN, &batch, "batch", 0, 0 }, > + { NOTMUCH_OPT_STRING, &input_file_name, "input", 'i', 0 }, > { 0, 0, 0, 0, 0 } > }; > > @@ -93,6 +119,21 @@ notmuch_count_command (void *ctx, int argc, char *argv[]) > return 1; > } > > +if (input_file_name) { > + batch = TRUE; > + input = fopen (input_file_name, "r"); > + if (input == NULL) { > + fprintf (stderr, "Error opening %s for reading: %s\n", > + input_file_name, strerror (errno)); > + return 1; > + } > +} > + > +if (batch && opt_index != argc) { > + fprintf (stderr, "--batch and query string are not compatible\n"); > + return 1; > +} > + > config = notmuch_config_open (ctx, NULL, NULL); > if (config == NULL) > return 1; > @@ -112,10 +153,17 @@ notmuch_count_command (void *ctx, int argc, char > *argv[]) > (config, &search_exclude_tags_length); > } > > -ret = print_count (notmuch, query_str, search_exclude_tags, > -search_exclude_tags_length, output); > +if (batch) > + ret = count_file (notmuch, input, search_exclude_tags, > + search_exclude_tags_length, output); > +else > + ret = print_count (notmuch, query_str, search_exclude_tags, > +search_exclude_tags_length, output); > > notmuch_database_destroy (notmuch); > > +if (input != stdin) > + fclose (input); > + > return ret; > } > -- > 1.7.10.4 > > ___ > notmuch mailing list > notmuch at notmuchmail.org > http://notmuchmail.org/mailman/listinfo/notmuch
Linking to emails via notmuch
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Hi I would like to cross-reference emails via notmuch, i.e. I would like to include a link to an email in a git commit message (this is a private gip repo and I am the only developer and committer, so no problem from that side). Is it possible to get a link to an email which, when clicked in emacs, opens the corresponding email using notmuch? Or should I use a different approach? Thanks, Rainer -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.11 (GNU/Linux) Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/ iQEcBAEBAgAGBQJQ/9hqAAoJENvXNx4PUvmCaqMH/AgrPLWZSU6hsdwaz54GLOBA h8jvLMq6rtCaAEceMDsFMepYGOmK+3Z1OuzIILbHPS2PDp3c9ExesMS2qAzsOL2D dhDQsKxYkssSMzWCZBRiLrGeyF7w01Pu7n4VIlKl+KeE3vrItPNV2LHgaeTnClIz jIHdAfQEwMRbXpZAQiTMXX+ed7Upfu50cgWyf3EydcZ4RcJvCuzvr8iQ/jzcrONM fSDHdZ7QqMlsvbzIYy9nNIlj0yT+Fs3xwA5hWRPczQvEurNP2UKtHMfZNw+Rn2KG Po4PEAp9rzzXKqM0JocqWKi9BDBLKpSV/8VseNKlllDM+89IONhEtXQOYTeclKk= =uTH8 -END PGP SIGNATURE-
Re: Linking to emails via notmuch
On Wed, Jan 23, 2013 at 01:32:42PM +0100, Rainer M Krug wrote: > -BEGIN PGP SIGNED MESSAGE- > Hash: SHA1 > > Hi > > I would like to cross-reference emails via notmuch, i.e. I would like to > include a link to an > email in a git commit message (this is a private gip repo and I am the only > developer and > committer, so no problem from that side). Is it possible to get a link to an > email which, when > clicked in emacs, opens the corresponding email using notmuch? Or should I > use a different approach? > You can take a look at how org-notmuch handles this and try something similar. Hope this helps, -- Suvayu Open source is the future. It sets us free. ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
[PATCH 1/1] test/test-lib.sh: use vt100 as dtach terminal if TERM nonexistent or dumb
The TERM environment variable is set to 'dumb' when running tests, but the original value of it is stored for echoing colors and running (emacs (somewhat interactively) in detached session. Emacs requires some terminal control sequences to be available for interactive operation. In case original TERM is (also) 'dumb' (or nonexistent) emacs cannot run interactively. To fix this problem dtach (and emacs as it's child process) is run with TERM=vt100 in case original TERM was nonexistent or dumb. This way there is a chance to run emacs tests with different user terminals and potentially find problems there. --- test/test-lib.sh | 9 +++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/test/test-lib.sh b/test/test-lib.sh index 6ce3b31..3bc67f7 100644 --- a/test/test-lib.sh +++ b/test/test-lib.sh @@ -41,6 +41,10 @@ esac # Keep the original TERM for say_color and test_emacs ORIGINAL_TERM=$TERM +# dtach(1) provides more capable terminal environment to anything +# that requires more than dumb terminal... +[ x"${TERM:-dumb}" = xdumb ] && DTACH_TERM=vt100 || DTACH_TERM=$TERM + # For repeatability, reset the environment to known value. LANG=C LC_ALL=C @@ -996,9 +1000,10 @@ test_emacs () { fi server_name="notmuch-test-suite-$$" # start a detached session with an emacs server - # user's TERM is given to dtach which assumes a minimally + # user's TERM (or 'vt100' om case user's term is nonexistent + # or 'dumb') is given to dtach which assumes a minimally # VT100-compatible terminal -- and emacs inherits that - TERM=$ORIGINAL_TERM dtach -n "$TEST_TMPDIR/emacs-dtach-socket.$$" \ + TERM=$DTACH_TERM dtach -n "$TEST_TMPDIR/emacs-dtach-socket.$$" \ sh -c "stty rows 24 cols 80; exec '$TMP_DIRECTORY/run_emacs' \ --no-window-system \ $load_emacs_tests \ -- 1.8.1
[PATCH v3 01/20] cli: add stub for insert command
On Wed, Jan 23 2013, Peter Wang wrote: > On Tue, 22 Jan 2013 23:45:43 +0200, Jani Nikula wrote: > >> > +/* Copy the contents of standard input (fdin) into fdout. */ >> > +static notmuch_bool_t >> > +copy_stdin (int fdin, int fdout) >> >> The comment and the function name imply the function has something to do >> with stdin, while it only cares about file descriptors. > > Tomi pointed out that the error message refers to standard input. Was that me or some other Tomi ;)... Nevertheless the function here called 'copy_stdin' copies fdin to fdout, whatever the file descriptors are, it doesn't enforce fdin to be fd 0 (default stdin). I.e. the function name should be more generic (or then drop fdin argument -- should better name then be 'copy_from_stdin' or copy_stdin_to.. or copy_[from_]stdin_to_some_magic_fd -- ok, no more bikeshedding now >;)). > Peter Tomi
[PATCH v3 01/20] cli: add stub for insert command
On Wed, 23 Jan 2013, Peter Wang wrote: > On Tue, 22 Jan 2013 23:45:43 +0200, Jani Nikula wrote: >> > Though it could be used as an alternative to notmuch new, the reason >> > I want this is to allow my notmuch frontend to add postponed or sent >> > messages to the mail store and notmuch database, without resorting to >> > another tool (e.g. notmuch-deliver) nor directly modifying the maildir. >> >> This review is based on the following patches squashed together: >> >> cli: add stub for insert command >> insert: open Maildir tmp file >> insert: copy stdin to Maildir tmp file >> insert: move file from Maildir tmp to new >> insert: add new message to database >> insert: apply default tags to new message >> insert: parse and apply command-line tag operations >> insert: fsync after writing tmp file >> insert: trap SIGINT and clean up >> insert: add copyright line from notmuch-deliver >> >> It's much easier for me to grasp the big picture this way. >> > > So there *is* a limit to how fine-grained notmuchers want their patches ;-) :) > >> > +static notmuch_bool_t >> > +maildir_move_tmp_to_new (const char *tmppath, const char *newpath) >> > +{ >> > +if (rename (tmppath, newpath) != 0) { >> > + fprintf (stderr, "Error: rename() failed: %s\n", strerror (errno)); >> > + return FALSE; >> > +} >> > + >> > +return TRUE; >> > +} >> >> IMO you could just use rename() inline in the caller, without a wrapper. > > A subsequent patch fsyncs the directory here. Ah, right. You'll probably need to rework the patch a bit to apply here (if you take my advice of postponing the --folder etc. options). While at it, please try to see if you can reduce the amount of paths allocated and passed around. Given the filename, one can figure out the rest. See lib/message.cc for examples. In the end, go for clarity if this suggestion seems messy. > >> > +/* Copy the contents of standard input (fdin) into fdout. */ >> > +static notmuch_bool_t >> > +copy_stdin (int fdin, int fdout) >> >> The comment and the function name imply the function has something to do >> with stdin, while it only cares about file descriptors. > > Tomi pointed out that the error message refers to standard input. > >> > +/* Add the specified message file to the notmuch database, applying tags. >> > + * The file is renamed to encode notmuch tags as maildir flags. */ >> > +static notmuch_bool_t >> > +add_file_to_database (notmuch_database_t *notmuch, const char *path, >> > +tag_op_list_t *tag_ops) >> > +{ >> > +notmuch_message_t *message; >> > +notmuch_status_t status; >> > + >> > +status = notmuch_database_add_message (notmuch, path, &message); >> > +switch (status) { >> > +case NOTMUCH_STATUS_SUCCESS: >> > + break; >> > +case NOTMUCH_STATUS_DUPLICATE_MESSAGE_ID: >> > + fprintf (stderr, "Warning: duplicate message.\n"); >> >> This is not uncommon. Why the warning? >> > > I put in the warning because I wasn't sure, then forgot to revisit it. > >> Also, notmuch new does not apply new.tags in this case. Are you sure we >> want to do that here? (You get mail, you read and archive it, you get >> the dupe, it pops up unread in your inbox again.) > > Should command-line tags to be applied to duplicate messages? > I'm thinking not. Agreed; a future patch might add an option to choose. I've thought about having a config option to have notmuch new add a separate set of tags to duplicates (defaulting to no tags added). That could be reused here too (but is different from the command-line tags). But again, future work. > I'll fix the other problems you found. > > Peter BR, Jani.
Re: [PATCH 1/1] test/test-lib.sh: use vt100 as dtach terminal if TERM nonexistent or dumb
On Wed, 23 Jan 2013, Tomi Ollila wrote: > The TERM environment variable is set to 'dumb' when running tests, but > the original value of it is stored for echoing colors and running (emacs Extra ( there? > (somewhat interactively) in detached session. Emacs requires some > terminal control sequences to be available for interactive operation. > In case original TERM is (also) 'dumb' (or nonexistent) emacs cannot run > interactively. To fix this problem dtach (and emacs as it's child > process) is run with TERM=vt100 in case original TERM was nonexistent or > dumb. This way there is a chance to run emacs tests with different user > terminals and potentially find problems there. > --- > test/test-lib.sh | 9 +++-- > 1 file changed, 7 insertions(+), 2 deletions(-) > > diff --git a/test/test-lib.sh b/test/test-lib.sh > index 6ce3b31..3bc67f7 100644 > --- a/test/test-lib.sh > +++ b/test/test-lib.sh > @@ -41,6 +41,10 @@ esac > # Keep the original TERM for say_color and test_emacs > ORIGINAL_TERM=$TERM > > +# dtach(1) provides more capable terminal environment to anything > +# that requires more than dumb terminal... > +[ x"${TERM:-dumb}" = xdumb ] && DTACH_TERM=vt100 || DTACH_TERM=$TERM That's just a tiny bit more trickery than I usually like... but then it's shell after all... :) > + > # For repeatability, reset the environment to known value. > LANG=C > LC_ALL=C > @@ -996,9 +1000,10 @@ test_emacs () { > fi > server_name="notmuch-test-suite-$$" > # start a detached session with an emacs server > - # user's TERM is given to dtach which assumes a minimally > + # user's TERM (or 'vt100' om case user's term is nonexistent > + # or 'dumb') is given to dtach which assumes a minimally Nitpick, s/om/in/ Otherwise LGTM, and works as advertised. Jani. > # VT100-compatible terminal -- and emacs inherits that > - TERM=$ORIGINAL_TERM dtach -n > "$TEST_TMPDIR/emacs-dtach-socket.$$" \ > + TERM=$DTACH_TERM dtach -n "$TEST_TMPDIR/emacs-dtach-socket.$$" \ > sh -c "stty rows 24 cols 80; exec > '$TMP_DIRECTORY/run_emacs' \ > --no-window-system \ > $load_emacs_tests \ > -- > 1.8.1 > > ___ > notmuch mailing list > notmuch@notmuchmail.org > http://notmuchmail.org/mailman/listinfo/notmuch ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
Re: [PATCH v2] emacs: Disambiguate point placement after hiding message
On Wed, Jan 09 2013, Austin Clements wrote: > Currently, if point is in the middle of a message when the user > collapses it, Emacs then displays the cursor on the header line of the > next message, even though point is still on the collapsed message and > even though, if you explicitly move point to the same visual location, > it will be on the next message. As a result, following actions like > re-expanding the message or modifying tags apply to the collapsed > message, even though, visually, it looks like they will apply to the > message following the collapsed message. > > This patch addresses this by explicitly moving point when a message is > collapsed so it is visually unambiguous that the point is still on the > collapsed message. > --- > > v2 should fix the strange behavior observed in v1. The added code is > essentially identical to v1, but v2 adds it to > notmuch-show-toggle-message---which is only used > interactively---rather than the core notmuch-show-message-visible > function. > > emacs/notmuch-show.el | 28 +++- > 1 file changed, 23 insertions(+), 5 deletions(-) > > diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el > index 5751d98..6ab926c 100644 > --- a/emacs/notmuch-show.el > +++ b/emacs/notmuch-show.el > @@ -1789,12 +1789,30 @@ See `notmuch-tag' for information on the format of > TAG-CHANGES." >(force-window-update)) > > (defun notmuch-show-toggle-message () > - "Toggle the visibility of the current message." > + "Toggle the visibility of the current message. > + > +If this hides the current message, it will also move point to > +make it obvious it's still on the current message." >(interactive) > - (let ((props (notmuch-show-get-message-properties))) > -(notmuch-show-message-visible > - props > - (not (plist-get props :message-visible > + (let* ((props (notmuch-show-get-message-properties)) > + (visible-p (not (plist-get props :message-visible > +(notmuch-show-message-visible props visible-p) > +(when (not visible-p) > + (let ((ov (plist-get props :message-overlay))) > + ;; If point was contained in the overlay, move it to a > + ;; sensible spot that is visible and still on the same > + ;; message. Strangely, the Emacs event loop doesn't move the > + ;; point out of the invisible region for us like it normally > + ;; does (perhaps because it doesn't know which way to go), so > + ;; if we don't do this, it's visually ambiguous which message > + ;; an action will apply to. > + (let ((start (overlay-start ov)) > + (end (overlay-end ov))) > + (dolist (win (get-buffer-window-list nil nil t)) > + (with-selected-window win > + (when (and (<= start (point)) (< (point) end)) > + (goto-char (1- start)) > + (beginning-of-visual-line Soo. the problem with this is still the behaviour of (beginning-of-visual-line), which "leaks" to previous message if (point) is in the first header line. Interestingly (beginning-of-line) does not -- and this is supposed to move more than beginning-of-visual-line... But this and the defadvice in id:1357855176-31653-1-git-send-email-amdra...@mit.edu could fix this problem -- if the "sketchy" approach were used... Austin: have you got further with the "alternate" approach you mentioned in the other mail ? In the meanwhile I played a bit how those overlays are positioned -- basically moved those to one character position closer to the beginning of buffer -- so that overlays start with "\n" and end just before "\n". My naive attempts just to move brought some interesting side effects (line counts in button change, header line coloring doesn't go to the end of file and cursor is sometimes positioned interesting -- but the cursor no longer leak to previous (or next) message. For reference, The changes I made attached. I don't bother to make proper patch until/unless we know this is definite way to proceed (and this definitely have some implementation issues, too)... >From bd3571c578aa45a23a120fc82b89f7e1649617fd Mon Sep 17 00:00:00 2001 From: Tomi Ollila Date: Wed, 23 Jan 2013 11:34:20 +0300 Subject: [PATCH] these email headers copied just to make git am happy --- diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el index 1864dd1..7ee6d1d 100644 --- a/emacs/notmuch-show.el +++ b/emacs/notmuch-show.el @@ -870,7 +870,7 @@ message at DEPTH in the current thread." (defun notmuch-show-create-part-overlays (msg beg end hide) "Add an overlay to the part between BEG and END" (let* ((button (button-at beg)) -(part-beg (and button (1+ (button-end button) +(part-beg (and button (button-end button ;; If the part contains no text we do not make it toggleable. We ;; also need to check that the button is a genuine part button not @@ -898,7 +898,7 @@ If HIDE is non-nil then initially hide this part." ;; Ensure that the part ends with a
Re: [PATCH] emacs: hello: use batch count
On Wed, Jan 16 2013, Mark Walters wrote: > This modifies notmuch hello to use the new count --batch > functionality. It should give exactly the same results as before but > under many conditions it should be much faster. In particular it is > much faster for remote use. > > The code is a little ugly as it has to do some working out of the > query when asking the query and some when dealing with the result. > However, the code path is exactly the same in both local and remote > use. > --- Well, the code Looks Good To Me (not Bad or Ugly). Pretty straightforward conversion. Can we have newlines in query string^H^H^H^H^H^H^H^H^H^H^H^H^H^H^H^H^H^H^H Tomi > > It's a little ugly but seems to work and does give a useful speedup. > > Best wishes > > Mark > > emacs/notmuch-hello.el | 52 +-- > 1 files changed, 32 insertions(+), 20 deletions(-) > > diff --git a/emacs/notmuch-hello.el b/emacs/notmuch-hello.el > index 6db62a0..2244892 100644 > --- a/emacs/notmuch-hello.el > +++ b/emacs/notmuch-hello.el > @@ -381,26 +381,38 @@ The result is the list of elements of the form (NAME > QUERY COUNT). > The values :show-empty-searches, :filter and :filter-count from > options will be handled as specified for > `notmuch-hello-insert-searches'." > - (notmuch-remove-if-not > - #'identity > - (mapcar > -(lambda (elem) > - (let* ((name (car elem)) > - (query-and-count (if (consp (cdr elem)) > - ;; do we have a different query for the > message count? > - (cons (second elem) (third elem)) > - (cons (cdr elem) (cdr elem > - (message-count > - (string-to-number > -(notmuch-saved-search-count > - (notmuch-hello-filtered-query (cdr query-and-count) > - (or (plist-get options > :filter-count) > - (plist-get options > :filter))) > - (and (or (plist-get options :show-empty-searches) (> message-count 0)) > - (list name (notmuch-hello-filtered-query > - (car query-and-count) (plist-get options :filter)) > -message-count > -query-alist))) > + (with-temp-buffer > +(dolist (elem query-alist nil) > + (let ((count-query (if (consp (cdr elem)) > + ;; do we have a different query for the message > count? > + (third elem) > +(cdr elem > + (insert > + (notmuch-hello-filtered-query count-query > +(or (plist-get options :filter-count) > +(plist-get options :filter))) > + "\n"))) > + > +(call-process-region (point-min) (point-max) notmuch-command > + t t nil "count" "--batch") > +(goto-char (point-min)) > + > +(notmuch-remove-if-not > + #'identity > + (mapcar > + (lambda (elem) > + (let ((name (car elem)) > + (search-query (if (consp (cdr elem)) > + ;; do we have a different query for the > message count? > + (second elem) > + (cdr elem))) > + (message-count (prog1 (read (current-buffer)) > + (forward-line 1 > + (and (or (plist-get options :show-empty-searches) (> message-count 0)) > +(list name (notmuch-hello-filtered-query > +search-query (plist-get options :filter)) > + message-count > + query-alist > > (defun notmuch-hello-insert-buttons (searches) >"Insert buttons for SEARCHES. > -- > 1.7.9.1 > > ___ > notmuch mailing list > notmuch@notmuchmail.org > http://notmuchmail.org/mailman/listinfo/notmuch ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
Re: [PATCH 3/5] cli: add --batch option to notmuch count
On Tue, Jan 15 2013, Jani Nikula wrote: > Add support for reading queries from stdin, one per line, and writing > results to stdin, one per line. Jani's parts LGTM, except one IMPORTANT part -- results are written to STDOUT! (hopefully...yes) instead of STDIN! ;) I don't see a reason why this particular way to get counts could not be supported in notmuch into foreseeable future; the implementation is simple and clean. Next to look Mark's changes... Tomi > > This will bring considerable performance improvements when utilized in > Emacs notmuch-hello, especially so when running remote notmuch. > --- > notmuch-count.c | 52 ++-- > 1 file changed, 50 insertions(+), 2 deletions(-) > > diff --git a/notmuch-count.c b/notmuch-count.c > index 0e14b48..4bc4215 100644 > --- a/notmuch-count.c > +++ b/notmuch-count.c > @@ -62,6 +62,27 @@ print_count (notmuch_database_t *notmuch, const char > *query_str, > return 0; > } > > +static int > +count_file (notmuch_database_t *notmuch, FILE *input, const char > **exclude_tags, > + size_t exclude_tags_length, int output) > +{ > +char *line = NULL; > +ssize_t line_len; > +size_t line_size; > +int ret = 0; > + > +while (!ret && (line_len = getline (&line, &line_size, input)) != -1) { > + chomp_newline (line); > + ret = print_count (notmuch, line, exclude_tags, exclude_tags_length, > +output); > +} > + > +if (line) > + free (line); > + > +return ret; > +} > + > int > notmuch_count_command (void *ctx, int argc, char *argv[]) > { > @@ -73,6 +94,9 @@ notmuch_count_command (void *ctx, int argc, char *argv[]) > int exclude = EXCLUDE_TRUE; > const char **search_exclude_tags = NULL; > size_t search_exclude_tags_length = 0; > +notmuch_bool_t batch = FALSE; > +FILE *input = stdin; > +char *input_file_name = NULL; > int ret; > > notmuch_opt_desc_t options[] = { > @@ -84,6 +108,8 @@ notmuch_count_command (void *ctx, int argc, char *argv[]) > (notmuch_keyword_t []){ { "true", EXCLUDE_TRUE }, > { "false", EXCLUDE_FALSE }, > { 0, 0 } } }, > + { NOTMUCH_OPT_BOOLEAN, &batch, "batch", 0, 0 }, > + { NOTMUCH_OPT_STRING, &input_file_name, "input", 'i', 0 }, > { 0, 0, 0, 0, 0 } > }; > > @@ -93,6 +119,21 @@ notmuch_count_command (void *ctx, int argc, char *argv[]) > return 1; > } > > +if (input_file_name) { > + batch = TRUE; > + input = fopen (input_file_name, "r"); > + if (input == NULL) { > + fprintf (stderr, "Error opening %s for reading: %s\n", > + input_file_name, strerror (errno)); > + return 1; > + } > +} > + > +if (batch && opt_index != argc) { > + fprintf (stderr, "--batch and query string are not compatible\n"); > + return 1; > +} > + > config = notmuch_config_open (ctx, NULL, NULL); > if (config == NULL) > return 1; > @@ -112,10 +153,17 @@ notmuch_count_command (void *ctx, int argc, char > *argv[]) > (config, &search_exclude_tags_length); > } > > -ret = print_count (notmuch, query_str, search_exclude_tags, > -search_exclude_tags_length, output); > +if (batch) > + ret = count_file (notmuch, input, search_exclude_tags, > + search_exclude_tags_length, output); > +else > + ret = print_count (notmuch, query_str, search_exclude_tags, > +search_exclude_tags_length, output); > > notmuch_database_destroy (notmuch); > > +if (input != stdin) > + fclose (input); > + > return ret; > } > -- > 1.7.10.4 > > ___ > notmuch mailing list > notmuch@notmuchmail.org > http://notmuchmail.org/mailman/listinfo/notmuch ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
Linking to emails via notmuch
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Hi I would like to cross-reference emails via notmuch, i.e. I would like to include a link to an email in a git commit message (this is a private gip repo and I am the only developer and committer, so no problem from that side). Is it possible to get a link to an email which, when clicked in emacs, opens the corresponding email using notmuch? Or should I use a different approach? Thanks, Rainer -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.11 (GNU/Linux) Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/ iQEcBAEBAgAGBQJQ/9hqAAoJENvXNx4PUvmCaqMH/AgrPLWZSU6hsdwaz54GLOBA h8jvLMq6rtCaAEceMDsFMepYGOmK+3Z1OuzIILbHPS2PDp3c9ExesMS2qAzsOL2D dhDQsKxYkssSMzWCZBRiLrGeyF7w01Pu7n4VIlKl+KeE3vrItPNV2LHgaeTnClIz jIHdAfQEwMRbXpZAQiTMXX+ed7Upfu50cgWyf3EydcZ4RcJvCuzvr8iQ/jzcrONM fSDHdZ7QqMlsvbzIYy9nNIlj0yT+Fs3xwA5hWRPczQvEurNP2UKtHMfZNw+Rn2KG Po4PEAp9rzzXKqM0JocqWKi9BDBLKpSV/8VseNKlllDM+89IONhEtXQOYTeclKk= =uTH8 -END PGP SIGNATURE- ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
[PATCH 3/4] emacs: possibility to customize the rendering of tags
On Wed, Jan 23 2013, Austin Clements wrote: > On Fri, 18 Jan 2013, Damien Cassou wrote: > >> + `(("unread" >> + (:propertize "unread" face >> + (:Foreground "red"))) >> +("flagged" >> + (:propertize "flagged" display >> + (image :type svg :file >> + ,(expand-file-name >> + "resources/star.svg" >> + (file-name-directory >> +(or >> + (locate-library "notmuch-tagger") >> + (buffer-file-name > > Interesting. Is this a standard way to locate resources? (I've never > had need to.) > > Since there are other icons here as well, perhaps the resources > directory should be bound to a global variable so it's easy to construct > other standard notmuch icon names? You capture this in a function in > patch 4, but that function doesn't obviously accomplish anything a > simple variable wouldn't. I was thinking this too. M-x apropos RET -path RET (apropos "-path") outputs (at least) 2 symbols that are relevant here: image-load-path Variable: List of locations in which to search for image files. Properties: standard-value custom-type custom-requests variable-documentation and image-load-path-for-library Function: Return a suitable search path for images used by LIBRARY. (if the second were used I'd suggest to use 'notmuch' instead of 'notmuch-tagger' -- just to support me who just installs notmuch.elc which is done by concatenating all notmuch .el files together to one notmuch.el file which is then byte-compiled :D) > Another possibility is that these icons could be included directly in > the Elisp source, probably as simplified SVGs (your SVGs look like they > could be cut down to 3 or 4 lines of XML easily) or as XPMs. Besides > skirting issues with resource location, this would make it trivial to > alter their colors based on user preferences. I also had the same 2 things in mind, simplify SVGs and possibly include that directly in the source... Tomi
update top level argument handling
On Wed, Jan 23 2013, David Bremner wrote: > Jani Nikula writes: > >> >> Patches 1-4 look good, and IMO should be used regardless of the >> bikeshedding result on patches 5-7. > > I pushed the first 4. 6 and 7 will need rebasing if 5 is omitted, which > seems to be the plan. At least it maintains status quo -- and in this particular case it doesn't seem to jam progress ;) > d Tomi
[PATCH 1/1] test/test-lib.sh: use vt100 as dtach terminal if TERM nonexistent or dumb
The TERM environment variable is set to 'dumb' when running tests, but the original value of it is stored for echoing colors and running (emacs (somewhat interactively) in detached session. Emacs requires some terminal control sequences to be available for interactive operation. In case original TERM is (also) 'dumb' (or nonexistent) emacs cannot run interactively. To fix this problem dtach (and emacs as it's child process) is run with TERM=vt100 in case original TERM was nonexistent or dumb. This way there is a chance to run emacs tests with different user terminals and potentially find problems there. --- test/test-lib.sh | 9 +++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/test/test-lib.sh b/test/test-lib.sh index 6ce3b31..3bc67f7 100644 --- a/test/test-lib.sh +++ b/test/test-lib.sh @@ -41,6 +41,10 @@ esac # Keep the original TERM for say_color and test_emacs ORIGINAL_TERM=$TERM +# dtach(1) provides more capable terminal environment to anything +# that requires more than dumb terminal... +[ x"${TERM:-dumb}" = xdumb ] && DTACH_TERM=vt100 || DTACH_TERM=$TERM + # For repeatability, reset the environment to known value. LANG=C LC_ALL=C @@ -996,9 +1000,10 @@ test_emacs () { fi server_name="notmuch-test-suite-$$" # start a detached session with an emacs server - # user's TERM is given to dtach which assumes a minimally + # user's TERM (or 'vt100' om case user's term is nonexistent + # or 'dumb') is given to dtach which assumes a minimally # VT100-compatible terminal -- and emacs inherits that - TERM=$ORIGINAL_TERM dtach -n "$TEST_TMPDIR/emacs-dtach-socket.$$" \ + TERM=$DTACH_TERM dtach -n "$TEST_TMPDIR/emacs-dtach-socket.$$" \ sh -c "stty rows 24 cols 80; exec '$TMP_DIRECTORY/run_emacs' \ --no-window-system \ $load_emacs_tests \ -- 1.8.1 ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
Re: [PATCH v3 01/20] cli: add stub for insert command
On Wed, 23 Jan 2013, Peter Wang wrote: > On Tue, 22 Jan 2013 23:45:43 +0200, Jani Nikula wrote: >> > Though it could be used as an alternative to notmuch new, the reason >> > I want this is to allow my notmuch frontend to add postponed or sent >> > messages to the mail store and notmuch database, without resorting to >> > another tool (e.g. notmuch-deliver) nor directly modifying the maildir. >> >> This review is based on the following patches squashed together: >> >> cli: add stub for insert command >> insert: open Maildir tmp file >> insert: copy stdin to Maildir tmp file >> insert: move file from Maildir tmp to new >> insert: add new message to database >> insert: apply default tags to new message >> insert: parse and apply command-line tag operations >> insert: fsync after writing tmp file >> insert: trap SIGINT and clean up >> insert: add copyright line from notmuch-deliver >> >> It's much easier for me to grasp the big picture this way. >> > > So there *is* a limit to how fine-grained notmuchers want their patches ;-) :) > >> > +static notmuch_bool_t >> > +maildir_move_tmp_to_new (const char *tmppath, const char *newpath) >> > +{ >> > +if (rename (tmppath, newpath) != 0) { >> > + fprintf (stderr, "Error: rename() failed: %s\n", strerror (errno)); >> > + return FALSE; >> > +} >> > + >> > +return TRUE; >> > +} >> >> IMO you could just use rename() inline in the caller, without a wrapper. > > A subsequent patch fsyncs the directory here. Ah, right. You'll probably need to rework the patch a bit to apply here (if you take my advice of postponing the --folder etc. options). While at it, please try to see if you can reduce the amount of paths allocated and passed around. Given the filename, one can figure out the rest. See lib/message.cc for examples. In the end, go for clarity if this suggestion seems messy. > >> > +/* Copy the contents of standard input (fdin) into fdout. */ >> > +static notmuch_bool_t >> > +copy_stdin (int fdin, int fdout) >> >> The comment and the function name imply the function has something to do >> with stdin, while it only cares about file descriptors. > > Tomi pointed out that the error message refers to standard input. > >> > +/* Add the specified message file to the notmuch database, applying tags. >> > + * The file is renamed to encode notmuch tags as maildir flags. */ >> > +static notmuch_bool_t >> > +add_file_to_database (notmuch_database_t *notmuch, const char *path, >> > +tag_op_list_t *tag_ops) >> > +{ >> > +notmuch_message_t *message; >> > +notmuch_status_t status; >> > + >> > +status = notmuch_database_add_message (notmuch, path, &message); >> > +switch (status) { >> > +case NOTMUCH_STATUS_SUCCESS: >> > + break; >> > +case NOTMUCH_STATUS_DUPLICATE_MESSAGE_ID: >> > + fprintf (stderr, "Warning: duplicate message.\n"); >> >> This is not uncommon. Why the warning? >> > > I put in the warning because I wasn't sure, then forgot to revisit it. > >> Also, notmuch new does not apply new.tags in this case. Are you sure we >> want to do that here? (You get mail, you read and archive it, you get >> the dupe, it pops up unread in your inbox again.) > > Should command-line tags to be applied to duplicate messages? > I'm thinking not. Agreed; a future patch might add an option to choose. I've thought about having a config option to have notmuch new add a separate set of tags to duplicates (defaulting to no tags added). That could be reused here too (but is different from the command-line tags). But again, future work. > I'll fix the other problems you found. > > Peter BR, Jani. ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
Re: [PATCH v3 01/20] cli: add stub for insert command
On Wed, Jan 23 2013, Peter Wang wrote: > On Tue, 22 Jan 2013 23:45:43 +0200, Jani Nikula wrote: > >> > +/* Copy the contents of standard input (fdin) into fdout. */ >> > +static notmuch_bool_t >> > +copy_stdin (int fdin, int fdout) >> >> The comment and the function name imply the function has something to do >> with stdin, while it only cares about file descriptors. > > Tomi pointed out that the error message refers to standard input. Was that me or some other Tomi ;)... Nevertheless the function here called 'copy_stdin' copies fdin to fdout, whatever the file descriptors are, it doesn't enforce fdin to be fd 0 (default stdin). I.e. the function name should be more generic (or then drop fdin argument -- should better name then be 'copy_from_stdin' or copy_stdin_to.. or copy_[from_]stdin_to_some_magic_fd -- ok, no more bikeshedding now >;)). > Peter Tomi ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
Re: [PATCH v3 01/20] cli: add stub for insert command
On Tue, 22 Jan 2013 23:45:43 +0200, Jani Nikula wrote: > > Though it could be used as an alternative to notmuch new, the reason > > I want this is to allow my notmuch frontend to add postponed or sent > > messages to the mail store and notmuch database, without resorting to > > another tool (e.g. notmuch-deliver) nor directly modifying the maildir. > > This review is based on the following patches squashed together: > > cli: add stub for insert command > insert: open Maildir tmp file > insert: copy stdin to Maildir tmp file > insert: move file from Maildir tmp to new > insert: add new message to database > insert: apply default tags to new message > insert: parse and apply command-line tag operations > insert: fsync after writing tmp file > insert: trap SIGINT and clean up > insert: add copyright line from notmuch-deliver > > It's much easier for me to grasp the big picture this way. > So there *is* a limit to how fine-grained notmuchers want their patches ;-) > > +static notmuch_bool_t > > +maildir_move_tmp_to_new (const char *tmppath, const char *newpath) > > +{ > > +if (rename (tmppath, newpath) != 0) { > > + fprintf (stderr, "Error: rename() failed: %s\n", strerror (errno)); > > + return FALSE; > > +} > > + > > +return TRUE; > > +} > > IMO you could just use rename() inline in the caller, without a wrapper. A subsequent patch fsyncs the directory here. > > +/* Copy the contents of standard input (fdin) into fdout. */ > > +static notmuch_bool_t > > +copy_stdin (int fdin, int fdout) > > The comment and the function name imply the function has something to do > with stdin, while it only cares about file descriptors. Tomi pointed out that the error message refers to standard input. > > +/* Add the specified message file to the notmuch database, applying tags. > > + * The file is renamed to encode notmuch tags as maildir flags. */ > > +static notmuch_bool_t > > +add_file_to_database (notmuch_database_t *notmuch, const char *path, > > + tag_op_list_t *tag_ops) > > +{ > > +notmuch_message_t *message; > > +notmuch_status_t status; > > + > > +status = notmuch_database_add_message (notmuch, path, &message); > > +switch (status) { > > +case NOTMUCH_STATUS_SUCCESS: > > + break; > > +case NOTMUCH_STATUS_DUPLICATE_MESSAGE_ID: > > + fprintf (stderr, "Warning: duplicate message.\n"); > > This is not uncommon. Why the warning? > I put in the warning because I wasn't sure, then forgot to revisit it. > Also, notmuch new does not apply new.tags in this case. Are you sure we > want to do that here? (You get mail, you read and archive it, you get > the dupe, it pops up unread in your inbox again.) Should command-line tags to be applied to duplicate messages? I'm thinking not. I'll fix the other problems you found. Peter ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch