5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Emacs風のCUIエディタを作った話

Last updated at Posted at 2024-08-15

はじめに

自作のEasy-ISLispの開発もほぼ完成しました。ISLisp基準準拠のほかに並列機能、TCP/IP通信の機能拡張も終えました。やり尽くしました。さて、それではLisp遊びをしましょうか、と始めてみると適当なエディタがないのです。CでEasy-ISLispを開発してる時にはマイクロソフトのVSCodeを使っていました。ところがこれのLispサポートが私好みではないのです。そしてCommonLispのサポートのみでISLispはサポートされていません。よっしゃ、いっちょ、自分で作るか!とCUIのEmacs風のエディタを作りました。

土台

もともとEdlisというCUIエディタを付属させていました。これは入門用の簡易エディタです。Emacs風のキーバインドながら最小限の機能しかないものでした。Emacsはとても多機能なのですが、設定が面倒臭く、Lisp初心者はEmacsの設定でLisp熱が冷めてしまうような気がしました。そのために用意してあったものです。

今回、このEdlisを大幅に改良拡張しました。Scheme用のエディタであるEdwinと互換性を持たせています。私は1980年代にテキサスインスツルメント社のPC-SchemeでSchemeを経験しました。Edwinに馴染みがあるのですね。それを思い出しつつ、Edlisを実用的に使えるように改良しました。ver5.25で機能アップしてあります。

キーバインディング

PC-Schemeのマニュアルを参照しつつ次のようになっています。

CTRL+F move to right in character units → key
CTRL+B move to left in character units ← key
CTRL+P move to up in line ↑ key
CTRL+N move to down in line ↓ key
CTRL+J move to end of line
CTRL+A move begin of line
CTRL+E move to end of line
CTRL+D delete one char Back Space key
CTRL+O return Enter key
CTRL+V display next page Page Down key
ESC V display previous page Page Up key
ESC < goto top page Home key
ESC > goto end page End key
ESC f Move forward in word units
ESC b Move backward in word units
ESC CTRL+F Move forward in S-expressdion units
ESC CTRL+B Move Back in S-expression units
ESC CTRL+N Move forward in list units
ESC CTRL+P Move back in list units
ESC CTRL+U Move up a level in the list structure
ESC STRL+D Move down a level in the list structure
Insert Switch insert-mode and overwrite-mode
TAB insert spaces as lisp indent rule
CTRL+X CTRL+C quit from editor with save
CTRL+X CTRL+Z quit from editor without save
CTRL+X CTRL+F load from file to editor
CTRL+X CTRL+V load from file to editor
CTRL+X CTRL+I insert buffer from file
CTRL+X CTRL+S save file
CTRL+X CTRL+W save file as
CTRL+X CTRL+L save region to file as
CTRL+S search a word forward
CTRL+R search a word backward
CTRL+T replace a word
ESC TAB complete builtin function name
ESC I info of function
ESC ^ mark(or unmark) row for selection
CTRL+K cut one line
CTRL+W cut selection
ESC W save selection
CTRL+Y uncut selection
CTRL+G cancel command

ISLispサポート

ISLispはコンパクトなため組込み関数は少ないのですが、それにしても全部を覚えてはいられません。そこでEdlisに組込関数の仕様を検索する機能を追加してあります。関数名にカーソルを合わせてESC i と押すと最下行に関数の説明がでるようにしてあります。

bandicam 2024-08-15 13-56-26-606.jpg

お望みのままに

EdlisはすべてC言語で書かれています。およそ3800行ですが、そのうちヘルプデータを除くとコアな部分は3000行程度です。データ構造は極めて単純にしてあります。容易に改造することができます。EmacsだとEmacs-Lispを覚えてそれで機能拡張をしていきます。EdlisはC言語そのものを弄れるのでこっちの方が楽な人もいるかもしれません。

ターミナル機能

Edlisはターミナルの機能はもっていません。Tmuxと合わせて使います。EdlisとEasy-ISLispを分割画面に起動しておけば、Emacs風な使い方ができます。

bandicam 2024-08-15 14-01-33-838.jpg

おまけ

かれこれ8年くらい開発を継続してきたEasy-ISLispですがGNUのGuixにパッケージとして採用されていたことがわかりました。感無量です。広く使われてISLispの普及にお役に立てれば幸いです。

bandicam 2024-08-15 14-04-28-366.jpg

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?