[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[plamo:11325] Re: kemacs on plamo 2.2.1



木村です。

>  例えば上移動キーの場合、kemacs では ^[OA というシーケンスを
>  期待しているようです (実際旧マシンではそのようになっています) が、
>  plamo 2.2.1 では ^[[A というシーケンスを返しているようです。

これは「カーソルキーモード」の設定という端末の属性を扱うエスケープ
シーケンスの仕事です。
カーソルキーモードが「アプリケーションカーソルキーモード」の場合は
ESC O Aなどを返し、「カーソルキーモード」の場合は ESC [ A などを返
します。

この切替えは端末に対してエスケープシーケンスを送ることで行います。

ESC [ ? 1 h を送るとアプリケーションモードになり、
ESC [ ? 1 l を送るとカーソルキーモードになります(最後は小文字のL)。

実際のコマンドでは echo '^[[?1h'; cat と入力し、カーソルキーを押し
てみると動作の違いがわかります。ESC(^[)の入力は、C-v ESC です。

> # 今試して気付いたのですが、単に"cat"として、上移動キーを押してみると、
> # 新マシン旧マシンともに ^[[A を返すのですね…ますますわけわかめです(~^;)

今まで、kemacsのときだけアプリケーションカーソルキーになっていると
すれば、kemacsが起動/復帰の際に自動的にアプリケーションカーソルモ
ードへの変更シーケンスを送っている可能性があります。
kemacsは使ったことがないのでわかりませんが、GNU Emacsの系列であれ
ばsuspend-emacsに対応するhookがあったと思いますから(xemacsでは、
suspend-hooksとresume-suspend-hookというのがありました)、これに端
末への文字列送信コマンド(send-string-to-terminalとか)を割り当てる
ことで対処ができるかも知れません。

その他に、もっと泥臭い方法として
「Emacs-lispライブラリ/term/lk201.el」を読むという方法もあります。
これには具体的にキーシーケンスの割当て方法が書いてあります。

>  こういうものは termcap の設定か、と思ったのですが、
>  どちらも term の値は vt100 ですし、 termcap も
>  (流し読みした限りでは) 関係するところは同じに見えます。

こういうのは、たぶんANSIの規格とか、VT端末のマニュアルを読まないと
わからないでしょう。

/木村

Follow-Ups
[plamo:11350] Re: kemacs on plamo 2.2.1, argrath
References
[plamo:11324] kemacs on plamo 2.2.1, argrath

[検索ページ] [メール一覧]
Plamo ML 公開システム