aboutsummaryrefslogtreecommitdiffhomepage
path: root/vim
diff options
context:
space:
mode:
authorGravatar Bart Trojanowski <bart@jukie.net>2009-11-21 22:24:54 -0500
committerGravatar Bart Trojanowski <bart@jukie.net>2009-11-25 00:48:53 -0500
commit33c896dd717b73dda48b0e4543aaf4376c57c44a (patch)
tree8f5f31182384eb8370ed9f627cba9b7c9bdfb8e2 /vim
parent9e3cc68875602c72109c2e27ba07a193865560fd (diff)
add notmuch-folders support mode
Diffstat (limited to 'vim')
-rw-r--r--vim/README9
-rw-r--r--vim/plugin/notmuch.vim105
-rw-r--r--vim/syntax/notmuch-folders.vim12
3 files changed, 117 insertions, 9 deletions
diff --git a/vim/README b/vim/README
index 20779994..e4ad4eaa 100644
--- a/vim/README
+++ b/vim/README
@@ -13,6 +13,12 @@ To run:
:NotMuch
Buffer types:
+ [notmuch-folders]
+ Folder list, or technically a list of saved searches.
+
+ Keybindings:
+ <Enter> - show the selected search
+
[notmuch-search]
You are presented with the search results when you run :NotMuch.
@@ -23,7 +29,8 @@ Buffer types:
o - toggle search screen order
s - enter search criteria
S - alter search criteria
- f - filter the current search terms with tags
+ t - filter the current search terms with tags
+ q - return to folder display, or undo filter
+ - add tag(s) to selected message
- - remove tag(s) from selected message
= - refresh display
diff --git a/vim/plugin/notmuch.vim b/vim/plugin/notmuch.vim
index dfa4c432..f134e652 100644
--- a/vim/plugin/notmuch.vim
+++ b/vim/plugin/notmuch.vim
@@ -69,8 +69,26 @@ let s:notmuch_show_headers_defaults = [
\ 'Date',
\ ]
+" defaults for g:notmuch_folders
+" override with: let g:notmuch_folders = [ ... ]
+let s:notmuch_folders_defaults = [
+ \ [ 'new', 'tag:inbox and tag:unread' ],
+ \ [ 'inbox', 'tag:inbox' ],
+ \ [ 'unread', 'tag:unread' ],
+ \ ]
+
" --- keyboard mapping definitions {{{1
+" --- --- bindings for folders mode {{{2
+
+let g:notmuch_folders_maps = {
+ \ 's': ':call <SID>NM_folders_notmuch_search()<CR>',
+ \ 'q': ':call <SID>NM_kill_this_buffer()<CR>',
+ \ '<': ':call <SID>NM_folders_beginning_of_buffer()<CR>',
+ \ '=': ':call <SID>NM_folders_refresh_view()<CR>',
+ \ '<Enter>': ':call <SID>NM_folders_show_search()<CR>',
+ \ }
+
" --- --- bindings for search screen {{{2
let g:notmuch_search_maps = {
\ '<Enter>': ':call <SID>NM_search_show_thread()<CR>',
@@ -113,6 +131,66 @@ let g:notmuch_show_maps = {
\ }
+" --- implement folders screen {{{1
+
+function! s:NM_cmd_folders(words)
+ if len(a:words)
+ echoe 'Not exapecting any arguments for folders command.'
+ endif
+ let cmd = ['count']
+ let disp = []
+ let searches = []
+ for entry in g:notmuch_folders
+ let [ name, search ] = entry
+ let data = s:NM_run(cmd + [search])
+ let cnt = matchlist(data, '\(\d\+\)')[1]
+ call add(disp, printf('%9d %-20s (%s)', cnt, name, search))
+ call add(searches, search)
+ endfor
+
+ call <SID>NM_newBuffer('folders', join(disp, "\n"))
+ let b:nm_searches = searches
+ let b:nm_timestamp = reltime()
+
+ call <SID>NM_cmd_folders_mksyntax()
+ call <SID>NM_set_map(g:notmuch_folders_maps)
+ setlocal cursorline
+ setlocal nowrap
+endfunction
+
+function! s:NM_cmd_folders_mksyntax()
+endfunction
+
+" --- --- folders screen action functions {{{2
+
+function! s:NM_folders_notmuch_search()
+ echo 'not implemented'
+endfunction
+
+function! s:NM_kill_this_buffer()
+ echo 'not implemented'
+endfunction
+
+function! s:NM_folders_beginning_of_buffer()
+ echo 'not implemented'
+endfunction
+
+function! s:NM_folders_notmuch_folder()
+ echo 'not implemented'
+endfunction
+
+function! s:NM_folders_show_search()
+ let line = line('.')
+ let search = b:nm_searches[line-1]
+
+ let prev_bufnr = bufnr('%')
+ setlocal bufhidden=hide
+ call <SID>NM_cmd_search([search])
+ setlocal bufhidden=delete
+ let b:nm_prev_bufnr = prev_bufnr
+endfunction
+
+
" --- implement search screen {{{1
function! s:NM_cmd_search(words)
@@ -737,6 +815,9 @@ endif
if !exists('g:notmuch_initial_search_words')
let g:notmuch_initial_search_words = s:notmuch_initial_search_words_defaults
endif
+if !exists('g:notmuch_folders')
+ let g:notmuch_folders = s:notmuch_folders_defaults
+endif
" --- assign keymaps {{{1
@@ -753,20 +834,28 @@ endfunction
" --- command handler {{{1
function! NotMuch(args)
- if !strlen(a:args)
- if exists('b:nm_search_words')
+ let args = a:args
+ if !strlen(args)
+ let args = 'folders'
+ endif
+
+ let words = split(args)
+ if words[0] == 'folders'
+ let words = words[1:]
+ call <SID>NM_cmd_folders(words)
+ elseif words[0] == 'search'
+ if len(words) > 1
+ let words = words[1:]
+ elseif exists('b:nm_search_words')
let words = b:nm_search_words
else
let words = g:notmuch_initial_search_words
endif
call <SID>NM_cmd_search(words)
- return
- endif
- echo "blarg!"
-
- let words = split(a:args)
- " TODO: handle commands passed as arguments
+ elseif words[0] == 'show'
+ echoe 'show is not yet implemented.'
+ endif
endfunction
function! CompleteNotMuch(arg_lead, cmd_line, cursor_pos)
return []
diff --git a/vim/syntax/notmuch-folders.vim b/vim/syntax/notmuch-folders.vim
new file mode 100644
index 00000000..9477f86f
--- /dev/null
+++ b/vim/syntax/notmuch-folders.vim
@@ -0,0 +1,12 @@
+" notmuch folders mode syntax file
+
+syntax region nmFoldersCount start='^' end='\%10v'
+syntax region nmFoldersName start='\%11v' end='\%31v'
+syntax match nmFoldersSearch /([^()]\+)$/
+
+highlight link nmFoldersCount Statement
+highlight link nmFoldersName Type
+highlight link nmFoldersSearch String
+
+highlight CursorLine term=reverse cterm=reverse gui=reverse
+