summaryrefslogtreecommitdiffstats
path: root/ftplugin/changelog.vim
diff options
context:
space:
mode:
authorAdam Stankiewicz <sheerun@sher.pl>2017-09-28 22:18:09 +0200
committerAdam Stankiewicz <sheerun@sher.pl>2017-09-28 22:18:09 +0200
commit27903c5b8656c796564ef073c1ebe77a2f0154e1 (patch)
tree2b0a3a14494d7976fb79a7517706e25d2a95d080 /ftplugin/changelog.vim
parentd5e38fa97bc50a93a66473d6cd7072fbcbadda57 (diff)
downloadvim-polyglot-3.0.0.tar.gz
vim-polyglot-3.0.0.zip
Revert inlining basic language packv3.0.0
Diffstat (limited to 'ftplugin/changelog.vim')
-rw-r--r--ftplugin/changelog.vim305
1 files changed, 0 insertions, 305 deletions
diff --git a/ftplugin/changelog.vim b/ftplugin/changelog.vim
deleted file mode 100644
index dd02344d..00000000
--- a/ftplugin/changelog.vim
+++ /dev/null
@@ -1,305 +0,0 @@
-if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vim') == -1
-
-" Vim filetype plugin file
-" Language: generic Changelog file
-" Maintainer: Martin Florian <marfl@posteo.de>
-" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
-" Latest Revision: 2015-10-25
-" Variables:
-" g:changelog_timeformat (deprecated: use g:changelog_dateformat instead) -
-" description: the timeformat used in ChangeLog entries.
-" default: "%Y-%m-%d".
-" g:changelog_dateformat -
-" description: the format sent to strftime() to generate a date string.
-" default: "%Y-%m-%d".
-" g:changelog_username -
-" description: the username to use in ChangeLog entries
-" default: try to deduce it from environment variables and system files.
-" Local Mappings:
-" <Leader>o -
-" adds a new changelog entry for the current user for the current date.
-" Global Mappings:
-" <Leader>o -
-" switches to the ChangeLog buffer opened for the current directory, or
-" opens it in a new buffer if it exists in the current directory. Then
-" it does the same as the local <Leader>o described above.
-" Notes:
-" run 'runtime ftplugin/changelog.vim' to enable the global mapping for
-" changelog files.
-" TODO:
-" should we perhaps open the ChangeLog file even if it doesn't exist already?
-" Problem is that you might end up with ChangeLog files all over the place.
-
-" If 'filetype' isn't "changelog", we must have been to add ChangeLog opener
-if &filetype == 'changelog'
- if exists('b:did_ftplugin')
- finish
- endif
- let b:did_ftplugin = 1
-
- let s:cpo_save = &cpo
- set cpo&vim
-
- " Set up the format used for dates.
- if !exists('g:changelog_dateformat')
- if exists('g:changelog_timeformat')
- let g:changelog_dateformat = g:changelog_timeformat
- else
- let g:changelog_dateformat = "%Y-%m-%d"
- endif
- endif
-
- function! s:username()
- if exists('g:changelog_username')
- return g:changelog_username
- elseif $EMAIL != ""
- return $EMAIL
- elseif $EMAIL_ADDRESS != ""
- return $EMAIL_ADDRESS
- endif
-
- let login = s:login()
- return printf('%s <%s@%s>', s:name(login), login, s:hostname())
- endfunction
-
- function! s:login()
- return s:trimmed_system_with_default('whoami', 'unknown')
- endfunction
-
- function! s:trimmed_system_with_default(command, default)
- return s:first_line(s:system_with_default(a:command, a:default))
- endfunction
-
- function! s:system_with_default(command, default)
- let output = system(a:command)
- if v:shell_error
- return default
- endif
- return output
- endfunction
-
- function! s:first_line(string)
- return substitute(a:string, '\n.*$', "", "")
- endfunction
-
- function! s:name(login)
- for name in [s:gecos_name(a:login), $NAME, s:capitalize(a:login)]
- if name != ""
- return name
- endif
- endfor
- endfunction
-
- function! s:gecos_name(login)
- for line in s:try_reading_file('/etc/passwd')
- if line =~ '^' . a:login . ':'
- return substitute(s:passwd_field(line, 5), '&', s:capitalize(a:login), "")
- endif
- endfor
- return ""
- endfunction
-
- function! s:try_reading_file(path)
- try
- return readfile(a:path)
- catch
- return []
- endtry
- endfunction
-
- function! s:passwd_field(line, field)
- let fields = split(a:line, ':', 1)
- if len(fields) < a:field
- return ""
- endif
- return fields[a:field - 1]
- endfunction
-
- function! s:capitalize(word)
- return toupper(a:word[0]) . strpart(a:word, 1)
- endfunction
-
- function! s:hostname()
- return s:trimmed_system_with_default('hostname', 'localhost')
- endfunction
-
- " Format used for new date entries.
- if !exists('g:changelog_new_date_format')
- let g:changelog_new_date_format = "%d %u\n\n\t* %p%c\n\n"
- endif
-
- " Format used for new entries to current date entry.
- if !exists('g:changelog_new_entry_format')
- let g:changelog_new_entry_format = "\t* %p%c"
- endif
-
- " Regular expression used to find a given date entry.
- if !exists('g:changelog_date_entry_search')
- let g:changelog_date_entry_search = '^\s*%d\_s*%u'
- endif
-
- " Regular expression used to find the end of a date entry
- if !exists('g:changelog_date_end_entry_search')
- let g:changelog_date_end_entry_search = '^\s*$'
- endif
-
-
- " Substitutes specific items in new date-entry formats and search strings.
- " Can be done with substitute of course, but unclean, and need \@! then.
- function! s:substitute_items(str, date, user, prefix)
- let str = a:str
- let middles = {'%': '%', 'd': a:date, 'u': a:user, 'p': a:prefix, 'c': '{cursor}'}
- let i = stridx(str, '%')
- while i != -1
- let inc = 0
- if has_key(middles, str[i + 1])
- let mid = middles[str[i + 1]]
- let str = strpart(str, 0, i) . mid . strpart(str, i + 2)
- let inc = strlen(mid) - 1
- endif
- let i = stridx(str, '%', i + 1 + inc)
- endwhile
- return str
- endfunction
-
- " Position the cursor once we've done all the funky substitution.
- function! s:position_cursor()
- if search('{cursor}') > 0
- let lnum = line('.')
- let line = getline(lnum)
- let cursor = stridx(line, '{cursor}')
- call setline(lnum, substitute(line, '{cursor}', '', ''))
- endif
- startinsert
- endfunction
-
- " Internal function to create a new entry in the ChangeLog.
- function! s:new_changelog_entry(prefix)
- " Deal with 'paste' option.
- let save_paste = &paste
- let &paste = 1
- call cursor(1, 1)
- " Look for an entry for today by our user.
- let date = strftime(g:changelog_dateformat)
- let search = s:substitute_items(g:changelog_date_entry_search, date,
- \ s:username(), a:prefix)
- if search(search) > 0
- " Ok, now we look for the end of the date entry, and add an entry.
- call cursor(nextnonblank(line('.') + 1), 1)
- if search(g:changelog_date_end_entry_search, 'W') > 0
- let p = (line('.') == line('$')) ? line('.') : line('.') - 1
- else
- let p = line('.')
- endif
- let ls = split(s:substitute_items(g:changelog_new_entry_format, '', '', a:prefix),
- \ '\n')
- call append(p, ls)
- call cursor(p + 1, 1)
- else
- " Flag for removing empty lines at end of new ChangeLogs.
- let remove_empty = line('$') == 1
-
- " No entry today, so create a date-user header and insert an entry.
- let todays_entry = s:substitute_items(g:changelog_new_date_format,
- \ date, s:username(), a:prefix)
- " Make sure we have a cursor positioning.
- if stridx(todays_entry, '{cursor}') == -1
- let todays_entry = todays_entry . '{cursor}'
- endif
-
- " Now do the work.
- call append(0, split(todays_entry, '\n'))
-
- " Remove empty lines at end of file.
- if remove_empty
- $-/^\s*$/-1,$delete
- endif
-
- " Reposition cursor once we're done.
- call cursor(1, 1)
- endif
-
- call s:position_cursor()
-
- " And reset 'paste' option
- let &paste = save_paste
- endfunction
-
- if exists(":NewChangelogEntry") != 2
- nnoremap <buffer> <silent> <Leader>o :<C-u>call <SID>new_changelog_entry('')<CR>
- xnoremap <buffer> <silent> <Leader>o :<C-u>call <SID>new_changelog_entry('')<CR>
- command! -nargs=0 NewChangelogEntry call s:new_changelog_entry('')
- endif
-
- let b:undo_ftplugin = "setl com< fo< et< ai<"
-
- setlocal comments=
- setlocal formatoptions+=t
- setlocal noexpandtab
- setlocal autoindent
-
- if &textwidth == 0
- setlocal textwidth=78
- let b:undo_ftplugin .= " tw<"
- endif
-
- let &cpo = s:cpo_save
- unlet s:cpo_save
-else
- let s:cpo_save = &cpo
- set cpo&vim
-
- " Add the Changelog opening mapping
- nnoremap <silent> <Leader>o :call <SID>open_changelog()<CR>
-
- function! s:open_changelog()
- let path = expand('%:p:h')
- if exists('b:changelog_path')
- let changelog = b:changelog_path
- else
- if exists('b:changelog_name')
- let name = b:changelog_name
- else
- let name = 'ChangeLog'
- endif
- while isdirectory(path)
- let changelog = path . '/' . name
- if filereadable(changelog)
- break
- endif
- let parent = substitute(path, '/\+[^/]*$', "", "")
- if path == parent
- break
- endif
- let path = parent
- endwhile
- endif
- if !filereadable(changelog)
- return
- endif
-
- if exists('b:changelog_entry_prefix')
- let prefix = call(b:changelog_entry_prefix, [])
- else
- let prefix = substitute(strpart(expand('%:p'), strlen(path)), '^/\+', "", "")
- endif
-
- let buf = bufnr(changelog)
- if buf != -1
- if bufwinnr(buf) != -1
- execute bufwinnr(buf) . 'wincmd w'
- else
- execute 'sbuffer' buf
- endif
- else
- execute 'split' fnameescape(changelog)
- endif
-
- call s:new_changelog_entry(prefix)
- endfunction
-
- let &cpo = s:cpo_save
- unlet s:cpo_save
-endif
-
-endif