タイトル大津真=XはUNIXでサーバで》UNIXの定番エディタ - ViとEmacs(2)カテゴリー文書作成アプリケーション, UNIX, 大津真=XはUNIXでサーバで
作成日2002/2/26 16:53:12作成者新居雅行
――――Emacsの設定
Emacsは起動時に~/.emacs.elファイルを読み込みます。このファイルにはEmacs Lisp言語で設定を記述します。次に基本的な設定例を示します。

〈リスト〉~/.emacs.elの例
;; 日本語の設定(この例ではShift-JISに設定している)
(set-language-environment ’japanese)
(set-keyboard-coding-system ’japanese-shift-jis-mac)
(set-terminal-coding-system ’japanese-shift-jis-mac)
(set-buffer-file-coding-system ’japanese-shift-jis-mac)

;; モードラインに時間を表示
(display-time)

;;モードラインの色を設定
(set-face-foreground ’modeline "yellow")
(set-face-background ’modeline "navy")

――――Emacsの起動
設定が完了したら、FinderでEmacsのアイコンをダブルクリックして起動してみましょう。Emacsの使い勝手はちょっとくせがあるので、まずはチュートリアルをやってみることをオススメします。「Help」メニューから「Emacs Tutorial (choose language)...」を選択してください。ミニバッファー(ウィンドウの一番下の行)に「Language:」と表示されるので、続けて「japanese」とタイプしてreturnキーを押すと日本語のチュートリアルが起動します。

◇Emacsの日本語チュートリアル
 

●カーソルで物理行を移動するには
一般的なエディタでは、カーソルを縦方向に移動すると物理行(実際に見えている行)を移動しますが、Emacsの場合には論理行単位で移動します。つまり段落が行末で折り返されていて何行にも渡る場合に、カーソルが段落単位で移動してしまいます。プログラムのソースではなく、通常の文章を作成する場合にちょっと使いづらいと感じるでしょう。
この問題に対処するEmacs Lispのプログラムはインターネット上にいくつか存在しますが、ここでは、モード単位の設定が可能なphysical-lineを紹介しましょう。

◇physical-line
 http://www.taiyaki.org/elisp/physical-line/

1.physical-line.el をダウンロードし、「~/.site-lisp」など適当なディレクトリに保存します。

2.~/.emacs.elに次のような行を加えます。
(load "~/.site-lisp/physical-line.el")
(add-hook ’text-mode-hook ’physical-line-mode-on)

以上で、Emacsを再起動すればカーソルが物理行単位で移動するようになります。

――――JTerminal上でEmacsを使う
メニューやスクロールバーは不要という上級者の方は、Kusama氏による日本語TerminalであるJTerminal内でEmacsを使うという手もあります。ことえりやATOKによる「インライン変換もどき」の変換も可能です。

◇JTerminalで使うEmacs
 

◇JTerminalのオフィシャルサイト
 http://www.tt.rim.or.jp/~kusama/

JTerminal上でEmacsを起動するには次のようにします。

% emacs -nw 〈return〉

なお、JTerminalが対応している文字コードは日本語EUCのみなので、Emacsの設定ファイル(~/.emacs.el)ではコーディングシステムの設定を「euc-jp」にしておきます。

(set-language-environment ’japanese)
(set-keyboard-coding-system ’euc-jp)
(set-terminal-coding-system ’euc-jp)

――――付録
◇パッチについて
元のソフトウエアと、それを元に修正したソフトウエアとの差分ファイルのことを「パッチ」と呼びます。元のソフトウエアにパッチを適用することを「パッチを当てる」といいます。「パッチ」とは日本語では洋服の継ぎ当てのような意味ですが、ソフトウエアに細かな修正を施すものと考えればいいでしょう。もちろん、パッチの数が膨大になりすぎると混乱を招くため、重要なパッチはバージョンアップ時にオリジナルのソースにマージされるのが普通です。
パッチには、ソースファイルに適用するソースパッチと、バイナリファイルに適用するバイナリパッチがあります。オープンソースソフトウエアの場合には通常パッチはソースパッチとして提供されます。

ソースパッチを当てるにはpatchコマンドを使います。パッチファイルのパスはリダイレクション「<」で指定することに注意してください。

patch -p番号 < [パッチファイルのパス]

オプションの「-p番号」は、パッチファイルを作成した環境と、パッチを当てている環境のディレクトリ構造を調節するために使用します。パッチファイル内には、

+++ dir1/file1

のようにソースのパスが指定されています。「-p0」と指定した場合には、パッチを作成した環境と同じディレクトリ構造と見なされパスがそのまま使われます。
「-p1」とした場合には、パッチファイル内で指定されているパスから最初のディレクトリ部分を取り除いて適用します。「dir1/file1」の場合には「dir1」が取り除かれ「file1」が対象と見なされ、カレントディレクトリにファイルがある状態でパッチが当てられます。
いずれにしてもディレクトリ構造が異なる場合にはエラーになるので、パッチにREADMEなどが含まれていない場合、まず「-p0」を指定して実行してそれでエラーならば「-p1」を指定すると、たいていの場合うまくいきます。
◇パッチの作り方
パッチを作成するにはファイルの差分を表示するdiffコマンドを使用します。元のソースが保存されているディレクトリが「program」の場合、まずこれを「program.org」のような名前でコピーしておきます。

% cp -rp program program.org 〈return〉

ソースファイルの修正が完了したら、diffコマンドでパッチを作成します。

% diff -uNr program.org program > mypatch 〈return〉

ここで「u」はユニファイド差分形式と呼ばれる人間にわかりやすい形式の差分ファイルを作成するオプション、「Nr」はディレクトリ単位でパッチを作成するためのオプションです。
次に作成されたパッチである「mypatch」ファイルの中身を示します。

〈リスト〉パッチファイルの例
diff -uNr program.org/Hello.java program/Hello.java
--- program.org/Hello.java Thu Feb 21 23:33:13 2002
+++ program/Hello.java Thu Feb 21 23:36:21 2002
@@ -1,7 +1,8 @@
class Hello {
public static void main(String argv[]){
- //String s;
- System.out.println("Hello Worlid");
+ String s;
+ s = "Konnitiwa";
+ System.out.println(s + "Hello Worlid");
}
}

最初の行にパッチの作成に使用したコマンドが記述されます。2行目、3行目には変更前と変更後のソースファイルのパスが記述され、その後ろに変更部分のリストがその周囲を含めて表示されます。複数のソースファイルが変更されている場合には、その数だけ変更部分が記述されます。

∽∽∽∽∽∽∽この項、以上∽∽∽∽∽∽∽[大津真]∽∽∽∽∽∽∽
関連リンク大津真Web Site