5.3 GNU Emacs (Mule) はこれまでに実行したコマンドを覚えている。直前に実行したコマンドを再 び呼び出すには c-x ESC を用いる。そうするとミニバッフアに直則に実行し たコマンドの内容が表示されるのでここで図キーを押せは再実行される。 こでコマンドの引数などを書き換えることも可能である。続けて M-p を押 現在の編集モードはモード行の、、げ内に表示される。 集を支援する c モードやい TEX のテキスト編集用の latex モードなどがある。 MuIe にはいくつかの編集モードがある。たとえば C のソースコードの編 5.3.3 モード していくと以前に実行したコマンドが次々に表示される。 ーⅦ市、 : f いい . txt (FllIl(ldIlle-'Ilta い 図 5 ー 25 モード行 ule のデフォルトのモードは fundamental モードである。各モード特有 、〃の数が見出しのレベルとなる。それ以 付いている行が、、見出し〃となり、 文章構成を考えるときなどに用いることができる。先頭に 1 つ以上の、、 * 〃が アウトライン編集用のモードにはト x 。Ⅱ tl ⅲ e ー m 。 de で切り替わる。論文の ■アウトラインモード のキーバインドや関数については M-x describe-mode (c-h m) で表示される。 外の行は本体〃の一部となる。以下に例を示す。 * 動物について れから先が「動物について」という見出しの本体となる。 * * ほ乳類 「動物について」の中の「ほ乳類」という副見出しの本体 * * 鳥類 「動物について」の中の「鳥類」という副見出しの本体 何行続いてもよい 259
6.1 日本語入力 フ。ロフェショナル圏 D tprofessional' は普通「フ。ロフェッショナル」と書くけど、 ーこのほんのたいめいは「ぶろふえしよなる」て、「つ」かはいってないんたよー Ⅲ廰団に nt. ) ーーー自Ⅱーー 図 6 ー 2 たまごによるローマ字かな入力 たまごの漢字変換モード時の基本的なキーバインド 表 6 ー 1 機能 1 ・ 1 0 五 次の候補 前の候補 文節を縮める 文節を伸ばす 大文節の変換候補一覧表示 文節をカタカナに変換 文節をひらがなに変換 カーソルより前の文節を確定 確定 かなの状態に戻す 文節間のカーソル移動には MuIe の普段の編集のときのように c-f 、 c-b 、 c-a 、 c-e が使用できる。 さらに ASCII 入力またはローマ字かな変換モードのときに c- を押すと、 JIS コード入力や部首入力、特殊記号の入力を行うことができる。 287
カ 入 語 本 日 ( 0 れと同しディレクトリにある rule. * によって設定されているが、たまごの キーバインドとはかなり異なっている。できるだけ近づけるには、 ~/ . ccdef というディレクトリを作り、 / usr / X11 / lib / X11 / ccdef 以下のファイルをそこ にコピーし、 ~/. ccdef/ccdef ・ kinput2 を変更する ( 図 6 ー 8 ) 。そして環境変数 CC-DEF-PATH に ~/. ccdef をセットした後 kinput2 を立ち上げればよい。 defmode Ascii ZenkakuAscii Kana JIS Kuten A11 Restricted # モ ドの官 initialmode Kana # 初期モードの指定 # 各モードに対するルールの記述 # ローマ字 mode Kana " ロ - ーマ " include ) rule . wnnroma ' Tab shift—Tab EXITMODE fallthrough A11 goto Ascii goto ZenkakuAscii n endmode # アスキ mode Ascii "ABC" Tab shift—Tab fallthrough A11 goto ZenkakuAscii goto Kana endmode # 全角アスキ mode ZenkakuAscii " A B C " include . zaSCII Tab shift—Tab fallthrough A11 goto Kana goto Ascii endmode # JIS コ mode JIS ド入力 "JIS コード " ENTERMODE EXITMODE ' 2 ) ) 6 ) fallthrough Restricted 」 iscode—begin 」 iscode—end 293
5 章基本ツ ー丿レ 直前のコマンドラインのコヒ。ー (copy-last-shell-input) コマンド実行結果表示の先頭に飛ぶ (show-output-from-shell) コマンド実行結果表示を消す (kill-output-from-shell) ジョブの一時停止 (stop-shell-subjob) ジョブの強制終了 (interrupt-shell-subjob) EOF の入力 (shell-send-eof) コマンドラインの削除 (kill-shell-input) tcsh を使用しているとき、行末に M 〃が表示されることがある。 これを 防ぐには . cshrc ( または . tcshrc) に以下のような行を付け加える。 説明 キーバインド ー c C ー c C C ー 0 C C c C—d c C ーⅡ if ($?EMACS) then if ( " $EMACS" t) then if ($?tcsh) unset edit stty Ⅱ 1 endif endif ・オートフィルモード Mule の編集モードには、、主モード ( メジャーモード ) 〃と、、副モード ( マイ ナーモード ) 〃がある。これまで説明してきたのはみな主モードである。す べてのバッフアはなんらかの 1 つの主モードを用いている。それに対し、副 モードは主モードと共に使用でき、複数の副モードを同時に用いることもで きる。現在利用している副モードはモード行の ( ) 内に主モード名の右に表 示される。これから紹介するオートフィルモードと上書きモードは副モード に属する。副モードは、、トグル〃で切り替わる。つまりオートフィルモードが 設定されていない状態で M ー x auto-fill-mode を実行するとオートフィルモー ドとなり、もう一度 M-x auto-fill-mode を実行するとオートフィルモードが 解除される。 オートフィルモードを設定すると、テキストを入力して 1 行の長さが設定 266
5.3 GNU Emacs (Mule) された幅 ( デフォルトでは ASCII 文字で 70 文字分 ) を超えると、巨また は図の入力があったところで適当なところ ( 英単語の区切り、日本語の句 読点などその言語の禁則規則にしたがう ) で自動的に改行が入る。自動的に 改行される 1 行の長さは、、 c ーⅡ文字数 c-x 土 (M-x set ー f 土 11 ー c 。 15 れ ) 〃で変更 できる。引数を付けすにただ c ー f を実行すると、行の先頭から現在のカー ソル位置までが 1 行の長さになる。 オートフィルモードは通常のテキストを編集する場合は必要不可欠といっ てもよい。それで M ⅲ e の環境設定ファイル . emacs に以下の行を付け加えて おくと、テキスト編集に関係する主モード ( テキストモード、アウトライン モード、い TEX モードなど ) になったときには自動的にオートフィルモード が設定されるようになる。 (setq text—mode—hook ' (lambda ( ) (auto¯fill-mode 1 ) ) ) ■上書きモード M ⅲ e は通常、挿入モードとなっており、文字列の途中にカーソルを持って いって文字を入力するとその間に文字が挿入されていく。しかし図 5 ー 28 のよ うにテキストで表の枠を書いてから、その各項目を埋めていきたい場合など は表の枠が項目の内容の入力の度にすれていっていまう。これを防ぐには上 書きモードを利用するとよい。 ー名前 十一 ー電話番号 ー住所 図 5 ー 28 テキストで表の枠を書く 上書きモードのトグルは M ・モードの自動切替え —x overvrite—mode で、イ丁える。 編集モードの切り替えはロードするファイルの名前の拡張子によって自動 的に行われるものもあるが、それ以外にもファイルの最初の行のどこか (C 267
2.2 プロセス管理 2.2 プロセス管理・ オペレーティングシステムとしての UNIX の基本的な働きはプロセスと カーネルによって実現されている。プロセスではユーザーのプログラムやラ イプラリの関数が実行され、システムコールによりカーネルのサービスを 利用する。一方、カーネルではこのようなプロセスの実行環境を CPU を時 分割することによって提供し、またプロセスからのさまざまな要求に応じて サービスを提供する。 221 処理の流れ 1 つのプロセスの処理はシステムコールの発生によってカーネルに移行す る。そして、カーネル内部でのサービスの処理が終わると、再びューザーの プログラムに制御が移行する。このように UNIX では 2 つの空間それぞれ に実行モードがある。これがユーザーモードとカーネルモードである。つま り、システムコールはこのモードを切り替える 1 つのきっかけとなる。 * 3 このモードは UNIX の稼働しているハードウェアのプロセッサの状態モー ドに対応して管理され、空間の管理、特にユーザーモードで実行中のプログ ラムからカーネル空間のアクセスを禁止するために効果的に利用されている。 一般的にシステムコールの実体は CPU に用意されている trap 命令で、 の命令によって CPU の状態を切り替えることにより UNIX のカーネルモー ドへの移行を実現している。 2.22 プロセスの状態 UNIX の活性な * 4 プロセスは、 ■実行中 ある。 実行中、 実行可、待ちのいすれかの状態で システム中で唯一 CPU の割り当てが行われているプロセスである。この ときはユーサーモード、カーネルモードのいすれかで、このプロセスのため 45 * 4 活性でないプロセスにも複数の状態がある。 * 3 このはかにも時分割用のクロック割り込みやハードウェアからの割り込みがある。
77 インタープリタ プログラムをしてみるのもよいだろう。またコンパイラもあるのでインター プリタで動作を確認してコンパイルして、高速に処理を行うこともできる。 Emacs 上で会話的に lisp インタープリタを使うにはバッフアを lisp-interac tion-mode にする。 * sc て atch * ノヾッフアはすでにこのモードになっている。そ して、 c ー J が現在のカーソルまでのプログラム (S 式 ) を評価する。 (defun fact ( Ⅱ ) ()f (zerop Ⅱ ) 1 ( * n (fact ( 1 ーⅡ ) ) ) ) ) fact (fact 10 ) 3628800 また、 Emacs はバッチ処理を行うことができる。コマンド行で -batch オプ ションを付けることによりバッチ処理を行う。たとえば、 Emacs Lisp のファ イルのコンパイルをバッチ処理で行いたい場合には次のような Emacs Lisp のファイノレ my ー compile. el を用意し、 (byte—compile—file (nth 3 command-line—args) ) 次のように emacs を起動する ( この例では f 。。 . el をコンパイルする ) 。 % emacs —batch ー 1 . /my—compile . e1 土 00. e1 Nemacs や MuIe を使った応用例として日本語処理を行うことができる。 たとえば、句読点、、 , 〃と ! 〃を、、、〃と、、。〃に変更する次のような EmacsLisp のファイル tenmaru. el を用意する。 (find—file (nth 3 command—line—args) ) (replace-string (replace—string (save—buffer) こで注意すべきことは、このファイルの漢字コードは EUC でなくては いけないことである。さて、この lisp のプログラムに次のようなファイル kuten. txt を処理させると、正しく句読点が変換されていることが分かる。 373
77 インタープリタ 字列の追加やコメントの削除を行わない。なお、欠点として #if を扱うこと てしまうので人間が読むためには適さない。 unifdef コマンドでは余計な文 が、 cpp は C コンパイラが使うための文字列を追加したりコメントも削除し ファイルの可読性が上がる。この作業は cpp コマンドを使っても実現できる て #ifdef を取り除いてくれるフィルタである。このコマンドを使うとソース 表 7 ー 2 Emacs のいろいろなモード こでいくっかを紹介する ( 表 7 ー 2 ) 。 Emacs はエデイタとしての機能のほかに、環境として使うこともできる。 ・ Emacs ができないことがあげられる。 説明 texinfo c¯mode compile texinfo は Emacs が利用しているドキュメントシステムで、 1 つのファイルからオン ラインやハードコピーのマニュアルを生成することができる。つまり、マニュアルなど を記述する場合に texinfo の形式で書けば、オンラインとハードコピーのマニュアルを 別々に書かなくてもよいということである。 Emacs 上でオンラインヘルプとして使用 する場合には、構造を持ったマニュアルとして利用することができる。この場合には Emacs で info コマンドを起動する。 texinfo. tex という ' I X のファイルを用意すれ ば X を使って紙に印刷ができる c ー m 。 de は C 言語でプログラムを作成するときのモード ( = 環境 ) である。 . c の付いた ファイルを編集すると自動的にこのモードになる。このモードでは自動的に段落を付け たり、カッコを移動させたりしてくれる。もちろん、ある程度バラメータによってカス タマイズすることも可能になっている。 Emacs には C 言語のほかに lisp や fortran の ためのモードもある。また、標準では配布されていないが、 pascal や Ada といった言 語のためのモードも作られている compile コマンドは Emacs の下でコンパイラを起動し、その結果をバッフアに保存し てくれるものである ( 図 7 ー 6 参照 ) 。もちろん保存するだけでなく、エラーが起こった 場合、エラーメッセージを解析してエラーの起こったファイルをバッフアに読み込ん でくれる。このモードを動かすには x c 。叩土 le とする。またエラーメッセージの解 析は c-x ' である。似たようなモードに grep コマンドがある。これは指定した引数で grep コマンドを起動し、結果をバッフアに読み込む。そして compile 時のエラーのと きのように、そのファイルを読み込んでくれる 377
6 章生活環境の整備 132 + 04 / 21 1 鮖 45 Satoru Hamanaka 1133 04 / 21 11 引 04 / 21 inc 十 inbox. ・ VM 1 5 Akihiro Shimizu 1670 浅羽登志也 Re: aIX)t1t 2.7 WIDE 研究ムの会場 Re: WIDE 究会の会場 ら ( 1 1 上 1 1 引 ) : 十ⅱ市い \ : (lllh-e scan):All . done 図 6 ー 20 mh-rmail コマンド VM (View Mail) は UUNET の Kyle E. Jones 氏が開発した Emacs 上のメ イラである。 VM も RMAIL と同様に EmacsLisp で記述されている。特徴と して、比較的単純なユーザーインターフェイスを持っていることと、 ucbmail と互換性のあるフォルダの形式をサポートしていること、高度なフォルダ管 理機構を持っていることがあげられる。 VM でメールを読むにはⅧコマン ドで起動する。 ・ mush mush は Mail User's SHell の略で、 Sun Microsystems の Dan Heller 氏に 308 スクリーンモードは vi 工デイタのインターフェイスに似ている コマンドラインモードはシェルのインターフェイスに似ている 持っ ・ 3 つのモード ( コマンドラインモード、スクリーンモード、 SunView モード ) を ・ユーサーインターフェイスが ucbmail の上位互換 よって開発された。このメイラの特徴は以下のとおりである。
5 章基本ツール ■絵の編集モード テキストでちょっとした絵を書きたいこともある。たとえば以下のような 図形をテキストモードなどで書こうとするとなかなかたいへんである。 十一一一十 十 ー十一一一十十一一十 このような場合にはピクチャーモードを用いるとよい。 M-xpicture-mode ( または M ー ed 土 t ー p 土 ct e ) を実行するとこのモードに移る。テキスト編集中 にちょっと絵が書きたくなったときに使われることが考慮されており、 c-c c-c ですぐに直前の編集モードに戻ることができる。 ピクチャーモードでは行の終わりやバッフアの終わりという考え方がなく、 バッフアは右と下に無限に広がるキャンバスだと考えてよい。カーソルはど こでも自由に動くことができる。テキストモードとほとんど同じカーソル 移動コマンドを使うことができるが、削除の動作はかなり異なり、 c-d 、 c ー k は文字を空白で置き換えるようになる。また、入力された文字は挿 入されるのではなく、上書きされる。 さらに文字入力後のカーソル移動方向も右だけでなく好きな方向に設定で きる。たとえは四角を書く場合、下方向に縦の線を引きたくなるが、その場 合は c-c . (M-x picture-movement-dovn) を入力してからツ〃を入力していく と簡単である。現在のカーソル移動方向はモード行に、、 (Picture:down)" とい うように表示される。文字入力後のカーソル移動方向の指定としては以下の コマンドを利用できる。 十一一一十 262