[PATCH] VIM: Add URI handling
On Mon, Oct 20 2014, Franz Fellner wrote: >> this commit message. > MsgID was just a short name for message-id, and I am used to CamelCase... > > VIM: Add support to open messages specified by their message-id in > notmuch-show. Perhaps something like: vim: add support to open id: links(*) (as subject) and then the text could describe shortly how this feature works and how it is used. See "Write meaningful commit messages" in http://notmuchmail.org/contributing/ (*) or 'references' or 'urls' -- which you think is the best in vim client context. Tomi
Re: [PATCH] VIM: Add URI handling
On Mon, Oct 20 2014, Franz Fellner wrote: >> this commit message. > MsgID was just a short name for message-id, and I am used to CamelCase... > > VIM: Add support to open messages specified by their message-id in > notmuch-show. Perhaps something like: vim: add support to open id: links(*) (as subject) and then the text could describe shortly how this feature works and how it is used. See "Write meaningful commit messages" in http://notmuchmail.org/contributing/ (*) or 'references' or 'urls' -- which you think is the best in vim client context. Tomi ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
[PATCH] VIM: Add URI handling
On Fri, Oct 17 2014, Franz Fellner wrote: > On Wed, 15 Oct 2014 12:33:55 -0700, Ian Main wrote: >> Franz Fellner wrote: >> > Here is a working implementation. >> > Please review carefully as I only can simulate ruby and vimscript >> > knowledge from what I see in notmuch.vim sourcefile and quick >> > googling. >> >> Yes, this works nicely. Thanks! >> >> I do notice however that this is against the github plugin repo (I think)? > Yes, that's right. > I forked the notmuch repo on github and incorporated your patches. > Already made a mistake while applying one of your patches... > https://github.com/ff2000/notmuch > (Hope everythin is fine now) > > commit cb757e9e438341a7bc6d2cfec4de7bdcc85946ea > Author: Franz Fellner > Date: Fri Oct 17 11:19:41 2014 +0200 > > VIM: Add MsgID to supported URIs Code-wise this patch looks good -- although I am not entirely sure what id does -- I expect it to handle id:... links... This email applies with git am (on top of Ian's) but the commit message has quite a few lines of cruft -- I'd like to see a commit message what explains what this change do ( the term 'MsgID' seems to be some vim client internal (subclass in URI class ?) which IMO should be better commented in this commit message. Tomi > > diff --git a/vim/notmuch.vim b/vim/notmuch.vim > index 6287cf6..30e1876 100644 > --- a/vim/notmuch.vim > +++ b/vim/notmuch.vim > @@ -268,6 +268,14 @@ ruby << EOF > if uri.class == URI::MailTo > vim_puts("Composing new email to #{uri.to}.") > VIM::command("call s:compose('#{uri.to}')") > + elsif uri.class == URI::MsgID > + msg = $curbuf.message(uri.opaque) > + if !msg > + vim_puts("Message not found in NotMuch > database: #{uri.to_s}") > + else > + vim_puts("Opening message #{msg.message_id} in > thread #{msg.thread_id}.") > + VIM::command("call > s:show('thread:#{msg.thread_id}', '#{msg.message_id}')") > + end > else > vim_puts("Opening #{uri.to_s}.") > cmd = VIM::evaluate('g:notmuch_open_uri') > @@ -428,11 +436,12 @@ endfunction > > "" main > > -function! s:show(thread_id) > +function! s:show(thread_id, msg_id) > call s:new_buffer('show') > setlocal modifiable > ruby << EOF > thread_id = VIM::evaluate('a:thread_id') > + msg_id = VIM::evaluate('a:msg_id') > $cur_thread = thread_id > $messages.clear > $curbuf.render do |b| > @@ -464,6 +473,9 @@ ruby << EOF > end > b << "" > nm_m.end = b.count > + if !msg_id.empty? and nm_m.message_id == msg_id > + VIM::command("normal #{nm_m.start}zt") > + end > end > b.delete(b.count) > end > @@ -486,7 +498,7 @@ ruby << EOF > when 1; $cur_filter = nil > when 2; $cur_filter = $cur_search > end > - VIM::command("call s:show('#{id}')") > + VIM::command("call s:show('#{id}', '')") > EOF > endfunction > > @@ -910,6 +922,10 @@ ruby << EOF > q > end > > + def message(id) > + @db.find_message(id) > + end > + > def close > @queries.delete_if { |q| ! q.destroy! } > @db.close > @@ -930,6 +946,13 @@ ruby << EOF > end > end > > + module URI > + class MsgID < Generic > + end > + > + @@schemes['ID'] = MsgID > + end > + > class Message > attr_accessor :start, :body_start, :end > attr_reader :message_id, :filename, :mail > ___ > notmuch mailing list > notmuch at notmuchmail.org > http://notmuchmail.org/mailman/listinfo/notmuch
[PATCH] VIM: Add URI handling
On Thu, Oct 02 2014, Ian Main wrote: > This patch adds URI handling to the vim client. You can now press > 'u' by default and the client will parse the current line and find > any URIs available. If there are more than one it opens the one > under the cursor or else it opens the only one available. It also > supports mailto: URI's and will compose a new message when activated. > > By default xdg-open is used for everything but mailto: which generally > does the right thing afaict. This patch LGTM. > > Ian Tomi > --- > vim/notmuch.txt | 1 + > vim/notmuch.vim | 59 > ++--- > 2 files changed, 53 insertions(+), 7 deletions(-) > > diff --git a/vim/notmuch.txt b/vim/notmuch.txt > index 4374102..d336406 100644 > --- a/vim/notmuch.txt > +++ b/vim/notmuch.txt > @@ -72,6 +72,7 @@ q Quit view > AArchive (-inbox -unread) > IMark as read (-unread) > tTag (prompted) > +uOpen URI > sSearch > pSave patches > rReply > diff --git a/vim/notmuch.vim b/vim/notmuch.vim > index 331e930..de82bb9 100644 > --- a/vim/notmuch.vim > +++ b/vim/notmuch.vim > @@ -12,7 +12,7 @@ let g:notmuch_folders_maps = { > \ '':'folders_show_search()', > \ 's': 'folders_search_prompt()', > \ '=': 'folders_refresh()', > - \ 'c': 'compose()', > + \ 'c': 'compose("")', > \ } > > let g:notmuch_search_maps = { > @@ -25,7 +25,7 @@ let g:notmuch_search_maps = { > \ 's': 'search_search_prompt()', > \ '=': 'search_refresh()', > \ '?': 'search_info()', > - \ 'c': 'compose()', > + \ 'c': 'compose("")', > \ } > > let g:notmuch_show_maps = { > @@ -37,10 +37,11 @@ let g:notmuch_show_maps = { > \ 'e': 'show_extract_msg()', > \ 's': 'show_save_msg()', > \ 'p': 'show_save_patches()', > + \ 'u': 'show_open_uri()', > \ 'r': 'show_reply()', > \ '?': 'show_info()', > \ '': 'show_next_msg()', > - \ 'c': 'compose()', > + \ 'c': 'compose("")', > \ } > > let g:notmuch_compose_maps = { > @@ -59,6 +60,7 @@ let s:notmuch_datetime_format_default = '%d.%m.%y %H:%M:%S' > let s:notmuch_reader_default = 'mutt -f %s' > let s:notmuch_sendmail_default = 'sendmail' > let s:notmuch_folders_count_threads_default = 0 > +let s:notmuch_open_uri_default = 'xdg-open' > > function! s:new_file_buffer(type, fname) > exec printf('edit %s', a:fname) > @@ -135,8 +137,8 @@ function! s:show_reply() > startinsert! > endfunction > > -function! s:compose() > - ruby open_compose > +function! s:compose(to_email) > + ruby open_compose(VIM::evaluate('a:to_email')) > let b:compose_done = 0 > call s:set_map(g:notmuch_compose_maps) > autocmd BufDelete call s:on_compose_delete() > @@ -159,6 +161,45 @@ ruby << EOF > EOF > endfunction > > +function! s:show_open_uri() > + let line = getline(".") > + let pos = getpos(".") > + let col = pos[2] > +ruby << EOF > + m = get_message > + line = VIM::evaluate('line') > + col = VIM::evaluate('col') - 1 > + uris = URI.extract(line) > + wanted_uri = nil > + if uris.length == 1 > + wanted_uri = uris[0] > + else > + uris.each do |uri| > + # Check to see the URI is at the present cursor location > + idx = line.index(uri) > + if col >= idx and col <= idx + uri.length > + wanted_uri = uri > + break > + end > + end > + end > + > + if wanted_uri > + uri = URI.parse(wanted_uri) > + if uri.class == URI::MailTo > + vim_puts("Composing new email to #{uri.to}.") > + VIM::command("call s:compose('#{uri.to}')") > + else > + vim_puts("Opening #{uri.to_s}.") > + cmd = VIM::evaluate('g:notmuch_open_uri') > + system(cmd, uri.to_s) > + end > + else > + vim_puts('URI not found.') > + end > +EOF > +endfunction > + > function! s:show_open_msg() > ruby << EOF > m = get_message > @@ -404,6 +445,10 @@ function! s:set_defaults() > endif > endif > > + if !exists('g:notmuch_open_uri') > + let g:notmuch_open_uri = s:notmuch_open_uri_default > + endif > + > if !exists('g:notmuch_reader') > if exists('g:notmuch_rb_reader') > let g:notmuch_reader = g:notmuch_rb_reader > @@ -611,11 +656,11 @@ ruby << EOF > open_compose_helper(lines, cur) > end > > - def open_compose() > + def open_compose(to_email) > lines = [] > > lines << "From: #{$email}" >
[PATCH] VIM: Add URI handling
Tomi Ollila wrote: > On Fri, Oct 17 2014, Franz Fellner wrote: > > > On Wed, 15 Oct 2014 12:33:55 -0700, Ian Main > > wrote: > >> Franz Fellner wrote: > >> > Here is a working implementation. > >> > Please review carefully as I only can simulate ruby and vimscript > >> > knowledge from what I see in notmuch.vim sourcefile and quick > >> > googling. > >> > >> Yes, this works nicely. Thanks! > >> > >> I do notice however that this is against the github plugin repo (I think)? > > Yes, that's right. > > I forked the notmuch repo on github and incorporated your patches. > > Already made a mistake while applying one of your patches... > > https://github.com/ff2000/notmuch > > (Hope everythin is fine now) > > > > commit cb757e9e438341a7bc6d2cfec4de7bdcc85946ea > > Author: Franz Fellner > > Date: Fri Oct 17 11:19:41 2014 +0200 > > > > VIM: Add MsgID to supported URIs > > Code-wise this patch looks good -- although I am not entirely sure what id > does -- I expect it to handle id:... links... Yes, that's what it should do. > This email applies with git am (on top of Ian's) but the commit message has > quite a few lines of cruft -- I'd like to see a commit message what > explains what this change do ( the term 'MsgID' seems to be some vim client > internal (subclass in URI class ?) which IMO should be better commented in > this commit message. MsgID was just a short name for message-id, and I am used to CamelCase... VIM: Add support to open messages specified by their message-id in notmuch-show. Does that make more sense? > Tomi > > > > > diff --git a/vim/notmuch.vim b/vim/notmuch.vim > > index 6287cf6..30e1876 100644 > > --- a/vim/notmuch.vim > > +++ b/vim/notmuch.vim > > @@ -268,6 +268,14 @@ ruby << EOF > > if uri.class == URI::MailTo > > vim_puts("Composing new email to #{uri.to}.") > > VIM::command("call s:compose('#{uri.to}')") > > + elsif uri.class == URI::MsgID > > + msg = $curbuf.message(uri.opaque) > > + if !msg > > + vim_puts("Message not found in NotMuch > > database: #{uri.to_s}") > > + else > > + vim_puts("Opening message #{msg.message_id} in > > thread #{msg.thread_id}.") > > + VIM::command("call > > s:show('thread:#{msg.thread_id}', '#{msg.message_id}')") > > + end > > else > > vim_puts("Opening #{uri.to_s}.") > > cmd = VIM::evaluate('g:notmuch_open_uri') > > @@ -428,11 +436,12 @@ endfunction > > > > "" main > > > > -function! s:show(thread_id) > > +function! s:show(thread_id, msg_id) > > call s:new_buffer('show') > > setlocal modifiable > > ruby << EOF > > thread_id = VIM::evaluate('a:thread_id') > > + msg_id = VIM::evaluate('a:msg_id') > > $cur_thread = thread_id > > $messages.clear > > $curbuf.render do |b| > > @@ -464,6 +473,9 @@ ruby << EOF > > end > > b << "" > > nm_m.end = b.count > > + if !msg_id.empty? and nm_m.message_id == msg_id > > + VIM::command("normal #{nm_m.start}zt") > > + end > > end > > b.delete(b.count) > > end > > @@ -486,7 +498,7 @@ ruby << EOF > > when 1; $cur_filter = nil > > when 2; $cur_filter = $cur_search > > end > > - VIM::command("call s:show('#{id}')") > > + VIM::command("call s:show('#{id}', '')") > > EOF > > endfunction > > > > @@ -910,6 +922,10 @@ ruby << EOF > > q > > end > > > > + def message(id) > > + @db.find_message(id) > > + end > > + > > def close > > @queries.delete_if { |q| ! q.destroy! } > > @db.close > > @@ -930,6 +946,13 @@ ruby << EOF > > end > > end > > > > + module URI > > + class MsgID < Generic > > + end > > + > > + @@schemes['ID'] = MsgID > > + end > > + > > class Message > > attr_accessor :start, :body_start, :end > > attr_reader :message_id, :filename, :mail > > ___ > > notmuch mailing list > > notmuch at notmuchmail.org > > http://notmuchmail.org/mailman/listinfo/notmuch
Re: [PATCH] VIM: Add URI handling
Tomi Ollila wrote: > On Fri, Oct 17 2014, Franz Fellner wrote: > > > On Wed, 15 Oct 2014 12:33:55 -0700, Ian Main wrote: > >> Franz Fellner wrote: > >> > Here is a working implementation. > >> > Please review carefully as I only can simulate ruby and vimscript > >> > knowledge from what I see in notmuch.vim sourcefile and quick > >> > googling. > >> > >> Yes, this works nicely. Thanks! > >> > >> I do notice however that this is against the github plugin repo (I think)? > > Yes, that's right. > > I forked the notmuch repo on github and incorporated your patches. > > Already made a mistake while applying one of your patches... > > https://github.com/ff2000/notmuch > > (Hope everythin is fine now) > > > > commit cb757e9e438341a7bc6d2cfec4de7bdcc85946ea > > Author: Franz Fellner > > Date: Fri Oct 17 11:19:41 2014 +0200 > > > > VIM: Add MsgID to supported URIs > > Code-wise this patch looks good -- although I am not entirely sure what id > does -- I expect it to handle id:... links... Yes, that's what it should do. > This email applies with git am (on top of Ian's) but the commit message has > quite a few lines of cruft -- I'd like to see a commit message what > explains what this change do ( the term 'MsgID' seems to be some vim client > internal (subclass in URI class ?) which IMO should be better commented in > this commit message. MsgID was just a short name for message-id, and I am used to CamelCase... VIM: Add support to open messages specified by their message-id in notmuch-show. Does that make more sense? > Tomi > > > > > diff --git a/vim/notmuch.vim b/vim/notmuch.vim > > index 6287cf6..30e1876 100644 > > --- a/vim/notmuch.vim > > +++ b/vim/notmuch.vim > > @@ -268,6 +268,14 @@ ruby << EOF > > if uri.class == URI::MailTo > > vim_puts("Composing new email to #{uri.to}.") > > VIM::command("call s:compose('#{uri.to}')") > > + elsif uri.class == URI::MsgID > > + msg = $curbuf.message(uri.opaque) > > + if !msg > > + vim_puts("Message not found in NotMuch > > database: #{uri.to_s}") > > + else > > + vim_puts("Opening message #{msg.message_id} in > > thread #{msg.thread_id}.") > > + VIM::command("call > > s:show('thread:#{msg.thread_id}', '#{msg.message_id}')") > > + end > > else > > vim_puts("Opening #{uri.to_s}.") > > cmd = VIM::evaluate('g:notmuch_open_uri') > > @@ -428,11 +436,12 @@ endfunction > > > > "" main > > > > -function! s:show(thread_id) > > +function! s:show(thread_id, msg_id) > > call s:new_buffer('show') > > setlocal modifiable > > ruby << EOF > > thread_id = VIM::evaluate('a:thread_id') > > + msg_id = VIM::evaluate('a:msg_id') > > $cur_thread = thread_id > > $messages.clear > > $curbuf.render do |b| > > @@ -464,6 +473,9 @@ ruby << EOF > > end > > b << "" > > nm_m.end = b.count > > + if !msg_id.empty? and nm_m.message_id == msg_id > > + VIM::command("normal #{nm_m.start}zt") > > + end > > end > > b.delete(b.count) > > end > > @@ -486,7 +498,7 @@ ruby << EOF > > when 1; $cur_filter = nil > > when 2; $cur_filter = $cur_search > > end > > - VIM::command("call s:show('#{id}')") > > + VIM::command("call s:show('#{id}', '')") > > EOF > > endfunction > > > > @@ -910,6 +922,10 @@ ruby << EOF > > q > > end > > > > + def message(id) > > + @db.find_message(id) > > + end > > + > > def close > > @queries.delete_if { |q| ! q.destroy! } > > @db.close > > @@ -930,6 +946,13 @@ ruby << EOF > > end > > end > > > > + module URI > > + class MsgID < Generic > > + end > > + > > + @@schemes['ID'] = MsgID > > + end > > + > > class Message > > attr_accessor :start, :body_start, :end > > attr_reader :message_id, :filename, :mail > > ___ > > 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] VIM: Add URI handling
On Fri, Oct 17 2014, Franz Fellner wrote: > On Wed, 15 Oct 2014 12:33:55 -0700, Ian Main wrote: >> Franz Fellner wrote: >> > Here is a working implementation. >> > Please review carefully as I only can simulate ruby and vimscript >> > knowledge from what I see in notmuch.vim sourcefile and quick >> > googling. >> >> Yes, this works nicely. Thanks! >> >> I do notice however that this is against the github plugin repo (I think)? > Yes, that's right. > I forked the notmuch repo on github and incorporated your patches. > Already made a mistake while applying one of your patches... > https://github.com/ff2000/notmuch > (Hope everythin is fine now) > > commit cb757e9e438341a7bc6d2cfec4de7bdcc85946ea > Author: Franz Fellner > Date: Fri Oct 17 11:19:41 2014 +0200 > > VIM: Add MsgID to supported URIs Code-wise this patch looks good -- although I am not entirely sure what id does -- I expect it to handle id:... links... This email applies with git am (on top of Ian's) but the commit message has quite a few lines of cruft -- I'd like to see a commit message what explains what this change do ( the term 'MsgID' seems to be some vim client internal (subclass in URI class ?) which IMO should be better commented in this commit message. Tomi > > diff --git a/vim/notmuch.vim b/vim/notmuch.vim > index 6287cf6..30e1876 100644 > --- a/vim/notmuch.vim > +++ b/vim/notmuch.vim > @@ -268,6 +268,14 @@ ruby << EOF > if uri.class == URI::MailTo > vim_puts("Composing new email to #{uri.to}.") > VIM::command("call s:compose('#{uri.to}')") > + elsif uri.class == URI::MsgID > + msg = $curbuf.message(uri.opaque) > + if !msg > + vim_puts("Message not found in NotMuch > database: #{uri.to_s}") > + else > + vim_puts("Opening message #{msg.message_id} in > thread #{msg.thread_id}.") > + VIM::command("call > s:show('thread:#{msg.thread_id}', '#{msg.message_id}')") > + end > else > vim_puts("Opening #{uri.to_s}.") > cmd = VIM::evaluate('g:notmuch_open_uri') > @@ -428,11 +436,12 @@ endfunction > > "" main > > -function! s:show(thread_id) > +function! s:show(thread_id, msg_id) > call s:new_buffer('show') > setlocal modifiable > ruby << EOF > thread_id = VIM::evaluate('a:thread_id') > + msg_id = VIM::evaluate('a:msg_id') > $cur_thread = thread_id > $messages.clear > $curbuf.render do |b| > @@ -464,6 +473,9 @@ ruby << EOF > end > b << "" > nm_m.end = b.count > + if !msg_id.empty? and nm_m.message_id == msg_id > + VIM::command("normal #{nm_m.start}zt") > + end > end > b.delete(b.count) > end > @@ -486,7 +498,7 @@ ruby << EOF > when 1; $cur_filter = nil > when 2; $cur_filter = $cur_search > end > - VIM::command("call s:show('#{id}')") > + VIM::command("call s:show('#{id}', '')") > EOF > endfunction > > @@ -910,6 +922,10 @@ ruby << EOF > q > end > > + def message(id) > + @db.find_message(id) > + end > + > def close > @queries.delete_if { |q| ! q.destroy! } > @db.close > @@ -930,6 +946,13 @@ ruby << EOF > end > end > > + module URI > + class MsgID < Generic > + end > + > + @@schemes['ID'] = MsgID > + end > + > class Message > attr_accessor :start, :body_start, :end > attr_reader :message_id, :filename, :mail > ___ > 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] VIM: Add URI handling
On Thu, Oct 02 2014, Ian Main wrote: > This patch adds URI handling to the vim client. You can now press > 'u' by default and the client will parse the current line and find > any URIs available. If there are more than one it opens the one > under the cursor or else it opens the only one available. It also > supports mailto: URI's and will compose a new message when activated. > > By default xdg-open is used for everything but mailto: which generally > does the right thing afaict. This patch LGTM. > > Ian Tomi > --- > vim/notmuch.txt | 1 + > vim/notmuch.vim | 59 > ++--- > 2 files changed, 53 insertions(+), 7 deletions(-) > > diff --git a/vim/notmuch.txt b/vim/notmuch.txt > index 4374102..d336406 100644 > --- a/vim/notmuch.txt > +++ b/vim/notmuch.txt > @@ -72,6 +72,7 @@ q Quit view > AArchive (-inbox -unread) > IMark as read (-unread) > tTag (prompted) > +uOpen URI > sSearch > pSave patches > rReply > diff --git a/vim/notmuch.vim b/vim/notmuch.vim > index 331e930..de82bb9 100644 > --- a/vim/notmuch.vim > +++ b/vim/notmuch.vim > @@ -12,7 +12,7 @@ let g:notmuch_folders_maps = { > \ '':'folders_show_search()', > \ 's': 'folders_search_prompt()', > \ '=': 'folders_refresh()', > - \ 'c': 'compose()', > + \ 'c': 'compose("")', > \ } > > let g:notmuch_search_maps = { > @@ -25,7 +25,7 @@ let g:notmuch_search_maps = { > \ 's': 'search_search_prompt()', > \ '=': 'search_refresh()', > \ '?': 'search_info()', > - \ 'c': 'compose()', > + \ 'c': 'compose("")', > \ } > > let g:notmuch_show_maps = { > @@ -37,10 +37,11 @@ let g:notmuch_show_maps = { > \ 'e': 'show_extract_msg()', > \ 's': 'show_save_msg()', > \ 'p': 'show_save_patches()', > + \ 'u': 'show_open_uri()', > \ 'r': 'show_reply()', > \ '?': 'show_info()', > \ '': 'show_next_msg()', > - \ 'c': 'compose()', > + \ 'c': 'compose("")', > \ } > > let g:notmuch_compose_maps = { > @@ -59,6 +60,7 @@ let s:notmuch_datetime_format_default = '%d.%m.%y %H:%M:%S' > let s:notmuch_reader_default = 'mutt -f %s' > let s:notmuch_sendmail_default = 'sendmail' > let s:notmuch_folders_count_threads_default = 0 > +let s:notmuch_open_uri_default = 'xdg-open' > > function! s:new_file_buffer(type, fname) > exec printf('edit %s', a:fname) > @@ -135,8 +137,8 @@ function! s:show_reply() > startinsert! > endfunction > > -function! s:compose() > - ruby open_compose > +function! s:compose(to_email) > + ruby open_compose(VIM::evaluate('a:to_email')) > let b:compose_done = 0 > call s:set_map(g:notmuch_compose_maps) > autocmd BufDelete call s:on_compose_delete() > @@ -159,6 +161,45 @@ ruby << EOF > EOF > endfunction > > +function! s:show_open_uri() > + let line = getline(".") > + let pos = getpos(".") > + let col = pos[2] > +ruby << EOF > + m = get_message > + line = VIM::evaluate('line') > + col = VIM::evaluate('col') - 1 > + uris = URI.extract(line) > + wanted_uri = nil > + if uris.length == 1 > + wanted_uri = uris[0] > + else > + uris.each do |uri| > + # Check to see the URI is at the present cursor location > + idx = line.index(uri) > + if col >= idx and col <= idx + uri.length > + wanted_uri = uri > + break > + end > + end > + end > + > + if wanted_uri > + uri = URI.parse(wanted_uri) > + if uri.class == URI::MailTo > + vim_puts("Composing new email to #{uri.to}.") > + VIM::command("call s:compose('#{uri.to}')") > + else > + vim_puts("Opening #{uri.to_s}.") > + cmd = VIM::evaluate('g:notmuch_open_uri') > + system(cmd, uri.to_s) > + end > + else > + vim_puts('URI not found.') > + end > +EOF > +endfunction > + > function! s:show_open_msg() > ruby << EOF > m = get_message > @@ -404,6 +445,10 @@ function! s:set_defaults() > endif > endif > > + if !exists('g:notmuch_open_uri') > + let g:notmuch_open_uri = s:notmuch_open_uri_default > + endif > + > if !exists('g:notmuch_reader') > if exists('g:notmuch_rb_reader') > let g:notmuch_reader = g:notmuch_rb_reader > @@ -611,11 +656,11 @@ ruby << EOF > open_compose_helper(lines, cur) > end > > - def open_compose() > + def open_compose(to_email) > lines = [] > > lines << "From: #{$email}" >
Re: [PATCH] VIM: Add URI handling
Franz Fellner wrote: > On Wed, 15 Oct 2014 12:33:55 -0700, Ian Main wrote: > > Franz Fellner wrote: > > > Here is a working implementation. > > > Please review carefully as I only can simulate ruby and vimscript > > > knowledge from what I see in notmuch.vim sourcefile and quick > > > googling. > > > > Yes, this works nicely. Thanks! > > > > I do notice however that this is against the github plugin repo (I think)? > Yes, that's right. > I forked the notmuch repo on github and incorporated your patches. > Already made a mistake while applying one of your patches... > https://github.com/ff2000/notmuch > (Hope everythin is fine now) > > commit cb757e9e438341a7bc6d2cfec4de7bdcc85946ea > Author: Franz Fellner > Date: Fri Oct 17 11:19:41 2014 +0200 > > VIM: Add MsgID to supported URIs > > diff --git a/vim/notmuch.vim b/vim/notmuch.vim > index 6287cf6..30e1876 100644 > --- a/vim/notmuch.vim > +++ b/vim/notmuch.vim > @@ -268,6 +268,14 @@ ruby << EOF > if uri.class == URI::MailTo > vim_puts("Composing new email to #{uri.to}.") > VIM::command("call s:compose('#{uri.to}')") > + elsif uri.class == URI::MsgID > + msg = $curbuf.message(uri.opaque) > + if !msg > + vim_puts("Message not found in NotMuch > database: #{uri.to_s}") > + else > + vim_puts("Opening message #{msg.message_id} in > thread #{msg.thread_id}.") > + VIM::command("call > s:show('thread:#{msg.thread_id}', '#{msg.message_id}')") > + end > else > vim_puts("Opening #{uri.to_s}.") > cmd = VIM::evaluate('g:notmuch_open_uri') > @@ -428,11 +436,12 @@ endfunction > > "" main > > -function! s:show(thread_id) > +function! s:show(thread_id, msg_id) > call s:new_buffer('show') > setlocal modifiable > ruby << EOF > thread_id = VIM::evaluate('a:thread_id') > + msg_id = VIM::evaluate('a:msg_id') > $cur_thread = thread_id > $messages.clear > $curbuf.render do |b| > @@ -464,6 +473,9 @@ ruby << EOF > end > b << "" > nm_m.end = b.count > + if !msg_id.empty? and nm_m.message_id == msg_id > + VIM::command("normal #{nm_m.start}zt") > + end > end > b.delete(b.count) > end > @@ -486,7 +498,7 @@ ruby << EOF > when 1; $cur_filter = nil > when 2; $cur_filter = $cur_search > end > - VIM::command("call s:show('#{id}')") > + VIM::command("call s:show('#{id}', '')") > EOF > endfunction > > @@ -910,6 +922,10 @@ ruby << EOF > q > end > > + def message(id) > + @db.find_message(id) > + end > + > def close > @queries.delete_if { |q| ! q.destroy! } > @db.close > @@ -930,6 +946,13 @@ ruby << EOF > end > end > > + module URI > + class MsgID < Generic > + end > + > + @@schemes['ID'] = MsgID > + end > + > class Message > attr_accessor :start, :body_start, :end > attr_reader :message_id, :filename, :mail LGTM! Nice addition. Ian ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
[PATCH] VIM: Add URI handling
Franz Fellner wrote: > On Wed, 15 Oct 2014 12:33:55 -0700, Ian Main wrote: > > Franz Fellner wrote: > > > Here is a working implementation. > > > Please review carefully as I only can simulate ruby and vimscript > > > knowledge from what I see in notmuch.vim sourcefile and quick > > > googling. > > > > Yes, this works nicely. Thanks! > > > > I do notice however that this is against the github plugin repo (I think)? > Yes, that's right. > I forked the notmuch repo on github and incorporated your patches. > Already made a mistake while applying one of your patches... > https://github.com/ff2000/notmuch > (Hope everythin is fine now) > > commit cb757e9e438341a7bc6d2cfec4de7bdcc85946ea > Author: Franz Fellner > Date: Fri Oct 17 11:19:41 2014 +0200 > > VIM: Add MsgID to supported URIs > > diff --git a/vim/notmuch.vim b/vim/notmuch.vim > index 6287cf6..30e1876 100644 > --- a/vim/notmuch.vim > +++ b/vim/notmuch.vim > @@ -268,6 +268,14 @@ ruby << EOF > if uri.class == URI::MailTo > vim_puts("Composing new email to #{uri.to}.") > VIM::command("call s:compose('#{uri.to}')") > + elsif uri.class == URI::MsgID > + msg = $curbuf.message(uri.opaque) > + if !msg > + vim_puts("Message not found in NotMuch > database: #{uri.to_s}") > + else > + vim_puts("Opening message #{msg.message_id} in > thread #{msg.thread_id}.") > + VIM::command("call > s:show('thread:#{msg.thread_id}', '#{msg.message_id}')") > + end > else > vim_puts("Opening #{uri.to_s}.") > cmd = VIM::evaluate('g:notmuch_open_uri') > @@ -428,11 +436,12 @@ endfunction > > "" main > > -function! s:show(thread_id) > +function! s:show(thread_id, msg_id) > call s:new_buffer('show') > setlocal modifiable > ruby << EOF > thread_id = VIM::evaluate('a:thread_id') > + msg_id = VIM::evaluate('a:msg_id') > $cur_thread = thread_id > $messages.clear > $curbuf.render do |b| > @@ -464,6 +473,9 @@ ruby << EOF > end > b << "" > nm_m.end = b.count > + if !msg_id.empty? and nm_m.message_id == msg_id > + VIM::command("normal #{nm_m.start}zt") > + end > end > b.delete(b.count) > end > @@ -486,7 +498,7 @@ ruby << EOF > when 1; $cur_filter = nil > when 2; $cur_filter = $cur_search > end > - VIM::command("call s:show('#{id}')") > + VIM::command("call s:show('#{id}', '')") > EOF > endfunction > > @@ -910,6 +922,10 @@ ruby << EOF > q > end > > + def message(id) > + @db.find_message(id) > + end > + > def close > @queries.delete_if { |q| ! q.destroy! } > @db.close > @@ -930,6 +946,13 @@ ruby << EOF > end > end > > + module URI > + class MsgID < Generic > + end > + > + @@schemes['ID'] = MsgID > + end > + > class Message > attr_accessor :start, :body_start, :end > attr_reader :message_id, :filename, :mail LGTM! Nice addition. Ian
[PATCH] VIM: Add URI handling
On Wed, 15 Oct 2014 12:33:55 -0700, Ian Main wrote: > Franz Fellner wrote: > > Here is a working implementation. > > Please review carefully as I only can simulate ruby and vimscript > > knowledge from what I see in notmuch.vim sourcefile and quick > > googling. > > Yes, this works nicely. Thanks! > > I do notice however that this is against the github plugin repo (I think)? Yes, that's right. I forked the notmuch repo on github and incorporated your patches. Already made a mistake while applying one of your patches... https://github.com/ff2000/notmuch (Hope everythin is fine now) commit cb757e9e438341a7bc6d2cfec4de7bdcc85946ea Author: Franz Fellner Date: Fri Oct 17 11:19:41 2014 +0200 VIM: Add MsgID to supported URIs diff --git a/vim/notmuch.vim b/vim/notmuch.vim index 6287cf6..30e1876 100644 --- a/vim/notmuch.vim +++ b/vim/notmuch.vim @@ -268,6 +268,14 @@ ruby << EOF if uri.class == URI::MailTo vim_puts("Composing new email to #{uri.to}.") VIM::command("call s:compose('#{uri.to}')") + elsif uri.class == URI::MsgID + msg = $curbuf.message(uri.opaque) + if !msg + vim_puts("Message not found in NotMuch database: #{uri.to_s}") + else + vim_puts("Opening message #{msg.message_id} in thread #{msg.thread_id}.") + VIM::command("call s:show('thread:#{msg.thread_id}', '#{msg.message_id}')") + end else vim_puts("Opening #{uri.to_s}.") cmd = VIM::evaluate('g:notmuch_open_uri') @@ -428,11 +436,12 @@ endfunction "" main -function! s:show(thread_id) +function! s:show(thread_id, msg_id) call s:new_buffer('show') setlocal modifiable ruby << EOF thread_id = VIM::evaluate('a:thread_id') + msg_id = VIM::evaluate('a:msg_id') $cur_thread = thread_id $messages.clear $curbuf.render do |b| @@ -464,6 +473,9 @@ ruby << EOF end b << "" nm_m.end = b.count + if !msg_id.empty? and nm_m.message_id == msg_id + VIM::command("normal #{nm_m.start}zt") + end end b.delete(b.count) end @@ -486,7 +498,7 @@ ruby << EOF when 1; $cur_filter = nil when 2; $cur_filter = $cur_search end - VIM::command("call s:show('#{id}')") + VIM::command("call s:show('#{id}', '')") EOF endfunction @@ -910,6 +922,10 @@ ruby << EOF q end + def message(id) + @db.find_message(id) + end + def close @queries.delete_if { |q| ! q.destroy! } @db.close @@ -930,6 +946,13 @@ ruby << EOF end end + module URI + class MsgID < Generic + end + + @@schemes['ID'] = MsgID + end + class Message attr_accessor :start, :body_start, :end attr_reader :message_id, :filename, :mail
Re: [PATCH] VIM: Add URI handling
On Wed, 15 Oct 2014 12:33:55 -0700, Ian Main wrote: > Franz Fellner wrote: > > Here is a working implementation. > > Please review carefully as I only can simulate ruby and vimscript > > knowledge from what I see in notmuch.vim sourcefile and quick > > googling. > > Yes, this works nicely. Thanks! > > I do notice however that this is against the github plugin repo (I think)? Yes, that's right. I forked the notmuch repo on github and incorporated your patches. Already made a mistake while applying one of your patches... https://github.com/ff2000/notmuch (Hope everythin is fine now) commit cb757e9e438341a7bc6d2cfec4de7bdcc85946ea Author: Franz Fellner Date: Fri Oct 17 11:19:41 2014 +0200 VIM: Add MsgID to supported URIs diff --git a/vim/notmuch.vim b/vim/notmuch.vim index 6287cf6..30e1876 100644 --- a/vim/notmuch.vim +++ b/vim/notmuch.vim @@ -268,6 +268,14 @@ ruby << EOF if uri.class == URI::MailTo vim_puts("Composing new email to #{uri.to}.") VIM::command("call s:compose('#{uri.to}')") + elsif uri.class == URI::MsgID + msg = $curbuf.message(uri.opaque) + if !msg + vim_puts("Message not found in NotMuch database: #{uri.to_s}") + else + vim_puts("Opening message #{msg.message_id} in thread #{msg.thread_id}.") + VIM::command("call s:show('thread:#{msg.thread_id}', '#{msg.message_id}')") + end else vim_puts("Opening #{uri.to_s}.") cmd = VIM::evaluate('g:notmuch_open_uri') @@ -428,11 +436,12 @@ endfunction "" main -function! s:show(thread_id) +function! s:show(thread_id, msg_id) call s:new_buffer('show') setlocal modifiable ruby << EOF thread_id = VIM::evaluate('a:thread_id') + msg_id = VIM::evaluate('a:msg_id') $cur_thread = thread_id $messages.clear $curbuf.render do |b| @@ -464,6 +473,9 @@ ruby << EOF end b << "" nm_m.end = b.count + if !msg_id.empty? and nm_m.message_id == msg_id + VIM::command("normal #{nm_m.start}zt") + end end b.delete(b.count) end @@ -486,7 +498,7 @@ ruby << EOF when 1; $cur_filter = nil when 2; $cur_filter = $cur_search end - VIM::command("call s:show('#{id}')") + VIM::command("call s:show('#{id}', '')") EOF endfunction @@ -910,6 +922,10 @@ ruby << EOF q end + def message(id) + @db.find_message(id) + end + def close @queries.delete_if { |q| ! q.destroy! } @db.close @@ -930,6 +946,13 @@ ruby << EOF end end + module URI + class MsgID < Generic + end + + @@schemes['ID'] = MsgID + end + class Message attr_accessor :start, :body_start, :end attr_reader :message_id, :filename, :mail ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
Re: [PATCH] VIM: Add URI handling
Franz Fellner wrote: > Here is a working implementation. > Please review carefully as I only can simulate ruby and vimscript > knowledge from what I see in notmuch.vim sourcefile and quick > googling. Yes, this works nicely. Thanks! I do notice however that this is against the github plugin repo (I think)? I think It'd be nice to have this against the main repo and in its own thread. I can repost it for you if you like as I added it to mine, or you can do it if you prefer. Ian > Regards > Franz > > > diff --git a/plugin/notmuch.vim b/plugin/notmuch.vim > index 567f75c..ef9fefa 100644 > --- a/plugin/notmuch.vim > +++ b/plugin/notmuch.vim > @@ -269,6 +269,14 @@ ruby << EOF > if uri.class == URI::MailTo > vim_puts("Composing new email to #{uri.to}.") > VIM::command("call s:compose('#{uri.to}')") > + elsif uri.class == URI::MsgID > + msg = $curbuf.message(uri.opaque) > + if !msg > + vim_puts("Message not found in NotMuch > database: #{uri.to_s}") > + else > + vim_puts("Opening message #{msg.message_id} in > thread #{msg.thread_id}.") > + VIM::command("call > s:show('thread:#{msg.thread_id}', '#{msg.message_id}')") > + end > else > vim_puts("Opening #{uri.to_s}.") > cmd = VIM::evaluate('g:notmuch_open_uri') > @@ -429,11 +437,12 @@ endfunction > > "" main > > -function! s:show(thread_id) > +function! s:show(thread_id, msg_id) > call s:new_buffer('show') > setlocal modifiable > ruby << EOF > thread_id = VIM::evaluate('a:thread_id') > + msg_id = VIM::evaluate('a:msg_id') > $cur_thread = thread_id > $messages.clear > $curbuf.render do |b| > @@ -465,6 +474,9 @@ ruby << EOF > end > b << "" > nm_m.end = b.count > + if msg_id and nm_m.message_id == msg_id > + VIM::command("normal #{nm_m.start}zt") > + end > end > b.delete(b.count) > end > @@ -487,7 +499,7 @@ ruby << EOF > when 1; $cur_filter = nil > when 2; $cur_filter = $cur_search > end > - VIM::command("call s:show('#{id}')") > + VIM::command("call s:show('#{id}', '')") > EOF > endfunction > > @@ -917,6 +929,10 @@ ruby << EOF > q > end > > + def message(id) > + @db.find_message(id) > + end > + > def close > @queries.delete_if { |q| ! q.destroy! } > @db.close > @@ -937,12 +953,20 @@ ruby << EOF > end > end > > + module URI > + class MsgID < Generic > + end > + > + @@schemes['ID'] = MsgID > + end > + > class Message > attr_accessor :start, :body_start, :end > - attr_reader :message_id, :filename, :mail > + attr_reader :message_id, :thread_id, :filename, :mail > > def initialize(msg, mail) > @message_id = msg.message_id > + @thread_id = msg.thread_id > @filename = msg.filename > @mail = mail > @start = 0 > > On Fri, 10 Oct 2014 11:18:31 -0700, Ian Main wrote: > > Franz Fellner wrote: > > > Works nice. Tested with an https and a mailto URI. > > > But it would be awesome if you could add message id handling, So one > > > could easily navigate to linked messages. I only found emacs client > > > implement this feature. What I read in the docs about ruby URI module > > > it should be fairly easy to add a custom scheme for id. > > > > I'm afraid I'm not sure what you mean by message id handling? It's > > probably something simple but .. :) > > > > Ian ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
[PATCH] VIM: Add URI handling
Franz Fellner wrote: > Here is a working implementation. > Please review carefully as I only can simulate ruby and vimscript > knowledge from what I see in notmuch.vim sourcefile and quick > googling. Yes, this works nicely. Thanks! I do notice however that this is against the github plugin repo (I think)? I think It'd be nice to have this against the main repo and in its own thread. I can repost it for you if you like as I added it to mine, or you can do it if you prefer. Ian > Regards > Franz > > > diff --git a/plugin/notmuch.vim b/plugin/notmuch.vim > index 567f75c..ef9fefa 100644 > --- a/plugin/notmuch.vim > +++ b/plugin/notmuch.vim > @@ -269,6 +269,14 @@ ruby << EOF > if uri.class == URI::MailTo > vim_puts("Composing new email to #{uri.to}.") > VIM::command("call s:compose('#{uri.to}')") > + elsif uri.class == URI::MsgID > + msg = $curbuf.message(uri.opaque) > + if !msg > + vim_puts("Message not found in NotMuch > database: #{uri.to_s}") > + else > + vim_puts("Opening message #{msg.message_id} in > thread #{msg.thread_id}.") > + VIM::command("call > s:show('thread:#{msg.thread_id}', '#{msg.message_id}')") > + end > else > vim_puts("Opening #{uri.to_s}.") > cmd = VIM::evaluate('g:notmuch_open_uri') > @@ -429,11 +437,12 @@ endfunction > > "" main > > -function! s:show(thread_id) > +function! s:show(thread_id, msg_id) > call s:new_buffer('show') > setlocal modifiable > ruby << EOF > thread_id = VIM::evaluate('a:thread_id') > + msg_id = VIM::evaluate('a:msg_id') > $cur_thread = thread_id > $messages.clear > $curbuf.render do |b| > @@ -465,6 +474,9 @@ ruby << EOF > end > b << "" > nm_m.end = b.count > + if msg_id and nm_m.message_id == msg_id > + VIM::command("normal #{nm_m.start}zt") > + end > end > b.delete(b.count) > end > @@ -487,7 +499,7 @@ ruby << EOF > when 1; $cur_filter = nil > when 2; $cur_filter = $cur_search > end > - VIM::command("call s:show('#{id}')") > + VIM::command("call s:show('#{id}', '')") > EOF > endfunction > > @@ -917,6 +929,10 @@ ruby << EOF > q > end > > + def message(id) > + @db.find_message(id) > + end > + > def close > @queries.delete_if { |q| ! q.destroy! } > @db.close > @@ -937,12 +953,20 @@ ruby << EOF > end > end > > + module URI > + class MsgID < Generic > + end > + > + @@schemes['ID'] = MsgID > + end > + > class Message > attr_accessor :start, :body_start, :end > - attr_reader :message_id, :filename, :mail > + attr_reader :message_id, :thread_id, :filename, :mail > > def initialize(msg, mail) > @message_id = msg.message_id > + @thread_id = msg.thread_id > @filename = msg.filename > @mail = mail > @start = 0 > > On Fri, 10 Oct 2014 11:18:31 -0700, Ian Main wrote: > > Franz Fellner wrote: > > > Works nice. Tested with an https and a mailto URI. > > > But it would be awesome if you could add message id handling, So one > > > could easily navigate to linked messages. I only found emacs client > > > implement this feature. What I read in the docs about ruby URI module > > > it should be fairly easy to add a custom scheme for id. > > > > I'm afraid I'm not sure what you mean by message id handling? It's > > probably something simple but .. :) > > > > Ian
[PATCH] VIM: Add URI handling
Here is a working implementation. Please review carefully as I only can simulate ruby and vimscript knowledge from what I see in notmuch.vim sourcefile and quick googling. Regards Franz diff --git a/plugin/notmuch.vim b/plugin/notmuch.vim index 567f75c..ef9fefa 100644 --- a/plugin/notmuch.vim +++ b/plugin/notmuch.vim @@ -269,6 +269,14 @@ ruby << EOF if uri.class == URI::MailTo vim_puts("Composing new email to #{uri.to}.") VIM::command("call s:compose('#{uri.to}')") + elsif uri.class == URI::MsgID + msg = $curbuf.message(uri.opaque) + if !msg + vim_puts("Message not found in NotMuch database: #{uri.to_s}") + else + vim_puts("Opening message #{msg.message_id} in thread #{msg.thread_id}.") + VIM::command("call s:show('thread:#{msg.thread_id}', '#{msg.message_id}')") + end else vim_puts("Opening #{uri.to_s}.") cmd = VIM::evaluate('g:notmuch_open_uri') @@ -429,11 +437,12 @@ endfunction "" main -function! s:show(thread_id) +function! s:show(thread_id, msg_id) call s:new_buffer('show') setlocal modifiable ruby << EOF thread_id = VIM::evaluate('a:thread_id') + msg_id = VIM::evaluate('a:msg_id') $cur_thread = thread_id $messages.clear $curbuf.render do |b| @@ -465,6 +474,9 @@ ruby << EOF end b << "" nm_m.end = b.count + if msg_id and nm_m.message_id == msg_id + VIM::command("normal #{nm_m.start}zt") + end end b.delete(b.count) end @@ -487,7 +499,7 @@ ruby << EOF when 1; $cur_filter = nil when 2; $cur_filter = $cur_search end - VIM::command("call s:show('#{id}')") + VIM::command("call s:show('#{id}', '')") EOF endfunction @@ -917,6 +929,10 @@ ruby << EOF q end + def message(id) + @db.find_message(id) + end + def close @queries.delete_if { |q| ! q.destroy! } @db.close @@ -937,12 +953,20 @@ ruby << EOF end end + module URI + class MsgID < Generic + end + + @@schemes['ID'] = MsgID + end + class Message attr_accessor :start, :body_start, :end - attr_reader :message_id, :filename, :mail + attr_reader :message_id, :thread_id, :filename, :mail def initialize(msg, mail) @message_id = msg.message_id + @thread_id = msg.thread_id @filename = msg.filename @mail = mail @start = 0 On Fri, 10 Oct 2014 11:18:31 -0700, Ian Main wrote: > Franz Fellner wrote: > > Works nice. Tested with an https and a mailto URI. > > But it would be awesome if you could add message id handling, So one > > could easily navigate to linked messages. I only found emacs client > > implement this feature. What I read in the docs about ruby URI module > > it should be fairly easy to add a custom scheme for id. > > I'm afraid I'm not sure what you mean by message id handling? It's > probably something simple but .. :) > > Ian
Re: [PATCH] VIM: Add URI handling
Here is a working implementation. Please review carefully as I only can simulate ruby and vimscript knowledge from what I see in notmuch.vim sourcefile and quick googling. Regards Franz diff --git a/plugin/notmuch.vim b/plugin/notmuch.vim index 567f75c..ef9fefa 100644 --- a/plugin/notmuch.vim +++ b/plugin/notmuch.vim @@ -269,6 +269,14 @@ ruby << EOF if uri.class == URI::MailTo vim_puts("Composing new email to #{uri.to}.") VIM::command("call s:compose('#{uri.to}')") + elsif uri.class == URI::MsgID + msg = $curbuf.message(uri.opaque) + if !msg + vim_puts("Message not found in NotMuch database: #{uri.to_s}") + else + vim_puts("Opening message #{msg.message_id} in thread #{msg.thread_id}.") + VIM::command("call s:show('thread:#{msg.thread_id}', '#{msg.message_id}')") + end else vim_puts("Opening #{uri.to_s}.") cmd = VIM::evaluate('g:notmuch_open_uri') @@ -429,11 +437,12 @@ endfunction "" main -function! s:show(thread_id) +function! s:show(thread_id, msg_id) call s:new_buffer('show') setlocal modifiable ruby << EOF thread_id = VIM::evaluate('a:thread_id') + msg_id = VIM::evaluate('a:msg_id') $cur_thread = thread_id $messages.clear $curbuf.render do |b| @@ -465,6 +474,9 @@ ruby << EOF end b << "" nm_m.end = b.count + if msg_id and nm_m.message_id == msg_id + VIM::command("normal #{nm_m.start}zt") + end end b.delete(b.count) end @@ -487,7 +499,7 @@ ruby << EOF when 1; $cur_filter = nil when 2; $cur_filter = $cur_search end - VIM::command("call s:show('#{id}')") + VIM::command("call s:show('#{id}', '')") EOF endfunction @@ -917,6 +929,10 @@ ruby << EOF q end + def message(id) + @db.find_message(id) + end + def close @queries.delete_if { |q| ! q.destroy! } @db.close @@ -937,12 +953,20 @@ ruby << EOF end end + module URI + class MsgID < Generic + end + + @@schemes['ID'] = MsgID + end + class Message attr_accessor :start, :body_start, :end - attr_reader :message_id, :filename, :mail + attr_reader :message_id, :thread_id, :filename, :mail def initialize(msg, mail) @message_id = msg.message_id + @thread_id = msg.thread_id @filename = msg.filename @mail = mail @start = 0 On Fri, 10 Oct 2014 11:18:31 -0700, Ian Main wrote: > Franz Fellner wrote: > > Works nice. Tested with an https and a mailto URI. > > But it would be awesome if you could add message id handling, So one > > could easily navigate to linked messages. I only found emacs client > > implement this feature. What I read in the docs about ruby URI module > > it should be fairly easy to add a custom scheme for id. > > I'm afraid I'm not sure what you mean by message id handling? It's > probably something simple but .. :) > > Ian ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
[PATCH] VIM: Add URI handling
Works nice. Tested with an https and a mailto URI. But it would be awesome if you could add message id handling, So one could easily navigate to linked messages. I only found emacs client implement this feature. What I read in the docs about ruby URI module it should be fairly easy to add a custom scheme for id. On Thu, 2 Oct 2014 13:23:43 -0700, Ian Main wrote: > This patch adds URI handling to the vim client. You can now press > 'u' by default and the client will parse the current line and find > any URIs available. If there are more than one it opens the one > under the cursor or else it opens the only one available. It also > supports mailto: URI's and will compose a new message when activated. > > By default xdg-open is used for everything but mailto: which generally > does the right thing afaict. > > Ian > --- > vim/notmuch.txt | 1 + > vim/notmuch.vim | 59 > ++--- > 2 files changed, 53 insertions(+), 7 deletions(-) > > diff --git a/vim/notmuch.txt b/vim/notmuch.txt > index 4374102..d336406 100644 > --- a/vim/notmuch.txt > +++ b/vim/notmuch.txt > @@ -72,6 +72,7 @@ q Quit view > AArchive (-inbox -unread) > IMark as read (-unread) > tTag (prompted) > +uOpen URI > sSearch > pSave patches > rReply > diff --git a/vim/notmuch.vim b/vim/notmuch.vim > index 331e930..de82bb9 100644 > --- a/vim/notmuch.vim > +++ b/vim/notmuch.vim > @@ -12,7 +12,7 @@ let g:notmuch_folders_maps = { > \ '':'folders_show_search()', > \ 's': 'folders_search_prompt()', > \ '=': 'folders_refresh()', > - \ 'c': 'compose()', > + \ 'c': 'compose("")', > \ } > > let g:notmuch_search_maps = { > @@ -25,7 +25,7 @@ let g:notmuch_search_maps = { > \ 's': 'search_search_prompt()', > \ '=': 'search_refresh()', > \ '?': 'search_info()', > - \ 'c': 'compose()', > + \ 'c': 'compose("")', > \ } > > let g:notmuch_show_maps = { > @@ -37,10 +37,11 @@ let g:notmuch_show_maps = { > \ 'e': 'show_extract_msg()', > \ 's': 'show_save_msg()', > \ 'p': 'show_save_patches()', > + \ 'u': 'show_open_uri()', > \ 'r': 'show_reply()', > \ '?': 'show_info()', > \ '': 'show_next_msg()', > - \ 'c': 'compose()', > + \ 'c': 'compose("")', > \ } > > let g:notmuch_compose_maps = { > @@ -59,6 +60,7 @@ let s:notmuch_datetime_format_default = '%d.%m.%y %H:%M:%S' > let s:notmuch_reader_default = 'mutt -f %s' > let s:notmuch_sendmail_default = 'sendmail' > let s:notmuch_folders_count_threads_default = 0 > +let s:notmuch_open_uri_default = 'xdg-open' > > function! s:new_file_buffer(type, fname) > exec printf('edit %s', a:fname) > @@ -135,8 +137,8 @@ function! s:show_reply() > startinsert! > endfunction > > -function! s:compose() > - ruby open_compose > +function! s:compose(to_email) > + ruby open_compose(VIM::evaluate('a:to_email')) > let b:compose_done = 0 > call s:set_map(g:notmuch_compose_maps) > autocmd BufDelete call s:on_compose_delete() > @@ -159,6 +161,45 @@ ruby << EOF > EOF > endfunction > > +function! s:show_open_uri() > + let line = getline(".") > + let pos = getpos(".") > + let col = pos[2] > +ruby << EOF > + m = get_message > + line = VIM::evaluate('line') > + col = VIM::evaluate('col') - 1 > + uris = URI.extract(line) > + wanted_uri = nil > + if uris.length == 1 > + wanted_uri = uris[0] > + else > + uris.each do |uri| > + # Check to see the URI is at the present cursor location > + idx = line.index(uri) > + if col >= idx and col <= idx + uri.length > + wanted_uri = uri > + break > + end > + end > + end > + > + if wanted_uri > + uri = URI.parse(wanted_uri) > + if uri.class == URI::MailTo > + vim_puts("Composing new email to #{uri.to}.") > + VIM::command("call s:compose('#{uri.to}')") > + else > + vim_puts("Opening #{uri.to_s}.") > + cmd = VIM::evaluate('g:notmuch_open_uri') > + system(cmd, uri.to_s) > + end > + else > + vim_puts('URI not found.') > + end > +EOF > +endfunction > + > function! s:show_open_msg() > ruby << EOF > m = get_message > @@ -404,6 +445,10 @@ function! s:set_defaults() > endif > endif > > + if !exists('g:notmuch_open_uri') > + let g:notmuch_open_uri = s:notmuch_open_uri_default > + endif > + > if !exists('g:notmuch_reader') > if exists('g:notmuch_rb_reader'
Re: [PATCH] VIM: Add URI handling
Franz Fellner wrote: > Works nice. Tested with an https and a mailto URI. > But it would be awesome if you could add message id handling, So one > could easily navigate to linked messages. I only found emacs client > implement this feature. What I read in the docs about ruby URI module > it should be fairly easy to add a custom scheme for id. I'm afraid I'm not sure what you mean by message id handling? It's probably something simple but .. :) Ian ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
[PATCH] VIM: Add URI handling
Franz Fellner wrote: > Works nice. Tested with an https and a mailto URI. > But it would be awesome if you could add message id handling, So one > could easily navigate to linked messages. I only found emacs client > implement this feature. What I read in the docs about ruby URI module > it should be fairly easy to add a custom scheme for id. I'm afraid I'm not sure what you mean by message id handling? It's probably something simple but .. :) Ian
Re: [PATCH] VIM: Add URI handling
Works nice. Tested with an https and a mailto URI. But it would be awesome if you could add message id handling, So one could easily navigate to linked messages. I only found emacs client implement this feature. What I read in the docs about ruby URI module it should be fairly easy to add a custom scheme for id. On Thu, 2 Oct 2014 13:23:43 -0700, Ian Main wrote: > This patch adds URI handling to the vim client. You can now press > 'u' by default and the client will parse the current line and find > any URIs available. If there are more than one it opens the one > under the cursor or else it opens the only one available. It also > supports mailto: URI's and will compose a new message when activated. > > By default xdg-open is used for everything but mailto: which generally > does the right thing afaict. > > Ian > --- > vim/notmuch.txt | 1 + > vim/notmuch.vim | 59 > ++--- > 2 files changed, 53 insertions(+), 7 deletions(-) > > diff --git a/vim/notmuch.txt b/vim/notmuch.txt > index 4374102..d336406 100644 > --- a/vim/notmuch.txt > +++ b/vim/notmuch.txt > @@ -72,6 +72,7 @@ q Quit view > AArchive (-inbox -unread) > IMark as read (-unread) > tTag (prompted) > +uOpen URI > sSearch > pSave patches > rReply > diff --git a/vim/notmuch.vim b/vim/notmuch.vim > index 331e930..de82bb9 100644 > --- a/vim/notmuch.vim > +++ b/vim/notmuch.vim > @@ -12,7 +12,7 @@ let g:notmuch_folders_maps = { > \ '':'folders_show_search()', > \ 's': 'folders_search_prompt()', > \ '=': 'folders_refresh()', > - \ 'c': 'compose()', > + \ 'c': 'compose("")', > \ } > > let g:notmuch_search_maps = { > @@ -25,7 +25,7 @@ let g:notmuch_search_maps = { > \ 's': 'search_search_prompt()', > \ '=': 'search_refresh()', > \ '?': 'search_info()', > - \ 'c': 'compose()', > + \ 'c': 'compose("")', > \ } > > let g:notmuch_show_maps = { > @@ -37,10 +37,11 @@ let g:notmuch_show_maps = { > \ 'e': 'show_extract_msg()', > \ 's': 'show_save_msg()', > \ 'p': 'show_save_patches()', > + \ 'u': 'show_open_uri()', > \ 'r': 'show_reply()', > \ '?': 'show_info()', > \ '': 'show_next_msg()', > - \ 'c': 'compose()', > + \ 'c': 'compose("")', > \ } > > let g:notmuch_compose_maps = { > @@ -59,6 +60,7 @@ let s:notmuch_datetime_format_default = '%d.%m.%y %H:%M:%S' > let s:notmuch_reader_default = 'mutt -f %s' > let s:notmuch_sendmail_default = 'sendmail' > let s:notmuch_folders_count_threads_default = 0 > +let s:notmuch_open_uri_default = 'xdg-open' > > function! s:new_file_buffer(type, fname) > exec printf('edit %s', a:fname) > @@ -135,8 +137,8 @@ function! s:show_reply() > startinsert! > endfunction > > -function! s:compose() > - ruby open_compose > +function! s:compose(to_email) > + ruby open_compose(VIM::evaluate('a:to_email')) > let b:compose_done = 0 > call s:set_map(g:notmuch_compose_maps) > autocmd BufDelete call s:on_compose_delete() > @@ -159,6 +161,45 @@ ruby << EOF > EOF > endfunction > > +function! s:show_open_uri() > + let line = getline(".") > + let pos = getpos(".") > + let col = pos[2] > +ruby << EOF > + m = get_message > + line = VIM::evaluate('line') > + col = VIM::evaluate('col') - 1 > + uris = URI.extract(line) > + wanted_uri = nil > + if uris.length == 1 > + wanted_uri = uris[0] > + else > + uris.each do |uri| > + # Check to see the URI is at the present cursor location > + idx = line.index(uri) > + if col >= idx and col <= idx + uri.length > + wanted_uri = uri > + break > + end > + end > + end > + > + if wanted_uri > + uri = URI.parse(wanted_uri) > + if uri.class == URI::MailTo > + vim_puts("Composing new email to #{uri.to}.") > + VIM::command("call s:compose('#{uri.to}')") > + else > + vim_puts("Opening #{uri.to_s}.") > + cmd = VIM::evaluate('g:notmuch_open_uri') > + system(cmd, uri.to_s) > + end > + else > + vim_puts('URI not found.') > + end > +EOF > +endfunction > + > function! s:show_open_msg() > ruby << EOF > m = get_message > @@ -404,6 +445,10 @@ function! s:set_defaults() > endif > endif > > + if !exists('g:notmuch_open_uri') > + let g:notmuch_open_uri = s:notmuch_open_uri_default > + endif > + > if !exists('g:notmuch_reader') > if exists('g:notmuch_rb_reader'
[PATCH] VIM: Add URI handling
This patch adds URI handling to the vim client. You can now press 'u' by default and the client will parse the current line and find any URIs available. If there are more than one it opens the one under the cursor or else it opens the only one available. It also supports mailto: URI's and will compose a new message when activated. By default xdg-open is used for everything but mailto: which generally does the right thing afaict. Ian --- vim/notmuch.txt | 1 + vim/notmuch.vim | 59 ++--- 2 files changed, 53 insertions(+), 7 deletions(-) diff --git a/vim/notmuch.txt b/vim/notmuch.txt index 4374102..d336406 100644 --- a/vim/notmuch.txt +++ b/vim/notmuch.txt @@ -72,6 +72,7 @@ q Quit view A Archive (-inbox -unread) I Mark as read (-unread) t Tag (prompted) +u Open URI s Search p Save patches r Reply diff --git a/vim/notmuch.vim b/vim/notmuch.vim index 331e930..de82bb9 100644 --- a/vim/notmuch.vim +++ b/vim/notmuch.vim @@ -12,7 +12,7 @@ let g:notmuch_folders_maps = { \ '':'folders_show_search()', \ 's': 'folders_search_prompt()', \ '=': 'folders_refresh()', - \ 'c': 'compose()', + \ 'c': 'compose("")', \ } let g:notmuch_search_maps = { @@ -25,7 +25,7 @@ let g:notmuch_search_maps = { \ 's': 'search_search_prompt()', \ '=': 'search_refresh()', \ '?': 'search_info()', - \ 'c': 'compose()', + \ 'c': 'compose("")', \ } let g:notmuch_show_maps = { @@ -37,10 +37,11 @@ let g:notmuch_show_maps = { \ 'e': 'show_extract_msg()', \ 's': 'show_save_msg()', \ 'p': 'show_save_patches()', + \ 'u': 'show_open_uri()', \ 'r': 'show_reply()', \ '?': 'show_info()', \ '': 'show_next_msg()', - \ 'c': 'compose()', + \ 'c': 'compose("")', \ } let g:notmuch_compose_maps = { @@ -59,6 +60,7 @@ let s:notmuch_datetime_format_default = '%d.%m.%y %H:%M:%S' let s:notmuch_reader_default = 'mutt -f %s' let s:notmuch_sendmail_default = 'sendmail' let s:notmuch_folders_count_threads_default = 0 +let s:notmuch_open_uri_default = 'xdg-open' function! s:new_file_buffer(type, fname) exec printf('edit %s', a:fname) @@ -135,8 +137,8 @@ function! s:show_reply() startinsert! endfunction -function! s:compose() - ruby open_compose +function! s:compose(to_email) + ruby open_compose(VIM::evaluate('a:to_email')) let b:compose_done = 0 call s:set_map(g:notmuch_compose_maps) autocmd BufDelete call s:on_compose_delete() @@ -159,6 +161,45 @@ ruby << EOF EOF endfunction +function! s:show_open_uri() + let line = getline(".") + let pos = getpos(".") + let col = pos[2] +ruby << EOF + m = get_message + line = VIM::evaluate('line') + col = VIM::evaluate('col') - 1 + uris = URI.extract(line) + wanted_uri = nil + if uris.length == 1 + wanted_uri = uris[0] + else + uris.each do |uri| + # Check to see the URI is at the present cursor location + idx = line.index(uri) + if col >= idx and col <= idx + uri.length + wanted_uri = uri + break + end + end + end + + if wanted_uri + uri = URI.parse(wanted_uri) + if uri.class == URI::MailTo + vim_puts("Composing new email to #{uri.to}.") + VIM::command("call s:compose('#{uri.to}')") + else + vim_puts("Opening #{uri.to_s}.") + cmd = VIM::evaluate('g:notmuch_open_uri') + system(cmd, uri.to_s) + end + else + vim_puts('URI not found.') + end +EOF +endfunction + function! s:show_open_msg() ruby << EOF m = get_message @@ -404,6 +445,10 @@ function! s:set_defaults() endif endif + if !exists('g:notmuch_open_uri') + let g:notmuch_open_uri = s:notmuch_open_uri_default + endif + if !exists('g:notmuch_reader') if exists('g:notmuch_rb_reader') let g:notmuch_reader = g:notmuch_rb_reader @@ -611,11 +656,11 @@ ruby << EOF open_compose_helper(lines, cur) end - def open_compose() + def open_compose(to_email) lines = [] lines << "From: #{$email}" - lines << "To: " + lines << "To: #{to_email}" cur = lines.count lines << "Cc: " -- 1.9.3
[PATCH] VIM: Add URI handling
This patch adds URI handling to the vim client. You can now press 'u' by default and the client will parse the current line and find any URIs available. If there are more than one it opens the one under the cursor or else it opens the only one available. It also supports mailto: URI's and will compose a new message when activated. By default xdg-open is used for everything but mailto: which generally does the right thing afaict. Ian --- vim/notmuch.txt | 1 + vim/notmuch.vim | 59 ++--- 2 files changed, 53 insertions(+), 7 deletions(-) diff --git a/vim/notmuch.txt b/vim/notmuch.txt index 4374102..d336406 100644 --- a/vim/notmuch.txt +++ b/vim/notmuch.txt @@ -72,6 +72,7 @@ q Quit view A Archive (-inbox -unread) I Mark as read (-unread) t Tag (prompted) +u Open URI s Search p Save patches r Reply diff --git a/vim/notmuch.vim b/vim/notmuch.vim index 331e930..de82bb9 100644 --- a/vim/notmuch.vim +++ b/vim/notmuch.vim @@ -12,7 +12,7 @@ let g:notmuch_folders_maps = { \ '':'folders_show_search()', \ 's': 'folders_search_prompt()', \ '=': 'folders_refresh()', - \ 'c': 'compose()', + \ 'c': 'compose("")', \ } let g:notmuch_search_maps = { @@ -25,7 +25,7 @@ let g:notmuch_search_maps = { \ 's': 'search_search_prompt()', \ '=': 'search_refresh()', \ '?': 'search_info()', - \ 'c': 'compose()', + \ 'c': 'compose("")', \ } let g:notmuch_show_maps = { @@ -37,10 +37,11 @@ let g:notmuch_show_maps = { \ 'e': 'show_extract_msg()', \ 's': 'show_save_msg()', \ 'p': 'show_save_patches()', + \ 'u': 'show_open_uri()', \ 'r': 'show_reply()', \ '?': 'show_info()', \ '': 'show_next_msg()', - \ 'c': 'compose()', + \ 'c': 'compose("")', \ } let g:notmuch_compose_maps = { @@ -59,6 +60,7 @@ let s:notmuch_datetime_format_default = '%d.%m.%y %H:%M:%S' let s:notmuch_reader_default = 'mutt -f %s' let s:notmuch_sendmail_default = 'sendmail' let s:notmuch_folders_count_threads_default = 0 +let s:notmuch_open_uri_default = 'xdg-open' function! s:new_file_buffer(type, fname) exec printf('edit %s', a:fname) @@ -135,8 +137,8 @@ function! s:show_reply() startinsert! endfunction -function! s:compose() - ruby open_compose +function! s:compose(to_email) + ruby open_compose(VIM::evaluate('a:to_email')) let b:compose_done = 0 call s:set_map(g:notmuch_compose_maps) autocmd BufDelete call s:on_compose_delete() @@ -159,6 +161,45 @@ ruby << EOF EOF endfunction +function! s:show_open_uri() + let line = getline(".") + let pos = getpos(".") + let col = pos[2] +ruby << EOF + m = get_message + line = VIM::evaluate('line') + col = VIM::evaluate('col') - 1 + uris = URI.extract(line) + wanted_uri = nil + if uris.length == 1 + wanted_uri = uris[0] + else + uris.each do |uri| + # Check to see the URI is at the present cursor location + idx = line.index(uri) + if col >= idx and col <= idx + uri.length + wanted_uri = uri + break + end + end + end + + if wanted_uri + uri = URI.parse(wanted_uri) + if uri.class == URI::MailTo + vim_puts("Composing new email to #{uri.to}.") + VIM::command("call s:compose('#{uri.to}')") + else + vim_puts("Opening #{uri.to_s}.") + cmd = VIM::evaluate('g:notmuch_open_uri') + system(cmd, uri.to_s) + end + else + vim_puts('URI not found.') + end +EOF +endfunction + function! s:show_open_msg() ruby << EOF m = get_message @@ -404,6 +445,10 @@ function! s:set_defaults() endif endif + if !exists('g:notmuch_open_uri') + let g:notmuch_open_uri = s:notmuch_open_uri_default + endif + if !exists('g:notmuch_reader') if exists('g:notmuch_rb_reader') let g:notmuch_reader = g:notmuch_rb_reader @@ -611,11 +656,11 @@ ruby << EOF open_compose_helper(lines, cur) end - def open_compose() + def open_compose(to_email) lines = [] lines << "From: #{$email}" - lines << "To: " + lines << "To: #{to_email}" cur = lines.count lines << "Cc: " -- 1.9.3