From fbcba230e9779db00284b22c3e066e6e0291456f Mon Sep 17 00:00:00 2001 From: Marco Hinz Date: Sun, 14 Jan 2018 17:30:26 +0100 Subject: [PATCH] Refactoring: g:startify_custom_header --- autoload/startify.vim | 5 ++++- autoload/startify/fortune.vim | 20 ++++++++++--------- doc/startify.txt | 36 +++++++++++++++++------------------ 3 files changed, 32 insertions(+), 29 deletions(-) diff --git a/autoload/startify.vim b/autoload/startify.vim index 4e90a71..ac49328 100644 --- a/autoload/startify.vim +++ b/autoload/startify.vim @@ -75,8 +75,11 @@ function! startify#insane_in_the_membrane() abort if exists('g:startify_custom_header') if type(g:startify_custom_header) == type([]) let g:startify_header = copy(g:startify_custom_header) - else + elseif type(g:startify_custom_header) == type('') let g:startify_header = eval(g:startify_custom_header) + else + echomsg 'startify: wrong type of value for g:startify_custom_header' + let g:startify_header = startify#fortune#cowsay() endif else let g:startify_header = startify#fortune#cowsay() diff --git a/autoload/startify/fortune.vim b/autoload/startify/fortune.vim index 137b763..0a02201 100644 --- a/autoload/startify/fortune.vim +++ b/autoload/startify/fortune.vim @@ -28,8 +28,7 @@ endfunction " Function: #boxed {{{1 function! startify#fortune#boxed(...) abort let wrapped_quote = [] - let Quote = a:0 && type(a:1) == type([]) ? a:1 : startify#fortune#quote() - let quote = type(Quote) == type(function('tr')) ? Quote() : Quote + let quote = a:0 && type(a:1) == type([]) ? a:1 : startify#fortune#quote() for line in quote let wrapped_quote += split(line, '\%50c.\{-}\zs\s', 1) endfor @@ -40,14 +39,17 @@ endfunction " Function: #cowsay {{{1 function! startify#fortune#cowsay(...) abort if a:0 - let s:char_top_bottom = get(a:000, 0, s:char_top_bottom) - let s:char_sides = get(a:000, 1, s:char_sides) - let s:char_top_left = get(a:000, 2, s:char_top_left) - let s:char_top_right = get(a:000, 3, s:char_top_right) - let s:char_bottom_right = get(a:000, 4, s:char_bottom_right) - let s:char_bottom_left = get(a:000, 5, s:char_bottom_left) + let quote = a:0 && type(a:1) == type([]) ? a:1 : startify#fortune#quote() + let s:char_top_bottom = get(a:000, 1, s:char_top_bottom) + let s:char_sides = get(a:000, 2, s:char_sides) + let s:char_top_left = get(a:000, 3, s:char_top_left) + let s:char_top_right = get(a:000, 4, s:char_top_right) + let s:char_bottom_right = get(a:000, 5, s:char_bottom_right) + let s:char_bottom_left = get(a:000, 6, s:char_bottom_left) + else + let quote = startify#fortune#quote() endif - let boxed_quote = startify#fortune#boxed() + let boxed_quote = startify#fortune#boxed(quote) let boxed_quote += s:cow return map(boxed_quote, '" ". v:val') endfunction diff --git a/doc/startify.txt b/doc/startify.txt index 9142672..50ffd1b 100644 --- a/doc/startify.txt +++ b/doc/startify.txt @@ -516,17 +516,23 @@ NOTE: There is no sanitizing going on, so you should know what you're doing! ------------------------------------------------------------------------------ *g:startify_custom_header* > - let g:startify_custom_header = startify#fortune#cowsay() + let g:startify_custom_header = 'startify#fortune#cowsay()' < -This is a list of strings to be shown before everything else. Every string -will be written on its own line, hence you can use empty strings for blank -lines. +Define your own header. -Static example:~ -> - let g:startify_custom_header = ['line 1', '', 'line 3'] -< -Static example #2:~ +This option takes a `list of strings`, whereas each string will be put on its +own line. If it is a simple `string`, it should evaluate to a list of strings. + +Helper functions:~ + + startify#fortune#quote() random quote + startify#fortune#boxed(...) random quote in a box + startify#fortune#cowsay(...) random quote in a box + cow + +The last two functions optionally take a quote in the list of strings format. +They also return a list of strings, suitable for this option. + +Example #1:~ > let g:startify_custom_header = [ \ ' ________ __ __ ', @@ -538,21 +544,13 @@ Static example #2:~ \ ' \/__/ \/_/\/_/\/_/\/_/ \// \/_/ \/_/ ', \ ] < -Dynamic example:~ +Example #2:~ > let g:startify_custom_header = \ map(split(system('fortune | cowsay'), '\n'), '" ". v:val') < -If you go for a dynamic header, you might find the following functions useful: +Example #3:~ - startify#fortune#quote() raw random quote - startify#fortune#boxed(...) opt list or formatted random quote in a box - startify#fortune#cowsay() formatted random quote in a box + cow - -Try them like this: -> - :echo join(startify#fortune#cowsay(), "\n") -< Let's assume you like the default boxed random quote, but not the ASCII art cow. You'd rather have another small ASCII art come before the quote. No problem!