* Goto command for existing search windows
@ 2012-03-27 20:24 Mark Anderson
2012-03-29 15:47 ` Mark Anderson
0 siblings, 1 reply; 5+ messages in thread
From: Mark Anderson @ 2012-03-27 20:24 UTC (permalink / raw)
To: Notmuch Mail
I was looking for a function which would find a buffer based on one of
my saved searches, and perform the search if it didn't exist.
I've gotten it a bit closer, if I perform the search that matches a
saved search, then this routine will find it because of the magic in
notmuch-search-buffer-title, but perhaps someone else feels up to
searching through the saved searches directly?
(defun notmuch-goto-or-search (&optional query)
"Find a notmuch-search buffer with the given query, or run
\"notmuch search\" with the given `query' and display results.
If `query' is nil, it is read interactively from the minibuffer."
(interactive)
(if (null query)
(setq query (notmuch-read-query "Notmuch goto-or-search: ")))
(let ((buffer-name (notmuch-search-buffer-title query)))
(setq buf (get-buffer buffer-name)))
(if (not buf)
(notmuch-search query)
(switch-to-buffer buf)
)))
I then use it something like this:
(global-set-key [C-f1] (lambda () (interactive) (notmuch-goto-or-search "tag:inbox and tag:unread and not tag:deleted")))
(global-set-key [C-f2] (lambda () (interactive) (notmuch-goto-or-search "tag:inbox and not tag:deleted")))
(global-set-key [C-f3] 'notmuch)
(global-set-key [C-f6] (lambda () (interactive) (notmuch-goto-or-search "tag:todo and not tag:deleted")))
It would be better if I could use my Inbox, INBOX and todo names for the
saved searches, but how to do that without breaking generality of
searching the body of the email? Do I have to define my own ss: (saved
search) prefix or something, as I believe some others have?
This is what I'm willing to do today, and it works for me, I could patch
notmuch.el, but I wondered about answering the other questions.
Also, some elisp master could hint about how to make the binding not so
ugly. ;)
Another appreciated elisp hint would be how to get the buf variable to
go inside the let, I keep getting complaints about buffer-name not being
defined, thus the "ugly" setq, which works.
Enjoy,
-Mark
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Goto command for existing search windows
2012-03-27 20:24 Goto command for existing search windows Mark Anderson
@ 2012-03-29 15:47 ` Mark Anderson
2012-03-29 20:27 ` Jameson Graef Rollins
0 siblings, 1 reply; 5+ messages in thread
From: Mark Anderson @ 2012-03-29 15:47 UTC (permalink / raw)
To: Notmuch Mail
On Tue, 27 Mar 2012 14:24:36 -0600, Mark Anderson <MarkR.Anderson@amd.com> wrote:
> I was looking for a function which would find a buffer based on one of
> my saved searches, and perform the search if it didn't exist.
>
> I've gotten it a bit closer, if I perform the search that matches a
> saved search, then this routine will find it because of the magic in
> notmuch-search-buffer-title, but perhaps someone else feels up to
> searching through the saved searches directly?
>
>
>
> (defun notmuch-goto-or-search (&optional query)
> "Find a notmuch-search buffer with the given query, or run
> \"notmuch search\" with the given `query' and display results.
>
> If `query' is nil, it is read interactively from the minibuffer."
> (interactive)
> (if (null query)
> (setq query (notmuch-read-query "Notmuch goto-or-search: ")))
> (let ((buffer-name (notmuch-search-buffer-title query)))
> (setq buf (get-buffer buffer-name)))
>
> (if (not buf)
> (notmuch-search query)
> (switch-to-buffer buf)
> )))
I have a slightly better-for-me version now:
(defun notmuch-goto-or-search (&optional query)
"Find a notmuch saved-search query with the given name, or a
search with the given query, switching to an existing buffer
without changes in preference to automatically refreshing or
creating the search buffer.
If `query' is nil, it is read interactively from the minibuffer."
(interactive)
(if (null query)
(setq query (notmuch-read-query "Notmuch goto-or-search: ")))
(let ((saved-search-tuple (assoc query notmuch-saved-searches)))
(setq expanded-query
(if (null saved-search-tuple)
query
(cdr saved-search-tuple))))
(let ((buffer-name (notmuch-search-buffer-title expanded-query)))
(setq buf (get-buffer buffer-name)))
(if (not buf)
(notmuch-search expanded-query)
(switch-to-buffer buf)
))
This does search the saved searches to see if you entered a saved search
name. With this I don't have to duplicate my query for saved searches
in key bindings.
(global-set-key [f8] (lambda () (interactive) (notmuch-goto-or-search "Inbox")))
(global-set-key [f9] (lambda () (interactive) (notmuch-goto-or-search "INBOX")))
(global-set-key [f10] (lambda () (interactive) (notmuch-goto-or-search "todo")))
> I then use it something like this:
>
> (global-set-key [C-f1] (lambda () (interactive) (notmuch-goto-or-search "tag:inbox and tag:unread and not tag:deleted")))
> (global-set-key [C-f2] (lambda () (interactive) (notmuch-goto-or-search "tag:inbox and not tag:deleted")))
> (global-set-key [C-f3] 'notmuch)
> (global-set-key [C-f6] (lambda () (interactive) (notmuch-goto-or-search "tag:todo and not tag:deleted")))
>
> It would be better if I could use my Inbox, INBOX and todo names for the
> saved searches, but how to do that without breaking generality of
> searching the body of the email? Do I have to define my own ss: (saved
> search) prefix or something, as I believe some others have?
>
> This is what I'm willing to do today, and it works for me, I could patch
> notmuch.el, but I wondered about answering the other questions.
>
> Also, some elisp master could hint about how to make the binding not so
> ugly. ;)
>
> Another appreciated elisp hint would be how to get the buf variable to
> go inside the let, I keep getting complaints about buffer-name not being
> defined, thus the "ugly" setq, which works.
>
> Enjoy,
>
> -Mark
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Goto command for existing search windows
2012-03-29 15:47 ` Mark Anderson
@ 2012-03-29 20:27 ` Jameson Graef Rollins
2012-03-29 21:57 ` Jani Nikula
0 siblings, 1 reply; 5+ messages in thread
From: Jameson Graef Rollins @ 2012-03-29 20:27 UTC (permalink / raw)
To: Mark Anderson, Notmuch Mail
[-- Attachment #1: Type: text/plain, Size: 1176 bytes --]
On Thu, Mar 29 2012, Mark Anderson <MarkR.Anderson@amd.com> wrote:
> On Tue, 27 Mar 2012 14:24:36 -0600, Mark Anderson <MarkR.Anderson@amd.com> wrote:
>> I was looking for a function which would find a buffer based on one of
>> my saved searches, and perform the search if it didn't exist.
>>
>> I've gotten it a bit closer, if I perform the search that matches a
>> saved search, then this routine will find it because of the magic in
>> notmuch-search-buffer-title, but perhaps someone else feels up to
>> searching through the saved searches directly?
Hey, Mark. I think you can be a little simpler. The title for search
buffers is based on the search, so a buffer will always be reused for an
identical search. You don't need to do any fancy buffer searching. For
instance, the following works perfectly for me, and I believe produces
the same results as your technique:
(defun jnotmuch-inbox ()
"Search: inbox"
(interactive)
(notmuch-search "tag:inbox" t))
(define-key notmuch-hello-mode-map "2" 'jnotmuch-inbox)
(define-key notmuch-search-mode-map "2" 'jnotmuch-inbox)
(define-key notmuch-show-mode-map "2" 'jnotmuch-inbox)
jamie.
[-- Attachment #2: Type: application/pgp-signature, Size: 835 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Goto command for existing search windows
2012-03-29 20:27 ` Jameson Graef Rollins
@ 2012-03-29 21:57 ` Jani Nikula
2012-03-30 0:44 ` Jameson Graef Rollins
0 siblings, 1 reply; 5+ messages in thread
From: Jani Nikula @ 2012-03-29 21:57 UTC (permalink / raw)
To: Jameson Graef Rollins, Mark Anderson, Notmuch Mail
On Thu, 29 Mar 2012 13:27:36 -0700, Jameson Graef Rollins <jrollins@finestructure.net> wrote:
> On Thu, Mar 29 2012, Mark Anderson <MarkR.Anderson@amd.com> wrote:
> > On Tue, 27 Mar 2012 14:24:36 -0600, Mark Anderson <MarkR.Anderson@amd.com> wrote:
> >> I was looking for a function which would find a buffer based on one of
> >> my saved searches, and perform the search if it didn't exist.
> >>
> >> I've gotten it a bit closer, if I perform the search that matches a
> >> saved search, then this routine will find it because of the magic in
> >> notmuch-search-buffer-title, but perhaps someone else feels up to
> >> searching through the saved searches directly?
>
> Hey, Mark. I think you can be a little simpler. The title for search
> buffers is based on the search, so a buffer will always be reused for an
> identical search. You don't need to do any fancy buffer searching.
Hi, I believe Mark's point was just switching to the buffer if it
exists, *without* refreshing or doing the query, and only doing regular
notmuch-search if a buffer doesn't exist yet.
BR,
Jani.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Goto command for existing search windows
2012-03-29 21:57 ` Jani Nikula
@ 2012-03-30 0:44 ` Jameson Graef Rollins
0 siblings, 0 replies; 5+ messages in thread
From: Jameson Graef Rollins @ 2012-03-30 0:44 UTC (permalink / raw)
To: Jani Nikula, Mark Anderson, Notmuch Mail
[-- Attachment #1: Type: text/plain, Size: 459 bytes --]
On Thu, Mar 29 2012, Jani Nikula <jani@nikula.org> wrote:
> Hi, I believe Mark's point was just switching to the buffer if it
> exists, *without* refreshing or doing the query, and only doing regular
> notmuch-search if a buffer doesn't exist yet.
I understand, but searches are so fast, particularly for searches that
you're doing frequently enough to map to a key binding, that I really
doubt it would ever be an issue. It's certainly not for me.
jamie.
[-- Attachment #2: Type: application/pgp-signature, Size: 835 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2012-03-30 0:44 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-03-27 20:24 Goto command for existing search windows Mark Anderson
2012-03-29 15:47 ` Mark Anderson
2012-03-29 20:27 ` Jameson Graef Rollins
2012-03-29 21:57 ` Jani Nikula
2012-03-30 0:44 ` Jameson Graef Rollins
Code repositories for project(s) associated with this public inbox
https://yhetil.org/notmuch.git/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).