add notmuch-folders support mode

This commit is contained in:
Bart Trojanowski 2009-11-21 22:24:54 -05:00
parent 9e3cc68875
commit 33c896dd71
3 changed files with 117 additions and 9 deletions

View file

@ -13,6 +13,12 @@ To run:
:NotMuch :NotMuch
Buffer types: Buffer types:
[notmuch-folders]
Folder list, or technically a list of saved searches.
Keybindings:
<Enter> - show the selected search
[notmuch-search] [notmuch-search]
You are presented with the search results when you run :NotMuch. You are presented with the search results when you run :NotMuch.
@ -23,7 +29,8 @@ Buffer types:
o - toggle search screen order o - toggle search screen order
s - enter search criteria s - enter search criteria
S - alter 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 + - add tag(s) to selected message
- - remove tag(s) from selected message - - remove tag(s) from selected message
= - refresh display = - refresh display

View file

@ -69,8 +69,26 @@ let s:notmuch_show_headers_defaults = [
\ 'Date', \ '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 " --- 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 " --- --- bindings for search screen {{{2
let g:notmuch_search_maps = { let g:notmuch_search_maps = {
\ '<Enter>': ':call <SID>NM_search_show_thread()<CR>', \ '<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 " --- implement search screen {{{1
function! s:NM_cmd_search(words) function! s:NM_cmd_search(words)
@ -737,6 +815,9 @@ endif
if !exists('g:notmuch_initial_search_words') if !exists('g:notmuch_initial_search_words')
let g:notmuch_initial_search_words = s:notmuch_initial_search_words_defaults let g:notmuch_initial_search_words = s:notmuch_initial_search_words_defaults
endif endif
if !exists('g:notmuch_folders')
let g:notmuch_folders = s:notmuch_folders_defaults
endif
" --- assign keymaps {{{1 " --- assign keymaps {{{1
@ -753,20 +834,28 @@ endfunction
" --- command handler {{{1 " --- command handler {{{1
function! NotMuch(args) function! NotMuch(args)
if !strlen(a:args) let args = a:args
if exists('b:nm_search_words') 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 let words = b:nm_search_words
else else
let words = g:notmuch_initial_search_words let words = g:notmuch_initial_search_words
endif endif
call <SID>NM_cmd_search(words) call <SID>NM_cmd_search(words)
return
elseif words[0] == 'show'
echoe 'show is not yet implemented.'
endif endif
echo "blarg!"
let words = split(a:args)
" TODO: handle commands passed as arguments
endfunction endfunction
function! CompleteNotMuch(arg_lead, cmd_line, cursor_pos) function! CompleteNotMuch(arg_lead, cmd_line, cursor_pos)
return [] return []

View file

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