wip
This commit is contained in:
parent
661c6210a9
commit
e98baf6ba6
|
@ -7,3 +7,4 @@ vendor/bundle
|
||||||
.cache
|
.cache
|
||||||
.byebug_history
|
.byebug_history
|
||||||
shared
|
shared
|
||||||
|
build/*
|
||||||
|
|
|
@ -0,0 +1,47 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
MRUBY_REV = '1c765dc37a80bf681bbab271b0ba90711d935be9'
|
||||||
|
MRUBY_ROOT = 'build/mruby'
|
||||||
|
RUBY_FILES = [
|
||||||
|
'lib/tmux.rb',
|
||||||
|
'lib/tmux_format_printer.rb',
|
||||||
|
'lib/huffman.rb',
|
||||||
|
'lib/priority_queue.rb',
|
||||||
|
'lib/fingers/version.rb',
|
||||||
|
'lib/fingers/dirs.rb',
|
||||||
|
'lib/fingers/config.rb',
|
||||||
|
'lib/fingers/commands.rb',
|
||||||
|
'lib/fingers/commands/base.rb',
|
||||||
|
'lib/fingers/commands/show_version.rb',
|
||||||
|
'lib/fingers/commands/load_config.rb',
|
||||||
|
'lib/fingers/commands/start.rb',
|
||||||
|
'lib/fingers/cli.rb',
|
||||||
|
|
||||||
|
'lib/fingers/hinter.rb',
|
||||||
|
'lib/fingers/logger.rb',
|
||||||
|
'lib/fingers/view.rb',
|
||||||
|
'lib/fingers/match_formatter.rb',
|
||||||
|
|
||||||
|
'lib/main.rb'
|
||||||
|
].freeze
|
||||||
|
|
||||||
|
directory MRUBY_ROOT do |_t|
|
||||||
|
sh "git clone git@github.com:mruby/mruby #{MRUBY_ROOT}"
|
||||||
|
Dir.chdir('build/mruby') do
|
||||||
|
sh "git checkout #{MRUBY_REV}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
desc 'Compile mruby'
|
||||||
|
task build_mruby: [MRUBY_ROOT] do
|
||||||
|
Dir.chdir('build/mruby') do
|
||||||
|
sh 'MRUBY_CONFIG=../../build_config.rb rake'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
desc 'Compile tmux-fingers'
|
||||||
|
task compile: ['build_mruby'] do
|
||||||
|
sh "#{MRUBY_ROOT}/bin/mrbc -B main_ruby -o build/bytecode.c #{RUBY_FILES.join(' ')}"
|
||||||
|
sh "gcc -std=c99 -I#{MRUBY_ROOT}/include main.c -o build/tmux-fingers #{MRUBY_ROOT}/build/host/lib/libmruby.a -lm"
|
||||||
|
sh 'echo tmux-fingers build complete'
|
||||||
|
end
|
|
@ -0,0 +1,90 @@
|
||||||
|
MRuby::Build.new do |conf|
|
||||||
|
# load specific toolchain settings
|
||||||
|
conf.toolchain
|
||||||
|
|
||||||
|
# Use mrbgems
|
||||||
|
conf.gem :core => 'mruby-sleep'
|
||||||
|
conf.gem :github => 'iij/mruby-env'
|
||||||
|
conf.gem :github => 'mttech/mruby-getopts'
|
||||||
|
conf.gem :github => 'ksss/mruby-singleton'
|
||||||
|
conf.gem :github => 'iij/mruby-tempfile'
|
||||||
|
conf.gem :github => 'mattn/mruby-onig-regexp' do |g|
|
||||||
|
g.bundle_onigmo
|
||||||
|
end
|
||||||
|
conf.gem :github => 'katzer/mruby-logger'
|
||||||
|
conf.gem :github => 'mattn/mruby-json'
|
||||||
|
# conf.gem 'examples/mrbgems/ruby_extension_example'
|
||||||
|
# conf.gem 'examples/mrbgems/c_extension_example' do |g|
|
||||||
|
# g.cc.flags << '-g' # append cflags in this gem
|
||||||
|
# end
|
||||||
|
# conf.gem 'examples/mrbgems/c_and_ruby_extension_example'
|
||||||
|
conf.gem :core => 'mruby-eval'
|
||||||
|
# conf.gem :mgem => 'mruby-onig-regexp'
|
||||||
|
# conf.gem :github => 'mattn/mruby-onig-regexp'
|
||||||
|
# conf.gem :git => 'git@github.com:mattn/mruby-onig-regexp.git', :branch => 'master', :options => '-v'
|
||||||
|
|
||||||
|
# include the GEM box
|
||||||
|
conf.gembox 'default'
|
||||||
|
|
||||||
|
# C compiler settings
|
||||||
|
# conf.cc do |cc|
|
||||||
|
# cc.command = ENV['CC'] || 'gcc'
|
||||||
|
# cc.flags = [ENV['CFLAGS'] || %w()]
|
||||||
|
# cc.include_paths = ["#{root}/include"]
|
||||||
|
# cc.defines = %w()
|
||||||
|
# cc.option_include_path = %q[-I"%s"]
|
||||||
|
# cc.option_define = '-D%s'
|
||||||
|
# cc.compile_options = %Q[%{flags} -MMD -o "%{outfile}" -c "%{infile}"]
|
||||||
|
# end
|
||||||
|
|
||||||
|
# mrbc settings
|
||||||
|
# conf.mrbc do |mrbc|
|
||||||
|
# mrbc.compile_options = "-g -B%{funcname} -o-" # The -g option is required for line numbers
|
||||||
|
# end
|
||||||
|
|
||||||
|
# Linker settings
|
||||||
|
# conf.linker do |linker|
|
||||||
|
# linker.command = ENV['LD'] || 'gcc'
|
||||||
|
# linker.flags = [ENV['LDFLAGS'] || []]
|
||||||
|
# linker.flags_before_libraries = []
|
||||||
|
# linker.libraries = %w()
|
||||||
|
# linker.flags_after_libraries = []
|
||||||
|
# linker.library_paths = []
|
||||||
|
# linker.option_library = '-l%s'
|
||||||
|
# linker.option_library_path = '-L%s'
|
||||||
|
# linker.link_options = %Q[%{flags} -o "%{outfile}" %{objs} %{libs}]
|
||||||
|
# end
|
||||||
|
|
||||||
|
# Archiver settings
|
||||||
|
# conf.archiver do |archiver|
|
||||||
|
# archiver.command = ENV['AR'] || 'ar'
|
||||||
|
# archiver.archive_options = 'rs "%{outfile}" %{objs}'
|
||||||
|
# end
|
||||||
|
|
||||||
|
# Parser generator settings
|
||||||
|
# conf.yacc do |yacc|
|
||||||
|
# yacc.command = ENV['YACC'] || 'bison'
|
||||||
|
# yacc.compile_options = %q[-o "%{outfile}" "%{infile}"]
|
||||||
|
# end
|
||||||
|
|
||||||
|
# gperf settings
|
||||||
|
# conf.gperf do |gperf|
|
||||||
|
# gperf.command = 'gperf'
|
||||||
|
# gperf.compile_options = %q[-L ANSI-C -C -p -j1 -i 1 -g -o -t -N mrb_reserved_word -k"1,3,$" "%{infile}" > "%{outfile}"]
|
||||||
|
# end
|
||||||
|
|
||||||
|
# file extensions
|
||||||
|
# conf.exts do |exts|
|
||||||
|
# exts.object = '.o'
|
||||||
|
# exts.executable = '' # '.exe' if Windows
|
||||||
|
# exts.library = '.a'
|
||||||
|
# end
|
||||||
|
|
||||||
|
# file separator
|
||||||
|
# conf.file_separator = '/'
|
||||||
|
|
||||||
|
# Turn on `enable_debug` for better debugging
|
||||||
|
# conf.enable_debug
|
||||||
|
conf.enable_bintest
|
||||||
|
conf.enable_test
|
||||||
|
end
|
|
@ -0,0 +1,47 @@
|
||||||
|
---
|
||||||
|
mruby:
|
||||||
|
version: 3.2.0
|
||||||
|
release_no: 30200
|
||||||
|
git_commit: 1c765dc37a80bf681bbab271b0ba90711d935be9
|
||||||
|
builds:
|
||||||
|
host:
|
||||||
|
https://github.com/iij/mruby-env.git:
|
||||||
|
url: https://github.com/iij/mruby-env.git
|
||||||
|
branch: HEAD
|
||||||
|
commit: 056ae324451ef16a50c7887e117f0ea30921b71b
|
||||||
|
version: 0.0.0
|
||||||
|
https://github.com/mttech/mruby-getopts.git:
|
||||||
|
url: https://github.com/mttech/mruby-getopts.git
|
||||||
|
branch: HEAD
|
||||||
|
commit: 32878292c1162a911b39e1e0810a28ab2cb83f6a
|
||||||
|
version: 0.0.0
|
||||||
|
https://github.com/ksss/mruby-singleton.git:
|
||||||
|
url: https://github.com/ksss/mruby-singleton.git
|
||||||
|
branch: HEAD
|
||||||
|
commit: 73dd4bae1a47d82e49b8f85bf27f49ec4462052e
|
||||||
|
version: 0.0.0
|
||||||
|
https://github.com/iij/mruby-tempfile.git:
|
||||||
|
url: https://github.com/iij/mruby-tempfile.git
|
||||||
|
branch: HEAD
|
||||||
|
commit: 9b883438547020dae328e34c8a2fe736171cd0ab
|
||||||
|
version: 0.0.0
|
||||||
|
https://github.com/mattn/mruby-onig-regexp.git:
|
||||||
|
url: https://github.com/mattn/mruby-onig-regexp.git
|
||||||
|
branch: HEAD
|
||||||
|
commit: 074325207f9181ad242ffb8de34072607164f57f
|
||||||
|
version: 0.0.0
|
||||||
|
https://github.com/katzer/mruby-logger.git:
|
||||||
|
url: https://github.com/katzer/mruby-logger.git
|
||||||
|
branch: HEAD
|
||||||
|
commit: f794ef6f6ceff1794d02a6d9cfc1d281bdfcad21
|
||||||
|
version: 0.0.0
|
||||||
|
https://github.com/iij/mruby-iijson.git:
|
||||||
|
url: https://github.com/iij/mruby-iijson.git
|
||||||
|
branch: HEAD
|
||||||
|
commit: c5e730c30090d3cddae258f57ab9508edb3e9fce
|
||||||
|
version: 0.0.0
|
||||||
|
https://github.com/mattn/mruby-json.git:
|
||||||
|
url: https://github.com/mattn/mruby-json.git
|
||||||
|
branch: HEAD
|
||||||
|
commit: f99d9428025469f2400f93c53b185f65f963e507
|
||||||
|
version: 0.0.0
|
|
@ -1,5 +1,3 @@
|
||||||
#!/usr/bin/env ruby
|
|
||||||
|
|
||||||
module Fingers
|
module Fingers
|
||||||
class CLI
|
class CLI
|
||||||
def initialize(args, cli_path)
|
def initialize(args, cli_path)
|
||||||
|
@ -15,6 +13,8 @@ module Fingers
|
||||||
Fingers::Commands::Start
|
Fingers::Commands::Start
|
||||||
when "check_version"
|
when "check_version"
|
||||||
Fingers::Commands::CheckVersion
|
Fingers::Commands::CheckVersion
|
||||||
|
when "show_version"
|
||||||
|
Fingers::Commands::ShowVersion
|
||||||
when "send_input"
|
when "send_input"
|
||||||
Fingers::Commands::SendInput
|
Fingers::Commands::SendInput
|
||||||
when "load_config"
|
when "load_config"
|
||||||
|
@ -28,6 +28,7 @@ module Fingers
|
||||||
begin
|
begin
|
||||||
command_class.new(args, cli_path).run
|
command_class.new(args, cli_path).run
|
||||||
rescue => e
|
rescue => e
|
||||||
|
puts e
|
||||||
Fingers.logger.error(e)
|
Fingers.logger.error(e)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,12 +4,12 @@ class Fingers::Commands::LoadConfig < Fingers::Commands::Base
|
||||||
FINGERS_FILE_PATH = "#{ENV["HOME"]}/.fingersrc"
|
FINGERS_FILE_PATH = "#{ENV["HOME"]}/.fingersrc"
|
||||||
|
|
||||||
DEFAULT_PATTERNS = {
|
DEFAULT_PATTERNS = {
|
||||||
ip: '\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}',
|
#ip: '\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}',
|
||||||
uuid: "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}",
|
#uuid: "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}",
|
||||||
sha: "[0-9a-f]{7,128}",
|
#sha: "[0-9a-f]{7,128}",
|
||||||
digit: "[0-9]{4,}",
|
digit: "[0-9]{4,}",
|
||||||
url: "((https?://|git@|git://|ssh://|ftp://|file:///)[^ ()'\"]+)",
|
#url: "((https?://|git@|git://|ssh://|ftp://|file:///)[^ ()'\"]+)",
|
||||||
path: '(([.\\w\\-~\\$@]+)?(/[.\\w\\-@]+)+/?)'
|
#path: '(([.\\w\\-~\\$@]+)?(/[.\\w\\-@]+)+/?)'
|
||||||
}.freeze
|
}.freeze
|
||||||
|
|
||||||
ALPHABET_MAP = {
|
ALPHABET_MAP = {
|
||||||
|
@ -74,17 +74,6 @@ class Fingers::Commands::LoadConfig < Fingers::Commands::Base
|
||||||
|
|
||||||
Fingers.config.alphabet = ALPHABET_MAP[Fingers.config.keyboard_layout.to_sym].split("")
|
Fingers.config.alphabet = ALPHABET_MAP[Fingers.config.keyboard_layout.to_sym].split("")
|
||||||
|
|
||||||
fingers_file_require_path = File.expand_path(FINGERS_FILE_PATH, __dir__)
|
|
||||||
|
|
||||||
Fingers.logger.debug("Config: #{FINGERS_FILE_PATH}")
|
|
||||||
Fingers.logger.debug("fingers_file_require_path: #{fingers_file_require_path}")
|
|
||||||
|
|
||||||
if File.exist?(FINGERS_FILE_PATH)
|
|
||||||
`cp #{FINGERS_FILE_PATH} /tmp/fingersrc.rb`
|
|
||||||
require "/tmp/fingersrc"
|
|
||||||
`rm /tmp/fingersrc.rb`
|
|
||||||
end
|
|
||||||
|
|
||||||
Fingers.save_config
|
Fingers.save_config
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -94,10 +83,9 @@ class Fingers::Commands::LoadConfig < Fingers::Commands::Base
|
||||||
|
|
||||||
def setup_bindings
|
def setup_bindings
|
||||||
input_mode = "fingers-mode"
|
input_mode = "fingers-mode"
|
||||||
ruby_bin = "#{RbConfig.ruby} --disable-gems"
|
|
||||||
|
|
||||||
`tmux bind-key #{Fingers.config.key} run-shell -b "#{ruby_bin} #{cli} start '#{input_mode}' '\#{pane_id}' self >>#{Fingers::Dirs::LOG_PATH} 2>&1"`
|
`tmux bind-key #{Fingers.config.key} run-shell -b "#{cli} start '#{input_mode}' '\#{pane_id}' self >>#{Fingers::Dirs::LOG_PATH} 2>&1"`
|
||||||
`tmux bind-key O run-shell -b "#{ruby_bin} #{cli} start '#{input_mode}' '\#{pane_id}' other >>#{Fingers::Dirs::LOG_PATH} 2>&1"`
|
`tmux bind-key O run-shell -b "#{cli} start '#{input_mode}' '\#{pane_id}' other >>#{Fingers::Dirs::LOG_PATH} 2>&1"`
|
||||||
|
|
||||||
setup_fingers_mode_bindings if input_mode == "fingers-mode"
|
setup_fingers_mode_bindings if input_mode == "fingers-mode"
|
||||||
end
|
end
|
||||||
|
@ -148,12 +136,12 @@ class Fingers::Commands::LoadConfig < Fingers::Commands::Base
|
||||||
def valid_option?(option)
|
def valid_option?(option)
|
||||||
option_method = option_to_method(option)
|
option_method = option_to_method(option)
|
||||||
|
|
||||||
|
puts "option method #{option_method}"
|
||||||
Fingers.config.respond_to?(option_method) || option.match(/^@fingers-pattern-\d+$/)
|
Fingers.config.respond_to?(option_method) || option.match(/^@fingers-pattern-\d+$/)
|
||||||
end
|
end
|
||||||
|
|
||||||
def ensure_cache_folder
|
def ensure_cache_folder
|
||||||
require "fileutils"
|
`mkdir -p #{Fingers::Dirs::CACHE}`
|
||||||
FileUtils.mkdir_p(Fingers::Dirs::CACHE) unless File.exist?(Fingers::Dirs::CACHE)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def fingers_options_names
|
def fingers_options_names
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
class Fingers::Commands::ShowVersion < Fingers::Commands::Base
|
||||||
|
def run
|
||||||
|
puts "tmux-fingers #{Fingers::VERSION}"
|
||||||
|
end
|
||||||
|
end
|
|
@ -29,6 +29,7 @@ class Fingers::Commands::Start < Fingers::Commands::Base
|
||||||
)
|
)
|
||||||
|
|
||||||
def run
|
def run
|
||||||
|
Fingers.logger.info("args: #{args.to_json}")
|
||||||
_, _input_mode, from_pane_id, target = args
|
_, _input_mode, from_pane_id, target = args
|
||||||
|
|
||||||
Fingers.logger.debug("from_pane_id: #{from_pane_id}")
|
Fingers.logger.debug("from_pane_id: #{from_pane_id}")
|
||||||
|
@ -39,7 +40,9 @@ class Fingers::Commands::Start < Fingers::Commands::Base
|
||||||
track_options_to_restore!
|
track_options_to_restore!
|
||||||
|
|
||||||
show_hints
|
show_hints
|
||||||
handle_input
|
|
||||||
|
sleep 2
|
||||||
|
#handle_input
|
||||||
teardown
|
teardown
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -174,6 +177,8 @@ class Fingers::Commands::Start < Fingers::Commands::Base
|
||||||
from_pane = tmux.pane_by_id(from_pane_id)
|
from_pane = tmux.pane_by_id(from_pane_id)
|
||||||
return from_pane if target == "self"
|
return from_pane if target == "self"
|
||||||
|
|
||||||
|
Fingers.logger.info("from pane #{from_pane_id}")
|
||||||
|
Fingers.logger.info("target #{target}")
|
||||||
sibling_panes = tmux.panes_by_window_id(from_pane.window_id)
|
sibling_panes = tmux.panes_by_window_id(from_pane.window_id)
|
||||||
|
|
||||||
# TODO display message or pick pane
|
# TODO display message or pick pane
|
||||||
|
|
|
@ -43,7 +43,7 @@ module Fingers
|
||||||
|
|
||||||
def self.config
|
def self.config
|
||||||
$config ||= Fingers.load_from_cache
|
$config ||= Fingers.load_from_cache
|
||||||
rescue
|
rescue StandardError => e
|
||||||
$config ||= ConfigStruct.new
|
$config ||= ConfigStruct.new
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -52,14 +52,54 @@ module Fingers
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.save_config
|
def self.save_config
|
||||||
File.write(CONFIG_PATH, Marshal.dump(Fingers.config))
|
f = File.open(CONFIG_PATH, 'w')
|
||||||
|
json = {}
|
||||||
|
output = "_config = ConfigStruct.new\n"
|
||||||
|
ConfigStruct.members.map do |member|
|
||||||
|
value = Fingers.escape_control_chars(Fingers.config.send(member))
|
||||||
|
|
||||||
|
if value.is_a?(String)
|
||||||
|
output += "_config.#{member} = \"#{value.gsub('"', '\"')}\"\n"
|
||||||
|
end
|
||||||
|
|
||||||
|
# Assuming all arrays are string arrays for now
|
||||||
|
if value.is_a?(Array)
|
||||||
|
output += "_config.#{member} = ["
|
||||||
|
output += value.map {|val| "\"#{val.gsub('"', '\"')}\"" }.join(", ")
|
||||||
|
output += "]\n"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
output += '_config'
|
||||||
|
f.write(output)
|
||||||
|
f.close
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.load_from_cache
|
def self.load_from_cache
|
||||||
Fingers.benchmark_stamp("load-config-from-cache:start")
|
#Fingers.benchmark_stamp("load-config-from-cache:start")
|
||||||
result = Marshal.load(File.open(CONFIG_PATH))
|
config_file = File.open(CONFIG_PATH)
|
||||||
Fingers.benchmark_stamp("load-config-from-cache:end")
|
|
||||||
result
|
config = Kernel.eval(config_file.read)
|
||||||
|
#json.keys.each do |member|
|
||||||
|
#config.send("#{member}=".to_sym, json[member])
|
||||||
|
#end
|
||||||
|
config
|
||||||
|
#Fingers.benchmark_stamp("load-config-from-cache:end")
|
||||||
|
#result
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.escape_control_chars(value)
|
||||||
|
if value.is_a?(String)
|
||||||
|
value = value.gsub(/[\x00-\x1f]/) do |match|
|
||||||
|
"\\u%04x" % match.ord
|
||||||
|
end
|
||||||
|
elsif value.is_a?(Array)
|
||||||
|
value.map! { |v| escape_control_chars(v) }
|
||||||
|
elsif value.is_a?(Hash)
|
||||||
|
value.each do |k, v|
|
||||||
|
value[k] = escape_control_chars(v)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
value
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.configure
|
def self.configure
|
||||||
|
|
|
@ -1,11 +1,9 @@
|
||||||
module Fingers::Dirs
|
module Fingers::Dirs
|
||||||
tmux_pid = (ENV["TMUX"] || ",0000").split(",")[1]
|
tmux_pid = (ENV["TMUX"] || ",0000").split(",")[1]
|
||||||
FINGERS_REPO_ROOT = Pathname.new(__dir__).parent.parent
|
root = "#{Dir.tmpdir}/tmux-fingers".freeze
|
||||||
|
|
||||||
root = Pathname.new(Dir.tmpdir) / "tmux-fingers"
|
LOG_PATH = "#{root}/mruby-fingers.log".freeze
|
||||||
|
CACHE = "#{root}/tmux-#{tmux_pid}".freeze
|
||||||
LOG_PATH = FINGERS_REPO_ROOT / "fingers.log"
|
CONFIG_PATH = "#{CACHE}/fingers.mruby.config".freeze
|
||||||
CACHE = root / "tmux-#{tmux_pid}"
|
SOCKET_PATH = "#{CACHE}/fingers.mruby.sock".freeze
|
||||||
CONFIG_PATH = CACHE / "fingers.config"
|
|
||||||
SOCKET_PATH = CACHE / "fingers.sock"
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -56,6 +56,7 @@ class ::Fingers::Hinter
|
||||||
end
|
end
|
||||||
|
|
||||||
def process_line(line, ending)
|
def process_line(line, ending)
|
||||||
|
Fingers.logger.info("processing line")
|
||||||
result = line.gsub(pattern) { |_m| replace($~) }
|
result = line.gsub(pattern) { |_m| replace($~) }
|
||||||
output.print(result + ending)
|
output.print(result + ending)
|
||||||
end
|
end
|
||||||
|
@ -73,16 +74,18 @@ class ::Fingers::Hinter
|
||||||
def replace(match)
|
def replace(match)
|
||||||
text = match[0]
|
text = match[0]
|
||||||
|
|
||||||
captured_text = match && match.named_captures["capture"] || text
|
#captured_text = match && match.named_captures["capture"] || text
|
||||||
|
captured_text = match && match || text
|
||||||
|
|
||||||
if match.named_captures["capture"]
|
#if match.named_captures["capture"]
|
||||||
match_start, match_end = match.offset(0)
|
#match_start, match_end = match.offset(0)
|
||||||
capture_start, capture_end = match.offset(:capture)
|
#capture_start, capture_end = match.offset(:capture)
|
||||||
|
|
||||||
capture_offset = [capture_start - match_start, capture_end - capture_start]
|
#capture_offset = [capture_start - match_start, capture_end - capture_start]
|
||||||
else
|
#else
|
||||||
capture_offset = nil
|
capture_offset = nil
|
||||||
end
|
#end
|
||||||
|
|
||||||
|
|
||||||
if hints_by_text.has_key?(captured_text)
|
if hints_by_text.has_key?(captured_text)
|
||||||
hint = hints_by_text[captured_text]
|
hint = hints_by_text[captured_text]
|
||||||
|
@ -91,6 +94,7 @@ class ::Fingers::Hinter
|
||||||
hints_by_text[captured_text] = hint
|
hints_by_text[captured_text] = hint
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
# TODO: this should be output hint without ansi escape sequences
|
# TODO: this should be output hint without ansi escape sequences
|
||||||
formatter.format(
|
formatter.format(
|
||||||
hint: hint,
|
hint: hint,
|
||||||
|
@ -98,10 +102,11 @@ class ::Fingers::Hinter
|
||||||
selected: state.selected_hints.include?(hint),
|
selected: state.selected_hints.include?(hint),
|
||||||
offset: capture_offset
|
offset: capture_offset
|
||||||
)
|
)
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def lines
|
def lines
|
||||||
@lines ||= input.force_encoding("UTF-8").split("\n")
|
@lines ||= input.split("\n")
|
||||||
end
|
end
|
||||||
|
|
||||||
def n_matches
|
def n_matches
|
||||||
|
@ -112,6 +117,9 @@ class ::Fingers::Hinter
|
||||||
Fingers.benchmark_stamp("counting-matches:start")
|
Fingers.benchmark_stamp("counting-matches:start")
|
||||||
|
|
||||||
lines.each do |line|
|
lines.each do |line|
|
||||||
|
Fingers.logger.info("line: #{line}")
|
||||||
|
Fingers.logger.info("pattern: #{pattern}")
|
||||||
|
Fingers.logger.info("----")
|
||||||
line.scan(pattern) do |match|
|
line.scan(pattern) do |match|
|
||||||
match_set.add($&)
|
match_set.add($&)
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
require "logger"
|
|
||||||
|
|
||||||
module Fingers
|
module Fingers
|
||||||
def self.logger
|
def self.logger
|
||||||
return @logger if @logger
|
return @logger if @logger
|
||||||
|
@ -12,7 +10,7 @@ module Fingers
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.benchmark_stamp(tag)
|
def self.benchmark_stamp(tag)
|
||||||
Fingers.logger.debug("benchmark:#{tag} #{Process.clock_gettime(Process::CLOCK_MONOTONIC)}")
|
#Fingers.logger.debug("benchmark:#{tag} #{Process.clock_gettime(Process::CLOCK_MONOTONIC)}")
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.trace_for_tests_do_not_remove_or_the_whole_fabric_of_reality_will_tear_apart_with_unforeseen_consequences(msg)
|
def self.trace_for_tests_do_not_remove_or_the_whole_fabric_of_reality_will_tear_apart_with_unforeseen_consequences(msg)
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
module Kernel
|
||||||
|
def system(*args)
|
||||||
|
`#{args.join(' ')}`
|
||||||
|
$? == 0
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
puts "hello"
|
||||||
|
begin
|
||||||
|
absolute_fingers_path = "/home/morantron/hacking/tmux-fingers/build/tmux-fingers"
|
||||||
|
ARGV.shift
|
||||||
|
Fingers::CLI.new(ARGV, absolute_fingers_path).run
|
||||||
|
rescue StandardError => e
|
||||||
|
puts "error"
|
||||||
|
puts e
|
||||||
|
puts e.backtrace
|
||||||
|
end
|
||||||
|
puts "goodbye"
|
|
@ -209,7 +209,7 @@ class Tmux
|
||||||
end
|
end
|
||||||
|
|
||||||
def socket_flag_value
|
def socket_flag_value
|
||||||
return ENV["FINGERS_TMUX_SOCKET"] if ENV["FINGERS_TMUX_SOCKET"]
|
#return ENV["FINGERS_TMUX_SOCKET"] if ENV["FINGERS_TMUX_SOCKET"]
|
||||||
socket
|
socket
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
#include <mruby.h>
|
||||||
|
#include <mruby/irep.h>
|
||||||
|
#include <mruby/array.h>
|
||||||
|
#include "./build/bytecode.c"
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
mrb_state *mrb = mrb_open();
|
||||||
|
if (!mrb) { /* handle error */ }
|
||||||
|
|
||||||
|
// Create a new mrb_value array to hold the command-line arguments
|
||||||
|
mrb_value args = mrb_ary_new_capa(mrb, argc);
|
||||||
|
|
||||||
|
// Convert each command-line argument to an mrb_value and add it to the array
|
||||||
|
for (int i = 0; i < argc; i++) {
|
||||||
|
mrb_ary_push(mrb, args, mrb_str_new_cstr(mrb, argv[i]));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set the ARGV constant to the array of command-line arguments
|
||||||
|
mrb_define_global_const(mrb, "ARGV", args);
|
||||||
|
|
||||||
|
mrb_load_irep(mrb, main_ruby);
|
||||||
|
mrb_close(mrb);
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue