Skip to content

Instantly share code, notes, and snippets.

@Hamayama
Last active January 14, 2021 14:16
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Hamayama/deba598ab70f5d5d6952b51f82793473 to your computer and use it in GitHub Desktop.
Save Hamayama/deba598ab70f5d5d6952b51f82793473 to your computer and use it in GitHub Desktop.
Lem エディタの Windows 上でのインストール手順等

Lem エディタの Windows 上でのインストール手順等

インストール手順

  1. MSYS2/MinGW-w64 (64bit/32bit) のインストール
    事前に MSYS2/MinGW-w64 (64bit/32bit) がインストールされている必要があります。
    以下のページを参考に、開発環境のインストールを実施ください。
    https://gist.github.com/Hamayama/eb4b4824ada3ac71beee0c9bb5fa546d
    (すでにインストール済みであれば本手順は不要です)

  2. 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 .

  3. 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 .

  4. 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/ .


  5. Roswell のセットアップ
    <MSYS2/MinGW-w64 (64bit) 環境の場合>
    プログラムメニューから MSYS2 の MinGW 64bit Shell を起動して、以下のコマンドを実行してください。
    <MSYS2/MinGW-w64 (32bit) 環境の場合>
    プログラムメニューから MSYS2 の MinGW 32bit Shell を起動して、以下のコマンドを実行してください。

    ros setup
    

    (すでにインストール済みであれば本手順は不要です)

  6. Lem エディタのインストール
    <MSYS2/MinGW-w64 (64bit) 環境の場合>
    プログラムメニューから MSYS2 の MinGW 64bit Shell を起動して、以下のコマンドを実行してください。
    <MSYS2/MinGW-w64 (32bit) 環境の場合>
    プログラムメニューから MSYS2 の MinGW 32bit Shell を起動して、以下のコマンドを実行してください。

    ros install cxxxr/lem
    
  7. 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

制限事項等

  1. コマンドプロンプト上では動作しない
    → ある程度対応 ( lem-project/lem#333 )

  2. mintty 上でも winpty をかませないと動作しない (リダイレクトエラー)

  3. マウスが使えない (スクロール等ができない。。。)
    → ある程度対応 (カーソルの移動。分割枠のドラッグ。ホイールによるスクロール)
    ただし、mintty の機能 (コピー&ペースト等) を使う場合には、Shift+クリック が必要になった
    (mintty のオプション設定にどちらを優先するかの項目がある)

  4. メタキーが見つからない
    → AltキーとEscキーがメタキーになるように対策

  5. 押せないキーのリスト
    (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) 環境によっては使用可能?

  6. 補完メニューの表示が日本語表示のところでずれる
    → ある程度対策 (まだ若干ずれるケースがある)

  7. lisp-mode に入ると lem を終了できなくなる
    → slime を終了する処理を追加 (時間がかかることがある)
    → 終了に失敗することがある (mintty を落とせば sbcl.exe も終了する。。。)

  8. サロゲートペアの文字 (#\U20B9F の「しかる」、#\U1F363 の「すし」(絵文字) 等) の表示に問題がある
    (カーソルがずれる。カーソルを移動すると表示が乱れる。画面分割時や補完メニューの表示がずれる等)
    → ある程度対策 (まだ若干ずれるケースがある)

  9. 表示が不安定で乱れることがある
    → 入力用スレッドで画面を更新しないように対策 (まだ若干乱れることがある)
    ( lem-project/lem#336 )
    → winpty (または ConEmu) は、Windowsコンソールのバッファの内容を監視 (polling) して表示を更新している。
    そして、PDCurses による書き込みと、winpty (または ConEmu) による監視 (polling) のタイミングが
    バッティングして、表示が乱れるもよう。これは方式的に仕方ないか。。。
    とりあえず、画面をリサイズすれば復旧することが多い。

  10. M-x slime で固まる
    → 実行しなくても使えるようだが。。。
    → 対策 ( lem-project/lem#385 )

  11. C-x C-c で終了しない場合がある
    → 次に何かキーを押すと終了する (スレッドの関係?)
    → 対策 ( lem-project/lem#357 )

その他 情報等

  1. バージョンアップについて
    自分の環境だと、
    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 確認) 。

  2. 設定ファイルについて
    ~/.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 で確認できます )

  3. Windows Terminal 上での実行方法 (Windows 10)
    以下のページを参照ください。
    https://gist.github.com/Hamayama/fc442e71304629527866f7c69c2e9f5e

  4. ConEmu 上での実行方法
    以下のページを参照ください。
    https://gist.github.com/Hamayama/16268a9d607eaebcc56df907eac97cd2

  5. 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 上で絵文字を表示できていません)

  6. 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

参考情報等

環境等

  • 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)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment