aboutsummaryrefslogtreecommitdiff
path: root/ftplugin/hare.vim
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--ftplugin/hare.vim47
1 files changed, 47 insertions, 0 deletions
diff --git a/ftplugin/hare.vim b/ftplugin/hare.vim
new file mode 100644
index 0000000..2a03bb6
--- /dev/null
+++ b/ftplugin/hare.vim
@@ -0,0 +1,47 @@
+" Haredoc plugin -- Hare documentation in vim
+" Maintainer: Byron Torres <b@torresjrjr.com>
+" Last Updated: 2022-05-22
+
+set keywordprg=haredoc
+nnoremap K :call Haredoc('.')<CR>
+command -nargs=? Haredoc :call Haredoc(<q-args>)
+function Haredoc(symbol)
+ let symbol = a:symbol
+ let popup = 0
+ if symbol == '.'
+ let popup = 1
+ let oldiskeyword = &iskeyword
+ setlocal iskeyword+=:
+ let symbol = expand('<cword>')
+ let &iskeyword = oldiskeyword
+ endif
+ if has('terminal') && has('popupwin') && popup == 1
+ let minheight = 1 + system(
+ \ "haredoc -Ftty '"..symbol.."' 2>&1 | wc -l"
+ \ )
+ let buf = term_start(
+ \ [
+ \ 'sh', '-c',
+ \ "haredoc -Ftty '"..symbol.."' 2>&1 | less -RK",
+ \ ],
+ \ #{hidden: 1, term_finish: 'close'},
+ \ )
+ let winid = popup_atcursor(
+ \ buf,
+ \ #{
+ \ col: 'cursor-'..virtcol('.'),
+ \ minwidth: 84,
+ \ minheight: minheight,
+ \ fixed: v:false,
+ \ wrap: v:false,
+ \ border: [1, 1, 1, 1],
+ \ },
+ \ )
+ elseif has('terminal')
+ execute 'terminal ++noclose haredoc '..symbol
+ set nonumber
+ nnoremap <buffer> q :close<CR>
+ else
+ execute '!haredoc '..symbol
+ endif
+endfunction