ユーザーメニューへの登録数、あるいはキNo.07311
yamashita さん 14/01/08 23:03
 
一つ、実はかなり前から微妙に困っていながら、
自分だけかなと思ってお願いしていないことがあります。
以下のような状況です。

・ctrl-X に、ユーザーメニューを割り当てています。
・このメニューには非常に多数の項目がありまして、25項目あります。
・もうちょい増やそうと思ったのですが、増やせませんでした。
 たぶん、項目の最大数が25とかなんじゃないかと。
・なので、ctrl-X にユーザーメニューを割り当てるのをやめて、
 ctrl-X.mac みたいなメニューマクロを作り、
 ctrl-X には、ctrl-X.mac を割り当てようとしました。
・ctrl-X.mac はほとんど完成したのですが、
 現状で ctrl-X に割り当てている機能の一部は、
 マクロでは実現できないことがわかりました。
 以下の項目です。
  ・キーボードマクロ記録開始・記録終了
  ・キーボードマクロ再生
ここで行き詰まっています。

誤魔化しながら使ってるのですが、ちょっと辛くなってきています。

対策A:
 ユーザーメニューへの登録可能数を増やして頂く
 私の状況では、30もあれば大丈夫だと思います。
対策B:
 「キーボードマクロ記録開始・記録終了」
 「キーボードマクロ再生」のマクロを作成して頂く

のどちらかをお願いできないでしょうか。。。

どちらでもいいのであれば、実は「対策B」の方が嬉しいです。
ユーザーメニューは変更に手間が掛かりますが、
ctrl-X.mac は一度作ってしまえば後の変更は楽だからです。

ご検討頂けると助かります。

[ ]
RE:07311 ユーザーメニューへの登録数、あNo.07312
いいじま さん 14/01/08 23:45
 
はじめまして。秀丸ユーザのいいじまと申します。

> ・ctrl-X に、ユーザーメニューを割り当てています。
> ・このメニューには非常に多数の項目がありまして、25項目あります。
> ・もうちょい増やそうと思ったのですが、増やせませんでした。
...
>  現状で ctrl-X に割り当てている機能の一部は、
>  マクロでは実現できないことがわかりました。
>  以下の項目です。
>   ・キーボードマクロ記録開始・記録終了
>   ・キーボードマクロ再生



最終回答になっていなくてすみませんが、Control+Xにはユーザメニューを
割り当てて、使用頻度の低いものをサブメニュー(ユーザメニューでも
マクロでも)に押し出す、というのではいかがでしょうか。

たぶんEmacs風にControl+Xに色々集約しようという意図だと思いますが、
もしそうであれば記録開始・終了はControl+Xのあとに1文字(具体的な
キーは忘れました^^…「(」「)」「e」だったかな?)ですから、
メニューに入れられると思います。
それで、Control+Enterとかをサブメニューに移動、と。

[ ]
RE:07312 ユーザーメニューへの登録数、あNo.07313
いいじま さん 14/01/08 23:47
 
いいじまです。失礼。

> それで、Control+Enterとかをサブメニューに移動、と。

これは Control+X → (Controlを離して)Enter ですね。

[ ]
RE:07311 ユーザーメニューへの登録数、あNo.07314
Iranoan さん 14/01/08 23:50
 
 yamashita さん今日は、Iranoan です。
> 対策B:
>  「キーボードマクロ記録開始・記録終了」
>  「キーボードマクロ再生」のマクロを作成して頂く
 何か問題があるかも知れませんが、sendmessage() 関数で代用してはどうで
しょう。
 第三パラメータが、
キーボードマクロ記録開始・記録終了    58
キーボードマクロ再生                  60
の様なので、前者なら次の様になります。
//------------------------------------------------------------
#ret = sendmessage(hidemaruhandle(0),0x0111, 58,0);

[ ]
RE:07314 ユーザーメニューへの登録数、あNo.07315
いいじま さん 14/01/08 23:55
 
