う~ん、今どきならSpacemacsがイイ、とか言ってたんだけど、Windowsじゃマトモに動かない事が発覚。
しょーがねぇんで、基本的なEmacsによるANSI Common Lisp開発環境の作り方を書いておく。
なお、Cドライブ直下にhomeフォルダがあって、環境変数HOMEでパスが通ってる前提で話をする。
ちなみに、長い間、GNU EmacsはWindowsでは日本語環境に難がある、って話になってたんだけど、最新版のEmacs 27.2だと問題が無くなってるので驚いてた。
まず最初に、7zipをインストールしておこう。これがないとLinuxで良く使われてるtar圧縮ファイルが解凍出来ない。
自分で解凍するこたぁねぇが、Emacsのライブラリをネット上のアーカイブから取ってくる際に自動で使われるのがこのアプリとなる。
7zipのインストールが終わったら、いよいよGNU Emacsをダウンロードする。
このページの下の方にあるemacs-27.2-x86_64-installer.exe(2021年11月21日現在)が最新版である。 一応64bit前提で、って話だ。
ダウンロードが終わったら、ファイルをダブルクリックするとインストールが始まる。インストールフォルダはC直下でC:\Emacsにしておこう。
Emacsのインストールが終わったら、homeフォルダに.emacs.dと言うフォルダが作成されてる事を確認しよう。
また、デフォルトの状態だとデスクトップにEmacsのアイコンができてるハズだ。それをダブルクリックするとEmacsが立ち上がると思う。
Fileメニューから【Visit New File】を選ぶか、あるいはC-x C-f(Ctrlキーを押しながらxキー、fキーを叩く)する。
下のバッファにC:/Emacs/と出るだろうが、そこをC:/home/.emacsとしてReturnキーを叩く。
.emacsと言うのはGNU Emacsの初期化ファイルである。
そこ、つまり(custom-set-variables~の前にに次のコードをコピペしておく。
なお、Emacsで改行 + 自動インデントはC-mとなっている。
(setq default-directory "C:\\home\\")
(setq command-line-default-directory "C:\\home\\")
(require 'package)(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t);; Comment/uncomment this line to enable MELPA Stable if desired. See `package-archive-priorities`;; and `package-pinned-packages`. Most users will not need or want to do this.
;;(add-to-list 'package-archives '("melpa-stable" . "https://stable.melpa.org/packages/") t)(package-initialize)
それが終わったらFileメニューからSaveを選ぶか、あるいはC-x C-sする。
なお、この時点で、Emacsのキーバインドに耐えられない、とかなった場合、OptionsからUse CUA-keysを選んでおくこと。
また、何か間違った場合、C-gでキャンセルが可能である。
一旦Emacsを閉じて再起動する。
次に、SLIMEをインストールする。
最初にM-x(Mはメタキーと言う意味だが、WindowsではAltキーを指す)と押すと下のバッファが入力モードになるはずだ。M-xと言うのはEmacs Lispで書かれた関数を起動するコマンドとなる。
そこに一旦、package-refresh-contents と打ってReturnする。そうすればアーカイブのデータが更新される。
次はM-x package-install [Return] slime [Return]と打つ。そうすればSlimeがインストールされる。
また、.emacsを開いて、次のコードをコピペする。
(setq inferior-lisp-program "C:\\clisp-2.49\\clisp.exe")
一応前提としてCLISPがC直下に入ってる事としている。別にインストールされてれば、そのパスを記述すること。
また、.emacsをSaveしてEmacsを閉じて再起動する。
今度はM-x slimeしてみよう。そうすると、ANSI Common Lispのリスナーが開くはずだ。
Slime用のプルダウンメニューも出来てて、何か困った場合はそこからコマンドを選べば良い。
基本的にはこれでO.K.なんだけど、まだちとメンド臭いんで、helmと言うライブラリを導入する。
またM-x package-install [RET] helm [RET] する。そうするとhelmがダウンロード/インストールされるハズだ。
そしてまた.emacsを開いて次のコードを付け足す。
(global-set-key (kbd "M-x") 'helm-M-x)
(helm-mode 1)
(setq completion-styles '(flex))
そしてEmacsを再起動する。
今度はM-xすると今使えるEmacsのコマンドがズラーッと出てきて、カーソルキーで選択可能になるはずだ。
これでだいぶ楽になる。何か困った時はM-xしてリストを出し、それを見て選択して使えばいい。
あとはM-x package-install [RET] auto-complete [RET] でもしておけば良い。
これは補完機能である。
.emacsには
(setq load-prefer-newer t)
(require 'auto-compile)
(auto-compile-on-load-mode)
(auto-compile-on-save-mode)
(ac-config-default)
と書いておく。
あとは、M-x package-installで、ac-slime、helm-slime、ac-helm、clhsの4つをインストールする。
追加の.emacs用コードは
(require 'ac-slime)
(add-hook 'slime-mode-hook 'set-up-slime-ac)
(add-hook 'slime-repl-mode-hook 'set-up-slime-ac)
(eval-after-load "auto-complete"
'(add-to-list 'ac-modes 'slime-repl-mode))
(slime-setup '(helm-slime))
(global-set-key (kbd "C-:") 'ac-complete-with-helm)
(define-key ac-complete-mode-map (kbd "C-:") 'ac-complete-with-helm)
(show-paren-mode)
これでslime用に自動補完が可能となる。
また、clhsの導入で、ANSI Common Lispの仕様書であるCommon Lisp HyperSpecが呼び出せる。M-x hyperspec-lookup や M-x common-lisp-hyperspecで見る事が出来る。
これでオシマイ。
ネット検索すると色々と.emacsの設定をして便利にする、と言うノウハウがある。
が、最低限の環境としてはこれでいい筈。
C-x C-fで*.lispファイルを作って、プログラムを書く。C-c C-kすれば、書いたファイルがコンパイルされてリスナーに自動的にロードされる。それで書いたプログラムがきちんと動くかどうか確認すれば良い。
なお、キーバインドに関して言うとすべて覚える必要はない。アンチョコがあるので、プリントアウトしておいて、手元に置いておけば良いだろう。それを見ながらやっていけばいつの間にか覚える事が出来る。
ちなみに、Tools => Gamesと辿れば五目並べやテトリスなんかも遊べる。
また、Emacsにはブラウザも付属していて、M-x eww [RET] アドレス [RET]でWebサイトを見る事が可能だ。
ただし、Emacsのブラウザewwだと、正直言って、goo blogだと固まる可能性がやたら高い(笑)。
多分Emacsの方側の問題じゃなくって、goo blogの方が何かhtml違反をやってんじゃないか、と思われる。
他にも、パッケージを漁ると、Twitterクライアントのソフトなんかもあり、好きな人は一日中Emacsを開きながら遊んでいる。