aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Ryder <tom@sanctum.geek.nz>2018-12-04 08:45:38 +1300
committerTom Ryder <tom@sanctum.geek.nz>2018-12-04 08:45:38 +1300
commitcebbf704f7e3048624bddb2e96eaa1db5fe9ef16 (patch)
treef6caa1ed0d681ffe925c2c7dd46cc9cec00081be
parentRemove line squeezing function for mail.vim (diff)
downloaddotfiles-cebbf704f7e3048624bddb2e96eaa1db5fe9ef16.tar.gz
dotfiles-cebbf704f7e3048624bddb2e96eaa1db5fe9ef16.zip
Unseat tidy(1) as HTML 'equalprg'
Instead, remap \= specifically to use tidy(1) to reformat the whole buffer.
-rw-r--r--vim/after/ftplugin/html.vim11
-rw-r--r--vim/after/ftplugin/html.vim~35
-rw-r--r--vim/autoload/html.vim7
3 files changed, 50 insertions, 3 deletions
diff --git a/vim/after/ftplugin/html.vim b/vim/after/ftplugin/html.vim
index b5c387fb..5f7155bc 100644
--- a/vim/after/ftplugin/html.vim
+++ b/vim/after/ftplugin/html.vim
@@ -3,11 +3,16 @@ if &filetype !=# 'html'
finish
endif
-" Use tidy(1) for checking and program formatting
+" Use tidy(1) for checking
compiler tidy
-setlocal equalprg=tidy\ -quiet
let b:undo_ftplugin .= '|unlet b:current_compiler'
- \ . '|setlocal equalprg< errorformat< makeprg<'
+ \ . '|setlocal errorformat< makeprg<'
+
+" tidy(1) copes fine with formatting an entire document, but not just part of
+" it; we map \= to do the former, but don't actually set 'equalprg', falling
+" back on the good-enough built-in Vim indentation behavior.
+nnoremap <buffer> <Leader>= :<C-U>call html#TidyBuffer()<CR>
+let b:undo_ftplugin .= '|nunmap <buffer> <Leader>='
" Set up hooks for timestamp updating
augroup html_timestamp
diff --git a/vim/after/ftplugin/html.vim~ b/vim/after/ftplugin/html.vim~
new file mode 100644
index 00000000..5f7155bc
--- /dev/null
+++ b/vim/after/ftplugin/html.vim~
@@ -0,0 +1,35 @@
+" Don't load if the buffer is not actually HTML (e.g. Markdown)
+if &filetype !=# 'html'
+ finish
+endif
+
+" Use tidy(1) for checking
+compiler tidy
+let b:undo_ftplugin .= '|unlet b:current_compiler'
+ \ . '|setlocal errorformat< makeprg<'
+
+" tidy(1) copes fine with formatting an entire document, but not just part of
+" it; we map \= to do the former, but don't actually set 'equalprg', falling
+" back on the good-enough built-in Vim indentation behavior.
+nnoremap <buffer> <Leader>= :<C-U>call html#TidyBuffer()<CR>
+let b:undo_ftplugin .= '|nunmap <buffer> <Leader>='
+
+" Set up hooks for timestamp updating
+augroup html_timestamp
+ autocmd BufWritePre <buffer>
+ \ if exists('b:html_timestamp_check')
+ \| call html#TimestampUpdate()
+ \|endif
+augroup END
+let b:undo_ftplugin .= '|execute ''autocmd! html_timestamp'''
+ \ . '|augroup! html_timestamp'
+
+" Stop here if the user doesn't want ftplugin mappings
+if exists('g:no_plugin_maps') || exists('g:no_html_maps')
+ finish
+endif
+
+" Transform URLs to HTML anchors
+nnoremap <buffer> <LocalLeader>r
+ \ :<C-U>call html#UrlLink()<CR>
+let b:undo_ftplugin .= '|nunmap <buffer> <LocalLeader>r'
diff --git a/vim/autoload/html.vim b/vim/autoload/html.vim
index c3d99706..e0d47e47 100644
--- a/vim/autoload/html.vim
+++ b/vim/autoload/html.vim
@@ -14,6 +14,13 @@ function! html#UrlLink() abort
endfunction
+" Tidy the whole buffer
+function! html#TidyBuffer() abort
+ let l:view = winsaveview()
+ %!tidy -quiet
+ call winrestview(l:view)
+endfunction
+
" Update a timestamp
function! html#TimestampUpdate() abort
if !&modified