Emacs講座 -第9回- C コーディングスタイル

目次 / 第1回 第2回 第3回 第4回 第5回 第6回 第7回 第8回 第9回 cc-mode Emacs では cc-mode というパッケージが C 系言語のコーディングスタイルを統括しています。cc-mode はパッケージ名で、個々のメジャーモード名は c-mode や c++-mode です。 cc-mode がサポートする言語を cc-mode.el から抜粋しておきます。 CC Mode supports K&R and ANSI C, ANSI C++, Objective-C, Java, CORBA’s IDL, Pike and AWK with a consistent indentation model across all modes. 設定例 前述の言語の中で私が使うのは C 言語だけで、以下の設定をしていました。 (add-hook 'c-mode-common-hook (lambda () (c-set-style "bsd") ;;; (a) (setq c-basic-offset 4) ;;; (b) ;; 演算式が複数行にまたがるときのオフセット (c-set-offset 'statement-cont 'c-lineup-math) ;;; (c) ;; 行末のスペースやタブに色づけして警告する。 (setq show-trailing-whitespace t))) ;;; (d) c-mode-common-hook は C と C++ 両方に影響する hook です。C だけに設定したい場合は c-mode-hook を、C++ だけに設定したい場合は c++-mode-hook を使います。...

2009-07-16 (Thu) · masutaka

Emacs講座 -第8回- タブ幅

目次 / 第1回 第2回 第3回 第4回 第5回 第6回 第7回 第8回 第9回 3つの変数 Emacs のタブ幅には、3つの変数が関係しています。 tab-width タブコードを半角スペースいくつ分で表示するかを制御する変数です。各バッファ毎に設定できます。デフォルトは 8 です。 default-tab-width tab-width のデフォルト値です。全てのバッファに影響する変数です。デフォルトは 8 です。 tab-stop-list TAB キーを押した時に、カーソルが移動するカラムの位置です。デフォルトは (8 16 24 32 40 48 56 64 72 80 88 96 104 112 120) です。 例えばタブ幅を 4 に変更したい場合は以下のようなコードを ~/.emacs に記述します。 (setq-default tab-width 4) (setq default-tab-width 4) (setq tab-stop-list '(4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 104 108 112 116 120)) 関数化してみよう tab-stop-list の設定が少し煩雑ですよね。以前は手計算で tab-stop-list の中身を作っていたのですが、見事に計算間違いした経験があります。そんな自分が嫌になったので、関数化しました。...

2009-07-10 (Fri) · masutaka

Emacs講座 -第7回- 文字コード

目次 / 第1回 第2回 第3回 第4回 第5回 第6回 第7回 第8回 第9回 さあ、文字コードです。 文字コードの設定 いきなり矛盾しますが、最近の Emacs(例:23.3) では文字コードの設定は不要です。 Emacs はデフォルトの状態でも、文字コードを自動判別してファイルを開くことが出来ます。新規作成ファイルの文字コードも locale の設定によって自動決定されます。 もしあなたの ~/.emacs に下の設定が書いてあったら削除しましょう。もはや廃れた設定です。 (set-language-environment "Japanese") (prefer-coding-system 'utf-8) (set-default-coding-systems 'utf-8) (set-terminal-coding-system 'utf-8) (set-keyboard-coding-system 'utf-8) (setq-default buffer-file-coding-system 'utf-8) 参考情報: mule-ja-2009:09813 Mac OS X における文字コードの設定 Mac ではファイルシステムに HFS+ を使っているため、濁点や半濁点の扱いが Windows と Linux と異なるそうです。これを回避するため、以下の設定が必要とのこと。Emacs-23.2 以上で設定可能です。 (require 'ucs-normalize) (set-file-name-coding-system 'utf-8-hfs) (setq locale-coding-system 'utf-8-hfs) 参考情報: 紹介マニアどらふと版: Mac OS X におけるファイル名に関するメモ(NFC, NFD等) 文字コード関連の便利機能 Ctrl-x Ctrl-m c <文字コード> [Enter] Ctrl-x Ctrl-v [Enter] 文字コードを指定し直して、現在開いているファイルを開き直す方法です。結構重宝します。<文字コード> は TAB で補完出来ます。 Ctrl-x Ctrl-m f <文字コード> [Enter] 現在開いているファイルの文字コードを変更する方法です。たくさんのファイルを変換する場合は nkf なんかを使うのでしょう。 第7回終わり。...

2009-07-09 (Thu) · masutaka

Emacs講座 -第6回- load-path

目次 / 第1回 第2回 第3回 第4回 第5回 第6回 第7回 第8回 第9回 本項は、ネット上から *.el をダウンロードして、いろいろ試したくなってきたあたりで読むと良いと思います。load-path の仕組みを理解しましょう。 load-path とは何か? UNIX や Windows 等に存在する「環境変数 PATH」の Emacs 版です。 例えば ls を実行すると、「環境変数 PATH」に登録された最初のディレクトリから ls が検索され、最初にヒットした ls が使われますよね? また、どのディレクトリにも ls が存在しなければ、 command not found: ls などといったエラーが発生します。 Emacs では例えば ~/.emacs に以下のようなコードを書くと load-path が参照されます。 (require 'hoge) load-path は Emacs Lisp の変数です。どんな値が入っているのかは第3回 の方法で調べられます。 load-path には複数のディレクトリが登録されているはずです。 まず先頭のディレクトリについて、以下の順で検査が行われます。第2回 の .emacs と同じですね。 hoge.elc が存在するか? hoge.el が存在するか? hoge が存在するか? 1, 2, 3 のどれにも当てはまらなければ、次のディレクトリが検査されます。...

2009-07-05 (Sun) · masutaka

Emacs講座 -第5回- キーバインドの変更

目次 / 第1回 第2回 第3回 第4回 第5回 第6回 第7回 第8回 第9回 Emacs では数多くの関数がキーに割り当てられています。その中には押しやすいものもあれば、押しづらいものもあります。また、全ての関数がキーに割り当てられているわけではないため、頻繁に使う関数なのに M-x hogehoge [Enter] などと実行しなければならない場合もあります。 という状況ではありますが、Emacs のキーバインドはフルカスタマイズ可能です。カスタマイズするしかないでしょう。:-) ポリシー 私は以下のことを念頭に置いて、キーバインドを変更しています。 デフォルトのキーバインドは、極力変更しない。 連打することがあるコマンドは1ストローク(例: Ctrl-t)。 連打する必要が少ない、もしくはやや危険なコマンドは2ストローク(例: Ctrl-q Ctrl-h)。 2ストロークにする時は、全て Ctrl-q Ctrl-h のような Ctrl を介したものにする。例えば Ctrl-q h だと、Ctrl キーを一旦ニュートラルにする必要があるので、Ctrl-q Ctrl-h より確実に遅い。 カーソルキーやファンクションキーは遠いので、極力使わない。 知っておくべきこと 例えば、Ctrl-n というキーを押すと next-line という関数が呼ばれます。Ctrl-f は forward-char です。ただの a というキーにも self-insert-command という関数が割り当てられています。 このように、全てのキーに関数が割り当てられています。 では、どうやって調べたらよいでしょうか?これを調べるヘルプコマンドが、以下になります。ミニバッファに関数名が表示されます。 F1 c 調べたいキー操作 F1 c 自体も、もちろん関数呼び出しとなっています。上の方法で調べると、describe-key-briefly という関数だと分かります。 逆に、ある関数がどのキーに割り当てられているのかは、F1 w で分かります。 以上を知っていれば、現在のキーバインドがどのように設定されているか分かるはずです。 よく使うヘルプコマンド一覧を記載しておきますね。F1 Ctrl-h すると、一覧から以下のヘルプを選択することも出来ます。 キー 関数名 説明 F1 c describe-key-briefly 指定したキーに対応する関数名を、ミニバッファに表示 F1 k describe-key 指定したキーに対応する、関数のヘルプを表示 F1 f describe-function 指定した関数のヘルプを表示 F1 w where-is 指定した関数に対応する、全てのキーを表示 F1 b describe-bindings 現在のバッファのキーバインド一覧を出力 F1 m describe-mode 現在のバッファのメジャーモードとマイナーモードの説明を出力 F1 a apropos キーワードにマッチする関数と変数を検索 F1 i info Infoを閲覧 基本となる設定方法 global-map 一例として。Ctrl-z すると、M-x shell を実行できるようにしてみます。...

2009-07-02 (Thu) · masutaka

Emacs講座 -第4回- カーソル移動

目次 / 第1回 第2回 第3回 第4回 第5回 第6回 第7回 第8回 第9回 高速なカーソル移動は、エディタを使う上で重要なポイントになります。上下左右以外の移動手段を無意識に使えるようになることが、高速化のコツだと思います。 ※「emacs 雑記」の motion に触発されて書いてみましたが、かなりパクリになってしまいました。🙏 上下左右 それぞれ、Ctrl-p, Ctrl-n, Ctrl-b, Ctrl-f に割り当てられています。 十字キーでも移動できますが、こちらの方がホームポジションからの距離が短いので効率が良いはずです。 以下のように前置き引数を付けると、「何文字だけ移動」とか「何行だけ移動」とか出来ます。 キー 説明 Ctrl-u Ctrl-f 4 文字右に移動 Ctrl-u Ctrl-u Ctrl-n 16 行下に移動 Ctrl-u 7 Ctrl-b 7 文字左に移動 前の単語、次の単語 それぞれ、Meta-b, Meta-f に割り当てられています。 英文だと正確に単語単位で移動しますが、日本語だと単語の区切りがおおざっぱです。ただ、通常の左右移動の高速版と考えると、かなり使えます。 私はそれぞれ、Ctrl-, と Ctrl-. に割り当て直しました。 行頭、行末 行頭は Ctrl-a と Home に、行末は Ctrl-e と End に割り当てられています。どちらもかかせません。 スクロールアップ、スクロールダウン スクロールアップは Ctrl-v と PageDown に、スクロールダウンは Meta-v と PageUp に割り当てられています。 一行だけスクロールしたい場合は、Ctrl-u 1 Ctrl-v や Ctrl-u 1 Meta-v のように前置き引数を付けます。もしくは、以下相当のものをキーに割り当てます。...

2009-06-30 (Tue) · masutaka

Emacs講座 -第3回- *scratch* バッファ

目次 / 第1回 第2回 第3回 第4回 第5回 第6回 第7回 第8回 第9回 本項は、いろいろな設定を .emacs にコピペし始めたあたりで読むと良いと思います。コピペ房から脱却しましょう。 .emacs で多い設定の一つに (setq message-log-max 256) などといった setq 文があると思います。上記例では、message-log-max という変数に 256 という値を代入しています。(message-log-max は、*Messages* バッファに保存される最大行数を格納する変数です。) では設定しないと、message-log-max にはどのような値が入っているのでしょう? *scratch* バッファを使うと簡単に調べられます。 message-log-max を *scratch* バッファにコピペし、message-log-max の後ろで Ctrl-j してみてください。前述の設定をしないと 100 が、設定をすると 256 が出力されると思います。 message-log-max ;; =>100 ※ 変数のヘルプからも、現在の値を確認できます。 F1 v message-log-max [Enter] 実は上の方法は単に変数の値を調べているのではなく、変数を評価しています。 もっと正確に言うと、message-log-max というシンボルを評価しています。評価の結果(戻り値)が 100 というわけです。シンボルは S 式の最小単位です。S 式が分からなければ、単に「式」と読み替えていただいて構いません。 さて、もっとも典型的な S 式は前述のような (setq message-log-max 256) です。これも *scratch* バッファで評価できます。 (setq message-log-max 256) ;; =>256 評価すると、変数 message-log-max には 256 が代入されます。Emacs Lisp では S 式は必ず値を返すので、256 が出力されます。...

2009-06-28 (Sun) · masutaka

Emacs講座 -第2回- .emacs (どっと いーまっくす)

目次 / 第1回 第2回 第3回 第4回 第5回 第6回 第7回 第8回 第9回 何はなくとも、まずは .emacs (どっと いーまっくす) です。 Emacs は起動すると次の順番にユーザ設定ファイルを検索し、最初にヒットしたものを読み込みます。これがいわゆる .emacs (どっと いーまっくす) です。(最近の Emacs は ~/.emacs.d/init.el も使えます。) ~/.emacs.elc ~/.emacs.el ~/.emacs .emacs.elc は、.emacs.el や .emacs を以下のようにバイトコンパイルしたものです(他の方法もあります)。 % emacs -Q -batch -f batch-byte-compile ~/.emacs バイトコンパイルすると、起動時間や実行時間が少し短くなります。ただ、.emacs を修正した後にバイトコンパイルし忘れると、前述の読み込み順番のため、古い設定のまま Emacs が起動するという弊害もあります。 .emacs.el と .emacs は名前が違うだけです。 .emacs の他に site-start.el と default.el もあります。あまり意識することはないかもしれませんが、管理者が全ユーザに設定させたい内容を記載して使います。[2008-05-15-1] もご覧下さい。 -q オプションはよく使います。こうすると ~/.emacs を読み込みません。 % emacs -q ~/.emacs の代わりに別なファイルを読み込ませたい時は、このようにします。 % emacs -q -l /hoge/huga.el 第2回終わり。...

2009-06-27 (Sat) · masutaka

Emacs講座 -第1回- Emacs と私

目次 / 第1回 第2回 第3回 第4回 第5回 第6回 第7回 第8回 第9回 GNU Emacs に初めて出会ったのは、入社した時に使った Nemacs でした。Solaris2.6 にインストールされていました。2000 年入社なので、使い始めてもう 10 年です。 ちょうど良い区切りなので、初心者から脱却したい人向けに、まとまった文章を書くことにしました。今回はそのイントロです。GNU Emacs は Emacs と略します。XEmacs の話はしない予定です。 さて、入社当時の話に戻ります。 最初は訳が分からなかったため、Nemacs はすぐに使わなくなりました。Windows に C ソースをコピーして秀丸で編集したり、rmail を使わずに Becky! を使ったりしていました。しかし、Windows がない環境で仕事をすることになったため、腹を決めて Emacs と付き合っていくことにしました。 その環境には運良く Mule がインストールされていました。私は C ソースを Mule で編集し、mh-e でメールを読み書きすることになりました。 そういえば、今も覚えていることがあります。当時はファイルを開くたびに Mule を起動していましたが、職場の上司は Dired でディレクトリを開いて、そこからファイルをいくつも開いていました。shell-mode も使っていたかもしれません。ああ、こういう使い方をするエディタなんだと思ったことを覚えています。 当時はいろんな人の ~/.emacs を読み漁りました。職場の人のものや、ネット上に転がっているものです。 ネット上で特に参考になったのは、GANAWARE に置いてある .emacs です。UNIX や Windows、Emacs の各バージョンの環境切り分け方法がきれいだったので、今もその名残りが私の ~/.emacs に残っています。ほかに blankspace も大変参考になりました。 そうこうしているうちに、Mule は過去のものだと知りました。当時の最新は Emacs-20.7 でそろそろ Emacs21....

2009-06-26 (Fri) · masutaka

Emacs講座 -目次-

-第1回- Emacs と私 -第2回- .emacs (どっと いーまっくす) -第3回- *scratch* バッファ -第4回- カーソル移動 -第5回- キーバインドの変更 -第6回- load-path -第7回- 文字コード -第8回- タブ幅 -第9回- C コーディングスタイル Emacs のバージョンは 23.3 を想定しています。22 以下は考慮しないことにします。 Emacs の全てを説明することは出来ないので、私の書きたい内容を書きたい順番で書いています。 以下は今後の予定。 -第10回- 私の .emacs (どっと いーまっくす) -第11回- edebugger -第12回- 次の関数、前の関数

2009-06-26 (Fri) · masutaka