Let's write β

プログラミング中にできたことか、思ったこととか

Acmeにキーバインドを追加する

Plan9Portを最近良く使っています。AcmeというPlan9のエディタがあり、マウスのクリックをいろいろな場面で利用して非常に
便利なのですが、一方でキーバインドは最小限に抑えられており、どうしても僕には少し使いづらい場面がありました。

そこで、Acmeソースコードを読んで、キーバインドを追加することに成功したので、その手順をざっと自分用のメモとして残しておきます。

text.cの中を見よう

ソースコードのファイルの中にtext.cというファイルがあります、
その中のtextypeという以下の関数を見てみましょう

void
texttype(Text *t, Rune r)
{
	uint q0, q1;
	int nnb, nb, n, i;
	int nr;
	Rune *rp;
	Text *u;

	if(t->what!=Body && t->what!=Tag && r=='\n')
		return;
	if(t->what == Tag)
		t->w->tagsafe = FALSE;

	nr = 1;
	rp = &r;
	switch(r){
        case 0x02: // ^B emacs like left
	case Kleft:
		typecommit(t);
		if(t->q0 > 0)
			textshow(t, t->q0-1, t->q0-1, TRUE);
		return;
        case 0x06: // ^F emacs like right
	case Kright:
		typecommit(t);
		if(t->q1 < t->file->b.nc)
			textshow(t, t->q1+1, t->q1+1, TRUE);
		return;

キーバインドを加えよう

実は、この中のcase文がキーバインドを決定している箇所です。

コメント付きで私がCtrl-BやCtrl-Fをつけわ得ている箇所がわかるでしょうか。このような形でcaseの中にキーバインドを定義してやると
自動的に反映されます。

キーのコードを調査しよう

キーのコードを調査するときには私は xev というX11のプログラムを使っています。xevの使い方は割愛しますが、xevで調査したコードをそのまま
利用すればキーバインドが設定されます。

ざっと、自分が忘れないようにのメモなので走り書きでスミマセン。いつか機会があったら清書します(善処します;;)

僕が働いているAzit.incでは一緒に働けるエンジニアを募集しています!
採用情報 — 株式会社アジット|Azit Inc.