|
JRくん、ご帰国、どうもです。
懸案になっていた「マクロ登録数の制限突破大作戦」の原稿原案をアップ
します。昼から書き始めて、なんか、頭がオヨヨ状態なので、後の編集作業
宜しくお願いいたします。
*なお、「作例2」は、TAKAさんのニフティの会議室での発言をベースにし
ています。まだ、TAKAさんに直接お願いをしていない状態なので、この部分
は、『あくまでもダミー』ということでお願いいたします。可能であれば、
TAKAさんご自身に再編集してもらえれば一番なんですが、時間的に可能かど
うか、ニフの方で聞いてみます。
*原稿中にも、「TAKAさんの発言による…」と個人名を入れようかとも思っ
たんですが、このQ&A集では他に全然個人名がないこともあり、「REDライ
ク」というマクロ集名で逃げておきました。この辺の処理も(原稿は出さな
いけど、編集や方向性でQ&A集に参加したケースも考慮して)どうしたらベ
ストなんでしょうねえ?
*あと、TAKAさんのマクロの中で、INIファイルの置き場を原典の「RED」
フォルダから「macro」フォルダに変更しようと思いますが、これもまだ了
解を得ていませんので、いましばしお待ちを。(このあたりは、秀丸Q&A集
作成しよう会の「推奨マクロフォルダ」として意識的に統一の方向へ向かっ
てもいいかもしれませんね。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
//以下、原稿原案(「マクロ登録数の制限突破大作戦」1/2)
■「エッ! 秀丸ってマクロが80個しか登録できないのっ!?」
■〜マクロ登録数の制限を克服するマクロ〜
秀丸エディタを使っていて、マクロの便利さに気づくと、気に入ったマク
ロをどんどん登録してしまいがちです。そこで「ハタ」と気が付きます。マ
クロ登録ダイアログボックスには80個しか登録場所がない悲劇的な事実に。
「ま、ま、まさかね。80個でおしまいなんて。ウソでしょ。だって秀丸の紹
介記事を見ると、マクロがスゴイ、マクロが便利だ、って書いてあるじゃん。
それなのに、今さらマクロがたった80個だけしか使えないなんて…。なんと
かしてケローーー」。
●仕様上の制限
冷静になってもう一度、秀丸エディタの「マクロ登録」ダイアログを見る
と、80個しか登録場所がありませんよね。秀丸エディタのヘルプには「秀丸
のマクロは、80個まで登録することができますが、キー割り当て可能なの
は1番から50番までの50個だけです。」と記載されています。
これを素直に読んだ人の多くは「ぐっぎゃ〜。なんじゃ〜。秀丸ってマク
ロが優れていると聞いてたけど、やっぱり噂通り、登録して実行できるマク
ロは80個しかないんだあ。うげっ」、「しかもエディタ利用者に多い、キー
ボードから素早い操作でのマクロ実行できるのはわずか50個だって…。これ
ってなんだかなぁ〜」というため息混じりの声をもらすことでしょう。
でも、ご安心を。マクロの問題はマクロで解決する。しかも「どぅ〜いっ
と、ゆあせるふ」の精神で、ユーザ自身がこれを克服できる手段を思いつき
得るのです。これがまあ、秀丸の困ったところもあり、面白いところでもあ
るんですね。わざとガードを下げる。そして力石に打たせ…あ、すいません。
●制限克服の第一歩
このマクロ登録数の限界を克服するためのもっとも簡単な方法は、menu文
を使ってメニューを表示させ、その選択結果から呼び出したいマクロを
execmacro文を用いて実行させる方法です。
例1:次のmenu00.macでは、30個のメニューが出て、30個のマクロを呼び
出せます。
menu "実行マクロ01",
"実行マクロ02",
"実行マクロ03",
…
"実行マクロ30";
if(result==1)execmacro "macro01.mac";
else if(result==2)execmacro "macro02.mac";
else if(result==3)execmacro "macro03.mac";
…
else if(result==30)execmacro "macro30.mac";
●制限克服への第二歩
メニューから呼び出したマクロで、さらに別のメニューを呼び出すように
すれば、簡単に80個以上のマクロを呼び出せます。
例2:macro01.mac
例えば、上記の例1で呼び出されるmacro01.macを次のように書くと、
menu00.macで30個のメニューが表示された後、さらに新しく10個のメニュー
が表示されます。
menu "二次実行マクロ11",
"二次実行マクロ12",
"二次実行マクロ13",
…
"二次実行マクロ09";
if(result==1)execmacro "macro11.mac";
else if(result==2)execmacro "macro12.mac";
else if(result==3)execmacro "macro13.mac";
…
else if(result==9)execmacro "macro19.mac";
こうしたメニューを作っていけば、簡単に無数のマクロを『メニュー表
示』を行ってその選択に従って実行できます。
●アクセスキーでキーボードから快適操作
メニューを表示させると、その内容がわかりやすい反面、どうしてもうざ
ったくなります。特にエディタは軽快さこそがイノチ。エディタを常用して
いる人の中には、いちいち表示されるメニューが苦痛だと嘆く人が多いよう
です。しかもメニューを選択する際、いちいちマウスに手を伸ばし、数多く
のメニューから希望する項目をクリックする作業は、文書入力の大きな妨げ
ともなります。
そこで、キーボードから簡単にメニューを選択する方法を紹介しましょう。
「メニューにアクセスキーを設定する」方法です。キーボードから入力した
1文字の前に&を付けるだけです。メニューを表示させながら、マウスを使
わないでキーボードからのみの指定ができるようになります。
例3:menu00.macで、下記のように「&」に続けて、希望する1文字を指定
します。下記の例では、メニュー表示後、「1」「2」「a」キーを押すだ
けで、それぞれのマクロが実行されます。
menu "実行マクロ01(&1)",
"実行マクロ02(&2)",
"実行マクロ03(&a)",
…
"実行マクロ30";
if(result==1)execmacro "macro01.mac";
else if(result==2)execmacro "macro02.mac";
else if(result==3)execmacro "macro03.mac";
…
else if(result==30)execmacro "macro30.mac";
●メニューを出さないでマクロを実行したい
メニューからマクロを実行する方法以外に、80個以上のマクロを実行す
ることはできないのでしょうか? 例えば、デフォルトでは「Ctrl+F」で検
索ダイアログがでますよね。こうした使い方でマクロを実行させたいわけで
す。そして、これこそがこのセクションの最大のポイントです。
そこで改めてマクロ登録数に関する仕様内容を読み返してみましょう。
「80個まで登録することができます」です。おおっ。「80個までのマク
ロを実行できます」ではなかったんですね。つまり「登録の制限」があるだ
けで「80個しかマクロを実行できないわけではない」のです。この仕様の
隙間に注目すれば、無限のマクロ登録が実現します!
●登録数の制限突破への原理
あうん? 「登録の制限」があるだけで……、んで、「実行できないわけ
ではない」……。なんだか、わかったようでわからないような…。これじゃ、
まるで怪しげな結婚詐欺師。持って回った言い回しになってスイマセンです。
要は「登録できるマクロは80個までだが、80個のマクロしか実行できな
いわけではない」という事です。
最大のポイントは「登録できるマクロ数には80という制限があるが、キ
ー割り当てには制限がない」という仕様に注目するところです。実際のマク
ロ作成では、次のようなステップで目的を実現します。
(1)複数のキー割り当てから一つのマクロを呼び出す
「キー割り当て」によって指定できるマクロは、登録されたマクロに限ら
れます。逆に言えば、複数の「キー割り当て」に対して、一つのマクロを重
複して指定することは許容されているわけです。
例えば、Ctrl+A,Ctrl+Shift+A,Alt+Aの3つのキー割り当てに対して、す
べてaaa.macというマクロを重複して指定します。
(2)押されているキーの状態を判別する
でも、(1)まででは複数のキー入力によって一つのマクロを実行すること
しかできません。そこで、呼び出されたマクロ(この例ではaaa.mac)では、
押されているキーの状態を読みとります。Ctrlキーは押されているのか、
Shiftキーはどうか、アルファベットキーはどうなのか、などをiskeydown関
数を用いて調べます。
例えば、ここでは、Ctrl+A,Ctrl+Shift+A,Alt+Aのキー状態を判別します。
(3)キーの状態に応じたマクロを呼び出して実行させる
(2)で得られたキーの状態に応じたマクロを呼び出せば、キーボードから
さまざまなマクロを実質的に無限に実行できるようになります。
(もっともこの場合、どのキーにどんなマクロを割り当てたかを覚えておく
必要があります。)
(1/2。以上)
|
|