2017年12月2日土曜日

emacsのslimeをroswellで動かす方法


背景

roswellとはCommon Lispというプログラミング言語を管理してくれるプログラムです。
2017/12/2のlispアドベントカレンダーに「いまから始めるCommon Lisp」という記事があったので、Common Lispを始めてみました。

コマンドから実行できる環境は詰まるところなく試せたのですが、emacsのslimeを通してファイルに記述した関数を実行するための設定や操作方法の調査に時間を取られました。
備忘録を兼ねてメモを共有します。

環境

この記事は下記の環境で動作確認しました。

OS: ubuntu17.10
emacs: 25.2.2
roswell 17.11.11.85

emacsにslimeをインストール

slimeはmelpaで管理されているため、下記の記述をinit.elに追記してmelpaをemacsに設定します。
~/.emacs.d/init.el
(require 'package)
(add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/"))
(package-initialize)

追記できたらemacsを再起動し、「M-x list-package」を入力して、インストールできるパッケージの一覧を表示します。
(M-xとはメタキーを押しながらxを押すという意味です。メタキーはEscとAltに割り当てられているため、M-xは「Esc + x」か「Alt + x」で、入力できます。)


「C-s ac-slime」などで、オートコンプリート機能付きのslimeであるac-slimeを検索します。
(C-s は Ctrlを押しながらsを押すという意味です。)
「ac-」が付いていないslimeもオートコンプリート機能無しで動作しますが、便利な機能があるなら使うのが得だと思うので、この記事ではac-slimeを使います。


ac-slimeにカーソルを合わせて「i x」を入力し、「y」で同意すると、ac-slimeがインストールされます。
ac-slimeをクリックして、インストールボタンをクリックする操作でも、同様にインストールされます。


emacsにroswellを設定

emacsにslimeをインストールしただけでは、「M-x slime」でslimeを実行しても、lispの処理系を読み込めないことを意味する下記のエラーが出てslimeが動きません。
Searching for program: そのようなファイルやディレクトリはありません, lisp

下記のコマンドを実行して、emacsにroswellを読み込ませるのに必要な設定ファイルを作成します。
ros install slime


ファイルを作成したら、init.elに下記の記述を追加します。
~/.emacs.d/init.el
(load (expand-file-name "~/.roswell/helper.el"))

追記したらemacsを再起動して「M-x slime」と入力すると、roswellを読み込んでslimeが起動します。


common lispを動かせます。
(format t "Hello World~%")


ファイルの関数を実行

ファイルに記述されている関数をslimeで実行してみます。
roswell_test.lisp
(defun hello ()
  (format t "Hello from file ~%"))

(defun hello-for (word)
  (format t "Hello ~a from file ~%" word))

emacsで上記のファイルを開きます。

それと並行して「M-x slime」でslimeも起動しておきます。

slimeが起動した状態で実行したい関数の末尾にカーソルを合わせて「C-x C-e」を入力すると、関数がslimeに渡されます。


slimeに戻って関数を実行すると、期待通り実行できます。


カーソルが関数の途中とかだと、期待通りに読み込まれずエラーがでるので、カーソルの位置が大切です。


まとめ

emacsのslimeでroswellを読み込み、common lispの動作確認環境を動かせました。

何かの参考になれば嬉しいです。

参考

いまから始めるCommon Lisp
RoswellでCommon Lisp環境をセットアップする 2016秋
roswell: Initial Recommended Setup

0 件のコメント :