Help us understand the problem. What is going on with this article?

Microsoft製 OpenSSHでemacs

More than 1 year has passed since last update.

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でも、この投稿のパッチが使われていることを確認。

izuna
1999年RSA暗号で世界一の性能だった暗号プロセッサICF3をベースに8bit CPUにしたICF3-ZをApache License 2.0のライセンスで公開しました。8bit CPUでは暗号演算器ははずされています。
https://icf3z.idletime.tokyo/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away