document.onSave()
Emeditorのマクロなどで、document.onSave や document.onLoad などのイベントを取得することは出来ないのでしょうか?
onSaveがあれば、ドキュメントが保存されたらWebPreviewが更新されるとか。保存と同時に、外部ツールに登録したコンパイルコマンドを実行できるとか、HTML編集ならブラウザをリロードするとか。に応用できそうなんですが。
onLoadがあれば、拡張子毎にマクロ一覧を切り替えるとか、外部ツールのコンパイル&実行設定を拡張子に合わせて表示非表示を切り替えるレジストリ操作ができると思うのですが。。。
将来的には、そのようなイベントも検討したいですね。
ただ、動作保証しませんが、nao4u さんの naoExecMacroOnEvent プラグインを使えば、そのようなこともできるようです。
とりあえず現状はCtrl+Sとかに自作のマクロを割り当てて
document.Savedとかて判断するのはどうでしょうか?
そうなんです。Ctrl+Sでできるんですよね。
ただ、キー割り当てを編集してしまうと、マクロファイルが読み込めないときにエラーがキャッチできない・・・キー割り当てを各設定に何度も書くのは不便じゃないかな。
もしイベントが取得できるとスマートな記述ができるじゃないかと。
Event.js
document.onLoad = function(){ loadBookmark( document.ConfigName ); document.onSave = function (){ Subversion.update( document.Name ); WebPreview.reload(); } } ducument.onKeyPress = function (){ if( autoComplete.Enabled ){ autoComplete.show(); } } }のようにまとめて、一箇所に記述可能になって便利。 イベントが取れたら他にもいろいろ応用で FxのJavaScript実装や,IEのJScript実装のように、onKyePressなどもあればもっと柔軟に対応できるんですよね。 たとえば、マクロを明示的に実行しなくても、キーボードイベントでオートコンプリートができるとか。JS/CSS/HTMLでSnipptsを切り替えるとか。キーボード処理をsleep()で遅延させて、2ストロークキーを実現するとか。。。
過去の議論を読み直していたらこのスレッドを見つけました。私もEmEdtiorがイベント対応するようなことがあったら、細切れにマクロを呼び出すのではなくて、ブラウザのuser.jsのようにマクロのエンジンが常駐してイベントのコールバックが呼ばれるのを待っているような設計が良いです。
参考までに萌ディタがそのような設計になっていて、技術志向の強いユーザーへの人気が高いようです。
https://www.geocities.co.jp/SiliconValley-Oakland/3617/events.html
常駐マクロによるイベント対応が実装された場合、例えば、あとはリストボックスの表示機能がサポートされたらWordComplete相当のものはマクロで実装できますね。
私が公開しているSettingWithoutExtensionプラグイン(#!/usr/bin/perlが先頭にある拡張子なしファイルをPerl設定で開くなど)もマクロで実装できそうです。
他にもまだまだ可能性は広がりそうです。
IE/FireFoxやOperaもuser.jsで拡張できますよね。表示設定とか。
イベント実装は多少パフォーマンスが落ちても便利なので欲しいなと思う。
takuyaさんは書きました: IE/FireFoxやOperaもuser.jsで拡張できますよね。表示設定とか。 イベント実装は多少パフォーマンスが落ちても便利なので欲しいなと思う。イベント実装は、使いこなせる人とそうでない人に分かれそうなので、必ずしもすべての人に利益の無いもののために、全体のパフォーマンスが低下するのは理不尽なので、もしパフォーマンス低下があるなら、オンオフできる選択肢が必要でしょうね。 個人的には、パフォーマンスよりもメモリーリークが気になります。 https://p2b.jp/index.php?UID=1131336575 そして、複数のuser.jsが互いに干渉することの無いようにイベントリスナーを追加できるようなAPIにする必要がありそうです。 https://www.s-memo.net/blog/2007/03/yahoo_uiaddlistener.php あと、実装が適切なものになるように、イベント機能があればどういうことができるのか、実装前にアイデア出しをある程度しておいたほうがよいでしょうね。
秀丸でもOnloadみたいな起動時スクリプトが実装されてるようで、うらやましいなぁと思います。
>実装前にアイデア出しをある程度しておいたほうがよいでしょうね。
そうですね。アイディアが無いとどうしようもない。
https://www37.atwiki.jp/emeditor/pages/37.html
について、イベントやキーイベントが取得できたら実現可能なものがありそうです。
CTRL+ホイールでフォントを大小 #キー&マウスイベント
ファイルから検索でファイルを直接開きたい #検索終了イベント
4回クリックで全選択 #マウスイベント
マクロでキー入力を取得 #キーイベント
ワークスペースの自動保存 #OnSave
個人的には、
保存時にEmFTPでサーバーへファイル転送。
保存時にWebPreviewを更新
保存時にコンパイル
保存時にシンタックスチェック
などが可能になると思います。
現状Ctrl+Sにマクロを割り当てないと出来ないし。
EmFTPもCOMとして自在に使えないので実現できない。
JScriptやVBはユーザーが多いのでより多くの開発者を呼び込む呼び水になればと思うのです。
EmEditorにあって秀丸にない箇所がさらに魅力になって欲しい。
takuyaさんは書きました: CTRL+ホイールでフォントを大小 #キー&マウスイベント ファイルから検索でファイルを直接開きたい #検索終了イベント 4回クリックで全選択 #マウスイベント マクロでキー入力を取得 #キーイベント ワークスペースの自動保存 #OnSave 個人的には、 保存時にEmFTPでサーバーへファイル転送。 保存時にWebPreviewを更新 保存時にコンパイル 保存時にシンタックスチェックなるほど、いろいろと夢は膨らみますね。 私は、<a href="https://emeditor.web.fc2.com/AwEmSoftware.html#SettingWithoutExtension]SettingWithoutExtensionという拡張子のないテキストファイルに対する関連付けを行うプラグインを公開しているのですが、これもマクロで簡単に書けて保守性が高まりそうです。 しかし、あらゆる文脈でエディタとマクロが堅牢に動くまでにはじっくりデバッグが必要かもしれませんね。
takuyaさんは書きました: EmFTPもCOMとして自在に使えないので実現できない。もし、江村さんのほうで、EmEditorも含めてオブジェクトをCOMとしてマシーン内グローバルには公開しないという方針を立てられているのだとしたら、最低限、EmFTPのオブジェクトはEmEditorから利用できるようになっていて欲しいですね。 たとえば、EmFTPバーというプラグインがあって、それは<a href="https://emeditorjp.wpengine.com/modules/newbb/viewtopic.php?topic_id=316&forum=4]マクロにもインターフェースを公開しているなど。
Aye Wongさんは書きました: 過去の議論を読み直していたらこのスレッドを見つけました。私もEmEdtiorがイベント対応するようなことがあったら、細切れにマクロを呼び出すのではなくて、ブラウザのuser.jsのようにマクロのエンジンが常駐してイベントのコールバックが呼ばれるのを待っているような設計が良いです。私もできれば、document.onSave() のように常駐するマクロからイベントを送ることができればいいなと思っていました。でも、EmEditor のマクロは、ユーザー スレッドと同じスレッドで動作しているため、常駐するマクロからのイベントを実装しようとすると、まずマルチスレッドにする必要があり、これを行うには、かなり時間がかかり、Version 7 で行うのは難しいと思います。 EmEditor から細切れにマクロを呼び出す秀丸方式だったら、1 日でできると思います。とりあえず、細切れに呼ぶ方法で実装してから、将来的に document.onSave() のような方式を検討してみましょうか?
Yutakaさんは書きました: 私もできれば、document.onSave() のように常駐するマクロからイベントを送ることができればいいなと思っていました。でも、EmEditor のマクロは、ユーザー スレッドと同じスレッドで動作しているため、常駐するマクロからのイベントを実装しようとすると、まずマルチスレッドにする必要があり、これを行うには、かなり時間がかかり、Version 7 で行うのは難しいと思います。 EmEditor から細切れにマクロを呼び出す秀丸方式だったら、1 日でできると思います。とりあえず、細切れに呼ぶ方法で実装してから、将来的に document.onSave() のような方式を検討してみましょうか?なるほど、常駐マクロの実装は将来のメジャーバージョンアップ以降になりそうですね。他の方々はまた違った意見をお持ちかもしれませんが、私が心配するのは、秀丸方式を一度実装するとそれを利用したマクロが公開されて、廃止できなくなるのではないかということです。 私としましては秀丸方式の実装を見送られて、将来常駐方式を実装していただくことを希望いたします。もちろん他の方々のご意見も参考にしていただければと思います。
秀丸方式を実装した後、将来、常駐方式を実装しても、両方とも併用することは可能ですので、とりあえず秀丸方式を実装することにしました。(beta 21)
ありがとうございます。
このトピックの投稿: 13