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

[plamo:11350] Re: kemacs on plamo 2.2.1



 白方です。一応(?)解決しました。

<20010917065328P.mk@l.email.ne.jp>の記事において
mk@L.email.ne.jpさんは書きました。

>> >  例えば上移動キーの場合、kemacs では ^[OA というシーケンスを
>> >  期待しているようです (実際旧マシンではそのようになっています) が、
>> >  plamo 2.2.1 では ^[[A というシーケンスを返しているようです。
>> これは「カーソルキーモード」の設定という端末の属性を扱うエスケープ
>> シーケンスの仕事です。
>> カーソルキーモードが「アプリケーションカーソルキーモード」の場合は
>> ESC O Aなどを返し、「カーソルキーモード」の場合は ESC [ A などを返
>> します。
>> この切替えは端末に対してエスケープシーケンスを送ることで行います。
>> ESC [ ? 1 h を送るとアプリケーションモードになり、
>> ESC [ ? 1 l を送るとカーソルキーモードになります(最後は小文字のL)。

 なるほど、そういうエスケープシーケンスがあったのですね。
 知りませんでした…。


>> 今まで、kemacsのときだけアプリケーションカーソルキーになっていると
>> すれば、kemacsが起動/復帰の際に自動的にアプリケーションカーソルモ
>> ードへの変更シーケンスを送っている可能性があります。

 ということで、さっそく

% kemacs > log

 として kemacs が送っているコードを調べたところ、確かに旧マシンでは
 最初に ESC [ ? 1 h が出力されていましたが、新マシンではありません
 でした。これが直接の原因、ということですね(ちなみに同じバイナリです)。

 で、どうやらこれは termcap でいうところの ks / ke エントリの
 ようなのですが、新マシンにもちゃんと定義されているように
 見えますし、ソースをちょっと追っかけてみても単に出力してるだけに
 見えるので、なぜ新マシンでこれが出力されていないかは結局謎です(^^;)


 でもまあ、kemacs の前後にエスケープシーケンス送ってやればいい、
 ということは分かったので、その場しのぎ的ですが

#! /bin/sh
echo '^[[?1h'
/usr/local/bin/kemacs $@
echo '^[[?1l'

 というラッパスクリプトを書いてみたところ、ちゃんとカーソルキーが
 使えるようになりました。
 根本的解決ではありませんが、とりあえずこれでよしとします(^^;)

 どうもありがとうございました。


 以下余談ですが、

>> kemacsは使ったことがないのでわかりませんが、GNU Emacsの系列であれ
>> ばsuspend-emacsに対応するhookがあったと思いますから(xemacsでは、
>> suspend-hooksとresume-suspend-hookというのがありました)、これに端
>> 末への文字列送信コマンド(send-string-to-terminalとか)を割り当てる
>> ことで対処ができるかも知れません。

 一応遠い祖先は同じ Emacs なのですが、いわゆる MicroEmacs の
 系列なので、そもそも EmacsLisp じゃなかったりします。
 設定の自由度が GNU Emacs 系ほどないので、設定ファイルだけで
 「ESC [ A を上移動に割り当てる」とかは出来ないのでした。
 その分軽いので愛用しているのですが。

-- 
  ------------------------------------------------------------------- 
 「ばよえ〜ん」			白方 健太郎			     --
				mailto:argrath@ub32.org
				http://argrath.ub32.org/

References
[plamo:11325] Re: kemacs on plamo 2.2.1, Minoru Kimura

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