マ イ ク ロ ソ フ トエ デ ィ タの カ ス タマ イ ズ
行 方 常 幸
目 次
1. は じめに
2.MSOS/2
とマイクロソフトエディタ
3.
マイクロソフトエディタの機能
4.
カスタマイズの方法
5.注意事項 と問題点
6.
おわ りに
1
.は じめに
今 日情報化時代 の到来で,私達 の身の回 りに も多種多様 の機器が整備 され, それを使 い こなすための労力 も無視 で きな くなって きてい る
。私 に関 して言 え ば,一番身近 にあるのは,
NECのパ ーソナル コンピュー タ,さ らに情報処理 セ ンターにあ る富士 通 のノ T o ‑ ソナル コ ンピュー タ,
SUN及 び ∑の両 ワー クス テー ション,等 である。例えば, プ ログラム を作成 す る際 に利用す るエディタ を考えてみ ると, それぞれに異 な ったソフ トがあ り, その利用法 を覚 え るだけ で も大変であ る。 しか し, この頃 は既定 のキー操作法 を, ある程度 自分 の好 き なよ うに変更 で きるカスタマイズ機能がっ いてお り, それを利用 して自分 の慣 れた操作法 に変更すれば,利用法 を覚 え る際の労力をかな り省 ける。ここで は, パ ーソナル コ ンピュータ用 の与イクロソフ トエデ ィタを ファイナル風 にカス タ マイズ したのでその概要 を述 べ る。
なぜマイクロソフ トエデ ィタを利用す る必要があ ったか と言 えば,私 が利用 可能 な
MSOS/2のプ ロテ ク トモ丁 ド用の エデ ィタが これ しか なか ったか ら である。
〔101
〕
102
商 学 討 究 第
40巻 第
1号
2.MS OS/ 2
・ とマイクロソフ トエデ ィタ
パ ーソナル コ ンピュータのオペ レーテ ィングシステム
(OS)と しては,マイ クロソフ ト社 の
‑MS‑DOSが主流 であ るが, 同社 の次期世代 の
OSまたは
MS‑DOS
のい くつかの限界 を克服 した
OSと して
MSOS/2が注 目されている。
MSOS/2
を動作 させて まず分 か ることは,シイグルユ ーザー,シングル タ スク用の
OSであ る
MSIDOSと違 い,
MSOS/2は シングルユーザー, マル チ タスク用の
OSであるとい うことである
。す なわち,大型計算機 や ワークス テー シ3. ンのよ うに複数 の人の同時の利用を 目的 と した ( マルチユーザー)
OSで はないが,
1人の人 が複数 の仕事 を同時 にす るために設計 された
OSである
と言 うことであ る
。もう少 し具体的 に言 うと,
CTRL+ESCまたは
GRPH+ESC
を押す ことによ り, 1 つのプログラムを実行中に,そのプ ログラムを終了 せず に他 のプ ログラムを実行で きる。 また, マイクロソフ トエディタで は,編 集 中の フ ァイルをバ ックグラウ ン ドで コンパ イル しなが ら,他 の ファイルの編 集 がで きる
。MS‑DOSでは,編集 中の ファイルの コ ンパ イル中は何 もで きず,
コンパ イルが終 わ ってか ら次 の処理 を しなければな らない。
MS OS/2
には, こ一 の よ うに複数 の仕事 を処 理 で きるプ ロテ ク トモ ー ド
(OS/2モー ド) があ るが このモー ドでは今 までの
MS‑DOS用 に開発 された ソフ トは利用で きない。そ こで このプ ロテク トモー ドの他 に
,MS‑DOSとの互 換 を実現 した リアルモー ド
(DOS互換 モー ド)があ る
。プ ロテク トモー ド用 ソ
フ トはまだ余 りないが,プ ログラム言語 と して は,マイクロソフ ト C コンパ イ
ラ
(MS‑Cver5. 1 ),マイクロソフ トマクロアセ ンブラ
(MASM ver5. 1 )等 が
発売 されてお り, それに付属 しているのがマイクロソフ トエデ ィタである。 そ
の他 に もソース レベルでデバ ッグで きるコー ドビュー も付 いている。 マイクロ
ソフ トエデ ィタは これから のマイ クロソフ ト言語 に標準 で装備 され る標準 エ
デ ィタと して位置づ け、 られて いる
。マイクロソフ トエデ ィタには リアルモー ド
用
(M.E支E)とプロテク トモー ド用
(MEP.E支E)、 の
2個があ り,キー操作 も
同 じで,リアルモー ド用 は
MS‑DOS(ver3.xx)で も利用で きるので大変 あ り
マイクロソフトエディタのカスタマイズ
103がたい ものであ る
。私 が利用 した ことのあ るエデ ィタはファイナル, マイフェス,及 びマイクロ ソフ トエデ ィタであるが, それぞれに特徴があ り,利用可能 な使 い慣 れた もの を利用す るのが一番良 い と思われ るが∴私 の気 が付 いた上記 のエデ ィタにはな いマイクロソフ トエデ ィタの特徴 を少 しあげてみ る
。単独 のエデ ィタであ りな が ら,
TURBOPASCAL等 のよ うに, エデ ィタ内か らコンパ イルで きコンパ イルエラーがあれば ソースファイルのエ ラーの箇所へ カーソルが移動 す る.宿 集 したファイル名や,編集位置, エデ ィタの状況 などを保存す るた吟, エデ ィ
タを編集 ファイル名 を指定 せずに起動す ると,一番最近 にエデ ィタを終了 した ときの状態 になる
。 C言語 でプ ログラムす ることによ り,新 しい機能 を追加 で きる。ただ し,マイフェスに もマクロ言語
MILとい うのを利用すれば新 しい機 能 を追加で きる。
3.
マイクロソフ トエデ ィタの機能
マイクロソフ トエデ ィタには, ( 表
1) にあるよ うに
62個 の基本的 な機能 が あ り, それをいろいろな構文 に組 み合わせ ることによ り, エデ ィタと しての強
■
力 な機能 を実現 している。 この
62個 の機能 を どのよ うな構文 に組 み合 わせ る とどの様 な機能 が実現で きるかに関す る詳細 はマニュアルを参照 して いただ く と して, い くつか例 をあげてみ る。
正規表現 され た文字列 を現在位置 か らフ ァイルの終 わ りの方 へ検索 す るに は,
ArgArg
検索文字列
Psearchとい う構文 を使 う。デフォル トで は
Argに
GRPH+A,Psearchに
F3が割 り 当て られて いるので,
GRPH+A,
GRPH+A, その後検索文字列 を入力す る か,カーソルを移動 させて検索文字列 を‑ イライ トさせ,最後 に
,F3とすれば 良 い。 この例 のよ うに,
Arg機能 を呼 び出す と, キー入力 またはカー ソル移動
によ って,次 の機能 に引数 を渡す ととがで きる。
画面上 の ブロックを削除 して,バ ッファ (ク リップボー ド) にコピーす るに
104
商 学 討 究 第
40巻 第 1号
表
1マイク E 3ソフ トエデ ィタの機能 とデ フ ォル トのキー操作
機 ■ 能 . デ フォル トのキー操作 機 能 デ フォル トのキ丁操作
Arg GRPH+A. Mark cTRL十MArgcompile 亘声 Meta F.9‑
Assign GRPH+g Mlir19S CTRL+W
.
Backtab SHIFT+TAB. Mpage ROLLDOWN
または
CTRL+R Begline HOME Mpara CTRL+ROLL DOWN Cancel̲ FSC L Msearch F4Cdelete CTRL+G ̲ Mword CSHITRLFT+Ⅰ
+‑または
NSCTRL+A Compile . SHⅠFT+F:3 NewlineCoApy CTRL+ⅠCTRL+
Ⅹ ま七 は J
NS PasteCurdate . Pbal CTRL+ [
Curday Plines CTRL+Z
Curfile Ppage ROT.LUP
または
CTRL+C CurfileeXt Ppar? CTRL+ROLLUP Curfilenarp 1.Psearch F3 .Curtime Pword CTRL
+‑または
CTRL十F Curuser Qreplace CTRL+¥
Down Quote CTRL+P
Emacscdel‑ ‑B.畠: Reflesh sHⅠFT+F7
Emacsnewl
リター ン
ReplacP CTRL十L→.
D写しまたは
CTRL+D Endline HELP ■RestcurEXe̲cute F7 Right EXit‑ F8 SaVecur . HPlp F1 Sdelete
Home ・CLR Setfile F2
Ⅰnformation SHl■FT十F1 Setwindow CTRL+]
Ⅰnitialize. SHⅠFT、+F8 Shell SHⅠFT‑トF9
Ⅰnsertmode ⅠNS
また
峠CTRL+Ⅴ Sinsert CTRL十J
LastteXt CTRL+0 元 .b TABLdelete cTRL■Y Undo GRPH+IBS
Left CTRL+S
また は‑
Up‑ ̲Tまたは
CTRL+Eマイクロソフトエディタのカスタマイズ 105
は,
Arg
範囲指定
Ldelete Arg範囲指定
Sdeleteという構文 を使 う
。範囲指定 はブロックの部分を‑イライ トさせ ることによる が,箱 型 削 除 の場 合 は, 前者 の
Ldelete,文字 列型 削除 の場 合 は, 後者 の
Sdeleteを用 いる。 デフォル トでは
Ldeleteには
Ctr1+Y,
Sdeleteには
DELが割 り当 て られて い るの で,
GRPH+A, カー ソルを移動 して範 囲指定,
Ctrl+Y( または,
DEL)と入力す る。
Arg
機能 を
Ctrl+Bに割 り当てたい場合 には,
(1)
Arg"Arg:Ctrl+B"Assignという構文を使 う。
Assignはデフォル トでは
GRPH+‑に割 り当て られてい るので,
tGRPH+A,「Arg:Ctrl+B」 とキー入力,
GRPH+‑とすれば,以後
Ctrl+Bで
Arg機能 を呼 び出す ことがで きる9
1つのキー操作 に複数 の機能 を 割 り当てた場合 には, いちばん最後 に割 り当てた機能だけが有効 となる。
「1 行挿入 してカーソルをその行の先頭へ移動 させ る
」を
Ctrl+Nに割 り当 て るには,
(a) Arg"x:=LinsertMetaBegline"Assign.
(b) Arg"Ⅹ:Ctrl+N''Assign
とい う構文を使 う
。 1行 目は Ⅹというマクロを
「1行挿入 し
(Linsert), カー ソルを行の先頭 に移動 させ る
(MetaBegline)」と定義 し,
2行 目で このマク ロに
Ctrl+Nというキー操作を割 り当てている。 ここで注意す ることは,い く つかの機能 をまとめてマクロにす るには,
(2)
マ クロ名 :‑ 処理す る機能
とすれば良 いことである。 また, キー操作を割 り当て るには,
(3)マクロ名 または機能名 : キー操作
とすれば良 い
。上記の
(a,b)の様 にすれば, エデ ィタを利用中に実行可熊 な機能 を自分の
好 きなキー操作 に割 り当て ることがで きる。 さ らに, この ことをェデ ィタ起動
106
商 学 討 究 第
40巻 第 1号
時 にい っぺんにや って しま うことがで きる
。(a,
b)で
Assignに渡す引数
Ⅹ:‑LinsertMetaBegline x:Ctrl+N
すなわ ち
,(2,
3)の形式 を
TOOLS.INIというファイルに書 いてお くのであ る。 こうしてお くと, エデ ィタ起動時 に自動的 にこの
TOOLS.INIファイルを 読み込んで, エディタ利用時 にはこれ らマクロ及 びキー設定 が利用 で きるよ う
にな って いる。
以上, エデ ィタの利用法の具体的説明の中で, カス タマイズ機能 の
1つであ る,
TOOLS.INIフ ァイルを利用 したマ クロ及 びキ ー操作 の設定方 法 を述 べ た。 もう
1つのカスタマイズ方法 は,
C拡張 と呼ばれ, マニ ュアルに指定 して ある引数及 び戻 り値 の型 を持っ関数 を C言語で記述す ることである。て の関数 の中で は, マニュアルに書かれてあ るマイクロソフ トエデ ィタの低 レベル関数
や OSの システムコールが利用で きる
。この C拡張で定義 した関数 は,エディタを実際に利用す るときには,マクロ と して扱 われ る。 また, これ ら自分で作 る関数 内で利用で きるマイクロソフ ト エデ ィタの低 レベル関数 には,‑ マ イクロ. ソフ トエデ ィタの マ クロを実行 す る
fExecuteがあ り,上 で述 べた (
1) の代 わ りに, プ ログラム内で,
fExecute("Arg
¥"
Arg:Ctrl+B¥"
Assign");
と記述すれば同 じ効果が得 られ る。
4.
カスタマイズの方法
ここで は,
3.で述べたファイル
TOOLS.INIと
C拡張 を利用 して, ファイ ナル風 にカスタマイズを行 な う概要 を述べ る。 ここで ファイナル風 とい う意味 は ( 表
2)のよ うにキー操作 の割 り当てを行 な うとい う意味 であ り, ファイナ ルのデ フォル トのキー割 り当て とま った く同 じよ うにす る ことで はない。 ま た, カス タマイズを行 な う際 には, マイクロソフ トエデ ィタの機能 を最大限 に 利用す ることを 目標 とす る
。3.
で説明 したよ うに,
TOOLS.INIファイルの中で,
マイ クロソフ トエデ ィタのカス タマイズ 表
2カスタマイズ後の
2ス トロークキー振作
107
Ctrl+JC
ヘルプ画面か ら戻 る
Ctrl十PO任意 の コマ ン ドの実行
Ctrl+JH‑ ヘルプ
Ctrl十PSシステムの起動
Ctrl+JP
ファイル名の変更
Ctrl+PW D事R/Wの実行 .
Ctrl+JU
‑
*Ctrl+KA
嘩索時 に大文字小文字
Ctrl+QA文字列 の置換 を区別す る/しない
Ctrl+QCファイルの最後へ 現 ファイルの放棄終了
Ctrl+QD行の最後へ
Ctrl+KB
ブロックの指定開始
ctri+QE画面 の上端
Ctrl+KC
Ctrl+KD
ク リップボ⊥ ドか らカ
Ctrl+QF‑文字列 の検索
‑ ソル位置へのコ ピ‑
Ctrl+QG MEGREPの起動
現 ファイルのセ⊥ブ終了
‑CtCtrrll+QH+QL行頭か らカーソル
‑Ctrl+KM
カ‑ソル行のマ‑ ‑ク 位壷 までの削除
*Ctrl+KQ
全 ファイルの放棄終了 指定行‑ ジャンプ
■CtCtrrll+KR+KS
カーソル位置への
Ctrl王QM‑ マ‑ク行へ ジャンプ ファイル読 み込 み
Ctrl+QRファイルの先頭へ 現 ファイルのセーブ
Ctrl+QS行の先頭へ
Ctr1+KW
*Ctr1+KX
ク リップボー ドを他
Ctrl+QV直前 の位置へ の ファイルへ jピ‑
Ctrl+QX画面 の下端へ
全 ファイルの竜一ブ終了
CtCtrrll+QY+UCカーソル位置か ら
Ctrl十OM編集 ファイルゐ選択 行末 までの削 除
Ctrl+ON
. 新 ファイルの選択 ウイン‑ ドゥクローズ
Ctrl+OP対応括弧の検索
Ctrl+UO画面横分割 ̲
*Ctrl+OU
大文字化
Ctrl+UT次の ウイン ドウへ
Ctrl+PCコンパ イラの超勤
Ctrl十UUア ン ドゥ .
̀Ctrl+PD DⅠR
の実行
‑Ctrl十UY画面縦分割 ( 荏) *印の付 いて いる機能 はプヮテク トモー ドでは正常 に作動 しない。
詳 しくは
,「5.注意事項 と問題点」 を参照。
108
商 学 討 究 第
40巻 第
1号
機能名 またはマ クロ名 : キー操作
と記述すれば, この機能 またはマクロに自分 の好 きなキー操作を割 り当て るこ とがで きると述 べた。 これを利用すれば, どの機能 にも ( 必要な機能がなけれ ば,
C拡張を利用 して 自分でその機能 を実現す る関数 を作 る) 自分の好 きな
1ス トロークキーを割 り当て ることがで きる ( 図
1参照) 。しか し,この方法では
2
ス トロークキーを割 り当 て ることがで きな
い。すなわち,
羊 Ⅹ:
Ctrl+JH等,としてマクロ
ⅩⅩに
Ctrl+JHを割 り当て ることがで きないのである。そこ で, これを実現す るために,少 々工夫が必要 となる。余談 になるが, マイ クロ ソフ ト羊デ ィタにはワー ドスター風 のカス タマイズを行 な っている
TOOLS.INI
が付 いてお り, さらに
Ctrl+QS, ‑
Ctrl+QDの
2ス トロークキーを利用す るユーザーのためにと,
C拡張 を利用 した
EXEファイル ( プロテク トモー ド 用 には
DLLファイル)が付 いている。ソースプログラムはないので,どう実現
されているか分か らないが,
2ス トロークキーを実現す るには,
TOOLS.INIファイルの レベルでは不可能で,
C拡張 まで利用 しなければな らないと解釈 で きそ うである。 しか し,色 々試行錯誤 を繰 り返 してみ ると,
2ス トロークキー を実現す ることは,
TOOLS.INIの レベルで可能 である。
(表
2) の うちCtrI+Jで始 まる 2 ス トロー クキーの割 り当てを どのよ うに 実現す るかを説明す る。他 の
2ス トロークキー割 り当て も同様である
。Ctrl+J
で始 まるのは
Ctrl+JC,
Ctrl+JH,
Ctrl+JP,
Ctrl+JUの
4個であるか ら,
Ctrl+Jが入力 された時点 で 2 ス トローク目の
Ctri+C,
Ctrl+H,
Ctrl+P,
Ctrl+Uに, 目的 とす る処理 に必要 な機能 を割 り当て, これ ら
2ス トローク目 の
Ctrl+C,Ctrl+H,Ctrl+P,Ctrl+Uのいず叫かが入力 された時点で,元 の 処理 (これ らが
1ス トローク目に入力 されたときに行 な う処理) に戻す。具体 的には,
TOOLS.INIファイルに 一 ( 図
2)のよ うに記述すればよい.
初期設定では,
Ppage:Ctrl+C Emacscdel:Ctrl+H
マイクロソフ トエデ ィタのカスタマイズ
図
1 TOOLS.lNLファイル
(1ス トE 1‑クキー定義の部分)
109
Mword:Ctrl+A Argl.Ctrl.+B Ppage:Ctr】+C Right:Ctrl+D Up:Ctrl+E Pword:Ctrl十F Sdelete:Ctrl+G Emacscdel:Ctrl+H lprO:‑ I PRO lprO:Ctrl+i Replace:Ctrl+L Meta:Ctrl+M
npro:
‑
LinsertMetaBegline npro:Ctrl+NMpage:Ctrl+R Left:Ctrl+S tpro:‑ T PRO tpro:Ctrl+T
Insertmode:Ctrl+V Mlines:Ctrl+W Down:Ctrl+Ⅹ Ldelete:Ctrl+Y Plines:Ctrl+Z Psearch:F5
Msearch:SHIFT+F5
Quote:Ctrl+]
escpro:‑ ESC PRO escpro:ESC
1 語前へ
Arg
機能の呼び出 し 次画面へ
右へ
上へ 1 語後‑
カーソル位置の文字削除 左の文字削除
し PRO
は C 拡張で定義
TABコー ドの挿入
(*)確認な しの文字列置換
メ タキー1
行挿入後行頭へ 申画面
左へ
T̲PRO
は C 拡張で定義 1語削除
(*)挿入/ 上書 き
下へ
1行スクロール 下‑
1
行削除
上へ
1行スクロール ファイル末への検索 ファイル頭への検索 ' コントロールコー ドの入力
ESC̲PROは C 拡張で定義 取 り消 し
( 荏) *印の付 いている機能 はプロテク トモー ドでは正常 に作動 しない。
詳 しくは
,「5.注意事項 と問題点」を参照。
110 商 学 討 究 第
40巻 第
1号
図
2 TOOLS.lNlフ ァイル
(ctrl+
」で始まる
2ス トロークキー定義の部分)
resetjpro:‑ Arg"Ppage:Ctrl+C"AssignArg"Emacscdel:Ctrl+H"AssignArg
"setppro:Ctrl+P"AssignArg"setupro:Ctrl+U"Assign
;マクロ
resetjproの定義
resetjproの内容は
;ctrl+C,Ctrl+H,Ctrl+P,Ctrl+U
の割 り当てを元に戻す
;マクロ
setpprO
,SetuprOは別のところで定義されている
。setjc
1:
‑ Setfileresetjpro;マク
t?setjcl甲走義
setjclの内容は元のファイルに戻る
setjhl:‑Helpresetjpro
;マクロ
setjhlの定義
setjhlの内容はヘルプファイルを表示
setjp2:‑ SetfileArg"Emacsnewl:ENTER"Assign
;マクロ
setjp2■ の定義
setjp2の内容は
;マクロ
setjplの残りの処理とリターンキーの割 り当てを元に戻す
setjp
1:
‑ Arg"msg:1"
AssignMESS̲PROresetjproArg"setjp2:
ENTER"Assign ArgArg;C
拡張で定義 した
MESS̲PROを使 ってメッセージ
;
「 変更後のフ‑ アイル名を入力 して リターンキー妄押 して下さ
い」;を表示後 リターンキー
(ENTER)に
setjp2を割 り当て
Arg機能を
2回呼び出す
;setjp
l
,setjp2で使われている構文
:「ArgArg
ファイル名
Setfile」はカレントファイルをファイル名でセーブする
setju1:‑JU̲PRO r、lヨ esetjpro
;マクロ
setjulの定義
JU̲PROは
C拡張で定義
setjulの内容は
;検索時に大文字 と小文字を区別するか, しないかを交互に指定
setjpro:‑Arg"setjcl:Ctrl+C"AssignArg"setjh1:Ctrl+H"AssignArg"setjp1:
Ctrl+P"AssignArg"setju
l:
Ctrl+U"Assign;マクロ
setjproの定義
setjproの内容は
マイ クロソフ トエデ ィタの カス タマ イズ
111;ctrl+C,Ctrl+H,Ctrl+P,Ctrl+U
に
setjcl
,setjhl
,sethpl
,setjulをそれぞれ割 り 当てる
setjpro:Ctrl+J
;マクロ
Setjproを
Ctrl+Jに割 り当てる
( 荏)紙面の関係で
2行にまたがったもの もあるが,マクロの定義は
1行に書 く。
setppro:Ctrl+P setupro:Ctrl+U
であるが,
Ctrl+Jが入力 された時点 で,
setjcl:Ctrl+Csetjhl:Ctrl+H setjpl:Ctrl+P setjul:Ctrl+U
と再割 り当てを行 な う。 これ ら
setjcl
,setjhl,setjpl,setjulのマクロに
必要 な処理 を定義 しておけばよい。 この必要 な処理 には元 の割 り当て に戻す処 理 (これ もまたマクロ
reSetjproで定義 されて いる) が含 まれている
。マクロ
setjclは機能
Setfileで ヘルプ フ ァイルか らもとの フ ァイル に戻 し, マ クロ
setjhlは機能
Helpでヘルプフ ァイルを呼 び出す。 マ クロ
Setjulは別 に
C拡 張 で定義 された機能
JU̲PROを呼 び出 し, 検索時 に大文字 と小文字 を区別す るか, しないか を交互 に設定 す る
。最後 に フ ァイル名 の変更 を行 な うマ クロ
setjplであるが,カ レン トファイルを,変更す るファイル名でセー ブす ること で実現す る
。これ は構文
ArgArg
フ ァイル名
Setfileを利用すれば良 いのだが, ファイナルに習 って
Ctrl+JPを入力後, ファイル 名, リター ンセ これを行 な うため,次 のよ うに
2段階で処理す る
。マクロ
setjp2で は 「 変更後 の ファイル名 を入力 して リ夕丁 ンキーを押 して
下 さい」 とメ ッセー ジを表示 し,
112
商 学 討 究 第
40巻 第
1号
setjp2:ENTER
と リター ンキーが入力 され た らマ ク ロ
setjp2を実行 す るよ うに して お き,
Arg機能 を
2回呼 び出す。 ファイル名が入力 され リター ンキーが押 された とき に呼 び出 され るマクロ
setjp2に
Setfileを入 れておけば,この
setjplと
setjp2
の
2個 で目的の構文 が実行 された ことになる。
ここで,注意 を要す ることは, 2 ス トロークキー操作を以上 のよ うに割 り当 て る際 に, マ クロの展開が, それが実行 され るときである, とい うことを利用 してい る点 である
。もし, マイクロソフ トエデ ィタのマクロの展開が, マクロ の定義時 に行 なわれ るな ら,上記 の方法で は
2ス トロークキーを割 り当て るこ とはで きない。
マイクロソフ トエデ ィタにはない機能 を C拡張で作成 したので,その うちの
1
つ
Ctrl+KXで呼 び出 され る関数
KX̲PROの概要 を説明す る。
Ctrl+KX
に割 り当て られた機能 は 「 変更 のあ った全ての ファイルをセーブ して終了す る」である
.関数
KX̲PROに変更 のあ った全ての ファイルをセー ブす る処理 を行 なわせ, その後.
ArgMetaExit
でエデ ィタを終了 させ る
。関数
KX̲PROの定義 は ( 図
3)に与 え られている。エデ ィタの中か らマク ロとして呼び出す場合 は関数 の戻 り値 と引数 の型 はこの通 りとす る。修正 が行 なわれて まだ セー ブされて いない フ ァイルは
ILnformationフ ァイル ( 図
4参 照)の ファイルの行数 を表わす数字 の前 に *印が付 いてい るので, *印の付 い ている行 の行頭 か ら始 まるフ ァイルをすべてセー ブすれば良 い。
Ⅰnformationファイルを呼 び出す機能
Ⅰnformationはデフォル トでは
,SHIFT+Flに割 り 当て られている
。まず,機能
Informationを
fExecuteで呼 び出す。上 に述べたよ うに *印が 付 いているファイルを見つ ければ良 いのだが,少 しだけ手間がかか る。
FiieNameToHandle("",NULL)
でカ レン トファイル,今の場合 は
,Informationファイルの‑ ン ドルを得 る。
マ イ クロソフ トエデ ィタの カスー クマイズ 図
3関数
KX̲PROの定義
113
charmyext̲buf[256];/*1
行を読み込むためのバ ッファ
*/flagTypepascalEXTERNALKX̲PRO (argData,pArg,fMeta)
unsignedintargData;/*
マイクロJ l /フ トエディタ内でマクロとして使 う関数 は
*/ARC far*pArg;
/ * 戻 り値 と引数の型をこのようにしなければならない
*/flagTypefMeta; (
COLi; LINEln;
PFILEpFile,pFile2;
f
Execute(
"Information'');/*Ⅰnformationファイルを表示 させる ( 図
4参照
)*/ln ‑ 2;
while(TRUE)i
pFile‑ FileNameToHandle("",NULL);/*
カ レント
(Ⅰnformation)*/myext̲buf[0]‑ 0; /*
ファイルのハ ンドルを得 る
*/myext̲buf[31]‑ 0;
GetLine(1n,myext̲buf,pFile);/*(ln+1)
行目を
myexL bufへ読む*/
if(myexL buf[0]‑
‑ ' ぐ)
(/*1桁 目が ' ぐ なら次の行へ
*/I )
elseif((myexL buf[0
]>
‑ 'a')&&
(myext̲buf[0]<‑ 'Z'))t if(myexL buf[31
]‑‑ '*'日 / * 変更 ファイルだけセーブする
*/i
‑ 0;MoveCur(i,ln);
fExecute("ArgSetfile"); fExecute(''ArgArgSetfile''); fExecute("Information"); )
)
else(/*
それ以外な ら終了
*/114
商 学 討 究 第
40巻 第
1号
returnTRUE;
)
ln++;/*
次の行へ
*/)
returnTRUE;I
図
4機能
informationを呼び出 した例
Version1.00‑Oct011988
<information‑file>
a:¥initial¥tools.ini a:¥source¥myext.C
<clipboard>
Theclipboardisempty
18virtualpages/10local
2lines
*211lines 666lines Olines
( 症) 画面中央行数を表わす数字の前の*印により,
a:¥initial¥tools.ini
は修正 されていることが分か る。
以後 この‑ ン ドルを利用 して
Informationファイルを処理す る
。( 図
4)を見 るとファイルが書 かれてあるのは
3行 目か らなので,
3行 目か ら
1行ずつ読 み 込 み該当 ファイルか どうか調べ る
。行番号 は 0か ら始 まるので, 3 行 目はプ ロ
グラムで は
ln‑2 とな っている
。GetLine (ln,myext̲buf,pFile)
でバ ッフ ァ
myext̲buf‑ 1行読 み込 む。
最初 の桁 が ' ぐ な ら
Ⅰnformationファイル, ク リップボー ド, 等 であるか
ら,次 の行へ。 ドライブ名か ら始 まるファイル名か ど うか調べ る。 ファイル名
でなければ,すべて調べ た ことになるので終了す る。 ファイル名 な ら*印が付
いて いるか どうか調べ,付 いて いる場合 には,
マイクロソフトエディタのカスタマイズ 115
MoveCur
で
1桁 目にカーソルを戻 し,
ArgSetfileで このセー ブすべ きファイルに移 り,
ArgArgSetfileでカ レン トファイル,今 の場合, セーブすべ きファイル,をセーブす る
。次 の 行を調べ るために,
Information
で
Informationファイルへ戻 る
。これを終了す るまで繰 り返す。
カ レン トファイルの内容 を得 るためにわ ざわ ざ
FileN去meToHandle,
Get‑ Line等 を利用 しな くて も良 いように設計 してあれば,等 と思 うのだが,それ は 素人考 えのよ うである
。もし,
KX̲PROの内容 をJ Lデ ィタ内で, キー入力 し て行 な うと, 少 な くとも
2回 は表示画面 が変わ るはずであるが,
Ctrl+KXを 入力 して実際 に
KX̲PROの処理 を行 な うと,画面 は変化せずに,フ ァイルを セーブ した とい うメ ッセー ジが メ ッセー ジ行 に表示 され るだけである。 これ も 素人判断であるが, エデ ィタの処理速度 を早 めるために,処理 に時間 のかか る 画面表示 は省略 され る場合 があ るよ うである。
以上, 私 が行 な ったカス タマイズの うち,
TOOLS.INIファイ ルの レベルで
2
ス トロークキーの割 り当てが可能 であ る, エデ ィタを利用 しやすいよ うに C 拡張で機能 を追加 した, の
2点 の概要 を具体例 をあげて説明 した。
5.
注意事項 と問題点
カスタマイズを行 な った ことによる,注意事項及 び問題点 を述べ る
。まず,
2
ス トロークキーを入力 した場合,処理速度 が若干落 ちることである。長 いマ
クt l を処理す るためで あろうが, で きれば改善 したい点 である。 これに関 して
リアルモー ド上 で は気 をっ けることがある。
2ス トローク目が
Ctrl+Sまたは
Ctrl+Cの時, す なわ ち,
Ctrl+JC,
Ctrl+KC,
Ctrl+KS,
Ctrl+PC,
Ctrl+PS,
Ctrl+QC,
Ctrl+QSの時,
2・ ス トロ‑ク目を早 く入力 して しま う
116
商 学 討 究 第
40巻 第
1号
と, これ ら
Ctrl+Sまたは
Ctrl+Cが
MS‑DOSで利用 されている意味 を持 っ ていると判断 され るよ うで,画面停止 を意味す る
Ctrl+Sでは次のキーを停止 解除 として取 り込 み, ブ レークを意味す る
Ctrl+Cではカーソル位置 の画面表 示が少 し乱 れ る。後者 の場合 で も
,ESCを入力 し
,Ctrl+C,Ctrl+R等 で,画 面 を再表示すれば元 に戻 る
.プロテク トモー ドで は, キー入力 は優先度 の高 い
ス レッ ドで行 な うた めか, このよ うな
Ctrl+Cと
Ctrl+Sが こち らが意図 した 意味 と違 って取 られ ることはない。
ファイナルの ブロック操作では
,Ctrl+KBが ブロ ックの開始位置で
,Ctrl+ KKでバ ッファに コ ピー,
Ctrl+KYで ブロックを削除 してバ ッファに移動 さ せ る
。すなわち, ブロックの終わ りの位置で入力す る操作 も
2ス トロークキー
であ る。残念 なが らこれには対処 で きず, 1 ス トロークキーと した。 そのかわ り 「カーソル移動 で範囲を指定後, 〈B ( 反転領域 ( 箱型)削除) , 〈Y (
文字列型削除) , ‑K (コピー
)」とメ ッセー ジ行 に表示 を行 な った。
この よ うに フ ァイナル と若干異 な り指示 がない と分 か りに くい と ころは, メ ッセー ジを表示す るよ う石 . =した。
以上 の ところは新 しいキー操作 を覚え 高位 な らこれ位 の我慢 は しよ うとい う ところであ るが,以下 の問題点 は重大である
。( 表
2)および ( 図
1)‑ において *印が付 いて いる機能 がプロテク トモー ドで は正常 に動作 しない。 これ らの機能 を利用 しよ うとす ると,
「SYS1943:
プ ログ ラムで保護 エラ‥が発生 しま した」
「SYS1811:
プロセスは停止 しま した
ソフ トウェア診断 コー ド (トラップ番号) は
013です」
とエ ラーメ ッセ一・ ジが表示 されエデ ィタが終了 させ られ る。複数 のプ ログラム ( プ′ ロセス)が同時 に実行 され る
MSOS/2のプ ロテ ク トモー ドでは,実行 中 のあ るプロセスのデータが他 の関係 のないプ ロセスによ って不用意 に書 き換 え られ ると困 る。 そのため,特 に設定 を しない限 りプ ロセスは自分のデータしか 処理 で きない。 もし, 自分 のデータ以外 を処理 しよ うとす るとシステムに終了
させ られ る。 この時 に上記 のエ ラーメ ッセー ジが表示 され るよ うであ る。‑
マ イ ク ロ ソ フ トエ デ ィ タの カ ス タマ イ ズ 117
私の素人判断であるが,正常 に動作 しない C 拡張の全部で
FileNameToHandle
(' ' "
,NULL)を利用 してお り, これを簡単 な例 で検査 して も正常 に動作 しないみたいであ る。 もちろん, デバ ッガ等で問題箇所を特定で きたわけではないので, あ くま
′ で も素人判断の域 を出ない。 この点 に関 して,マイクロソフ ト社 に簡単 な例を 同封 して質問中である。
6.
おわ りに
ェディタの処理機能 にコン トロ⊥ルキーを利用 した
2ス トロークキーを割 り 当て ることがで きることは,手 をホームポ ジションか ら移動 させ な くて も良 い, とい う利点がある
。ここでは,私の使 い慣れているファイナル風 にカスタ マイズを行 な ったが, ソースファイル等を変更すれば,違 ったカスタアイズが 可能である。 5 .で述べた問題点を改善 して行 くのは今後の課題 である
。なお
ソースプログラムは冗長 なので省略 した。
参考文献
[1] 「OS/2
入門」 川井健一,佐貫俊幸,船木義昭著 培風館
[2] 「OS/2
入門」 富士 ソフ トウェア教育 出版部署 富士 ソフ トウェア
[3]「OS/2