Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Lem エディタの scheme-mode

Lem エディタの scheme-mode

  • (キーバインドの記号 (C- 等) の意味については、Emacs 関連の文書を参照してください)

  • (デフォルトでは、Scheme の処理系は Gauche を想定しています)

scheme-mode

  • 拡張子が .scm, .sld, .rkt のファイルを開くか、または、
    M-x scheme-mode で、scheme-mode に入ります。

  • 主なキーバインド

    キー
    内容
    Tab インデント または シンボル補完 (indent-line-and-complete-symbol)
    C-M-\ リージョンのインデント (indent-region-command)
    C-c C-e 直前の式を評価 (scheme-eval-last-expression)
    C-c C-r リージョンを評価 (scheme-eval-region)
    C-c C-l ファイルを Scheme プロセスにロード (scheme-load-file)
    C-c C-z REPL バッファに移動 (scheme-switch-to-repl-buffer)
    C-c z 同上

    (備考) リージョンとは、C-Space (または C-@) でマークした場所から
    カーソル直前までの範囲のことです。
    (選択状態の表示は C-g で解除できます)

    (備考) 現状、Scheme の処理系を起動するには async-process ライブラリが必要です。
    もし、式の評価等で command not found と表示される場合には、
    async-process ライブラリをインストールしてください。
    (ros install cxxxr/async-process を実行する等)
    (また、Scheme の処理系自体も、事前にインストールされている必要があります)

  • 処理系の設定
    ~/.lem/init.lisp 内に以下のように記述すると、
    起動する Scheme の処理系を指定できます。
    (以下はデフォルトの設定です (省略可))

    (setf lem-scheme-mode:*scheme-run-command* '("gosh" "-i"))
    (setf lem-scheme-mode:*scheme-load-command* "load")
    

    (備考) ロードコマンドは、scheme-load-file で使われるコマンドです。
    (処理系によっては "include" 等、別のコマンドにする必要があります)

  • キーワードの追加
    ~/.lem/init.lisp 内に以下のように記述すると、
    補完/ハイライト/インデント を行う キーワード を追加できます。
    (デフォルト設定は こちら を参照)

    (setf (lem-scheme-mode:scheme-keyword-data)
          (append
           (lem-scheme-mode:scheme-keyword-data)
           ;; name  completion  highlight  indentation
           '(("reset"    t          t          nil)
             ("shift"    t          t          1)
             ("call/pc"  t          t          nil))))
    

    (備考) 各項目は、nil を指定すると対象外になります。
    indentation には、body (または expr) の前の引数の数を指定してください。

scheme-repl-mode

  • scheme-mode で評価を行うか、または、
    M-x start-scheme-repl で、Scheme の REPL バッファが開きます。
    REPL バッファのモードは scheme-repl-mode になります。

  • 主なキーバインド

    キー
    内容
    Return 評価または改行 (scheme-eval-or-newline)
    M-p 1個前の入力を表示 (listener-prev-input)
    M-n 1個後の入力を表示 (listener-next-input)
    M-r 過去の入力を検索 (listener-previous-matching-input)
    C-c C-u 現在の入力をクリア (listener-clear-input)
    C-c M-o REPL バッファ全体をクリア (listener-clear-buffer)
    なし Scheme プロセスを強制終了 (scheme-kill-process)

その他 情報等

(2019-6-20)(2019-6-23)(2019-6-24)(2019-7-18)(2019-7-20)

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.