RE:00220 秀丸Q&A集原稿緊急募集No.00222
水銀水 さん 98/09/16 17:52
 

 無事で帰国されたようで、よかった、よかった。

>  #そういえば前回の収録依頼の件は、結局依頼元からメールが来なかったの
>  で、そのままになっているんですが・・・(^^;)

 げげっ。担当者は「了解しました」みたいな事を言ってましたが、何か
他のことと勘違いしていたのかもしれませんねえ。とりあえず、早速、確認
のメールを出しておきます。


[ ]
RE:00220 秀丸Q&A集原稿緊急募集No.00226
水銀水 さん 98/09/19 19:56
 

>  #そういえば前回の収録依頼の件は、結局依頼元からメールが来なかったの
>  で、そのままになっているんですが・・・(^^;)

 むむっ。この発言のレスにあたしのレスが付けられていない???
おかしいなあ。ま、とりあえず、再度、編集担当に連絡しておきまし
たが、連絡はどうなんでしょう???

[ ]
RE:00226 秀丸Q&A集原稿緊急募集No.00227
水銀水 さん 98/09/19 19:57
 
> むむっ。この発言のレスにあたしのレスが付けられていない???

 というのは、あたしの勘違いでした。どーもここ数日、ウチのプロバイダ
が社屋移転とかで、調子がへんです。(あ、一番、変なのは私でした)


[ ]
RE:00220 秀丸Q&A集原稿緊急募集No.00228
水銀水 さん 98/09/19 19:59
 

 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。以上)


[ ]
RE:00220 秀丸Q&A集原稿緊急募集No.00229
水銀水 さん 98/09/19 20:00
 

//以下、原稿原案(「マクロ登録数の制限突破大作戦」2/2)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
●具体的なマクロ作例
 秀丸でマクロ登録数の制限を克服するための原理の説明は以上でおしまい
です。実際にどのようなマクロをこれを実現するか、2つの例を紹介するこ
とにします。
●作例1
 では、まず、上述の原理をもっとも忠実に再現した、シンプルなマクロを
紹介しましょう。(月刊アスキー97年X月号「パソコン早わかり研究室」よ
り引用)
【マクロ登録数の限界を破る】
Q:秀丸エディタのマクロをショートカットキーやメニューに登録して使って
います。でも登録は、最高で80個まで(ショートカットキーを割り当てられ
るのは50個まで)しかでき
ませんよね。しかし、雑誌の付録などで集めた小さいマクロも含めていろい
ろ登録していると、これではとても収まらなくなってきました。あふれたマ
クロを「マクロの実行」メ
ニューから呼び出す方式はわずらわしいのでイヤなのですが、なんとかなり
ませんか。
A:では、この制限を回避し、無制限にショートカットキーにマクロを割り当
てるマクロを紹介します。「キー割り当ては50個で十分」という方も、備え
あれば憂いなし、将来の不
安を取り除くためにも、1度お試しください。
 手順は以下の通りです。ここでは例として、マクロ「ASCII.mac」をAlt+
Ctrl+Shift+A(Alt/Ctrl/Shiftキーを同時に押しながらAキーを押す)
に割り付けたい場合を想定
します。また、便宜上、Alt/Ctrl/Shiftを特殊キー、A〜Zと0〜9を一般キ
ーと呼ぶことにします。
@マクロ登録
 まず、以下の「moreMac.mac」を作成して、50番未満のマクロ登録位置に
