Dotfiles.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

130 lines
3.7 KiB

6 years ago
" Vim plugin for accessing cheat sheets from cheat.sh.
" Maintainer: David Beniamine
"
" Copyright (C) 2018 David Beniamine. All rights reserved.
"
" This program is free software: you can redistribute it and/or modify
" it under the terms of the GNU General Public License as published by
" the Free Software Foundation, either version 3 of the License, or
" (at your option) any later version.
"
" This program is distributed in the hope that it will be useful,
" but WITHOUT ANY WARRANTY; without even the implied warranty of
" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
" GNU General Public License for more details.
"
" You should have received a copy of the GNU General Public License
" along with this program. If not, see <http://www.gnu.org/licenses/>.
let save_cpo = &cpo
set cpo&vim
" Transforms a high level request into a query ready to be processed by cht.sh
function! cheat#requests#toquery(request)
if(a:request.useFt == 1)
let query='vim:'.a:request.ft.'/'
else
let query=''
endif
if(a:request.isCheatSheet == 0)
let query.=substitute(a:request.query, ' ', '+', 'g')
" There must be a + in the query
if(match(query, '+') == -1)
let query.='+'
endif
let query.='/'.a:request.q.'/'.a:request.a.','.a:request.s
else
let query.=a:request.query
endif
let query.='?'
let query.=g:CheatSheetUrlSettings
" Color pager requests
if(a:request.mode!=2)
let query.='T'
endif
if(a:request.comments==0)
let query.='Q'
endif
if(exists("g:CheatSheetPagerStyle") && a:request.mode==2)
let query.="&style=".g:CheatSheetPagerStyle
endif
return query
endfunction
" Parse the query to update the given request
function! s:parseQuery(query, request)
let opts=split(a:query, '/')
if(len(opts) >= 2)
let a:request.ft=opts[0]
let a:request.query=opts[1]
else
let a:request.ft=g:CheatSheetFt
let a:request.query=opts[0]
let a:request.useFt = 0
endif
if(len(opts) >=3)
let a:request.q=opts[2]
else
let a:request.q=0
endif
if(len(opts) >=4)
" Remove see related if present
let a:request.a=substitute(opts[3], '\(.*\),\+.*$', '\1', '')
else
let a:request.a=0
endif
" Remove see related uses , not /
if(match(a:query, ',\d\+$')!=-1)
let a:request.s=substitute(a:query, '^.*,\(\d\+\)$', '\1', '')
else
let a:request.s=0
endif
if(match(a:query,'+')!=-1)
let a:request.isCheatSheet=0
let a:request.useFt = 1
else
let a:request.isCheatSheet=1
endif
return a:request
endfunction
" Prepare an empty request
function! cheat#requests#init(query, mode, parseQuery)
let request={
\'a' : 0,
\'q' : 0,
\'s' : 0,
\'comments' : g:CheatSheetShowCommentsByDefault,
\'ft' : cheat#frameworks#getFt(),
\'isCheatSheet' : 0,
\'appendpos' : 0,
\'numLines' : 0,
\'mode' : g:CheatSheetDefaultMode,
\'useFt' : 1,
\'query' : a:query,
\}
if(a:mode != 5)
let request.mode=a:mode
endif
" Set append pos / remove query if required
if(request.mode == 1)
call cheat#echo('removing lines', 'e')
normal dd
let request.appendpos=getcurpos()[1]-1
elseif(request.mode == 3)
let request.appendpos=getcurpos()[1]
elseif(request.mode == 4)
let request.appendpos=getcurpos()[1]-1
endif
if(a:parseQuery)
call s:parseQuery(a:query, request)
endif
return request
endfunction
let cpo=save_cpo
" vim:set et sw=4: