LoginSignup
2
1

More than 5 years have passed since last update.

Microsoft製 OpenSSHでemacs

Last updated at Posted at 2017-07-08

2017年8月24日 追記 v0.0.19.0で、ここに書いた方法で対策されたようです

はじめに

2017年7月8日、Microsoft製のOpenSSH、Win32-OpenSSHのバージョンはv0.0.17.0です。
Windows10のPowerShellからssh.exeを起動してLinuxマシンに接続してemacsを実行すると下から2行目の表示が崩れる問題がありました。
Win32-OpenSSHのソースコードをちょっと直したら正しく表示されるようになったのでメモ。
やってみたらうまくいってる感じという状態なので、試される方は、そのあたりを注意してください。

Anniversary Update for Windows 10以降でしか動作しないかもしれません。

修正方法

ソースコードを展開してフォルダ
Win32-OpenSSH-0.0.17.0\Win32-OpenSSH-0.0.17.0\contrib\win32\win32compat
の中にあるconsole.cを次のように修正します。

dwAttributes |= (DWORD)ENABLE_VIRTUAL_TERMINAL_PROCESSING | 0x0008;

0x0008は、DISABLE_NEWLINE_AUTO_RETURN とdefineされるものですがWin32-OpenSSHはVisual Studio 2015でないとコンパイルできないので定義されていないようです。

公式のGitで提案してみた

https://github.com/PowerShell/Win32-OpenSSH/issues/802
投稿の最初で説明したconsole.cへの僕のpatchが、そのまま使われた(DISABLE_NEWLINE_AUTO_RETURNがdefineでなく直接の値になっていますが)
文字数にして数十文字だけど、このpatchを作るのに原因の調査開始から僕は5日も、かかりました。ただ、正しい保証はありませんでしたが。

次のバージョンの0.0.18.0で僕のpatchのDISABLE_NEWLINE_AUTO_RETURN は、他と干渉するから使いたくないということで、使わずに対策したとあった。ソースコードをコンパイルすると、直っていないのに、バイナリだけ直るという、不思議な現象が起きた。不思議に思って対策したというソースコードの開示を言ってみたが、開示してくれなかった。

結局、次のバージョンの0.0.19.0でDISABLE_NEWLINE_AUTO_RETURNを使って対策したようです。

2017年7月16日 追加
Linux上ではexport TERM=vt100としてTERMを設定するとうまくいきます。
Ctrl-Spaceはset-mark-commandですが、ただのSpaceになるようです。私はCtrl-@でset-mark-commandを使うようにしました。
Emacsで現在のキーバインドを確認する方法は、こちらの投稿にあるようです。

2017年7月20日 追加
vt100よりもxtermのほうがemacs以外でも、画面が崩れずに動作するようです。TeraTermと比較すると完全ではないですが。
TeraTermではできないICカードによる認証が可能なのでMicrosoft製 OpenSSHを使いたい場合があると思います。

2017年12月17日 追加
Windows 10バージョン1709、オプション機能でOpenSSHベータ版が利用可能になっているようです。
スラド記事
Win32-OpenSSHの0.0.24.0でも、この投稿のパッチが使われていることを確認。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1