[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 alpine.art...@gmail.com 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




[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



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 im...@stemwinder.org 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 alpine.art...@gmail.com
 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


Re: [PATCH] VIM: Add URI handling

2014-10-20 Thread Tomi Ollila
On Thu, Oct 02 2014, Ian Main im...@stemwinder.org 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 = {
   \ 'Enter':'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()',
   \ 'Tab':  '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 buffer 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

 

Re: [PATCH] VIM: Add URI handling

2014-10-20 Thread Tomi Ollila
On Fri, Oct 17 2014, Franz Fellner alpine.art...@gmail.com wrote:

 On Wed, 15 Oct 2014 12:33:55 -0700, Ian Main im...@stemwinder.org 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 alpine.art...@gmail.com
 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 Franz Fellner
Tomi Ollila wrote:
 On Fri, Oct 17 2014, Franz Fellner alpine.art...@gmail.com wrote:
 
  On Wed, 15 Oct 2014 12:33:55 -0700, Ian Main im...@stemwinder.org 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 alpine.art...@gmail.com
  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


[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 im...@stemwinder.org 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 alpine.art...@gmail.com
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


[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




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 im...@stemwinder.org 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-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 im...@stemwinder.org 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 

[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 im...@stemwinder.org 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 = {
   \ 'Enter':'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()',
   \ 'Tab':  '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 buffer 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
   

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-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