emacsの最近のブログ記事

Emacs 辞典

| | トラックバック(0)

Emacs 辞典Emacs 辞典
佐藤 竜一

翔泳社 2006-05-11

Emacs 辞典 を買ってみた。ちょっと、買いすぎなような気もするが。
これ微妙。。。
アマゾンでレビューしてる人も書いてるが、コマンド名の索引がないのである。
代わりに、目的別Indexってのがあるのだが、これまた微妙。

●カ
 ・
 ・
現在行のコメントをキルする ・・・ 97
現在行の後ろに続く空白をすべて削除 ・・・ 68
 ・
 ・
●マ
 ・
 ・
文字の挿入後に、カーソルを左に移動する ・・・ 117
文字の挿入後に、カーソルを左下に移動する ・・・ 117
 ・
 ・

という感じで一覧にされているが、これが使いにくすぎる。
結局、ページをパラパラめくりながら目的の項がありそうな部分を探すしかないのである。
内容的には、それほど悪くないと思うが辞書としては使えない。
タイトルに辞典をつけるのは避けた方がよかったのではないだろうか。
これを買うなら、まずオライリーの 入門 GNU Emacsの購入をおすすめする。


入門 GNU Emacs (オライリー)

ついに、リリースされましたね。
Emacs 22.1が。

強力無比なテキストエディタの最新版「Emacs 22.1」が正式リリース

早速インストールしてみようかな。


そして、fedora 7もリリースされてた。

fedora project

今回からは、fedora core のcoreが取り除かれてfedora のみと名前が短くなってる。
これも、インストールしてみたいが、入れれるパソコンが今のところない・・・。
サーバをこのfedora7に変えるってのは作業的に大変すぎる。

 
 
さて、話は変わって、興味深い記事があったので紹介。
バベル案内

この記事は現在Googleで働く開発者Steve Yegge (スティーブ・イエギ)の記事を翻訳したものらしい。 アセンブラからキャリアをはじめ、Amazonを経て、現在はGoogle。(リンク先のページ参照。) 詳しくは、この人の名前を検索するとかなりの量のページがヒットするのでそれを参照。

この記事は非常に面白い。いろんなプログラム言語(C, C++, Lisp, Java, Perl, Ruby, Python)の比較をして、特徴を短い文章でまとめてある(ちょい読みにくい部分もあるが・・・)。今、まさにemacsのために自分が取り組んでいるlispの紹介もあった。amazon作った人たちも使ってたんだなぁ。。。
 
 
ポール・ノードストロムが仕事しているとき肩越しにのぞき込んでごらん。Visual Hoge.NETみたいなIDEしか使ったことのない人は本当に驚くことになると思う。(リンク先から引用)
 
 
どんなんなんだろ。覗き見して〜〜。

lispの勉強はemacsを便利に使えるようになる程度でいいやと考えていたが、こういうエピソードを見てしまうと、本気で取り組みたくなってしまう。
ってことは、↓これを買わなければいけないってことか??でもこれ、amazonのレビューによると日本語訳が最悪らしい。原書を買うってのもありかも。



 
 
次にPerl。Perlは以下の様に表現されている。


Perlは夏の台湾の通りの上で破裂したマッコウクジラだ。はらわたがそこら中に飛び散って、車や自転車や歩行者を覆っている。それがPerlだ。本当にチャーミングだ。

しかしPerlは最近まで他のどの言語も持っていなかったものを持ち、それがはらわたが露出していることを補っていた。破裂したクジラからだっていろんなものが作れるのだ。香水だって作れる。すごく有用なのだ。Perlもそうだ。

これはかなり的を射た表現だと感じる。上手い俳句の様に・・・。

ある掲示板にemacsで下記のことを実現するにはどうしたらいいかという書き込みがあった。

各行の先頭に行番号を追加する。 引数として数値を入力すると、その数値を初期行数として使用し、その値からの増加を追加する。

aaa
bbb
ccc
の場合。

引数を渡さなかった場合は
1 aaa
2 bbb
3 ccc