登録します。例として、「マクロ:1」の位置に登録名を「マクロ登録数の
拡大」として登録してみます。
// moreMac.mac(マクロ登録数の拡大)
#c = 37;
while( #c <= 90 ){
    if( iskeydown( #c ) )break;
    else #c = #c + 1;
}
if(iskeydown(16))#p = #p + 1;//Shift
if(iskeydown(17))#p = #p + 2;//Ctrl
if(iskeydown(18))#p = #p + 4;//Alt
if(#p == 7){// [Alt + Ctrl + Shift]
}else if(#p == 6){// [Alt + Ctrl]
}else if(#p == 5){// [Shift + Alt]
}else if(#p == 4){// [Alt]
}else if(#p == 3){// [Shift + Ctrl]
}else if(#p == 2){// [Ctrl]
}
endmacroall;

画面H4 掲載したマクロ「moreMac.mac」を、「マクロ→マクロ登録」で
「マクロ:1」に登録してみたところ。

Aキー割り当て
 実行させたいキーの割り当てを行ないます。「その他→キー割り当て」ダ
イアログボックスで、「Alt」「Ctrl」「Shift」にチェックを入れ、「キ
ー」の欄で「Alt+Ctrl+Shift+A」を選択します。次に「コマンド」の欄
で「メニュー/マクロ」を選び、先ほど登録した「マクロ:1マクロ登録数の
拡大」を選択します。

画面H5 「その他→キー割り当て」で、「Alt+Ctrl+Shift+A」に先のマ
クロ「moreMac.mac」を割り当てた。

画面H6 さらにマクロを追加したくなった時点で特殊キーと一般キーの組み
合わせで、「コマンド」の欄が「(なし)」になっているところに、先の
「moreMac.mac」を割り当てていくことになる。

B実行させたいマクロの導入
 動かしたいマクロ(ASCII.mac)をマクロファイル用のフォルダにコピー
します。もちろん、あらかじめ登録済みのマクロを利用する場合は、この作
業は不要です。
CmoreMac.macの書き換え
 先のmoreMac.macを開き、次の作業を行ないます。
(ア)特殊キー状態に対応したブロックへの挿入
 マクロを割り当てたキーの特殊キーの状態に対応するmoreMac.macのブロ
ック部分に存在する、次の1行を挿入してください。

 if(#c == XX )execmacro "NNNN.mac";

 たとえば先の例では特殊キーは「Alt+Ctrl+Shift」を押すことになって
いましたから、moreMac.mac内の「if(#p == 7){// [Alt + Ctrl + Shift]」
の後に挿入します。
(イ)キーコードの指定(#c == XXの部分)
 そこで、特殊キーと組み合わせて押す一般キー(A〜Z、0〜9)を、そのキ
ーコードに変更します。キーコードについては、表1の主なコード表を参照
してください。例では「A」
キーですから、「#c == XX」の部分を「#c == 65」と書き換えます。

//表
表1 主なキーコード一覧(10進数表記)
キー  キーコード
Shift 16
Ctrl  17
Alt   18
左    37
上    38
右    39
下    40
0〜9  48〜57
A〜Z  65〜90

(ウ)実行させるマクロファイルの指定(execmacro "NNNN.mac"の部分)
 「Alt+Ctrl+Shift+A」で実行させたいマクロの名前を指定します。例
では「ASCII.mac」ですから、

if(#c == 65)execmacro "ASCII.mac";

画面H7 「Alt+Ctrl+Shift+A」で実行させたいマクロの名前を「ASCII.
mac」と指定した。

D登録したマクロの実行
 これで、「Alt+Ctrl+Shift+A」キーにより「ASCII.mac」が実行されま
す。「Alt+Ctrl+Shift+Aが押された時点で実際にはmoreMac.macが起動し、
そのマクロから、同じ
キー操作に割り当てられている「ASCII.mac」が実行されるわけです。

E続々とマクロを登録していこう
 今後は、マクロを新規にキー割り当てしたくなった時点で、A〜Cの処理
を繰り返せば、あらゆる「特殊キー+一般キー」に対して事実上無制限にマ
クロを登録できます。あら
かじめ、現在マクロが登録されていない特殊キーと一般キーの組み合わせに
対して片っ端から「moreMac.mac」を割り付けておくと、今は面倒でも、後
々はmoreMac.macのスクリプ
ト変更だけでキー割付が実現するので楽でしょう(ただし、単独のShiftキ
ーと一般キーとの組み合わせに割り付けることは避けましょう。文字入力が
不便になります)。 

画面H8 moreMac.macに、実際にいくつかのマクロを割り当てた。登録マク
ロ数が増えると、このmoreMac.macはどんどん長いマクロになっていく。ち
なみに、C−(ア)で指定する「if(#c == XX )execmacro "NNNN.mac";」は、
「XX」の値さえ違えばいくらでも並べて書いていける(念のため)。

●作例2
 作例1のマクロでは、マクロファイルそのものを編集しなければいけませ
ん。これは秀丸マクロに慣れていないユーザにとっては難儀ですし、マクロ
が動作しなくなるなどの危険性も伴います。そこで、原理的には同じですが、
さらに高度でぐっとハイセンスなマクロにしあげた例をご紹介します。安全
でユーザビリティに優れています。(秀丸マクロ集 REDライク Ver1.11に同
梱。編集上の都合により一部変更)
●KEY_ASIN.MAC
=====(ここからダミー原稿、開始)=====

//---- KEY_ASIN.MAC 開始 -----------------------------------
//---- ここまで --------------------------------------------
=====(ここまで、ダミー原稿)=====

(2/2。以上)


[ ]
RE:00228 秀丸Q&A集原稿緊急募集No.00235
TAKA さん 98/09/20 01:15
 
TAKA です。
「228」の発言に今、気がつきました。
#だって、なぜかツリー表示がうまく出来ていないんだもん。

>TAKAさんご自身に再編集してもらえれば一番なんですが、時間的に可能かど
>うか、ニフの方で聞いてみます。

ちょっと、無理そうです。すみません。


>*原稿中にも、「TAKAさんの発言による…」と個人名を入れようかとも思っ
>たんですが、このQ&A集では他に全然個人名がないこともあり、「REDライ
>ク」というマクロ集名で逃げておきました。この辺の処理も(原稿は出さな
>いけど、編集や方向性でQ&A集に参加したケースも考慮して)どうしたらベ
>ストなんでしょうねえ?

何も書かないというのはどうでしょうか?


>*あと、TAKAさんのマクロの中で、INIファイルの置き場を原典の「RED」
>フォルダから「macro」フォルダに変更しようと思いますが、これもまだ了
>解を得ていませんので、いましばしお待ちを。(このあたりは、秀丸Q&A集
>作成しよう会の「推奨マクロフォルダ」として意識的に統一の方向へ向かっ
>てもいいかもしれませんね。

「macro」フォルダに変更してもらったのでかまわないと思います。
INIファイルの名称も変えたほうがいいと思います。
あっ、インターフェイス部分も削除してもらったほうがいいと思い
ます。


P.S.
まだ、「REDライク Ver1.11」を公開出来ていない状態です。

[ ]
RE:00235 秀丸Q&A集原稿緊急募集No.00237
水銀水 さん 98/09/20 10:14
 
 TAKAさん、お忙しいところ、どうもです。

>ちょっと、無理そうです。すみません。

 了解しました。ニフティでのTAKAさんの発言をベースにして、
一度、原稿にしてみます。その修正というか手直しをお願いす
るという形でしたらいかがでしょう?

>何も書かないというのはどうでしょうか?

 それも手ですが、ニフティの発言をベースにしている関係上、
TAKAさんご自身の執筆の場合以外は、「出典」とか著作権とか
の問題が発生しないでもない(かもしれない)という危惧があ
るからです。とりあえず、試作段階ではいろいろやってみまし
ょうか? ご指摘ください。


>>*あと、TAKAさんのマクロの中で、INIファイルの置き場を原典の「RED」
>>フォルダから「macro」フォルダに変更しようと思いますが、

>「macro」フォルダに変更してもらったのでかまわないと思います。
>INIファイルの名称も変えたほうがいいと思います。
>あっ、インターフェイス部分も削除してもらったほうがいいと思い
>ます。

 再度、原稿案をアップしてみます。

>まだ、「REDライク Ver1.11」を公開出来ていない状態です。

 ホント、忙しい中、手を煩わせてしまって、すいませんです。


[ ]
RE:00237 秀丸Q&A集原稿緊急募集No.00240
TAKA さん 98/09/21 23:18
 
> 了解しました。ニフティでのTAKAさんの発言をベースにして、
>一度、原稿にしてみます。その修正というか手直しをお願いす
>るという形でしたらいかがでしょう?

おそらく、完璧なものが出来ていると思うので、手直しするような
ところはほとんどないと思いますが、目を通してみます。

原稿をアップしてしばらくしても私がレスをつけていなかったら、
メールを頂けたらと思います。完全に忘れてしまっている証拠です
ので。
勝手言ってすみませんが、よろしくお願いします。

[ ]