Skip to content

Instantly share code, notes, and snippets.

@Hamayama Hamayama/1010_lem_win.md
Last active Jul 18, 2019

Embed
What would you like to do?
Lem エディタの Windows 上でのインストール手順等

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

インストール手順

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

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

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

  3. Roswell のダウンロード、展開、PATH の設定
    https://github.com/roswell/roswell/wiki/Installation#windows
    から、
    64bit 環境の場合は Roswell-x86_64.zip を、
    32bit 環境の場合は Roswell-i686.zip を、
    ダウンロードして、適当なフォルダに展開してください。
    そして、Windows の環境変数 PATH に、展開したフォルダへのパスを追加してください。
    (すでにインストール済みであれば本手順は不要です)

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

    ros setup
    

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

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

    ros install cxxxr/lem
    
  6. async-process のインストール (外部プログラム起動用)
    <MSYS2/MinGW-w64 (64bit) 環境の場合>
    プログラムメニューから MSYS2 の MinGW 64bit Shell を起動して、以下のコマンドを実行してください。
    <MSYS2/MinGW-w64 (32bit) 環境の場合>
    プログラムメニューから MSYS2 の MinGW 32bit Shell を起動して、以下のコマンドを実行してください。

    ros install cxxxr/async-process
    
  • インストール手順は以上です。

使い方

  • <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. コマンドプロンプト上では動作しない
    → ある程度対応( https://github.com/cxxxr/lem/pull/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. 表示が不安定で乱れることがある
    → 入力用スレッドで画面を更新しないように対策(まだ若干乱れることがある)
    ( https://github.com/cxxxr/lem/pull/336 )

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

  11. C-x C-c で終了しない場合がある
    → 次に何かキーを押すと終了する(スレッドの関係?)
    → 対策 ( https://github.com/cxxxr/lem/pull/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. ConEmu 上での実行方法 (実験中)

    chcp 65001
    ros -Q -s lem-pdcurses -L sbcl-bin -- %USERPROFILE%\.roswell\bin\lem-ncurses
    

    (または、バッチファイル lem_conemu.bat を、以下の内容で作成

    start ConEmu64.exe -run chcp 65001 ^& ros -Q -s lem-pdcurses -L sbcl-bin -- %USERPROFILE%\.roswell\bin\lem-ncurses %*
    

    )
    ConEmu の設定は、以下とした (バージョン 190331)。

    Settings - General
      Choose color scheme - <Default Windows scheme>
    Settings - General
      Inject ConEmuHk.dll into all processes started in ConEmu tabs - ON
        (この設定をしないと、ANSI escape sequence を処理できない)
    Settings - General - Fonts
      Main console font - MS ゴシック
      Compress long strings to fit space - OFF
      Alternative font  - MS ゴシック
    

    (注意) pdcurses.dll に PATH が通っている必要がある
    (MSYS2 の mingwXX/bin フォルダにある pdcurses.dll を Roswell のフォルダにコピーする等)
    (注意) C-v がペーストになってしまうので、スクロールするには、
    C-shift-v か PageDown を使う必要がある
    → Settings - Keys & Macro の Hotkeys の設定で、キー割り当てを変更できるもよう
    ( https://laboradian.com/cmder-conemu-my-settings/ )

  3. mintty 上での絵文字の幅
    .minttyrc に Charwidth=unicode という行を追加すると、
    絵文字 (#\U1F363 の「すし」等) の表示幅が2倍になり、
    カーソルがずれなくなる。
    (.minttyrc は MSYS2 の home/(ユーザ名) フォルダにある)
    (ただし、#\U1F336 の「とうがらし」のように、まだずれる絵文字もあるもよう。。。)
    <参考URL>
    https://github.com/mintty/mintty/wiki/Tips#character-width
    https://github.com/cxxxr/lem/pull/348
    https://gist.github.com/Hamayama/12d5e637fc684e1d7e58e96aad5d0728

  4. Windows のタイマーの精度について
    内部で Windows API の timeBeginPeriod を使用して、
    タイマーを高精度 (15msec → 1msec程度) に設定している。
    もし、問題がある場合には、lem の設定ファイル ( ~/.lem/init.lisp ) に
    以下の記述をすれば、高精度にしないようにできる。
    (ただし、入力への反応が、若干遅くなる)

    #+(and win32 lem-ncurses)
    (setf (lem-ncurses:input-polling-interval) 0.01)
    

    <参考URL>
    https://github.com/cxxxr/lem/pull/358

環境等

  • OS
    • Windows 8.1 (64bit)
  • 環境
    • MSYS2/MinGW-w64 (64bit/32bit) (gcc version 8.3.0 (Rev2, Built by MSYS2 project))
    • PDCurses 3.8-1
    • Roswell 19.05.10.99(34f7352)
    • Lem 1.5

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.