From f8720408b2d9ffb4b27d337f75a90874d8c78677 Mon Sep 17 00:00:00 2001 From: gryf Date: Sun, 20 Feb 2022 18:28:30 +0100 Subject: [PATCH] Fixed rename behaviour. Renaming tab was broken by the fact, that renaming process provides custom key_press callback just for it. After renaming was finished, all the keypress shortcuts was gone, since it was done for main package. The solution was to move the rename key press callback into tab scope, so it wont affect main one. --- tabbedalt | 90 ++++++++++++++++++++++++++++++------------------------- 1 file changed, 49 insertions(+), 41 deletions(-) diff --git a/tabbedalt b/tabbedalt index 8fa1c11..5098e73 100644 --- a/tabbedalt +++ b/tabbedalt @@ -136,6 +136,9 @@ # URxvt.keysym.Control-Shift-T: tabbedalt:new_tab:top:htop # # as the tabcommands replacement. +# +# 2022-02-20 18:31:19 +# - Fixed nasty bug in renaming tab. use Scalar::Util; @@ -626,38 +629,6 @@ sub command { } } - -sub _rename_tab_key_press { - my ($self, $event, $keysym, $str) = @_; - my $tab = $self->{cur}; - - if (!defined $keysym) { - return 0; - } - - if ($tab->{is_being_renamed}) { - if ($keysym == 0xff0d || $keysym == 0xff8d) { # enter - $tab->{name} = $tab->{new_name}; - $tab->{is_being_renamed} = 0; - $self->disable('key_press'); - } elsif ($keysym == 0xff1b) { # escape - $tab->{name} = $tab->{old_name}; - $tab->{is_being_renamed} = 0; - $self->disable('key_press'); - } elsif ($keysym == 0xff08) { # backspace - substr $tab->{new_name}, -1, 1, ""; - $tab->{name} = "$tab->{new_name}█"; - } elsif ($str !~ /[\x00-\x1f]/) { - my $text = $tab->locale_decode($str); - $tab->{new_name} .= $text; - $tab->{name} = "$tab->{new_name}█"; - } - $self->refresh; - return 1; - } - 1 -} - sub tab_property_notify { my ($self, $tab, $event) = @_; @@ -701,16 +672,8 @@ sub new_tab { sub rename_tab { my ($self, $params) = @_; my $tab = $self->{cur}; - if ($tab->{is_being_renamed}) { - return 0; - } - $tab->{is_being_renamed} = 1; - $tab->{old_name} = $tab->{name} ? $tab->{name} : ""; - $tab->{new_name} = ""; - $tab->{name} = "█"; - $self->enable('key_press', \&_rename_tab_key_press); + $tab->start_rename_tab; $self->refresh; - return 1; } sub move_tab_left { @@ -806,4 +769,49 @@ sub init { 0 } +sub start_rename_tab { + my ($tab) = @_; + + if ($tab->{is_being_renamed}) { + return 0; + } + $tab->{is_being_renamed} = 1; + $tab->{old_name} = $tab->{name} ? $tab->{name} : ""; + $tab->{new_name} = ""; + $tab->{name} = "█"; + $tab->enable('key_press', \&_rename_tab_key_press); + 1 +} + + +sub _rename_tab_key_press { + my ($tab, $event, $keysym, $str) = @_; + + if (!defined $keysym) { + return 0; + } + + if ($tab->{is_being_renamed}) { + if ($keysym == 0xff0d || $keysym == 0xff8d) { # enter + $tab->{name} = $tab->{new_name}; + $tab->{is_being_renamed} = 0; + $tab->disable('key_press'); + } elsif ($keysym == 0xff1b) { # escape + $tab->{name} = $tab->{old_name}; + $tab->{is_being_renamed} = 0; + $tab->disable('key_press'); + } elsif ($keysym == 0xff08) { # backspace + substr $tab->{new_name}, -1, 1, ""; + $tab->{name} = "$tab->{new_name}█"; + } elsif ($str !~ /[\x00-\x1f]/) { + my $text = $tab->locale_decode($str); + $tab->{new_name} .= $text; + $tab->{name} = "$tab->{new_name}█"; + } + $tab->{main}->refresh; + return 1; + } + 1 +} + # vim: tabstop=3 softtabstop=3 shiftwidth=3 expandtab