aboutsummaryrefslogtreecommitdiff
path: root/plugin
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--plugin/haredoc.vim47
1 files changed, 47 insertions, 0 deletions
diff --git a/plugin/haredoc.vim b/plugin/haredoc.vim
new file mode 100644
index 0000000..65171fa
--- /dev/null
+++ b/plugin/haredoc.vim
@@ -0,0 +1,47 @@
+" Haredoc plugin -- Hare documentation in vim
+" Maintainer: Byron Torres <b@torresjrjr.com>
+" Last Updated: 2022-06-15
+" License: Vim License
+
+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