mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-25 20:38:08 +01:00
add notmuch-folders support mode
This commit is contained in:
parent
9e3cc68875
commit
33c896dd71
3 changed files with 117 additions and 9 deletions
|
@ -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
|
||||||
|
|
|
@ -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 []
|
||||||
|
|
12
vim/syntax/notmuch-folders.vim
Normal file
12
vim/syntax/notmuch-folders.vim
Normal 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
|
||||||
|
|
Loading…
Reference in a new issue