From 5521e64072cfd4675e515a533f69723be4f9b87a Mon Sep 17 00:00:00 2001 From: wsdjeg Date: Sat, 22 Jul 2017 07:30:17 +0800 Subject: [PATCH] Add transient state api --- autoload/SpaceVim/api/transient_state.vim | 76 +++++++++++++++++++++++ autoload/SpaceVim/layers/edit.vim | 24 +++++++ docs/documentation.md | 12 ++-- 3 files changed, 106 insertions(+), 6 deletions(-) create mode 100644 autoload/SpaceVim/api/transient_state.vim diff --git a/autoload/SpaceVim/api/transient_state.vim b/autoload/SpaceVim/api/transient_state.vim new file mode 100644 index 000000000..171a6499c --- /dev/null +++ b/autoload/SpaceVim/api/transient_state.vim @@ -0,0 +1,76 @@ +let s:self = {} + +let s:self._keys = {} +let s:self._on_syntax = '' +let s:self._title = 'Transient State' + +function! s:self.open() abort + noautocmd rightbelow split __transient_state__ + let self._bufid = bufnr('%') + setlocal buftype=nofile bufhidden=wipe nobuflisted nolist noswapfile nowrap cursorline nospell nonu norelativenumber + " let save_tve = &t_ve + " setlocal t_ve= + " setlocal nomodifiable + " setf SpaceVimFlyGrep + " let &t_ve = save_tve + if !empty(self._on_syntax) && type(self._on_syntax) ==# 2 + call call(self._on_syntax, []) + else + hi def link SpaceVim_Transient_State_Exit Keyword + hi def link SpaceVim_Transient_State_Notexit Number + hi def link SpaceVim_Transient_State_Title Title + endif + call setline(1, self._title) + call append(line('$'), '') + call self.highlight_title() + call self._update_content() + call append(line('$'), '') + call append(line('$'), '[KEY] exits state [KEY] will not exit') + call self.highlight_keys(1, line('$') - 1, 1, 4) + call self.highlight_keys(0, line('$') - 1, 21, 24) + " move to prvious window + wincmd w + redraw! + while 1 + let char = getchar() + if char ==# "\" || char ==# "\" || char2nr(char) == 128 + continue + endif + if !has_key(self._keys, char) + break + endif + endwhile + exe 'bd ' . self._bufid +endfunction + +function! s:self.defind_keys(dict) abort + let self._keys = a:dict +endfunction + +function! s:self.set_syntax(func) abort + let self._on_syntax = a:func +endfunction + +function! s:self.set_title(title) abort + let self._title = a:title +endfunction + +function! s:self.highlight_keys(exit, line, begin, end) abort + if a:exit + call nvim_buf_add_highlight(self._bufid, 0, 'SpaceVim_Transient_State_Exit', a:line, a:begin, a:end) + else + call nvim_buf_add_highlight(self._bufid, 0, 'SpaceVim_Transient_State_Notexit', a:line, a:begin, a:end) + endif +endfunction + +function! s:self.highlight_title() abort + call nvim_buf_add_highlight(self._bufid, 0, 'SpaceVim_Transient_State_Title', 0, 0, len(self._title)) +endfunction + +function! s:self._update_content() abort + +endfunction + +function! SpaceVim#api#transient_state#get() abort + return deepcopy(s:self) +endfunction diff --git a/autoload/SpaceVim/layers/edit.vim b/autoload/SpaceVim/layers/edit.vim index 26dc16b6d..92a5e4601 100644 --- a/autoload/SpaceVim/layers/edit.vim +++ b/autoload/SpaceVim/layers/edit.vim @@ -124,6 +124,30 @@ function! SpaceVim#layers#edit#config() abort \ 'insert lorem-ipsum sentence', 1) let g:_spacevim_mappings_space.x.g = {'name' : '+translate'} call SpaceVim#mapping#space#def('nnoremap', ['x', 'g', 't'], 'Ydc', 'translate current word', 1) + + " move line + call SpaceVim#mapping#space#def('nnoremap', ['x', 'J'], 'call call(' + \ . string(s:_function('s:move_text_down_transient_state')) . ', [])', + \ 'move text down(enter transient state)', 1) + call SpaceVim#mapping#space#def('nnoremap', ['x', 'K'], 'call call(' + \ . string(s:_function('s:move_text_up_transient_state')) . ', [])', + \ 'move text up(enter transient state)', 1) +endfunction + +function! s:move_text_down_transient_state() abort + normal! "_ddp + call s:text_transient_state() +endfunction + +function! s:move_text_up_transient_state() abort + normal! "_ddkP + call s:text_transient_state() +endfunction + +function! s:text_transient_state() abort + let state = SpaceVim#api#import('transient_state') + call state.set_title('Move Text Transient State') + call state.open() endfunction function! s:lowerCamelCase() abort diff --git a/docs/documentation.md b/docs/documentation.md index e9f047076..95eed0a94 100644 --- a/docs/documentation.md +++ b/docs/documentation.md @@ -1189,7 +1189,7 @@ Key Binding | Description `SPC x c` | cunt the number of chars/words/lines in the selection region `SPC x d w` | delete trailing whitespaces `SPC x d SPC` | Delete all spaces and tabs around point, leaving one space -`SPC x g l` | set languages used by translate commands (TODO) +`SPC x g l` | set lanuages used by translate commands (TODO) `SPC x g t` | translate current word using Google Translate `SPC x g T` | reverse source and target languages (TODO) `SPC x i c` | change symbol style to `lowerCamelCase` @@ -1200,11 +1200,11 @@ Key Binding | Description `SPC x i _` | change symbol style to `under_score` `SPC x i u` | change symbol style to `under_score` `SPC x i U` | change symbol style to `UP_CASE` -`SPC x j c` | set the justification to center -`SPC x j f` | set the justification to full -`SPC x j l` | set the justification to left -`SPC x j n` | set the justification to none -`SPC x j r` | set the justification to right +`SPC x j c` | set the justification to center (TODO) +`SPC x j f` | set the justification to full (TODO) +`SPC x j l` | set the justification to left (TODO) +`SPC x j n` | set the justification to none (TODO) +`SPC x j r` | set the justification to right (TODO) `SPC x J` | move down a line of text (enter transient state) `SPC x K` | move up a line of text (enter transient state) `SPC x l d` | duplicate line or region