only resize window when it is needed

This commit is contained in:
Jorge Morante 2023-09-20 09:21:52 +02:00
parent 24a2479a97
commit 5738d37803
3 changed files with 17 additions and 11 deletions

View File

@ -39,7 +39,7 @@ describe Fingers::Hinter do
alphabet = "asdf".split("") alphabet = "asdf".split("")
hinter = Fingers::Hinter.new( hinter = Fingers::Hinter.new(
input: input, input: input.split("\n"),
width: width, width: width,
patterns: patterns, patterns: patterns,
state: ::Fingers::State.new, state: ::Fingers::State.new,
@ -82,7 +82,7 @@ Changes not staged for commit:
alphabet = "asdf".split("") alphabet = "asdf".split("")
hinter = Fingers::Hinter.new( hinter = Fingers::Hinter.new(
input: input, input: input.split("\n"),
width: width, width: width,
patterns: patterns, patterns: patterns,
state: ::Fingers::State.new, state: ::Fingers::State.new,

View File

@ -65,7 +65,7 @@ module Fingers::Commands
fingers_window.window_id, fingers_window.window_id,
target_pane.pane_width, target_pane.pane_width,
target_pane.pane_height, target_pane.pane_height,
) ) if needs_resize?
view.render view.render
tmux.swap_panes(fingers_window.pane_id, target_pane.pane_id) tmux.swap_panes(fingers_window.pane_id, target_pane.pane_id)
@ -83,6 +83,11 @@ module Fingers::Commands
end end
end end
private def needs_resize?
pane_width = target_pane.pane_width.to_i
pane_contents.any? { |line| line.size > pane_width }
end
private def teardown private def teardown
tmux.set_key_table "root" tmux.set_key_table "root"
@ -115,13 +120,17 @@ module Fingers::Commands
private getter hinter : Hinter do private getter hinter : Hinter do
Fingers::Hinter.new( Fingers::Hinter.new(
input: tmux.capture_pane(target_pane), input: pane_contents,
width: target_pane.pane_width.to_i, width: target_pane.pane_width.to_i,
state: state, state: state,
output: pane_printer output: pane_printer
) )
end end
private getter pane_contents : Array(String) do
tmux.capture_pane(target_pane).split("\n")
end
private getter view : View do private getter view : View do
::Fingers::View.new( ::Fingers::View.new(
hinter: hinter, hinter: hinter,

View File

@ -8,13 +8,12 @@ module Fingers
@formatter : Formatter @formatter : Formatter
@patterns : Array(String) @patterns : Array(String)
@alphabet : Array(String) @alphabet : Array(String)
@lines : Array(String) | Nil
@pattern : Regex | Nil @pattern : Regex | Nil
@hints : Array(String) | Nil @hints : Array(String) | Nil
@n_matches : Int32 | Nil @n_matches : Int32 | Nil
def initialize( def initialize(
input : String, input : Array(String),
width : Int32, width : Int32,
state : Fingers::State, state : Fingers::State,
output : Printer, output : Printer,
@ -23,7 +22,7 @@ module Fingers
huffman = Huffman.new, huffman = Huffman.new,
formatter = ::Fingers::MatchFormatter.new formatter = ::Fingers::MatchFormatter.new
) )
@input = input @lines = input
@width = width @width = width
@hints_by_text = {} of String => String @hints_by_text = {} of String => String
@lookup_table = {} of String => String @lookup_table = {} of String => String
@ -133,10 +132,6 @@ module Fingers
pattern.name_table.compact_map { |k, v| v == "capture" ? k : nil } pattern.name_table.compact_map { |k, v| v == "capture" ? k : nil }
end end
def lines : Array(String)
@lines ||= input.split("\n")
end
def n_matches : Int32 def n_matches : Int32
return @n_matches.as(Int32) if !@n_matches.nil? return @n_matches.as(Int32) if !@n_matches.nil?
@ -152,5 +147,7 @@ module Fingers
match_set.size match_set.size
end end
private property lines : Array(String)
end end
end end