From d6b8ad128b6b8d0b2beffc55392a9ab20eb13bde Mon Sep 17 00:00:00 2001 From: Lucas Hoffmann Date: Fri, 17 Feb 2017 08:42:10 +0100 Subject: [PATCH 1/4] Remove ansi escapes from inside vim --- autoload/vimpager_utils.vim | 7 +++++++ vimpager | 4 +--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/autoload/vimpager_utils.vim b/autoload/vimpager_utils.vim index c3ba4b3..b1e1f15 100644 --- a/autoload/vimpager_utils.vim +++ b/autoload/vimpager_utils.vim @@ -55,6 +55,13 @@ function! vimpager_utils#DoAnsiEsc() endif endfunction +function! vimpager_utils#StripAnsiEsc() + let pos = getpos('.') + %substitute/\v\e\[[;?]*[0-9.;]*[a-z]//egi + set nomodified + call cursor(pos) +endfunction + function! vimpager_utils#IsDiff() let lnum = 1 while getline(lnum) =~ '^\s*$' diff --git a/vimpager b/vimpager index ed92df5..9474ef4 100755 --- a/vimpager +++ b/vimpager @@ -208,9 +208,7 @@ main() { # check for ANSI codes and strip if not using ansiesc if head -100 "${tempfile:-$file}" | grep -Eq "$ANSI_RE"; then if [ -z "$ansiesc_available" -o -n "$force_strip_ansi" ]; then - ansi_filter "${tempfile:-$file}" > "$tmp/$filename.work" - tempfile=$tmp/$filename - mv -f -- "$tempfile.work" "$tempfile" + echo 'call vimpager_utils#StripAnsiEsc()' >> "$tmp/$file_idx.vim" else echo 'call vimpager_utils#DoAnsiEsc()' >> "$tmp/$file_idx.vim" set_key ansi_files "$file_idx" yes From ca5569650212ea110b8e89be2e29bb55e09b56cd Mon Sep 17 00:00:00 2001 From: Lucas Hoffmann Date: Fri, 17 Feb 2017 08:54:19 +0100 Subject: [PATCH 2/4] Remove overstrike and blank lines from inside vim --- autoload/vimpager_utils.vim | 14 ++++++++++++++ vimpager | 10 +++------- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/autoload/vimpager_utils.vim b/autoload/vimpager_utils.vim index b1e1f15..2efe654 100644 --- a/autoload/vimpager_utils.vim +++ b/autoload/vimpager_utils.vim @@ -62,6 +62,20 @@ function! vimpager_utils#StripAnsiEsc() call cursor(pos) endfunction +function! vimpager_utils#StripOverstrike() + let pos = getpos('.') + %substitute/\v.\b//egi + set nomodified + call cursor(pos) +endfunction + +function! vimpager_utils#SripBlankLines() + let pos = getpos('.') + 1,/[^ ]/ global /^[ ]*$/ delete + set nomodified + call cursor(pos) +endfunction + function! vimpager_utils#IsDiff() let lnum = 1 while getline(lnum) =~ '^\s*$' diff --git a/vimpager b/vimpager index 9474ef4..d904ec9 100755 --- a/vimpager +++ b/vimpager @@ -234,13 +234,9 @@ main() { # if it's a man page, remove starting blank lines, or the C syntax highlighting fails # and write out ft command for vim if [ -n "$is_doc" ]; then - ansi_filter "${tempfile:-$file}" | overstrike_filter | awk ' - BEGIN { skipblank=1 } - /^[ ]*$/ { if (!skipblank) print } - /[^ ]/ { skipblank=0; print } - ' > "$tmp/$filename.work" - tempfile=$tmp/$filename - mv -f -- "$tempfile.work" "$tempfile" + echo 'call vimpager_utils#StripAnsiEsc()' >> "$tmp/$file_idx.vim" + echo 'call vimpager_utils#StripOverstrike()' >> "$tmp/$file_idx.vim" + echo 'call vimpager_utils#StripBlankLines()' >> "$tmp/$file_idx.vim" if [ -n "$is_man" ]; then echo 'set ft=man' >> "$tmp/$file_idx.vim" From 7897d2dc62b88bd9f05aab5934fd19ecf720dc52 Mon Sep 17 00:00:00 2001 From: Lucas Hoffmann Date: Fri, 17 Feb 2017 08:58:31 +0100 Subject: [PATCH 3/4] Tidy up shell functions The functions are only used in one place now and can hence be merged into one call to sed only. --- vimpager | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/vimpager b/vimpager index d904ec9..4c5be0c 100755 --- a/vimpager +++ b/vimpager @@ -880,21 +880,11 @@ win32_native() { # this is compatible with osed ANSI_RE='\[[;?]*[0-9.;]*[A-Za-z]' -ansi_filter() { - sed -e 's/'"$ANSI_RE"'//g' "$@" -} - -# Even /bin/sed on Solaris handles UTF-8 characters correctly, so we can safely -# use sed for this. -overstrike_filter() { - sed 's/.//g' "$@" -} - fits_on_screen() { [ $# -eq 0 ] && set -- - # First remove overstrikes and ANSI codes with sed - ansi_filter "$@" | overstrike_filter | \ + sed -e 's/'"$ANSI_RE"'//g' -e 's/.//g' "$@" | \ awk ' { if (NR == 1) { From 6d2f34d9ae90bae7a1a7b36cc5f62ad1c0903014 Mon Sep 17 00:00:00 2001 From: Lucas Hoffmann Date: Fri, 17 Feb 2017 09:41:30 +0100 Subject: [PATCH 4/4] Squeez blank lines from inside vim --- autoload/vimpager_utils.vim | 7 +++++++ vimpager | 7 +------ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/autoload/vimpager_utils.vim b/autoload/vimpager_utils.vim index 2efe654..8edd9a4 100644 --- a/autoload/vimpager_utils.vim +++ b/autoload/vimpager_utils.vim @@ -76,6 +76,13 @@ function! vimpager_utils#SripBlankLines() call cursor(pos) endfunction +function! vimpager_utils#SqueezeBlankLines() + let pos = getpos('.') + %substitute/\v^\_s*$// + set nomodified + call cursor(pos) +endfunction + function! vimpager_utils#IsDiff() let lnum = 1 while getline(lnum) =~ '^\s*$' diff --git a/vimpager b/vimpager index 4c5be0c..b53f766 100755 --- a/vimpager +++ b/vimpager @@ -217,12 +217,7 @@ main() { # squeeze blank lines if option was specified, Ubuntu man with /usr/bin/pager does this if [ "${squeeze_blank_lines:-0}" -eq 1 ]; then - sed -e '/^[ ]*$/{ - N - /^[ ]*\n[ ]*$/D - }' < "${tempfile:-$file}" > "$tmp/$filename.work" - tempfile=$tmp/$filename - mv -f -- "$tempfile.work" "$tempfile" + echo 'call vimpager_utils#SqueezeBlankLines()' >> "$tmp/$file_idx.vim" fi # dumb man detection when the pstree heuristic fails