urxvt の tabbedex プラグインを弄ってみる

昨日弄った tabbedex を自宅の Ubuntu に入れようとして、 半角/全角キーも食われると困るなあと思い、結局、「 ibus で使うんで、食われたら困っちゃうキー」を resource で設定できないと面倒だなあ、ってことで、そうした。

https://github.com/oogatta/urxvt-tabbedex/commit/9452e0725f06112794ccb5d37f9560af210be843

commit 9452e0725f06112794ccb5d37f9560af210be843
Author: oogatta <oogatta@gmail.com>
Date:   Fri Sep 6 18:56:32 2013 +0900

    added tabbed.not-consumable-keys resource.

diff --git a/tabbedex b/tabbedex
index ada0e2f..9cf5814 100755
--- a/tabbedex
+++ b/tabbedex
@@ -320,14 +320,18 @@ sub on_focus_out {
 }
 
 sub on_key_press {
-   my ($self, $event) = @_;
-   $self->{cur}->key_press ($event->{state}, $event->{keycode}, $event->{time});
+   my ($self, $event, $keysym) = @_;
+   if ( $self->_is_key_consumable($keysym) ) {
+      $self->{cur}->key_press ($event->{state}, $event->{keycode}, $event->{time});
+   }
    1;
 }
 
 sub on_key_release {
-   my ($self, $event) = @_;
-   $self->{cur}->key_release ($event->{state}, $event->{keycode}, $event->{time});
+   my ($self, $event, $keysym) = @_;
+   if ( $self->_is_key_consumable($keysym) ) {
+       $self->{cur}->key_release ($event->{state}, $event->{keycode}, $event->{time});
+   }
    1;
 }
 
@@ -409,6 +413,7 @@ sub on_init {
       ($self->my_resource ('no-tabbedex-keys') or 'false') !~ /^(?:false|0|no)/i;
     $self->{reopen_on_close} =
       ($self->my_resource ('reopen-on-close') or 'false') !~ /^(?:false|0|no)/i;
+   $self->{not_consumable_keys} = [split /,\s*/, $self->x_resource('tabbed.not-consumable-keys')];
 
    ();
 }
@@ -518,6 +523,10 @@ sub tab_destroy {
 sub tab_key_press {
    my ($self, $tab, $event, $keysym, $str) = @_;
 
+   unless ( $self->_is_key_consumable($keysym) ) {
+       return ();
+   }
+
    if ($tab->{is_inputting_name}) {
       if ($keysym == 0xff0d || $keysym == 0xff8d) { # enter
          $tab->{name} = $tab->{new_name};
@@ -659,6 +668,12 @@ sub rename_tab {
   ();
 }
 
+sub _is_key_consumable {
+    my ($self, $keysym) = @_;
+
+    return ( scalar(grep { hex($_) == $keysym; } @{$self->{not_consumable_keys}}) > 0 ) ? 0 : 1;
+}
+
 package urxvt::ext::tabbedex::tab;
 
 # helper extension implementing the subwindows of a tabbed terminal.

差分はこんな感じ。

https://github.com/oogatta/dotfiles/blob/master/build/sugaree/Xdefaults.dot#L48

URxvt.keysym.M-t:           perl:tabbedex:new_tab
URxvt.keysym.M-n:           perl:tabbedex:next_tab
URxvt.keysym.M-p:           perl:tabbedex:prev_tab
URxvt.tabbed.no-tabbedex-keys: true
URxvt.tabbed.not-consumable-keys: 0xff22, 0xff23, 0xff2a

~/.Xdefaults の設定はこんな感じ。

しかし CJKV みんな使ってる urxvt 、きっと何か設定があるんじゃなかろうか…。 imLocale とか preeditType は何もしなくても、 tabbed か tabbedex を有効にしなければ ibus で日本語入力できたし( Fedora19 、 Ubuntu13.04 どちらでも)、 OnTheSpot にはなってるんだよなあ…。