という文字列のノヾターンを shell-prompt-pattern 変数 に設定すれは、見事に解決するはすですが、それには、 (setq shell—prompt-pattern " . * ) * " ) としてください。この正規表現の意味は、次のようになり ます。 凵 任意の文字の繰返しに一致 文字 ) に一致 任意個の空白文字に一致 図 32 は、このように設定した場合の SheI レヾッフアで す。矢印の行に戻ってく CR > を入力すると、今度は図 33 の ように正しい実行結果が表示されました。めでたし、めで ところで、上に挙げた正規表現は通常の行のプロンプト に対応するだけです。継続行のプロンプトには対応してい ません。通常の行にも継続行にも対応したい場合は、その ように正規表現を書いてください。 落し穴 Shell モードを使っていると、ついつい、 、、ここでもう 1 度 Nemacs を起動したら何が起こるかな ? 〃 なんて考えが頭をよぎったりしませんか ? 何が起こるか は、実際に確かめてみるのが一番です。それでは、図 34 を見 てください。やはり、世の中はそれほど甘くない。、、 TERM- CAP があかん〃ですって。 でも、こんな emacs なんて端末タイプを設定した憶え はないのに、いったいいつの間に 。それもそのはす、 emacs" は Nemacs の Shell モードが勝手に設定したの です。おかげで、かな漢字変換のフロントエンドなどの動 作も・・・・・・、危ないでしようね。ほかにも、特定の termcap ェントリが必要なアプリケーションはうまく動かない可能 図 34 She バッフアで Nemacs を起動した例 % nemac S emacs 入門 性がありますが、まあ、そのようなものだとあきらめてく シェルの選択 ださい。 (setq explicit-shell—file—name "/bin/sh") 図 35 She Ⅱバッフアで起動するシェルの設定 の 2 行を追加してください。また、 csh を使っている場合は export ESHELL ESHELL=/bin/sh いでしよう。ログインシェルが sh なら、 /. profile に 2 ) のほうは、シェルの初期化ファイルを利用するのがよ 動されます。 こうすれば、 Shell モードを実行したときに / b ⅲ / sh が起 お勧めです。 /. emacs に図 35 の行を追加してください。 1 ) は、 Nemacs の初期化ファイルを使って設定するのが 2 ) 環境変数 ESHELL にシェル名を設定する。 1 ) 変数 explicit-shell-file-name にシェル名を設定する。 法があります。 シェルの種類を明示的に指定するには、次の 2 種類の方 でシェルを変えて試してみましよう。 うだが原因が擱めない場合などは、これから紹介する方法 きや、どうも . cshrc や . profile で初期化に失敗しているよ れど、 Nemacs 上では行編集機能なんていらないというと 端末上では行編集機能のある bash や tcsh が便利だけ ることもできます。 いつもと違うシェルを使いたいのなら、そのように設定す ルの環境変数 SHE 乢をみて判断しているからです。でも、 動的に現れます。これは、 Nemacs が自分を起動したシェ なけれは、 She Ⅱモードではふだん使っているシェルが自 気にも留めなかったかもしれませんが、何も設定してい emacs : Termina1 type "emacs " is not powerful enough tO run Emacs . lt lacks the ability tO position the cursor. If that is not the actual type of terminal you have , use the C—she11 command Csetenv TERM ... , tO specify the correct type ・ lt may be necessary to do 'unsetenv TERMCAP' as well . UNIX MAGAZINE 1992.5 117
emacs 入門 /. cshrc に、 setenv ESHELL /bin/sh を追加してください。 通常は 1 ) か 2 ) のどちらかを設定すればよいのですが、 特殊な使い方をしていてどちらも設定しているときは 1 ) の設定が優先されます。 いすれの設定もないときは、さきはども書いたようにシ ェルの環境変数 SHELL が参照されます。さらに、 SHELL にも設定されていなければ、本当の初期値として /bin/sh が実行されます。 SheII モードに入るときはシェルの種類ごとに ~/ . emacs—シェル名 が実行されます。 具体的には sh を使う場合は、 ~ / . emacs_sh が、 csh を使う場合は、 ~/ . emacs_csh が最初に読み込まれます。 このファイルのなかには、任意のシェル・スクリプトを 書くことができます。つまり、何をどのように書くかはシ ェルを起動するときに読み込まれる /. cshrc などと同し だと考えてください。ただし、このファイルを読み込んで いる途中で何か危ない操作をすると初期化に失敗する可能 性があるので、要注意 ! ! ファイル /. emacs ーシェル名に記述する内容としては、 ・ tty に対するキーバインドの変更 環境変数などのカスタマイズや alias 機能による別名定 義 です。ただし、シェルの起動時には、 1 ) /. profile や /. cshrc などのシェルの初期化ファイ 2 ) /. emacs- シェル名 の順番に読み込まれます。これを利用すれば、 初期化ファイルを変更しなくても、 118 これまでの ・端末から起動された場合 ・ ShelI モードから起動された場合 を簡単に区別できます。 上のような説明ではイメージが湧かない人のために、も っと具イ勺な例で説明しましよう。 B 子さんは、計算機の種類や気分によって sh と csh を 使い分けています。また、ウインドウ・システムを駆使し や /. emacs-csh に このようなプロンプトを表示させるには、 となります。 tarako :Nemacs—sh) なら、 シェル名 sh ホスト名 tarako として、すぐに区別できるようにしています。たとえば、 ホスト名 :Nemacs—シェル名 ) されるプロンプトを、 て同時に複数の計算機を使うことが多いので、端末に表示 /. emacs—sh ~/ . emacs_csh の上易合 export PSI PS1='hostname ( ' :Nemacs—sh) ) ~/ . emacs—sh の場合 set prompt= hostnarne ( ' :Nemacs¯csh) ' を追加します。これで万事 OKO うまくいくかどうかは、 process—send—strxng process—send—region ロセスに対して任意の文字列を送ることができます。 ちょっとしたおましないを使うと、 SheII バッフアのプ 蛇足 ご自分でお試しください。 UNIX MAGAZINE 1992.5 や、 (process—send—region "*shell*" 1 10 ) はシェルプロセスに文字列を送る Lisp 関数で、
す。すると図 10 のように、 Stopped と表示され、プロンプトが現れました。つまり、この状態 で別のコマンドが実行できるのです。 サスペンドされたプロセスの一覧は、 % j obs く CR 〉 を実行すれば表示されますし ( 図 11 ) 、 % fg % ジョブ番号 とすれば、サスペンドが解除できます。 ルはシェルが制御するので、 Shel レヾッフアで実行された なんだか、ちょっと不思議ですね。ジョブ・コントロー り同し結果になります ( 図 13 ) 。 ら、びつくり ! ! SheII モードではないバッフアでも、やは た。想像していたのとはちょっと違う動きだったので、あ まるごとサスペンドされてシェルのプロンプトが現れまし かけておいて、 C ー z を入力すると ( 図 12 ) ・・・・・・、 Nemacs が アでサスペンドを試してみましよう。ファイルを more に よってサスペンドを実現しています。ここで、 ShelI バッフ UNIX では、プロセスに STOP シグナルを送ることに こと ? 一寸の虫てハ夛らふし 陬社盟な。たぞ。 にあリません " 尸五里 " 、な 人 0 問を受けるかとうかの舮際の 一寸知よ . 中 ャトカリさんの家って誰も作ってくれないもの。 図貶 She 日バッフアで C ー z を入力した犹態 Stopped AG suspend—emacs : 図 suspend-emacs のドキュメント emacs 入門 図Ⅱ jobs コマンドでサスペンドされたプロセスを表示 % j obs [ 1 ] + Stopped サスペンドは、 SheI レヾッフアで実行中のコマンドに対し てしか効きそうにありません。それなのに、どうして Nemacs がまるごとサスペンドされてしまったのでしょ うか ? さっそく describe-binding コマンドで C-z を捜して みると、このキーは、 M-X にバインドされています。そこで、ドキュメントで sus- pend-emacs の説明を読んでみると ( 図 14 ) 、「 (N) Emacs をストップして、上位のプロセスに制御を戻す」とありま す。そのほかにもいろいろ技が使えるようですが、要する に Nemacs では C ー z が押されたときに Nemacs 自身が サスペンドするふりをしているのです。 では、もともとサスペンド機能がない計算機の場合には どうなるのでしよう ? 例をお見せできないのが残念ですが、サスペンド機能が 図ロ *scratch* バッフアで C-z を入力した当光態 、 . 1 ごいーい、、一ミ 0 ? : 0 い StOP Emacs and return tO superior process . You can resume . Before suspending , if ( suspend—hook ' is bound and value IS Ⅱ 0 ⅡーⅡ il to be read as terminal input by Emacs's superior shell . If opt ional arg STUFFSTRING is Ⅱ 0 ⅡーⅡ il , its characters are stuffed ca11 the value as a function Of Ⅱ 0 args. Don 't suspend if it returns non¯nil. UNIX MAGAZINE 1992.5 suspend—resume—hook ) if that is bound and non-nil . Otherwise , suspend normally and after resumption ca11 109
emacs 入門 % sort くファイル名 と実行します。これで、各行の文字列をキーにしてソート した結果が標準出力に表示されます。たとえば、図 40 のフ ァイルに対して sort を実行すると図 41 のようになりま す。 では、 Nemacs のソートはどんなコマンドなのでしよう ・バッフアの指定された範囲を、 ソートします。 Nemacs のソートはもうすこし柔軟で、 ・行ごとに ・ファイル全体を、 か。 UNIX の sort は、 (C-(SPC 〉 ) ために図 40 の 3 行目にカーソルを移動して、 ーとしてソートしてみましよう。ます、マークを設定する ンドです。図 40 の 3 ~ 7 行目の範囲を行全体の文字をキ Nemacs の sort-lines は、もっとも単純なソートコマ 代わりに、コマンドの数で勝負することにしました。 がないので、オプションをたくさん指定できるようにする のようにオプションを細かく指定するのは苦手です。仕方 並べ替えます。ただ、 Nemacs さんは UNIX のコマンド ・行、段落など指定された単位で newline—and—indent indent—for—tab—command de 1 e t e —b ackward—char keyboard-quit 図 40 sort を実行するファイル とします。次に、 8 行目の行頭に移動して、 NI-x copy-region-as-kill を実行します。これで、 3 行目の先頭から 7 行目の最後ま でをリージョンとして指定できました。そして、いよいよ 最後の仕上げにソートコマンドを実行します。 M-x sort-lines ね、ね、ソートされたでしよう ( 図 42 ) 。 遡頂にソートしたけれは、リージョンの指定後に C-u を 入力してから sort-lines コマンドを実行してください。っ まり、 sort-lines コマンドは引数を渡される ( 直前に C-u が入力される ) と、逆順のソートになります。 UNIX の sort コマンドだと、漢字をソートできるかど うかは OS に依存します。でも、 Nemacs なら漢字の入っ た行でもソートできます ( もちろん、オリジナルの英語版 Emacs では無理ですよ ) 。図 43 は漢字の入ったバッファ ですが、やはり 3 ~ 7 行目までを sort ー lines すると、あっ ばれ図 44 のようにソートされました。 ただし、漢字が入った場合の並べ方は、 ・かなや漢字は JIS コード順 ・ ASCII コードのほうが JIS コードよりも前 になります。 sort-lines では行がソートされましたが、パラグラフ 4 や 図 42 sort-lines の実行結果 は同しですが、 ・コマンドの直前に C ー u を入力すると逆順にソート ・リージョンの孑旨定 ページをまるごとソートすることもできます。 C ー TAB LFD C—k C—I RET C—n C —h C —k C—I C—n RET TAB 122 recenter kill-line delete—backward keyboard-quit 図 sort の実行結果 next—line newline recenter kill-line ー char C-h C-k C-I LFD RET TAB C—n keyboard-quit delete—backward—char kill—line recenter newline—and—indent newline indent—for—tab—command next—line newline—and—indent newline indent—for—tab—command 4 Nemacs では、空行がくると段落の終りとみなします。 UNIX MAGAZINE 1992.5
emacs 入門 /,/\ン・ N 図引 manua ト entry コマンドで•write(2)" を指定した結果 ライプラリ関数 % man 2 write write" を調べたい場合、シェルからは、 のように決まってます。ですから、システムコ 3 章 B 子 : Nemacs から使える UNIX のコマンドってこれ Shell モードの起動 ーノレの WRITE(2V) N 伍 SWIOPSIS buf, nbyte) wr ite , wr itev - wr ite output SYSTEM CALLS int nbyte; char *buf ; int fd; 1 れ t write(fd, B 子 : けど、何 ? t 0 : 第ユご 1 : 、 1 い WRITE(2V) つまり、 man コマンドの引数として章番号と項目を指定 します。 Nemacs からも章番号と項目が指定できますが、 フォーマットがすこしだけ違います。 Nemacs の場合に は、 Manua1 Entry (topic) : 項目 ( 章番号 ) としてください。 "write" の例だと、 Manua1 Entry (topic) : write(2) となります ( 図 61 ) 。 V それからどしたの ・今回出てきたコマンドの一覧 A 氏 : いやいや、まだほかにもいくつかあるんだけど・・ だけなの ? M-x shell A 氏 : ネットワークに関係してくるから、それはまた別の 機会に・ B 子 : ふーん。本当は原稿書くのに飽きたんしゃないの ? ・・ ( うつ、いきな射商されてしまった ) 。 A 氏 : ( あらい・みちこ ASTEC) かもしれません。 ら拾って使ってみてください。意外な掘出し物がみつかる Nemacs インターフェイスが流れています。興味があった が、 gnu の news グループにときどき UNIX コマンドの それから、標準のディストリピューションではありません ということで、 ftp やら kermit やらはまた次の機会に。 M-x shell—command ()- ! ) M-x shell—command-on-region (M M-x suspend-emacs ( C -2 、 C-x C-z 、 M-X manual—entry M-x untabify ソート関係のコマンド M- 0 、 1- X 、 1- X 、 1- X sort—lines paragraphs page s sort—columns fields numeric—fields regexp—fields sort— sort— sort— sort— sort— スペルのチェック M-x spell ー臂 0 て d (ESC # ) M-x spell-string M-x spell—region M-x spell—buffer UNIX MAGAZINE 1992.5 UNIX のコマンドを 1 回だけ実行 UNIX のコマンドにリージョンの内容を送る Nemacs をサスペンド マニュアルページを表示 (TAB 〉コードを適当な数の空白文字に置き換える 入力した文字列のスペルをチェック カーソル位置の単語のスペルをチェック 正規表現を使ったソート 指定したフィールドの数字をキーとしたソート 指定したフィールドをキーとしたソート 指定したカラムをキーとしたソート ページ単位のソート 段落単位のソート 行単位のソート 129 指定したバッフアの文字列のスペルをチェック 指定したリージョンの文字列のスペルをチェック
を実行すれば、デフォルト・ディレクトリが表示されます。 M-x cd UNIX MAGAZINE 1992.5 ですから、ちゃんと追随していますね。 Directory /etc みると、 ているでしようか。 Nemacs の pwd コマンドで確認して このとき、デフォルト・ディレクトリのほうはどうなっ % cd /etc してみましよう。 Shell バッファ上で / etc へ移動します。 では、次に Shel レヾッフアのなかでディレクトリを移動 Nemacs のデフォルト・ディレクトリは一致する ・ SheII モードでは、シェルのカレント・ディレクトリと と表示されましたか ? これで、ひとっ知恵がっきました。 Directory /usr とすると、エコー行に M-x pwd ンドを実行してみましよう。 となります。次に、同しバッフアで Nemacs の pwd コマ % pwd デフォルト・ディレクトリが / usr だったとすると、 ドを実行してみましよう。 SheII モードを起動するときの ますは、 Shell バッフアのなかで UNIX の pwd コマン るためです。 クトリと Nemacs のディレクトリとの関係〃をお話しす そうです、ご想像どおり、、 Shell モードのカレント・ディレ こでデフォルト・ディレクトリをもちだしたのは・・・ 更新されます。 されていて、 cd コマンドが実行されるたびに、この変数が フォルト・ディレクトリは変数 default-directory に保持 ちょうど、 UNIX コマンドの pwd や cd と同しですね。デ を実行すればデフォルト・ディレクトリが変更されます。 emacs 入門 でも、何かちょっと不思議。前述のとおり、 Shell バッフ ァ上で動いているシェルは Nemacs とは別のプロセスな のに、どうして Nemacs がシェルのカレント・ディレクト リを知っているのでしよう ? しつは、これにはちょっとし たトリックが使われています。 ューサーの入力はシェルプロセスへ直接送られるわけで はなく、 1 ) ます SheI レヾッフアが受け取って処理します SheII バッフアは行編集などをおこなったあと、く CR 〉が 押されると、 2 ) シェルプロセスへ処理済みの文字列を送ります SheI レヾッフアはぐシェルプロセスに送る文字列を監視 していて、 ・ cd コマンドが現れたら後ろの引数を解釈し、 ・デフォルト・ディレクトリを新しいディレクトリに変更 という処理をおこないます。 Nemacs のデフォルト・ディ レクトリと Shel レヾッフアのカレント・ディレクトリが一 致する秘密は、こんなところにあったのです。 、、ほなら、 SheII モードをだましたろ〃 たいていのシェルには、コマンド ( 列 ) に別名を付ける alias 機能があります。 csh の場合は図 27 のように指定し ますが、これは頻繁に使う複雑なコマンド列に短いニック ネーム ( 別名 ) を付ける機能です。ちょうど、、、しゅげむしゅ げむごこうのすりきれ・・・・・・クさんを、、しゅんちゃん〃と呼 ぶようなものだと考えてください。 この alias 機能を使って、ます She Ⅱバッファ上で、 % alias idou cd く CR 〉 とします。次に、この idou コマンドを使って SheII バッフ アのカレント・ディレクトリを変更しましよう。最初は / usr ディレクトリにいたとして、 / etc に移ってみます。 alias 別名置き換えられる文字列 図 27 alias の指定方法 % idou /etc % pwd 113
emacs 入門 花はさかりに 荒井美千子 「だからね、課長。今夜はお花見にしましよう。場所取り だったら任せてください。え ? あの仕事はどうするんだっ て ? そりゃあ、部下の不始末は上司の責任・・・・・・、ってこと であとはお任せして、それしや行ってきまーす」 月はくまなきをのみ見るものかは。 ん一、松平さんちの定信ちゃんって、あまのしやくね。 。そりゃね、花は散るか 散ったあとの桜もよいなんて・・・ らこそ美しい、っていうのが日本の美意識だしね、花吹雪 はそれなりにきれいよ。 でも、予定より早く散ってしまったら栄えある年中行事、 お花見 ができなくなってしまうしゃない。真っ昼間から赤い顔し て騒いでいても許されるなんて、素敵な風習じゃない。 え ? 桜が散ったって勝手に花見すりゃいいって。そう ね、お酒とお弁当と周囲の目を気にしない神経があれは、 大丈夫かもしれない。でもあまりに時季をすらしてしまう と、ほら、あの、イモイモってうごく毛虫さんが落ちてく るでしよ。 遠山の金さんだって、 「やい、この毛虫吹雪が目に入らねえかい一 なんてきめたくないだろうし、私だってそんなもの見たく 104 Loadxng shell . . done 図ー She Ⅱノヾッファ 「おいおい・ しまった、逃げられた。任せますって言 われても、いったい何すりゃいいんだ。えーと、今回のテ 、 Shell モード ? 」 ーマはっと・・ VShell モード 予告どおり、今回は Nemacs から UNIX のコマンドを 使う方法を紹介します。これにはいくつかの方法がありま すが、なかでも SheII モードはオールマイティーな環境を 提供してくれます。 とりあえすだまされたと思って、 M-x s e11 を試してみてください。運がよければ図 1 のようなバッフ アが出現し、ターミナル・エミュレータとして利用できま す。最初はこのバッフアを使ってあれこれ遊んでみましょ Shell バッファって何者 ? このバッフアにお目にかかるのは初めてですね。ますは 定石どおり、モードラインに素性を訊ねることから始めま バッファ名は、 NEmacs : *shell* とあるように、、 * shell * 〃です。 Nemacs のバッファ名に はちょっとした約束があって、今回の shell や以前に登場 UNIX MAGAZINE 1992.5
環境で、仕事によって計算機を選びます。そこで、自分が どの計算機の端末工ミュレータに向かっているかを間違 えないように ホスト名 ) というプロンプトを表示するようにしていました。どのシ ェルを使っているかによって設定方法は違いますが、 csh を使っている場合は ~ /. cshrc に set prompt='hostname ( ' ) と書きます。ところが、このプロンプトが図 31 の問題を引 き起こしたのです。 Nemacs はシェルのプロンプトのバターン、、 $ 〃や、、 % 〃 を知っていて、入力行にプロンプトが入っていれば取り除 いてからシェルに送ります。ところが、前例のプロンプト は Nemacs の知識の範囲外だったのでプロンプトごと、 つまり、 tarako) ls ー 1 / をシェルへの入力として送ってしまい、失敗したのでした。 では、これに対してユーザーは何か手が打てるのでしょ うか ? shell-prompt-pattem はプロンプトのパターン を Nemacs に知らせる変数です。 shell-cd-regexp と同 様、この変数にプロンプトの正規表現を設定すれは、図 31 emacs 入門 のような事態を避けることができます。 shell-prompt-pattern の初期値は、 です。文字列で表すため、正規表現全体をダブルクオート ( " ) で囲んでいます。ます、上の正規表現の意味を解釈して は、直前の正規表現の 0 回以上の繰返し一一つまり、 # 、 しないことを表します。また次の、 はプロンプトの先頭の文字が # 、 $ 、 % 、〉のいすれにも一致 おきましよう。 す。おしまいの、空白文字に続いて、 は # 、 $ 、 % 、〉のいすれかの文字に一致することを表しま す。また、その次の、 $ 、 % 、〉以外の文字が 0 回以上繰り返されることを表しま とあるのは、任意個の空白文字の連続を表します。 " ホスト名 ) こでは、 図 32 Shell / ヾッフアの内容 tarako) ls ー 1 / ロ lrwxrwxrwx tarako) 1 root 1 root この行に戻る 110888 Mar 7 Mar 1 1 図 33 shel ト prompt-pattern を言殳疋した SheII ノヾッファ tarako) ls tarako) ls lrwxrwxrwx tarako) ロ 116 ー 1 / 1 1 ー 1 / 1 1 root root root 7 Mar 110888 Mar 7 Mar 110888 Mar 1 1 1 1 1991 bin ー > usr/bin 1991 boot 1991 bin ー > usr/bin 1991 boot 1991 bin ー > usr/bin 1991 boot UNIX MAGAZINE 1992.5
emacs 入門 ない場合でも Nemacs の子プロセスとしてシェルを起動 し、あたかもサスペンドできたようにみせかけます。お手 許に実験できる環境があればものは試し、実際に体験して みてください。これを知らすに ps コマンドを実行すると、 混乱すること間違いありません。 それでは、 Shel レヾッファ上のプロセスはサスペンドで きないのでしようか。サスペンドは、プロセスに STOP シ グナルを送ることによって実現されていることを思い出し てください。 Nemacs にもそのようなコマンドがあれば、 サスペンドできるはすですね。これをおこなうのは SheII モードの、 図 Shell バッフアで describe-mode を実行したときの出力結果 She11 Mode . —c ー 0 —c —c C-d M-x stop-shell-subjob (C-c c-z) です。図 9 のファイルを more にかけた状態で C-c C-z を入力すると、ほら、今度はちゃんとできたでしよう。 jobs コマンドで確認してみると、 more がサスペンドされてい ることが分かります ( 図 15 ) 。 行を編集するコマンド SheII バッフアのプロセスを終了する話からすいぶん横 道に逸れてしまいました。迷子にならないうちに、本筋に Major mode for interacting with an inferior s e11. She11 name is same as buffer name , sans the asterisks . Return at end 0f buffer sends line as input . Return not at end copies rest Of line tO end and sends it . The f0110W1 Ⅱ g commands imitate the usual Unix interrupt and editing control characters : C C C c c c c c C r Z C u Prefix Command shell-send—input copy-last—shell—input show—output—from—shell kill—output—from-shell quit—sheII—subJ 0b stop—shell—subj 0b interrupt—shell-subj 0b backward—k i 11 —word kill—shell—input shell-send-eof Entry t0 this mode calls the -value Of shell¯mode—hook with no args , 110 and lisp-send-defun. uSIng the commands process—send—reg1011, process—send¯string You can send text tO the shell ( 0 て its subJ obs) from 0ther buffers are used tO match these command names . Variab1es shell—cd—regexp , shell—pushd-regexp and shell¯popd¯regexp the same as the s 五 e11 ' s working directory. by Emacs to keep this buffer's default directory cd, pushd and popd commands given tO the s 五 e11 are watched if that value is Ⅱ 0 ⅡーⅡ i1. UNIX MAGAZINE 1992.5
emacs 入門 //,\、/ したデバッガ gdb など、ファイルに対応しないバッフアの が起動されました。今回の SheII モードもまったく同様 名前には前後に、、 * ( アスタリスク ) 〃カ咐きます。 に、 Nemacs の子プロセスとして sh や csh などのシェル 以前にも書いたように、モード行の中央あたりの、 が起動されます。つまり、通常のシェル上で実行できるこ とならなんでも Shell バッファ上で実行できるのです。そ (—JJJ:She11: run) のうえ、 Nemacs 自体とは別のプロセスなので、 Shel レヾ は、ノヾッフアの漢字コード、 モ ード、 ステータスを表しま ッファ上で何かを実行している最中でもほかのバッフアが す。つまり、 編集できます。 たとえは、前回の記事で間題になっていた、 プログラムを書いている途中で od コマンドを実行したい も、 Shel レヾッフアのプロンプトのところで、 % od /bin/od く CR 〉 とすれば、ほらね、ちゃーんと動きます ( 図 2 ) 。それに、 scroll-down コマンドで則のページがいくらでも見られ るので ( 図 3 ) 、 % od /bin/od ー more のように more を実行する必要もありません。 さらに、このバッフアでは通常のカーソル移動コマンド は、バッフアのメジャーモードが Shell モードであること forward-char や beginning-of-line などが有効なので、 を表しています。また、ほかの表示はないので、マイナー tcsh や bash のような行編集の機能は不要です。しかも、 モードは設定されていません。最後の、 行編集機能はこれだけではありません。 previous-line や next-line を使って前後の行へ移動することもできます。 run それがいったいなんの役に立つのか、ですって ? はこのバッフアで実行されているプロセスの状態を表して SheII モードでは、プロンプトのある適当な行に移動し いて、 run は、、元気に走ってますよ〃という印です。 ておいてく CR 〉を入力すると・・ 、なんともう 1 度同しコ ところで、 gdb の例を憶えていますか。 マンドが実行できてしまうのです。これとさきほどの行編 集機能を組み合わせれは、 history 機能だっていりません。 M-x gdb 、、えーと、いまは csh だから、、、 ! 24 クでヒストリの 24 番の とすると、 Nemacs の子プロセスとして gdb プログラム コマンドを実行して・・・ 図 2 Shell バッフアで od コマンドを実行 図 3 scroll-down コマンドを実行 0024640 000 0 0 0 00 圓 00 000000 0000 圓 000040 020040 020040 020040 0024140 055546 064554 062535 055453 056557 063146 0 フ 1545 020133 0024660 020040 024050 024050 024040 0024160 020040 020040 020040 020040 072133 027135 055542 056440 055554 060542 062554 056535 0024700 020040 020040 020040 020040 0024200 020210 010020 010020 010020 000000 000000 00 0 00 0 00 0 010 000000 000D00 177777 177777 0024720 010020 010020 010020 010104 042104 042104 0024220 010020 042104 020040 020040 020040 020040 00 002 0 00 0 00 0 000000 0024 ? 4 0 042104 042020 0024240 010020 010020 010020 04 05 01 040501 040501 020040 020040 022563 067165 066000 071557 064000 00 0 00 0 0024760 000401 00 04 01 000401 000401 000401 000401 圓 0401 0024260 071564 000401 074 0 0 0 062564 074000 062557 072000 062556 070400 000401 0024300 0025000 000401 010020 010020 010020 041102 041102 041102 060543 065400 061145 0660 圓 020142 071400 020150 072000 0024320 0 010 02 0010 02 0 0 1002 0 0 10 02 001002 020156 066 圓 0 020166 072000 020146 063000 0025020 001002 001002 020143 0010 02 07100 0 001002 0010 02 010020 010020 0024340 0025040 020000 圓 00 0 0 圓 0000 020163 067400 020163 0644 圓 062154 062400 062143 000000 03 04 0 0 0025060 0024360 062143 00 00 0 0 000000 000000 0 0 000 0 000000 031000 062143 031400 062143 032000 06 フ 141 065400 00 0 0 0 0 00 0 0 00 000000 0024400 067000 062564 061000 061541 067000 071571 020145 0664 0 0 0 0 0001 000000 0 圓 000 0 0 000 0 000000 0024420 071565 0025300 000000 000000 061000 062563 061400 020146 071400 020147 071400 000000 000000 0 圓 002 000400 0024440 020162 0025320 0 0 0 0 00 000000 071400 020165 071400 020163 070000 062145 066000 000000 0025340 000000 0 圓 000 圓 24460 0 0 000 0 000006 001 圓 0 030061 031063 032065 033067 000000 000000 0 0 0 圓 0 034071 060542 000000 0025360 0024500 000D00 000000 0 圓 000 000000 061544 062546 0 0 0 0 00 000000 00 0 00 0 0 0 0 0 00 07 フ 777 177777 000000 0 0 0 000 000000 000000 0 D24520 020146 066141 063440 026445 000157 062072 020142 060544 0026460 0024540 061412 000162 062072 000157 02 00 0 0 025012 0 0 0 04 0 024045 0024560 071451 020040 000045 031061 027061 00 0 011 032145 000045 0024600 030464 027067 020040 020000 056060 000134 062400 0610D0 0024620 056146 000134 056162 0 圓 134 067000 042517 043012 072000 0024640 000000 000000 000040 020040 020040 020040 000000 000000 024660 020D40 024050 024040 02D040 024050 020040 020040 020040 —JJJ は左から順に ファイルに入出力するときの漢字コード キーポードから入力するときの漢字コード ディスプレイに表示するときの漢字コード 外部プロセスとの通信に使う漢字コード を表しています。 こでは、ファイルの入出力以外はすべ て JIS コードを使うことになっています。次に She11 105 UNIX MAGAZINE 1992.5