いいじまです。

勝手に部外者で盛り上がっていて申し訳ありません。

>  何か問題があるかも知れませんが、sendmessage() 関数で
> 代用してはどうでしょう。

postmessage() はないんですね…内部動作がWin32 APIのSendMessage()
そのままだったらちょっと怖いです^^

[ ]
RE:07315 ユーザーメニューへの登録数、あNo.07319
秀丸担当 さん 14/01/09 09:56
 

sendmessageでやるのは、いいじまさんが危惧されている通り、posemessageでは
なくて危険だと思います。

もしマクロでできるようにしたとしても、キー操作の終了に関して、終了させる
ために「記録中にメニュー用マクロを呼び出す」という操作が記録中に呼び出さ
れてしまうことになるので、よくわからないことになってしまうと思います。

ユーザーメニューの上限は昔からの互換性の都合もあって25個が上限になって
います。
ユーザーメニューの中に別のユーザーメニューを追加しておくと、それがサブメ
ニューになって多く使えることになりますが、そういう方法ではどうでしょうか。
例えばユーザーメニュー1に24個登録して、残りの1つはユーザーメニュー2を登
録すると、合わせて49個使えることになります。

[ ]
RE:07319 ユーザーメニューへの登録数、あNo.07321
yamashita さん 14/01/09 10:29
 
いいじまさん、Iranoanさん、いろいろとありがとうございます。

ご推察の通り、ctrl-X は emacs風キーバインディングの一貫です。

sendmessage() で代用する案、ありがとうございます。
これについては、秀丸担当さんのご意見を伺いたいと・・・と書いていたら、
ご回答がありました。危ないんですか。

25個を増やすのは厳しそうですね。
うーむ。手元でどうにかすることを考えます。


ちなみに・・・もし可能であれば、sendmessage() がどんな感じに危ない
のかを後学のために、もうちょい教えて頂けますでしょうか。
プロセス間でシグナルを送って、とかはちょっとやったことがありますが、
何が危ないのかなどの嗅覚は私にはなさそうです。


ところで、これは単に私が知らなかっただけなのかも知れませんが、
'#' を 'shift-3' でタイプするキーボードを使っていると、
ユーザーメニューへのキー登録において、
'3' と '#' を使い分けることはできないんですね。
つまり、ctrl-X にユーザーメニューを割り当て、
そのユーザーメニューの 3 に機能を割り当てていると、
その機能は、ctrl-X 3 でも、ctrl-X # でも実行されます。

今まで気がつきませんでした。
これは仕様ですか?

今のところ私はこの制限によって困っていることはありません。

[ ]
RE:07321 ユーザーメニューへの登録数、あNo.07323
秀丸担当 さん 14/01/09 15:17
 

sendmessageはメッセージを送ってから返るまで、メッセージの処理が完了する
まで呼び元が待つことになるので、マクロが終了しないままコマンドを実行する
ことになります。
マクロ実行中のキー操作の記録と再生は想定されていないので、不都合が発生す
る恐れがあります。

もしPostMessage相当のようなメッセージキューに投げておいてすぐマクロは終
了し、マクロ終了後にキューから拾ってコマンドが実行されることができるとし
たら、影響は少ないということになります。
(厳密にはマクロ実行中もメッセージキューを拾うことがあるので必ずしも大丈
夫とは言い切れないですが)

メニューでShift+3で「#」相当のキーができないのは、Windowsの標準的なメニ
ューを使っているに過ぎなくて、現状では仕様ということになります。
メニューを自前で処理したりすればなんとかできる可能性はあると思います。
そういう使い方もできたらいいということで今後の参考にさせていただきます。

[ ]
RE:07323 ユーザーメニューへの登録数、あNo.07324
yamashita さん 14/01/09 16:31
 
sendmessage 周辺の事情、ありがとうございました。


"3" と "#" の件は、(今のところ)ちょっと聞いてみただけですので、
仕様と言うことで了解しました。

[ ]