From 95aea6b533e71e478d61d18fac71cca116c56a4d Mon Sep 17 00:00:00 2001 From: Michael Smith Date: Sun, 22 May 2022 22:47:23 +0100 Subject: Add all the plugins I currently use --- start/fzf/bin/preview.rb | 59 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 start/fzf/bin/preview.rb (limited to 'start/fzf/bin/preview.rb') diff --git a/start/fzf/bin/preview.rb b/start/fzf/bin/preview.rb new file mode 100644 index 0000000..cc8260b --- /dev/null +++ b/start/fzf/bin/preview.rb @@ -0,0 +1,59 @@ +#!/usr/bin/env ruby +# +# usage: ./preview.rb FILENAME[:LINE][:IGNORED] + +require 'open3' +require 'shellwords' + +COMMAND = ENV.fetch( + 'FZF_PREVIEW_COMMAND', + %[bat --style=numbers --color=always {} || highlight -O ansi -l {} || coderay {} || rougify {} || cat {}] +) +ANSI = /\x1b\[[0-9;]*m/ +REVERSE = "\x1b[7m" +RESET = "\x1b[m" + +def usage + puts "usage: #$0 FILENAME[:LINENO][:IGNORED]" + exit 1 +end + +usage if ARGV.empty? + +file, center, extra = ARGV.first.split(':') +if ARGV.first =~ /^[A-Z]:\\/ + file << ':' + center + center = extra +end +usage unless file + +path = File.expand_path(file) +unless File.readable? path + puts "File not found: #{file}" + exit 1 +end + +if `file --dereference --mime "#{file}"` =~ /binary/ + puts "#{file} is a binary file" + exit 0 +end + +center = (center || 0).to_i +height = + if ENV['LINES'] + ENV['LINES'].to_i + else + File.readable?('/dev/tty') ? `stty size < /dev/tty`.split.first.to_i : 40 + end +offset = [1, center - height / 3].max + +Open3.popen3(COMMAND.gsub('{}', Shellwords.shellescape(path))) do |_in, out, _err| + out.each_line.drop(offset - 1).take(height).each_with_index do |line, lno| + if lno + offset == center + puts REVERSE + line.chomp.gsub(ANSI) { |m| m + REVERSE } + RESET + else + puts line + end + end +end +print RESET -- cgit v1.2.3