質問: Windows 上の putty で ubuntu に接続し、その上で emacs を起動して作業を行おうとしています。 この状態だと、たとえば`C-.`の入力を端末(putty)が正当な入力として受け付けず、何も ubuntu に (そして、 emacs に) 送ってくれないようです。 参考: Emacs C-. not working in terminal - Ask Ubuntu これをどうにかしたい場合には、端末エミュレーターを設定して、適当な(あいている)コード(たとえば、 f20)を、`C-.`に割り当てて、かつ emacs 側でその割り当てたコードに対する設定を、 本来の`C-.`と同じように設定してやれば、やりたいことが実現できるのではないか、と書いてありました。参考: ターミナルでC-,やC-.に割り当てたい - (ひ)メモ 質問: 1. PuTTy において、たとえば `C-.`に対して、自分で定義したコードを割り当てて、接続先に送ることはできるでしょうか。 2. できない場合、今やりたいことを実現できるソフトウェアスタックは、どのようなものになるでしょうか。
回答: PuTTYで設定可能か =========== オリジナルのPuTTYではおそらく出来ないと思われます。しかし派生版の中には独自機能としてキー定義が追加されている物があります。 例えばICE IV版GDI PuTTYやD2D/DW PuTTYではプライベートキー定義で設定が可能です。 ### Ice IV版PuTTY設定例 ICE IV版PuTTYでは、以下の設定を追加するとEmacsで`C-.`および`C->`を認識するようになります。(TERM環境変数はxtermにして下さい) > > Vkey190=.,>,\033[27;5;46~,\033[27;6;62~,\033.,\033>,\033[27;7;46~,\033[27;8;62 > > > 他のキーでの対応も考えるならば、このxterm風キー定義を追加するのが楽でしょう。 他の手段 ==== 何らかの理由でオリジナルのPuTTY、もしくは(キー定義機能の無い)特定の派生版のPuTTYを使いたい場合、AutoHotKeyが利用できるかもしれません。 ### AutoHotKey設定例 以下のAutoHotKeyスクリプトを利用すると、putty.exeに`C-.`が入力された時に`[27;5;46~`が入力されます。 ``` #IfWinActive ahk_exe putty.exe ^.:: Send, {ESC}[27;5;46~ Return #IfWinActive ``` 他の端末エミュレータ ========== 逆にPuTTYにこだわらない場合、キー定義が可能な他の端末エミュレータを利用する方法があります。 例えば、以下の端末エミュレータではキー定義が可能です。 * Tera Term * RLogin * Poderosa ### Tera Term設定例 Tera Termではキーボード設定ファイル(`KEYBOARD.CNF`)を編集する事によりキー定義を行えます。 Emacsで`C-.`を認識させるには`KEYBOARD.CNF`の`[User keys]`セクション(最後)に以下の設定を追加します。 > > User1=1076,0,$1B[27;5;46~ > > > また、将来のバージョンではxtermのmodifyOtherKeysという機能に対応予定なので、将来的には特に設定を追加しなくても`C-.`や`C-;`等のキーがEmacsで使えるようになるはずです。 ### RLogin設定例 以下の手順で設定できます。 1. 設定したいサーバエントリで`編集`を押す 2. 左の項目で`キーボード`を選ぶ 3. `キーコード`にある`新規`を押す 4. `Key Code`で`$BE(.)`を選び、右の`Ctrl`チェックボックスにチェックを入れる 5. `Assign String`に`\033[27;5;46~`を入力する 6. `OK`を押してダイアログを閉じる ### Poderosa設定例 以下の手順で設定できます。 1. メニューの`ツール`-`オプション`を選ぶ 2. ダイアログの右側の項目で`操作`を選ぶ 3. `キーボード`の`追加キー定義`に`Ctrl+Period=0x1b[27;5;46~`を追加する 4. `OK`を押してダイアログを閉じる