From 42086bee57aee308e23be48c23342c96887d52a2 Mon Sep 17 00:00:00 2001 From: alex Date: Sun, 4 Dec 2016 09:11:22 -0800 Subject: [PATCH] Add preview.sh for ruby-less previews. (#259) --- autoload/fzf/vim.vim | 7 ++----- bin/preview.sh | 44 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 5 deletions(-) create mode 100755 bin/preview.sh diff --git a/autoload/fzf/vim.vim b/autoload/fzf/vim.vim index be819e0..cd158b9 100644 --- a/autoload/fzf/vim.vim +++ b/autoload/fzf/vim.vim @@ -29,7 +29,8 @@ set cpo&vim " ------------------------------------------------------------------ let s:layout_keys = ['window', 'up', 'down', 'left', 'right'] -let s:bin = { 'preview': expand(':h:h:h').'/bin/preview.rb' } +let s:which_bin = executable('ruby') ? '/bin/preview.rb' : '/bin/preview.sh' +let s:bin = { 'preview': expand(':h:h:h') . s:which_bin } let s:TYPE = {'dict': type({}), 'funcref': type(function('call')), 'string': type('')} " [[options to wrap], preview window expression, [toggle-preview keys...]] @@ -55,10 +56,6 @@ function! fzf#vim#with_preview(...) call remove(args, 0) endif - if !executable('ruby') - return options - endif - let preview = printf(' --preview-window %s --preview "%s"\ %s\ {}', \ window, \ shellescape(s:bin.preview), window =~ 'up\|down' ? '-v' : '') diff --git a/bin/preview.sh b/bin/preview.sh new file mode 100755 index 0000000..d784a4b --- /dev/null +++ b/bin/preview.sh @@ -0,0 +1,44 @@ +#!/bin/bash + +REVERSE="\x1b[7m" +RESET="\x1b[m" + +if [ "$1" == "-v" ]; then + SPLIT=1 + shift +fi + +if [ -z "$1" ]; then + echo "usage: $0 [-v] FILENAME[:LINENO][:IGNORED]" + exit 1 +fi + +IFS=':' read -r -a INPUT <<< "$1" +FILE=${INPUT[0]} +CENTER=${INPUT[1]} + +if [ ! -r "$FILE" ]; then + echo "File not found ${FILE}" + exit 1 +fi + +if [ -z "$CENTER" ]; then + CENTER=1 +fi + +if [ -r /dev/tty ]; then + LINES=$(stty size < /dev/tty | awk '{print $1}') +else + LINES=40 +fi + +if [ -n "$SPLIT" ]; then + LINES=$(($LINES/2)) # using horizontal split +fi +LINES=$(($LINES-2)) # remove preview border + +FIRST=$(($CENTER-$LINES/3)) +FIRST=$(($FIRST < 1 ? 1 : $FIRST)) +LAST=$((${FIRST}+${LINES}-1)) + +awk "NR >= $FIRST && NR <= $LAST {if (NR == $CENTER) printf(\"\x1b[7m%5d %s\n\x1b[m\", NR, \$0); else printf(\"%5d %s\n\", NR, \$0)}" $FILE