- Lem エディタ ( https://github.com/cxxxr/lem ) の
Windows 上でのインストール手順等のメモです。
-
MSYS2/MinGW-w64 (64bit/32bit) のインストール
事前に MSYS2/MinGW-w64 (64bit/32bit) がインストールされている必要があります。
以下のページを参考に、開発環境のインストールを実施ください。
https://gist.github.com/Hamayama/eb4b4824ada3ac71beee0c9bb5fa546d
(すでにインストール済みであれば本手順は不要です) -
winpty のインストール
<MSYS2/MinGW-w64 (64bit) 環境の場合>
プログラムメニューから MSYS2 の MinGW 64bit Shell を起動して、以下のコマンドを実行してください。
<MSYS2/MinGW-w64 (32bit) 環境の場合>
プログラムメニューから MSYS2 の MinGW 32bit Shell を起動して、以下のコマンドを実行してください。pacman -S winpty
(すでにインストール済みであれば本手順は不要です)
<注意:現在、winpty については、以下の入力関連の不具合が存在します (2019-12-11)>
lem-project/lem#453
(カーソルを、1 行目の 2 ~ 8 桁目に置いて Esc キーを押すと、
以後、Esc キーと他のキーの組み合わせ ( Esc-< 等) が入力できなくなる。
復旧するには、Lem の再起動が必要)<注意:Windows 10 では、カーソルが隠れるように画面をリサイズ(縮小)すると、
winpty が異常終了します (2020-10-18)>
lem-project/lem#532
対策として、winpty の改造版を作成しましたので、
以下のページを参照して、インストールを実施ください (上記の Esc キーの件も修正されます)。
https://github.com/Hamayama/winpty-fixes
https://github.com/Hamayama/winpty-fixes-package . -
PDCurses のインストール
<MSYS2/MinGW-w64 (64bit) 環境の場合>
プログラムメニューから MSYS2 の MinGW 64bit Shell を起動して、以下のコマンドを実行してください。pacman -S mingw64/mingw-w64-x86_64-pdcurses cp -i /mingw64/include/pdcurses.h /mingw64/include/ncurses.h
<MSYS2/MinGW-w64 (32bit) 環境の場合>
プログラムメニューから MSYS2 の MinGW 32bit Shell を起動して、以下のコマンドを実行してください。pacman -S mingw32/mingw-w64-i686-pdcurses cp -i /mingw32/include/pdcurses.h /mingw32/include/ncurses.h
(すでにインストール済みであれば本手順は不要です)
<注意:現在、PDCurses については、以下のバージョン関連の不具合が存在します (2019-12-11)>
lem-project/lem#454
(v3.8 を手動でダウンロードしてインストールする必要があります
(32bit 環境の場合には、x86_64 の部分を i686 に読み替えてください。
また、コピーのパスの /mingw64 の部分も /mingw32 に読み替えてください))<注意:Windows 10 では、日本語表示が大きく乱れるようになりました (2020-10-12)>
lem-project/lem#531
対策として、PDCurses の改造版を作成しましたので、
以下のページを参照して、インストールを実施ください。
https://github.com/Hamayama/PDCurses-win10-jp
https://github.com/Hamayama/PDCurses-win10-jp-package . -
Roswell のダウンロード、展開、PATH の設定
https://github.com/roswell/roswell/wiki/Installation#windows
から、
64bit 環境の場合はroswell_<version>_amd64.zip
を、
32bit 環境の場合はroswell_<version>_i686.zip
を、
ダウンロードして、適当なフォルダに展開してください。
そして、Windows の環境変数 PATH に、展開したフォルダへのパスを追加してください。
(すでにインストール済みであれば本手順は不要です)<注意:もし、MinGW Shell 上で ros コマンドが見付からない場合は、
環境変数 MSYS2_PATH_TYPE の設定をチェックしてみてください (2019-12-11)>
参考URL:https://sourceforge.net/p/msys2/discussion/general/thread/dbe17030/ .
-
Roswell のセットアップ
<MSYS2/MinGW-w64 (64bit) 環境の場合>
プログラムメニューから MSYS2 の MinGW 64bit Shell を起動して、以下のコマンドを実行してください。
<MSYS2/MinGW-w64 (32bit) 環境の場合>
プログラムメニューから MSYS2 の MinGW 32bit Shell を起動して、以下のコマンドを実行してください。ros setup
(すでにインストール済みであれば本手順は不要です)
-
Lem エディタのインストール
<MSYS2/MinGW-w64 (64bit) 環境の場合>
プログラムメニューから MSYS2 の MinGW 64bit Shell を起動して、以下のコマンドを実行してください。
<MSYS2/MinGW-w64 (32bit) 環境の場合>
プログラムメニューから MSYS2 の MinGW 32bit Shell を起動して、以下のコマンドを実行してください。ros install cxxxr/lem
-
async-process のインストール (外部プログラム起動用)
<MSYS2/MinGW-w64 (64bit) 環境の場合>
プログラムメニューから MSYS2 の MinGW 64bit Shell を起動して、以下のコマンドを実行してください。
<MSYS2/MinGW-w64 (32bit) 環境の場合>
プログラムメニューから MSYS2 の MinGW 32bit Shell を起動して、以下のコマンドを実行してください。
ros install cxxxr/async-process
async-process の手動インストールは不要になりました。
(古いバージョンの async-process があれば、削除してください
(%USERPROFILE%\.roswell\local-projects\cxxxr
の async-process フォルダを削除する))
(ros update quicklisp
の実行も必要かもしれません)
- インストール手順は以上です。
-
<MSYS2/MinGW-w64 (64bit) 環境の場合>
プログラムメニューから MSYS2 の MinGW 64bit Shell を起動して、以下のコマンドを実行してください。
<MSYS2/MinGW-w64 (32bit) 環境の場合>
プログラムメニューから MSYS2 の MinGW 32bit Shell を起動して、以下のコマンドを実行してください。winpty ros -Q -s lem-pdcurses -L sbcl-bin -- $USERPROFILE/.roswell/bin/lem-ncurses
Lem エディタの画面が表示されます。
デフォルト状態では、おおむね Emacs のように操作できます。
(Roswell v18.9.10.94 から bin フォルダの位置が変わりました (2018-9-23 確認))
( .bashrc 等に以下のようにエイリアスを設定すると、lem のみで起動できますalias lem='winpty ros -Q -s lem-pdcurses -L sbcl-bin -- $USERPROFILE/.roswell/bin/lem-ncurses'
)
-
M-x lisp-mode で lisp-mode に入ることができます。
S式 を入力してから、C-c C-e により末尾の S式 を評価できます。
また、先頭で C-Space (または C-@) でマークして、末尾にカーソルを移動してから C-c C-r とすると、
指定した範囲 (リージョン) の S式 を評価できます。
(選択状態の表示は C-g で解除できます) -
M-x scheme-mode で scheme-mode に入ることができます。
S式 を入力してから、C-c C-e により末尾の S式 を評価できます。
(ただし、事前に Gauche のインストールが必要です)
また、先頭で C-Space (または C-@) でマークして、末尾にカーソルを移動してから C-c C-r とすると、
指定した範囲 (リージョン) の S式 を評価できます。
(選択状態の表示は C-g で解除できます)
scheme-mode の説明をもう少し、以下のページに載せています。
https://gist.github.com/Hamayama/03eb1c2984abc2ddb7a1c04d15e1bd32
-
コマンドプロンプト上では動作しない
→ ある程度対応 ( lem-project/lem#333 ) -
mintty 上でも winpty をかませないと動作しない (リダイレクトエラー)
-
マウスが使えない (スクロール等ができない。。。)
→ ある程度対応 (カーソルの移動。分割枠のドラッグ。ホイールによるスクロール)
ただし、mintty の機能 (コピー&ペースト等) を使う場合には、Shift+クリック が必要になった
(mintty のオプション設定にどちらを優先するかの項目がある) -
メタキーが見つからない
→ AltキーとEscキーがメタキーになるように対策 -
押せないキーのリスト
(PDCurses がイベントを上げてこない。。。)キー内容(コマンド名)代替方法M-<
バッファの先頭に移動 (move-to-beginning-of-buffer) (※1) Esc-<
/C-Home
/M-Home
M->
バッファの末尾に移動 (move-to-end-of-buffer) (※1) Esc->
/C-End
/M-End
C-_
Redo (redo) (※2) C-|
M-;
リージョンのコメントアウト (comment-or-uncomment-region) (※1) Esc-;
M-/
略称展開 (abbrev) (※1) Esc-/
M-=
単語数の表示 (count-words) (※1) Esc-=
(※1) メタキーとしてAltキーが使用できない (Escキーは使用可能)
(※2) 環境によっては使用可能? -
補完メニューの表示が日本語表示のところでずれる
→ ある程度対策 (まだ若干ずれるケースがある) -
lisp-mode に入ると lem を終了できなくなる
→ slime を終了する処理を追加 (時間がかかることがある)
→ 終了に失敗することがある (mintty を落とせば sbcl.exe も終了する。。。) -
サロゲートペアの文字 (#\U20B9F の「しかる」、#\U1F363 の「すし」(絵文字) 等) の表示に問題がある
(カーソルがずれる。カーソルを移動すると表示が乱れる。画面分割時や補完メニューの表示がずれる等)
→ ある程度対策 (まだ若干ずれるケースがある) -
表示が不安定で乱れることがある
→ 入力用スレッドで画面を更新しないように対策 (まだ若干乱れることがある)
( lem-project/lem#336 )
→ winpty (または ConEmu) は、Windowsコンソールのバッファの内容を監視 (polling) して表示を更新している。
そして、PDCurses による書き込みと、winpty (または ConEmu) による監視 (polling) のタイミングが
バッティングして、表示が乱れるもよう。これは方式的に仕方ないか。。。
とりあえず、画面をリサイズすれば復旧することが多い。 -
M-x slime で固まる
→ 実行しなくても使えるようだが。。。
→ 対策 ( lem-project/lem#385 ) -
C-x C-c で終了しない場合がある
→ 次に何かキーを押すと終了する (スレッドの関係?)
→ 対策 ( lem-project/lem#357 )
-
バージョンアップについて
自分の環境だと、
ros update lem
では更新できない(git用?)。
ros install cxxxr/lem
で rename-file に失敗するので、該当フォルダ
(%USERPROFILE%\.roswell\local-projects\cxxxr\lem
)
を削除してから、再度
ros install cxxxr/lem
を実行する。
ros update lem
だけで更新できるようになりました (2019-5-28 確認) 。 -
設定ファイルについて
~/.lem/init.lisp が、Lem エディタの設定ファイルになります(存在しなくても動作します)。
~ はホームディレクトリで、環境によって異なります。
MSYS2/MinGW-w64 環境 (mintty 上の bash 等) では、通常、
/home/(ユーザ名) がホームディレクトリになります。
( echo $HOME で確認できます )
その他の環境 (Windows Terminal 上の cmd.exe 等) では、通常、
c:\Users\(ユーザ名)
がホームディレクトリになります。
( cmd.exe では、echo %USERPROFILE% で確認できます )
( PowerShell では、echo $env:USERPROFILE で確認できます ) -
Windows Terminal 上での実行方法 (Windows 10)
以下のページを参照ください。
https://gist.github.com/Hamayama/fc442e71304629527866f7c69c2e9f5e -
ConEmu 上での実行方法
以下のページを参照ください。
https://gist.github.com/Hamayama/16268a9d607eaebcc56df907eac97cd2 -
mintty 上での絵文字の幅
Windows 8.1 では、.minttyrc に Charwidth=unicode という行を追加すると、
絵文字 (#\U1F363 の「すし」等) の表示幅が2倍になり、
カーソルがずれなくなる。
(.minttyrc は MSYS2 の /home/(ユーザ名) フォルダにある)
(ただし、#\U1F336 の「とうがらし」のように、まだずれる絵文字もあるもよう。。。)
<参考URL>
https://github.com/mintty/mintty/wiki/Tips#character-width
lem-project/lem#348
(現状、Windows 10 では、mintty 上で絵文字を表示できていません) -
Windows のタイマーの精度について
内部で Windows API の timeBeginPeriod を使用して、
タイマーを高精度 (15msec → 1msec程度) に設定している。
もし、問題がある場合には、Lem の設定ファイル ( ~/.lem/init.lisp ) に
以下の記述をすれば、高精度にしないようにできる。
(ただし、入力への反応が、若干遅くなる)#+(and win32 lem-ncurses) (setf (lem-ncurses:input-polling-interval) 0.01)
<参考URL>
lem-project/lem#358
-
Gauche:Lemエディタ
https://practical-scheme.net/wiliki/wiliki.cgi?Gauche%3ALem%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF -
Lem エディタの scheme-mode
https://gist.github.com/Hamayama/03eb1c2984abc2ddb7a1c04d15e1bd32 -
Lem エディタの Windows Terminal 上での実行方法 (Windows 10)
https://gist.github.com/Hamayama/fc442e71304629527866f7c69c2e9f5e -
Lem エディタの ConEmu 上での実行方法
https://gist.github.com/Hamayama/16268a9d607eaebcc56df907eac97cd2 -
Lem エディタの Windows 用の文字幅データの設定サンプル (実験中) https://gist.github.com/Hamayama/12d5e637fc684e1d7e58e96aad5d0728
- OS
- Windows 10 (version 1909) (64bit)
- Windows 8.1 (64bit)
- 環境
- MSYS2/MinGW-w64 (64bit) (gcc version 10.2.0 (Rev5, Built by MSYS2 project)) (Windows 10)
- MSYS2/MinGW-w64 (64bit) (gcc version 9.2.0 (Rev2, Built by MSYS2 project)) (Windows 8.1)
- PDCurses-win10-jp 3.9 ( https://github.com/Hamayama/PDCurses-win10-jp ) (Windows 10)
- PDCurses 3.8-1 (現在、4.1.0 は使用不可) (Windows 8.1)
- winpty-fixes 0.4.4-dev ( https://github.com/Hamayama/winpty-fixes ) (Windows 10)
- winpty 0.4.3 (Windows 8.1)
- Roswell 20.06.14.107
- Lem 1.8
- 端末
- コマンドプロンプト (cmd.exe)
- ConEmu 210112 (Windows 10)
- ConEmu 191012 (Windows 8.1)
- mintty 3.4.1 (winpty が必要) (Windows 10)
- mintty 3.1.4 (winpty が必要) (Windows 8.1)
- Windows Terminal 1.4.3243.0 (Windows 10)
(2018-9-20)(2018-9-22)(2018-9-23)(2018-9-26)(2018-10-3)
(2018-10-4)(2018-10-18)(2018-10-21)(2018-11-2)(2018-12-28)
(2018-12-29)(2019-1-6)(2019-4-16)(2019-5-12)(2019-5-30)
(2019-6-1)(2019-6-20)(2019-6-23)(2019-7-18)(2019-12-11)
(2019-12-13)(2019-12-21)(2020-1-27)(2020-2-2)(2020-4-6)
(2020-5-10)(2020-9-6)(2020-10-13)(2020-10-18)(2020-11-3)
(2020-11-19)(2021-1-14)