소스 검색

Merge PR 223: New option: g:startify_commands

The new list "commands" makes it possible to put commands on the start
screen. Choosing an entry executes the command.

Optionally a custom index and/or command description can be given:

    let g:startify_commands = [
        \ ':help reference',
        \ ['Vim Reference', 'h ref'],
        \ {'h': 'h ref'},
        \ {'g': ['Vim Reference', 'h ref']},
        \ ]
Marco Hinz 9 년 전
부모
커밋
8585dd577a
2개의 변경된 파일62개의 추가작업 그리고 15개의 파일을 삭제
  1. 31 0
      autoload/startify.vim
  2. 31 15
      doc/startify.txt

+ 31 - 0
autoload/startify.vim

@@ -113,6 +113,7 @@ function! startify#insane_in_the_membrane() abort
         \ ['   MRU '. getcwd()], 'dir',
         \ ['   Sessions'],       'sessions',
         \ ['   Bookmarks'],      'bookmarks',
+        \ ['   Commands'],       'commands',
         \ ])
 
   for item in s:lists
@@ -621,6 +622,36 @@ function! s:show_bookmarks() abort
   call append('$', '')
 endfunction
 
+" Function: s:show_commands {{{1
+function! s:show_commands() abort
+  if !exists('g:startify_commands') || empty(g:startify_commands)
+    return
+  endif
+
+  if exists('s:last_message')
+    call s:print_section_header()
+  endif
+
+  for entry in g:startify_commands
+    if type(entry) == type({})  " with custom index
+      let [index, command] = items(entry)[0]
+    else
+      let command = entry
+      let index = s:get_index_as_string(s:entry_number)
+      let s:entry_number += 1
+    endif
+    " If no list is given, the description is the command itself.
+    let [desc, cmd] = type(command) == type([]) ? command : [command, command]
+
+    call append('$', '   ['. index .']'. repeat(' ', (3 - strlen(index))) . desc)
+    call s:register(line('$'), index, 'special', cmd, '', s:nowait_string)
+
+    unlet entry command
+  endfor
+
+  call append('$', '')
+endfunction
+
 " Function: s:is_in_skiplist {{{1
 function! s:is_in_skiplist(arg) abort
   for regexp in s:skiplist

+ 31 - 15
doc/startify.txt

@@ -36,7 +36,7 @@ CONTENTS                                                     *startify-contents*
 ==============================================================================
 INTRO                                                           *startify-intro*
 
-Startify is a plugin that shows recently used files, bookmarks and
+Startify is a plugin that shows recently used files, bookmarks, commands and
 sessions that were saved to a certain directory.
 
 ==============================================================================
@@ -48,8 +48,8 @@ Startify basically provides two things:
    it reads from STDIN), startify will show a small but pretty start screen
    that shows recently used files (using viminfo) and sessions by default.
 
-   Additionally, you can define bookmarks, thus entries for files that always
-   should be available on the start screen.
+   Additionally, you can define bookmarks (thus entries for files) and
+   commands that always should be available on the start screen.
 
    You can either navigate to a certain menu entry and hit enter or you just
    key in whatever is written between the square brackets on that line. You
@@ -97,6 +97,7 @@ default values.
     |g:startify_update_oldfiles|
 
     Misc options:~
+    |g:startify_commands|
     |g:startify_custom_footer|
     |g:startify_custom_header_quotes|
     |g:startify_custom_indices|
@@ -128,7 +129,8 @@ The default for Windows systems is '$HOME\vimfiles\session'.
 ------------------------------------------------------------------------------
                                                          *g:startify_list_order*
 >
-    let g:startify_list_order = ['files', 'dir', 'bookmarks', 'sessions']
+    let g:startify_list_order = ['files', 'dir', 'bookmarks', 'sessions',
+        \ 'commands']
 <
 At the moment startify supports these lists:~
 
@@ -151,6 +153,10 @@ At the moment startify supports these lists:~
 
    This lists all the sessions saved in the directory |g:startify_session_dir|.
 
+5) "commands"
+
+    This lists commands defined in |g:startify_commands|.
+
 Section headers:~
 
 Additionally you can add lists of strings to that list. These will be shown
@@ -174,6 +180,8 @@ Section headers example:~
             \ 'sessions',
             \ ['   These are my bookmarks:'],
             \ 'bookmarks',
+            \ ['   These are my commands:'],
+            \ 'commands',
             \ ]
 <
 Feel free to add some cool ASCII action!
@@ -193,6 +201,25 @@ Example:
 <
 NOTE: Avoid using keys from |startify-mappings| if providing custom indices.
 
+------------------------------------------------------------------------------
+                                                           *g:startify_commands*
+>
+    let g:startify_commands = []
+<
+A list of commands to execute on selection. Leading colons are optional. It
+supports optional custom indices and/or command descriptions.
+
+Example:
+>
+    let g:startify_commands = [
+        \ ':help reference',
+        \ ['Vim Reference', 'h ref'],
+        \ {'h': 'h ref'},
+        \ {'m': ['My magical function', 'call Magic()']},
+        \ ]
+<
+NOTE: Avoid using keys from |startify-mappings| if providing custom indices.
+
 ------------------------------------------------------------------------------
                                                        *g:startify_files_number*
 >
@@ -880,17 +907,6 @@ This is my configuration..
     let g:startify_session_persistence    = 1
     let g:startify_session_delete_buffers = 1
 
-    let g:startify_list_order = [
-      \ ['   LRU:'],
-      \ 'files',
-      \ ['   LRU within this dir:'],
-      \ 'dir',
-      \ ['   Sessions:'],
-      \ 'sessions',
-      \ ['   Bookmarks:'],
-      \ 'bookmarks',
-      \ ]
-
     let g:startify_skiplist = [
                 \ 'COMMIT_EDITMSG',
                 \ 'bundle/.*/doc',