-
Lem エディタを MSYS2/MinGW-w64 環境で動かすためのパッチです。
現状、いろいろと問題点があります(実験中)。 -
オリジナルの情報は以下にあります。
https://github.com/cxxxr/lem<<<本パッチの内容は、Lem エディタの本体に取り込まれました。
このため、もう本パッチを適用する必要はありません。
Lem エディタ の Windows 上でのインストール方法については、
以下のページを参照ください>>>
https://gist.github.com/Hamayama/deba598ab70f5d5d6952b51f82793473
- オリジナルからの変更点を、以下に示します。
-
cl-charms のパッチ対応
- PDCurses 用の定義をいくつか追加
-
term.lisp のパッチ対応
- デフォルトカラーコード(-1)を有効化
(カラー情報が正常に扱えるようになった) - マウス対応
- デフォルトカラーコード(-1)を有効化
-
ncurses.lisp のパッチ対応
- 日本語を入力してからカーソルを移動すると、表示がずれる件の対策
- CtrlキーとAltキーが機能しないケースの対策
- 画面サイズの変更に表示が追従しない件の対策
- C-x C-c ですぐに終了しない件の対策
- マウス対応
-
lisp-mode.lisp のパッチ対応
- lisp-mode に入ると lem を終了できなくなる件の対策
(slime を終了する処理を追加(数秒かかる))
- lisp-mode に入ると lem を終了できなくなる件の対策
-
buffer.lisp のパッチ対応
- セーブのエンコーディングのデフォルトを UTF-8 に設定
- MSYS2/MinGW-w64 (64bit/32bit) 環境でのインストール手順を、以下に示します。
-
MSYS2/MinGW-w64 (64bit/32bit) のインストール
事前に MSYS2/MinGW-w64 (64bit/32bit) がインストールされている必要があります。
以下のページを参考に、開発環境のインストールを実施ください。
https://gist.github.com/Hamayama/eb4b4824ada3ac71beee0c9bb5fa546d
(すでにインストール済みであれば本手順は不要です) -
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
(すでにインストール済みであれば本手順は不要です)
-
Roswell のダウンロード
https://github.com/roswell/roswell/wiki/Installation#windows
から、
64bit 環境の場合は Roswell-x86_64.zip を、
32bit 環境の場合は Roswell-i686.zip を、
ダウンロードして、適当なフォルダに展開してください。
そして、Windows の環境変数 PATH に、展開したフォルダへのパスを追加してください。
(すでにインストール済みであれば本手順は不要です) -
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
-
パッチデータのダウンロードとコピー
本サイト ( https://github.com/Hamayama/lem-mg-patch ) のデータ一式を、
(Download Zip ボタン等で) ダウンロードして、適当なフォルダに展開してください。
そして、展開したフォルダ内の 1000_copy_patch.bat を実行して、
パッチデータをコピーしてください。 -
パッチデータの適用
<MSYS2/MinGW-w64 (64bit) 環境の場合>
プログラムメニューから MSYS2 の MinGW 64bit Shell を起動して、以下のコマンドを実行してください。
<MSYS2/MinGW-w64 (32bit) 環境の場合>
プログラムメニューから MSYS2 の MinGW 32bit Shell を起動して、以下のコマンドを実行してください。cd $USERPROFILE/.roswell/lisp/quicklisp/local-projects/cxxxr/lem ./1001_lem_modify.sh
- 以上です。
-
<MSYS2/MinGW-w64 (64bit) 環境の場合>
プログラムメニューから MSYS2 の MinGW 64bit Shell を起動して、以下のコマンドを実行してください。
<MSYS2/MinGW-w64 (32bit) 環境の場合>
プログラムメニューから MSYS2 の MinGW 32bit Shell を起動して、以下のコマンドを実行してください。winpty ros -Q -m lem-ncurses -L sbcl-bin -- $USERPROFILE/.roswell/lisp/quicklisp/bin/lem-ncurses
Lem エディタの画面が表示されます。
おおむね Emacs のように操作できます。 -
M-x lisp-mode で lisp-mode に入ることができます。
S式 を入力してから、C-c C-e により末尾の S式 を評価できます。
また、先頭で C-space でマークして、末尾にカーソルを移動してから C-c C-r とすると、
指定した範囲(リージョン)の S式 を評価できます。
- コマンドプロンプト上では動作しない
- mintty 上でも winpty をかませないと動作しない(リダイレクトエラー)
- マウスが使えない(スクロール等ができない。。。)
→ ある程度対応(カーソルの移動。分割枠のドラッグ。ホイールによるスクロール)
ただし、mintty の機能(コピー&ペースト等)を使う場合には、Shift+クリックが必要になった
(mintty のオプション設定にどちらを優先するかの項目がある) - 日本語を入力してからカーソルを移動すると表示が乱れる
→ 表示位置を調整して対策 - メタキーが見つからない
→ ESCキーを押した瞬間に x を押せば M-x になるもよう。。。
→ AltキーとESCキーがメタキーになるように対策 - C-space で mark-set にならず @ が表示される
→ C-space で mark-set になるように対策 - C-x C-c ですぐに終了しない。その後、何かキーを押すと終了する
→ イベント処理のループに sleep を入れて対策
→ また、editor-thread の終了を join で待つように対策 - mintty の画面サイズを変えても表示が追従しない
→ 画面サイズの変更に表示が追従するように対策
→ また、リサイズ時に表示が乱れることがあったため、
ドット記号で画面を埋めつくすことで対策(スペースでは再描画しなかった) - C-x C-w で新しくセーブすると文字コードが SJIS になる
→ セーブのエンコーディングのデフォルトを UTF-8 に設定 M-<
およびM->
による先頭/末尾への移動ができない
→ PDCurses がイベントを上げてこない
→ C-Home と C-End にM-<
とM->
を割り当てた。。。- C-x 3 で画面を縦分割すると、日本語表示の分だけ右画面がずれる
→ ゼロ幅文字を使って調整 - 補完メニューの表示が日本語表示のところでずれる
→ PDCurses の stdscr のみを使用することで対策 - lisp-mode に入ると lem を終了できなくなる
→ slime を終了する処理を追加(数秒かかる)
→ 終了に失敗することがある(mintty を落とせば sbcl.exe も終了する。。。) - サロゲートペアの文字 (#\U20B9F の「しかる」、#\U1F363 の「すし」(絵文字) 等) の表示に問題がある
(カーソルがずれる。カーソルを移動すると表示が乱れる。縦画面分割や補完メニューの表示がずれる等) - サロゲートペアの文字 (#\U20B9F の「しかる」、#\U1F363 の「すし」(絵文字) 等) をセーブすると、
MUTF-8 (Modified UTF-8) でセーブされる
→ PDCurses からの入力時に2文字として受け取っていたため、
合成して1文字として受け取るようにした
しかし表示はさらに乱れるようになった。。。 - 表示が不安定で乱れることがある(原因不明)
- lem のフォルダ構成が変わった
→ 最新版のフォルダ構成に合わせてパッチを変更した(2018-9-12)
(古い lem には本パッチを当てられないので注意) - M-x slime で固まる
→ 実行しなくても使えるようだが。。。
- Electron版も試してみたが、以下のエラーで動作せず
「Uncaught Error: A dynamic link library (DLL) initialization routine failed.」 - MSYS2 の MSYS用 の ncurses も試してみたが、以下のエラーで動作せず
「Unhandled CFFI:LOAD-FOREIGN-LIBRARY-ERROR」 - バージョンアップについて、
ros update lem
では更新できない(git用?)。
ros install cxxxr/lem
で rename-file に失敗するので、元のフォルダを削除またはリネームしてから、再度
ros install cxxxr/lem
を実行する。
そして再度パッチを適用
- OS
- Windows 8.1 (64bit)
- 環境
- MSYS2/MinGW-w64 (64bit/32bit) (gcc version 7.3.0 (Rev2, Built by MSYS2 project))
- PDCurses 3.6-2
- Roswell 18.8.10.93
- パッチ対象
- Lem 1.4
- ライセンス
- オリジナルと同様とします
- 2018-9-4 v1.4-mg0001 MSYS2/MinGW-w64 対応
- 2018-9-5 v1.4-mg0002 画面サイズの変更に表示が追従するように対策
- 2018-9-5 v1.4-mg0003 画面更新の不具合対策
キー入力の不具合対策(C-Home と C-End にM-<
とM->
を割り当て) - 2018-9-7 v1.4-mg0004 lisp-mode に入ると lem を終了できなくなる件の対策
- 2018-9-7 v1.4-mg0005 行の折り返し表示の修正。Escキー処理の見直し
- 2018-9-7 v1.4-mg0006 セーブのエンコーディングのデフォルトを UTF-8 にした
- 2018-9-7 v1.4-mg0007 C-x C-c ですぐに終了しない件の対策
- 2018-9-9 v1.4-mg0008 C-x 3 で画面を縦分割すると、日本語表示の分だけ右画面がずれる件の対策
- 2018-9-10 v1.4-mg0009 PDCurses の stdscr のみを使用するように変更
- 2018-9-10 v1.4-mg0010 sleep の位置を調整
- 2018-9-11 v1.4-mg0011 デフォルトカラーコード(-1)を有効化
(カラー情報が正常に扱えるようになった) - 2018-9-12 v1.4-mg0012 マウス対応。サロゲートペアのセーブ修正(表示は未修整)
lem のフォルダ構成変更に対応 - 2018-9-13 v1.4-mg0013 プログラムの整理等
- 2018-9-14 v1.4-mg0014 一部処理見直し
(2018-9-20)