引数8を渡した場合、
8 aaa
9 bbb
10 ccc

メジャーモード製作を目指している自分にとってはちょうど良い練習だと思って自分なりに作って掲示板に書き込んでみた。

↓これ。

(defun add_line_number (&optional start)

"add line number"

(interactive "p")

(or start (setq start 1))

(save-excursion

(let ((max-line 0) (current-line 1))

(goto-char (point-max))

(setq max-line (count-lines (point-min) (point)))

(goto-char (point-min))

(while (<= current-line max-line)

(goto-line current-line)

(insert (format "%d " (+ current-line)))

(setq current-line (1+ current-line))))))

その後、このlispコードを見た人が以下の3点の指摘をしてくれた。

  • lispの関数名には"_"(アンダーバー)でなく"-"(ダッシュ、マイナス)を使う。
  • バッファの最後までの処理をする際は、最後の行を数えるのではなく、通常 (eobp)を使用する。
  • 次の行に移動する場合は、通常(forward-line 1)を使用する。

    早速これを参考に修正してみた。

    (defun add-line-number (&optional start)

    "add line number"

    (interactive "p")

    (or start (setq start 1))

    (save-excursion

    (let ((current-line 0))

    (goto-char (point-min))

    (while (not (eobp))

    (insert (format "%d " (+ start current-line)))

    (setq current-line (1+ current-line))

    (forward-line 1)))))

    なんかかなりすっきりと実現できてしまった。
    最初の自分が作ったのはかなり無理やり感が漂っている。
    良い勉強になった。
    指摘してくれた人サンクス!!さらに、ここはこうするべきってころがあればご教授お願いします。(コメント欄で)

    後に、わざわざlispで書かなくても、emacsの正規表現置換(replace-regexp)を使えばできることが判明。

    ^ (行先頭)

    \,(+ 5 \#)  (数値、引数5の場合。)
    を置換する。
    しかし、自分のxemacsの環境ではこの方法は上手くいかなかった。


    ↓こんなのあった。自分としては、elispで高レベルを目指すつもりはない。とにかく、自分の作業効率を上げるためにメジャーモードを作ったり、コマンドを作ったり、自由にカスタマイズできるようになれれば、それで良いのである。
    Scheme:Schemeプログラマのレベル10

    ↓ちなみに、Perl版もある。こっちは、高レベルを目指したい・・・。
    Perlプログラマのレベル10

  • unixを使ったり、emacsを使ったりするときに、"A"の隣にCtrlキー(コントロールキー)があると非常に使いやすい。windowsで使用するときも、たぶん"A"の隣にあったほうがいいと思う。Ctrl+c,Ctrl+x,Ctrl+vとか使ったりするときに、押しやすい。unix配列キーボードではその配置がデフォルトである。しかし、unix配列キーボードには、windowsキーがついていない。
    普通の日本語配列キーボードでは、"A"の隣は、CapsLockになってる。
    そこで"A"の隣にCtrlキーを持ってきて、さらに、windowsキーボードがついていないキーボードでwindowsキーを使えるようにする方法はないか?
    レジストリを書き換えて、変更する方法があります。
    常駐ソフトをしようして変更することも可能だろうが、余分な処理を増やしたくないから、レジストリの書き換えでするほうがオススメかな。

    [方法]

    HKEY_LOCAL_MACHINE\System\CurrentControlSet001\Control\KeyBoard Layout
    にバイナリ値で"Scancode Map"を作成。スペース、大文字小文字も全く同じ名前でつくる。
    そして、値として以下を書き込む。

    [Ctrl と CapsLockを入れ替えて無変換キーをwindowsキーにする場合]
    real force 106はwindowsキーがついてないから、この方法で使ってます。

    00 00 00 00 00 00 00 00
    04 00 00 00 1D 00 3A 00
    3A 00 1D 00 5B E0 7B 00
    00 00 00 00

    [左Ctrl と CapsLockを入れ替える場合]
    00 00 00 00 00 00 00 00
    03 00 00 00 1D 00 3A 00
    3A 00 1D 00 00 00 00 00