[PATCH] VIM: Add URI handling

2014-10-21 Thread Tomi Ollila
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

2014-10-21 Thread Tomi Ollila
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

2014-10-20 Thread Tomi Ollila
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

2014-10-20 Thread Tomi Ollila
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

2014-10-20 Thread Franz Fellner
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

2014-10-20 Thread Franz Fellner
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

2014-10-20 Thread Tomi Ollila
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

2014-10-20 Thread Tomi Ollila
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

2014-10-20 Thread Ian Main
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

2014-10-20 Thread Ian Main
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

2014-10-17 Thread Franz Fellner
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

2014-10-17 Thread Franz Fellner
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

2014-10-15 Thread Ian Main
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

2014-10-15 Thread Ian Main
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

2014-10-11 Thread Franz Fellner
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

2014-10-11 Thread Franz Fellner
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

2014-10-10 Thread Franz Fellner
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

2014-10-10 Thread Ian Main
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

2014-10-10 Thread Ian Main
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

2014-10-10 Thread Franz Fellner
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

2014-10-02 Thread Ian Main
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

2014-10-02 Thread Ian Main
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