Google グループは Usenet の新規の投稿と購読のサポートを終了しました。過去のコンテンツは引き続き閲覧できます。
Dismiss

C-,とC-.への割り当て

閲覧: 151 回
最初の未読メッセージにスキップ

HIROSE, Masaaki

未読、
2004/02/18 8:12:572004/02/18
To:
ひろせといいます

Emacs 21.3 と (2004-02-15頃の) 21.3.50 を使っています。

C-, と C-. に関数を割り当てようと、~/.emacs に

(global-set-key [?\C-,] '(lambda() (interactive) (scroll-down 1)))
(global-set-key [?\C-.] '(lambda() (interactive) (scroll-up 1)))

と書きました。

X な emacs だと期待通りの挙動なのですが、emacs -nw だと C-, を押すと『,』
が、C-. を押すと『.』が入力されてしまいます。ターミナルの中の emacs
で C-, と C-. に関数を割り当てるのにはどうすればよいのでしょうか? 何か
情報をお持ちでしたらよろしくおねがいします。

--
ひろせ

Junn Ohta

未読、
2004/02/18 8:31:562004/02/18
To:
fj.editor.emacsの記事<yf1n07gedk6.wl%hiro...@t3.rim.or.jp>で
hiro...@t3.rim.or.jpさんは書きました。

> X な emacs だと期待通りの挙動なのですが、emacs -nw だと C-, を押すと『,』
> が、C-. を押すと『.』が入力されてしまいます。ターミナルの中の emacs
> で C-, と C-. に関数を割り当てるのにはどうすればよいのでしょうか?

たぶん不可能です。

ターミナルの上で動いているアプリケーションにはター
ミナル経由で文字コードしか渡せません。ASCII文字の
制御コードは0x00~0x1fの32種類しかなく、0x40~0x5f
の文字とCtrlキーの同時押しに割り当てられています。
つまり使える組み合わせは以下のものだけです。
C-@(C-SPC), C-a ~ C-z, C-[, C-\, C-], C-^, C-_

X上ではすべてのキーがイベントを起こすので、任意の
通常キーと任意のモディファイキーの組み合わせを使え
るわけですが、ターミナルではそうはいかないというこ
とですね。
--
太田純(Junn Ohta) (株)リコー/新横浜事業所
oh...@sdg.mdd.ricoh.co.jp

HIROSE, Masaaki

未読、
2004/02/18 20:03:292004/02/18
To:
ひろせです

on "Re: C-,と C-. への割り当て"
<c0vpgc$179$1...@ns.src.ricoh.co.jp>
at 18 Feb 2004 13:31:56 GMT
oh...@src.ricoh.co.jp (Junn Ohta) wrote:

> > X な emacs だと期待通りの挙動なのですが、emacs -nw だと C-, を押すと『,』
> > が、C-. を押すと『.』が入力されてしまいます。ターミナルの中の emacs
> > で C-, と C-. に関数を割り当てるのにはどうすればよいのでしょうか?
>
> たぶん不可能です。
>
> ターミナルの上で動いているアプリケーションにはター
> ミナル経由で文字コードしか渡せません。ASCII文字の
> 制御コードは0x00~0x1fの32種類しかなく、0x40~0x5f
> の文字とCtrlキーの同時押しに割り当てられています。
> つまり使える組み合わせは以下のものだけです。
> C-@(C-SPC), C-a ~ C-z, C-[, C-\, C-], C-^, C-_

なるほど。

仕方ないので、ターミナルなときは C-x . などに割り当てるようにしたいと
思います。

(defun scroll-up-one-line ()
(interactive)
(scroll-up 1))
(defun scroll-down-one-line ()
(interactive)
(scroll-down 1))

(if (or (eq window-system 'x) (eq window-system 'w32) (eq window-system 'mac))
(progn
(global-set-key [?\C-,] 'scroll-up-one-line)
(global-set-key [?\C-.] 'scroll-down-one-line))
(progn
(global-set-key [?\C-x?,] 'scroll-up-one-line)
(global-set-key [?\C-x?.] 'scroll-down-one-line)))

ではでは

--
ひろせ

KATAYAMA Yoshio

未読、
2004/02/19 5:03:482004/02/19
To:
oh...@src.ricoh.co.jp (Junn Ohta) writes:

> fj.editor.emacsの記事<yf1n07gedk6.wl%hiro...@t3.rim.or.jp>で
> hiro...@t3.rim.or.jpさんは書きました。
> > X な emacs だと期待通りの挙動なのですが、emacs -nw だと C-, を押すと『,』
> > が、C-. を押すと『.』が入力されてしまいます。ターミナルの中の emacs
> > で C-, と C-. に関数を割り当てるのにはどうすればよいのでしょうか?
>
> たぶん不可能です。

“emacs -nw”なので、xterm か kterm でわないかと、、、、
^^^

それでしたら、xterm/kterm の resource を使って“C-,”や“C-.”で
エスケープシーケンスを出すように定義して、emacs でそれを拾えばい
いです。

私の場合は、“C-;”を入力メソッドの ON/OFF にしていますが、次の
ようになっています。

.Xresources:

*VT100.Translations: #override \
!Ctrl <KeyPress> semicolon: string(0x1b) string("[34~")

.emacs:

(global-set-key [?\C-\;] 'toggle-input-method)
(global-set-key [f20] 'toggle-input-method)
--
片山@PFU

Junn Ohta

未読、
2004/02/19 13:30:032004/02/19
To:
fj.editor.emacsの記事<qkpptcb...@dash.tokyo.pfu.co.jp>で
ka...@pfu.fujitsu.comさんは書きました。

> “emacs -nw”なので、xterm か kterm でわないかと、、、、
> ^^^

Windowsからtelnetで入っている場合だってあるでしょ
うからxterm/ktermとは限らないと思いますが、逆に、

> それでしたら、xterm/kterm の resource を使って“C-,”や“C-.”で
> エスケープシーケンスを出すように定義して、emacs でそれを拾えばい
> いです。

Xなターミナルであればそういう手段が何かしら利用で
きるのですね。勉強になりました。

Katsumi Yamaoka

未読、
2004/02/19 19:34:562004/02/19
To:
>>>>> In <c12vbb$1sd$1...@ns.src.ricoh.co.jp>
>>>>> oh...@src.ricoh.co.jp (Junn Ohta) wrote:

>> それでしたら、xterm/kterm の resource を使って“C-,”や“C-.”で
>> エスケープシーケンスを出すように定義して、emacs でそれを拾えばい
>> いです。

> Xなターミナルであればそういう手段が何かしら利用で
> きるのですね。勉強になりました。

おお、つうことは Emacs 用の M-x や less 用に M-v も使えるんです
ね。従来使っていたものに、以下のように追加してみました。

*VT100*translations: #override\
<Key>BackSpace: string(0x7f)\n\
<Key>Delete: string(0x4)\n\
Ctrl Shift <Key>space: begin-conversion(_JAPANESE_CONVERSION)\n\
Meta <Key>x: string(0x1b) string("x")\n\
Meta <Key>v: string(0x1b) string("v")

ところで、片山さんが書かれた

!Ctrl <KeyPress> semicolon: string(0x1b) string("[34~")

の "!" の意味、あるいはこういうことを包括的に書いてある man ペー
ジがあれば教えていただけませんか?

;; 10年前に気がつきたかった。
--
山岡

HIROSE, Masaaki

未読、
2004/02/19 20:54:112004/02/19
To:
ひろせです

on "Re: C-,と C-. への割り当て"

<c12vbb$1sd$1...@ns.src.ricoh.co.jp>
at 19 Feb 2004 18:30:03 GMT
oh...@src.ricoh.co.jp (Junn Ohta) wrote:

> fj.editor.emacsの記事<qkpptcb...@dash.tokyo.pfu.co.jp>で
> ka...@pfu.fujitsu.comさんは書きました。
> > “emacs -nw”なので、xterm か kterm でわないかと、、、、
> > ^^^
>
> Windowsからtelnetで入っている場合だってあるでしょ
> うからxterm/ktermとは限らないと思いますが、逆に、

情報が足りませんでしたが emacs -nw は xterm, kterm, rxvt での起動のつ
もりでした。

> > それでしたら、xterm/kterm の resource を使って“C-,”や“C-.”で
> > エスケープシーケンスを出すように定義して、emacs でそれを拾えばい
> > いです。
>
> Xなターミナルであればそういう手段が何かしら利用で
> きるのですね。勉強になりました。

xterm, kterm では片山さんの方法でうまくできたのですが、rxvt ではダメ
(C-.でも.が入力される) でした。

rxvt の README
<URL:http://cvs.sourceforge.net/viewcvs.py/rxvt/rxvt/doc/README.xvt?rev=HEAD&view=auto>
によれば、

Xterm features not supported
----------------------------
(snip)
- Toolkit style configurability. In particular, xvt does not allow
the user to remap the mouse or keyboard keys.

という記述があるので Translations には対応していないのではないかと思い
ます。

以下、簡単にまとめますので間違いがあったら指摘してもらえるとうれしいで
す。

//

* 目的

xterm, kterm などの中で emacs -nw で起動した Emacs で、C-. や C-, にキー
バインドしたい。


* 方法

~/.Xdefaults に以下を設定。

KTerm*VT100.Translations: #override \
Shift<Key>space: begin-conversion(JAPANESE_CONVERSION) \n\
!Ctrl<KeyPress>period: string(0x1b) string("[34~") \n\
!Ctrl<KeyPress>comma: string(0x1b) string("[33~")

XTerm*VT100.Translations: #override \
!Ctrl<KeyPress>period: string(0x1b) string("[34~") \n\
!Ctrl<KeyPress>comma: string(0x1b) string("[33~")

~/.emacs に以下を設定。

(global-set-key [f20] FUNC-FOR-CONTROL-PERIOD)
(global-set-key [f19] FUNC-FOR-CONTROL-COMMA)


* 説明

ターミナルの上で動いているアプリケーションにはターミナル経由で文字コー
ドしか渡せません。ASCII文字の制御コードは0x00~0x1fの32種類しかなく、
0x40~0x5f の文字とCtrlキーの同時押しに割り当てられています。つまり使
える組み合わせは以下のものだけです。

C-@(C-SPC), C-a ~ C-z, C-[, C-\, C-], C-^, C-_

従って

(global-set-key [?\C-.] FUNC)

などとしてもターミナルの中の Emacs は反応しない。

一方、X 上ではすべてのキーがイベントを起こすので、任意の通常キーと任意
のモディファイキーの組み合わせ (C-.とか) であまり使わないキー (F20とか)
の keysym を発生させるように Translations クラスで設定し、Emacs 側で
F20 に global-set-key すればよい。


* 参考

# 間違っているかもしれませんが参考までに。

rxvt では Translations が実装されていないようなのでこの方法は使えない。

Emacs 側でのファンクションキーと keysym の対応 ("[34~"は f20 であるな
ど) を確認するには、/usr/local/share/emacs/VERSION/lisp/term/lk201.el
を見ればよい。

//

ではでは

--
ひろせ

OOTANI TAKASHI

未読、
2004/02/20 11:32:122004/02/20
To:
oh...@src.ricoh.co.jp (Junn Ohta) writes:
> fj.editor.emacsの記事<qkpptcb...@dash.tokyo.pfu.co.jp>で
> ka...@pfu.fujitsu.comさんは書きました。
>> “emacs -nw”なので、xterm か kterm でわないかと、、、、
>> ^^^
>
> Windowsからtelnetで入っている場合だってあるでしょ
> うからxterm/ktermとは限らないと思いますが、逆に、

Windowsからの場合でも、TeraTermを使っている人は少なくないと思うので、
その場合は、キーボード定義ファイルをいじると、同じような解決が
できると思います。(試してませんが)

# コマンドプロンプト上で、MeadowNT -nw の場合はさすがに無理
--
ootani

tesi...@mtf.biglobe.ne.jp

未読、
2004/02/21 4:03:462004/02/21
To:
Katsumi Yamaoka <yam...@jpl.org> writes:

>ところで、片山さんが書かれた
>
> !Ctrl <KeyPress> semicolon: string(0x1b) string("[34~")
>
>の "!" の意味、あるいはこういうことを包括的に書いてある man ペー
>ジがあれば教えていただけませんか?

X11 のソースツリーをもっていたら、
xc/doc/hardcopy/Xt/intrinsics.PS の Appendix B "Translation Table Syntax"
に書いてあります。
"string(0x1b)" は、man xterm の ACTIONS に書いてあります。

>;; 10年前に気がつきたかった。

手元にあったのは X11R6.4 のもので、10年前 (1994年4月)の文書でした :-)
---------------------------------------------------------------------
tesi...@mtf.biglobe.ne.jp

Mito

未読、
2004/02/21 10:42:142004/02/21
To:
Katsumi Yamaoka <yam...@jpl.org> writes:

> おお、つうことは Emacs 用の M-x や less 用に M-v も使えるんです
> ね。従来使っていたものに、以下のように追加してみました。
>
> *VT100*translations: #override\
> <Key>BackSpace: string(0x7f)\n\
> <Key>Delete: string(0x4)\n\
> Ctrl Shift <Key>space: begin-conversion(_JAPANESE_CONVERSION)\n\
> Meta <Key>x: string(0x1b) string("x")\n\
> Meta <Key>v: string(0x1b) string("v")

参考までに、個別に指定しなくても、

*VT100*translations: #override Meta <KeyPress>: string("0x1b") insert()

で Meta x を ESC x というシーケンスに変換できると思います。
たぶん KTerm でも XTerm でも OK だと思います。

最近の(?) XTerm の場合は metaSendsEscape なんていうリソース
もあるようです。

> !Ctrl <KeyPress> semicolon: string(0x1b) string("[34~")
>
> の "!" の意味、あるいはこういうことを包括的に書いてある man ペー
> ジがあれば教えていただけませんか?

! はコメントだったと思います。
--
02/22 00:40頃
水戸

Katsumi Yamaoka

未読、
2004/02/22 21:38:262004/02/22
To:
>>>>> In <c177aq$ftu$1...@bgsv5648.tk.mesh.ad.jp>
>>>>> tesi...@mtf.biglobe.ne.jp (tesi...@mtf.biglobe.ne.jp) wrote:

>> !Ctrl <KeyPress> semicolon: string(0x1b) string("[34~")
>>
>>の "!" の意味、あるいはこういうことを包括的に書いてある man ペー
>>ジがあれば教えていただけませんか?

> X11 のソースツリーをもっていたら、
> xc/doc/hardcopy/Xt/intrinsics.PS の Appendix B "Translation Table Syntax"
> に書いてあります。

ははあ、grep で引っかからない道理ですねえ。どうもありがとうござ
います。

!Ctrl の意味は、Ctrl だけが押されていて Shift や Meta が押されて
いない場合を表すものでした。ただの "Ctrl <KeyPress> semicolon"
だと Shift や Meta が押されていてもいなくても有効になります。

同ページには "~" というのもあって、"~Ctrl" は Ctrl キーが押され
ていないことを意味するようです。

> "string(0x1b)" は、man xterm の ACTIONS に書いてあります。

>>;; 10年前に気がつきたかった。

> 手元にあったのは X11R6.4 のもので、10年前 (1994年4月)の文書でした :-)

ぼくの場合、正確には 10年前ではすでに手遅れでした。いまだに X で
も M-x は ESC x とタイプしています。:-p

>>>>> In <m34qtke...@kzin.dip.jp> 水戸さん wrote:

> 参考までに、個別に指定しなくても、

> *VT100*translations: #override Meta <KeyPress>: string("0x1b") insert()

> で Meta x を ESC x というシーケンスに変換できると思います。
> たぶん KTerm でも XTerm でも OK だと思います。

なるほど。`Meta-某' が一律に `ESC 某' になって良いならば、手軽で
良いですね。で、それがかなり普遍性があることが

> 最近の(?) XTerm の場合は metaSendsEscape なんていうリソース
> もあるようです。

というものの存在でわかるわけですね。知りませんでした。ありがとう
ございます。

> ! はコメントだったと思います。

たぶん行頭にある場合は。と言うことは、行の途中にコメントを書くこ
とはできない、と。
--
Katsumi Yamaoka <yam...@jpl.org>

KATAYAMA Yoshio

未読、
2004/02/23 3:29:082004/02/23
To:
片山@PFUです。

#ウチのニュースサーバーは記事の取りこぼしが多いみたいで、スレッ
#ドがズタズタ ;-(

> 参考までに、個別に指定しなくても、
>
> *VT100*translations: #override Meta <KeyPress>: string("0x1b") insert()
>
> で Meta x を ESC x というシーケンスに変換できると思います。
> たぶん KTerm でも XTerm でも OK だと思います。
>
> 最近の(?) XTerm の場合は metaSendsEscape なんていうリソース
> もあるようです。

eightBitInput は昔から(少なくとも X11R5 以降)ありました。

> > !Ctrl <KeyPress> semicolon: string(0x1b) string("[34~")
> >
> > の "!" の意味、あるいはこういうことを包括的に書いてある man ペー
> > ジがあれば教えていただけませんか?
>
> ! はコメントだったと思います。

そう言われてみれば、、、何で、C-; が使えているんだろう?
リソースの途中にある ! は無視されるとか?
--
片山@PFU

Mito

未読、
2004/02/23 8:43:402004/02/23
To:
Katsumi Yamaoka <yam...@jpl.org> writes:

> >> !Ctrl <KeyPress> semicolon: string(0x1b) string("[34~")
> >>
> >>の "!" の意味、あるいはこういうことを包括的に書いてある man ペー
> >>ジがあれば教えていただけませんか?
>
> > X11 のソースツリーをもっていたら、
> > xc/doc/hardcopy/Xt/intrinsics.PS の Appendix B "Translation Table Syntax"
> > に書いてあります。

RedHat Linux 9 には
/usr/share/doc/XFree86-doc-4.3.0/Xt/intrinsics.PS.gz にあり、
これは XFree86-doc-4.3.0 というパッケージに入っていました。

$ rpm -q -f /usr/share/doc/XFree86-doc-4.3.0/Xt/intrinsics.PS.gz
XFree86-doc-4.3.0-2.90.55

表紙は以下のようになっていました。

| X Toolkit Intrinsics -- C Language Interface
| X Window System X Version 11, Release 6.4
| First Revision - April, 1994
:
| version 6 edited by Donna Converse
| X Consortium, Inc.

> なるほど。`Meta-某' が一律に `ESC 某' になって良いならば、手軽で
> 良いですね。で、それがかなり普遍性があることが
>
> > 最近の(?) XTerm の場合は metaSendsEscape なんていうリソース
> > もあるようです。
>
> というものの存在でわかるわけですね。知りませんでした。ありがとう
> ございます。

なんだったか忘れたのですが、端末エミュレータの中にはデフォル
トでこういう挙動をするものもあったはずです。

# KTerm、TeraTerm、hterm、MS Kermit のどれかだと思うんです
# が、他のものだったかも知れません。

> > ! はコメントだったと思います。
>
> たぶん行頭にある場合は。と言うことは、行の途中にコメントを書くこ
> とはできない、と。

そうなんですね。XTerm のマニュアルにも !Ctrl が出ていました。

どなたかこの書式はいつ頃から有効だったかご存じないでしょうか?
というのも、昔(X11R5)、

... \n\
! Ctrl<Key>Z: my-func() \n\
Ctrl<Key>X: my-func() \n\

のように継続行の途中をコメントアウトしようとしたら、エラーに
なったという記憶があるのですが、またしても私の記憶違いかなに
かだったのか、その当時はそういうものだったのか知りたいと思い
まして。

一応 X11R5 の Xt Intrinsics は日本語訳されたもの(だったと思
うもの)を読んていたのですが、!Ctrl のようなものがあったとい
うのはちょっと思い出せないんです。

# でも、あったような気もしてきたなぁ...。^^;
--
02/23 22:43頃
水戸

KATAYAMA Yoshio

未読、
2004/02/23 22:26:482004/02/23
To:
Mito <co_...@ybb.ne.jp> writes:

> どなたかこの書式はいつ頃から有効だったかご存じないでしょうか?
> というのも、昔(X11R5)、
>
> ... \n\
> ! Ctrl<Key>Z: my-func() \n\
> Ctrl<Key>X: my-func() \n\
>
> のように継続行の途中をコメントアウトしようとしたら、エラーに
> なったという記憶があるのですが、またしても私の記憶違いかなに
> かだったのか、その当時はそういうものだったのか知りたいと思い
> まして。
>
> 一応 X11R5 の Xt Intrinsics は日本語訳されたもの(だったと思
> うもの)を読んていたのですが、!Ctrl のようなものがあったとい
> うのはちょっと思い出せないんです。

私が書いた、

| *VT100.Translations: #override \


| !Ctrl <KeyPress> semicolon: string(0x1b) string("[34~")

は、X11R5 から使ってます。(というか、X11R5 を去年まで使ってまし
た(^^;)
--
片山@PFU

Mito

未読、
2004/02/24 7:04:532004/02/24
To:
KATAYAMA Yoshio <ka...@pfu.fujitsu.com> writes:

やっぱり。^^;

どうもありがとうございました & 嘘書いてしまってごめんなさい。
--
02/24 21:03頃
水戸

新着メール 0 件