Byobu + GNU screen でFunction Key割り当てを無効にする

Byobuの既定値ではFunction Keyに機能が割り当てられています.

/usr/share/byobu/keybindings/f-keys.screen

自分は使わないし,別のFunction Keyを利用するアプリケーションで利用できなくなるので無効にしています.
無効にする方法をメモしておきます.

適当なテキストエディタで~/.byobu/keybindingsを開きます.viなどの編集モードのあるエディタの場合は編集モードにして,Ctrl+a !(aは設定してあるescape key)を押すと以下のラインが出てくるので頭の:を消して保存します.他にsourceの行がある場合はそれよりも下に書かないと上書きされるので注意.

:source /usr/share/byobu/keybindings/f-keys.screen.disable

環境(Ubuntu 16.04 LTS arm64)によってはこうなりました.$BYOBU_PREFIX/usrだったので実態は同じですね.

:source $BYOBU_PREFIX/share/byobu/keybindings/f-keys.screen.disable

Byobuを起動し直すと反映されているはずです.
Ctrl+a !を使わず同じテキストを書いても問題ないようでした.

Tmuxは利用してないので未検証ですが以下のあたりのファイルで同じような設定ができそうな気がします.

~/.byobu/keybindings.tmux
/usr/share/byobu/keybindings/f-keys.tmux.disable

以下の環境で確認しました.

  • Debian sid amd64
  • Debian stretch armhf/arm64
  • Ubuntu 16.04 LTS amd64/arm64
  • Ubuntu 17.10 amd64

byobu+screenでfunctionkeyを無効にする

機能覚えてないし遠いしたまに間違って押して混乱したりするので無効にしました.
Debian stretch amd64, Ubuntu 16.04 LTS amd64で確認.

$ vi ~/.byobu/keybindings

して

source $BYOBU_PREFIX/share/byobu/keybindings/common

の次の行頭で i して編集モードにした後
Ctrl+a !(aは設定してあるescape key)する.
するとこんなのが出てくるので,

:source /usr/share/byobu/keybindings/f-keys.screen

頭の : を消して

source /usr/share/byobu/keybindings/f-keys.screen.disable

を書いておく

保存して起動しなおして反映.

#viである必然性はないのでお好きなテキストエディタでどうぞ.
#tmuxの場合はこっち~/.byobu/keybindings.tmuxになるのかな?(それとも byobu-select-backend で切り替えるとファイル名入れ替わる?)

Zsh の bindkey に嵌まる

20150910_02:09:18-8531
新しい kernel が降りてきたので再起動したのですが,Ctrl + a の行頭移動や,Ctrl + e の行末移動が使えず ^A^E と表示されるようになってしまいました.Ctrl + U など利用できるものもある.環境は以下のような感じです.

  • OS: Debian testing stretch amd64
  • Shell: zsh 5.0.8
  • byobu backend: screen
  • GNU Screen 4.03.01

GNU Screen を抜けると問題はありません.
最近 GNU Screen のアップデートがあった気がしたので,GNU Screen のせいかな?と思い以前野良ビルドした GNU Screen や Tmux で起動してみましたがこちらでも同じ現象が置きました.
% screen bash の様にして bash を起動すると問題ありません.
GNU Screen 起動後でも bindkey で以下のように設定すると動作します.

% bindkey "^A" beginning-of-line
% bindkey "^E" end-of-line

bindkey のリストを確認すると GNU Screen 起動前 120行,GNU Screen 起動後では 34行と大分少なくなってしまっています.

% echo $TERM
xterm
% bindkey -L | wc -l
120
% echo $TERM
screen-bce
% bindkey -L | wc -l
34

とりあえず GNU Screen 起動前に ~/.zshrcprecmd() の中に bindkey -L の結果を vim で :r!bindkey -L | sed -e 's/^/ /' な感じで貼ってひとまず反映させました.

case "${TERM}" in
screen*|ansi*)
        preexec()
        {
                echo -ne "\ek${1%% 2%% *}\e\\"
        }
        precmd()
        {
                echo -ne "\ek$(basename $SHELL) :::: waiting your command ... > (:3[___]\e\\"
                bindkey -R "^A"-"^C" self-insert
                bindkey "^D" list-choices
                  :
                  :
                  :
 
                  :
                bindkey -R "\M-^@"-"\M-^?" self-insert
        }
        ;;
esac

切り分けのために新しくユーザを作って chsh -s /bin/zsh してまっさらな状態から試すと ~/.zshrc を cp すると現象が起こりました.更に切り分けていくと .zshrc の中の export EDITOR=vim でした.
% EDITOR=vim screen で発症する.% EDITOR=emacs screen はok…….その他 vi NG / jed, nano は ok と vi/vim を指定すると起きるよう.

検索するとこんなページが見つかりました.

環境変数 EDITOR が vi/vim だと Zsh のキーバインドが vim モードになるということのようです.Esc -> 0 で行頭移動,Esc -> Shift+a で行末に.確かに vim モードのようです.ということで ~/.zshrc で emacs モードに設定することで解決しました.(上の方で設定した bindkey の設定は消しました)

export EDITOR=vim
bindkey -e

腑に落ちないのは GNU Screen / Tmux 起動時には起こるけど普通の Zsh 起動時は起きないところ…….

GNU Screen v4.3.0 を少し試す

先日リリースされたGNU Screen 4.3.0 の新機能が気になったのでbuild してみた。

  • New commands:
    • ‘sort’ command sorting windows by title
    • ‘bumpleft’, ‘bumpright’ – manually move windows on window list
    • ‘collapse’ removing numbering ‘gaps’ between windows, by
      renumbering

Build とか

% sudo apt-get install build-essential
% sudo apt-get build-dep screen
% wget http://ftp.gnu.org/gnu/screen/screen-4.3.0.tar.gz http://ftp.gnu.org/gnu/screen/screen-4.3.0.tar.gz.sig
% gpg --verify screen-4.3.0.tar.gz.sig
gpg: assuming signed data in `screen-4.3.0.tar.gz'
gpg: Signature made 2015年06月14日 02時01分43秒 JST using RSA key ID C53EF3A4
gpg: Good signature from "Amadeusz Sławiński <amade@asmblr.net>"
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 2EE5 9A5D 0C50 167B 5535  BBF1 B708 A383 C53E F3A4
% tar tvzf screen-4.3.0.tar.gz
% tar xzf screen-4.3.0.tar.gz
% cd screen-4.3.0
% ./configure --prefix=$HOME/usr/local --enable-colors256 --enable-rxvt_osc --enable-use-locale --enable-pam
% make
% make install
% where screen
/home/mk/usr/local/bin/screen
/usr/bin/screen
% screen --version
Screen version 4.03.00 (GNU) 27-May-15

そして気になっていた新機能を試してみました。

  • New commands:
    • ‘sort’ command sorting windows by title

想像ではawesome みたいにウィンドウの並びが縦横分割されていい感じに並ぶのかなーと思っていたのだけど、大分違った。
Ctrl-a : して sort と打ってみると、

Sorting inside a window is not allowed. Push CTRL-a “ and try again

と言われる。Ctrl + a " してscreen のウィンドウリストを出した状態で再度叩くとこんな感じでウィンドウタイトルでソートされた。

Screenshot from 2015-06-17 19:21:38

ちなみに、

  • ‘bumpleft’, ‘bumpright’ – manually move windows on window list

も試したけどコアダンプしたorz
多分指定ウィンドウを左右に移動出来るのだと思う

[screen caught signal 11. (core dumped)]