メモ帳++用のJavaScript

こんにちはブレイブマン



本日、メモ帳++のプラグインを共有することにしました。これにより、JavaScriptを使用してテキストを使用したいくつかのアクションを自動化できます。 だけでなく。



アイデアの誕生



Notepad ++を発見してから、かなりの時間が経過しました。 自宅でも職場でも使用しています。 ファイルを定期的に処理する必要がある場合があり、ほとんどの場合、正規表現で十分です。 しかし、もう少しロジックを一気に置き換えたり、何かを計算したりしたい場合があります。 完全な幸福のために、VBAは十分ではありません:-)。

しばらく検索したところ、「シンプルスクリプト」というプラグインが見つかりました。 特定の関数セットを使用して、テキストを順番に処理できます。 一般に、このスクリプトは単純すぎて、当時の私の小さなニーズを原則的に満たすことができませんでした。 「シンプルなスクリプト」との友情

起こらなかった。



勤務中、Microsoft Windows Scriptに出会い、XMLファイルの生成と処理を自動化しました。 ドキュメントを読んだ後、アプリケーションにねじ込むことができることがわかりました。 インターネットを検索して、アプリケーションに実装する詳細情報と経験を探した後、RSDN.ruで完全な例を見つけました。



Notepad ++で完全なJavaScriptが必要であり、これが可能であることは明らかでした。



実装



ビジネスを始めようとする多くの試みは失敗しました。 自宅のコンピューターにATLがないこと、およびこのライブラリーを扱うための欲求と時間がないことにより、開始のための比較的大きなしきい値が作成されました。 しかし、次の襲撃に備えて、2つの重要な記事に出くわしました。ATLのないCOMスクリプトの使用です。 これら2つの記事を使用して、ATLを使用せずにRSDN.ruの例を修正しました。 最初のプロトタイプが機能し始めたとき、私の喜びは際限がありませんでした。



すぐに、私は最初のアイデアに気付きました-選択された、またはクリップボードにコピーされたJavaScriptコードの実行。 次に、このコードをメニュー項目に掛けたいと思いました。 少し考えて、ウィンドウの機能を変更したので、Nppのメインメニューになんとか入り込みました。 メニューを操作する機能により、新しいプラグインの範囲が拡張されました(以下を参照)。 メニューの登場により、コンテキスト依存にしたかったのです。 たとえば、ファイルからファイルに切り替えるときに[de]特定のメニュー項目をアクティブにします。 そのため、イベントハンドラーをハングアップする機会がありました。



プラグインの使用例を準備することで、設定の読み取りと保存の基礎を築きました。



使用する



ああ、おそらく私の話であなたにうんざりしています! 練習に移りましょう。



JavaScriptのグローバルスコープでは、Editorオブジェクトが使用可能です。 プロパティとメソッドへのアクセスも、名前を指定せずに可能です。

/* Properties of Editor */ /* read only */ firstView; // a View object currentView;// a View object secondView;// a View object clipBoard; langs; // Array of language names pluginConfigDir; nppDir; /* read write, bool */ tabBarHidden; toolBarHidden; menuHidden; statusBarHidden; /* Methods */ alert(/**String*/value); saveAll(); open(/**String*/value); addMenu(/**String*/ text); // returns a Menu object decodeFrom(/** Number*/ codepage, /**String*/ value); encodeTo(/** Number*/ codepage, /**String*/ value); runMenuCmd(/** Number*/ cmd); // Runs a standart Menu command (see MenuCmds.js) setListener(/** Object */ cfg); // see GlobalListener in start.js addSystemHotKey(/** Object */ cfg); // adds system hotkey (see example in run.js)
      
      





テキストエディターで作業するために、エディターは[firs | current | second]ビューのプロパティを提供します。

 /* Properties of View */ /* read write*/ text; file; // number of current file selection; // currently selected text codepage; // Number of current codepage lang; // Number of current language (see Editor.langs) line; // Number of current line of text pos; // Cursor position column; // Cursor position from line begin anchor; // Helps to set a selection. Selection is text in interval [anchor, pos] /* read only */ files; // Array of strings
      
      





メインメニューに追加するには、Editor.addMenu( "Your Sub menu")を呼び出す必要があります。 メインメニューに要素を直接追加することはできません

提供されます。

 /* Properties of Menu */ /* read write */ text; checked; disabled; /* Methods */ addMenu(/*String*/ text); // adds and returns next submenu addMenuItem(/*Object*/cfg); // adds and returns menu item /* Properties of MenuItem */ /* read write */ text; checked; disabled; /* Methods */ remove();
      
      





シードについては、小さな例(749バイトのみ)を指定することにしました。

 var xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); if (xmlHttp){ //   var habrMenu = Editor.addMenu(""); xmlHttp.open('GET', 'http://habrahabr.ru/rss/1c9d5ed4f0953ded81510256ed34c9be/', true); xmlHttp.onreadystatechange = function () { if (xmlHttp.readyState == 4 && xmlHttp.responseXML) { var titles = xmlHttp.responseXML.selectNodes("/rss/channel/item/title"); for(var i=0, c=titles.length; i<c; i++){ //      RSS    habrMenu.addItem({ text: titles[i].text, //   link: titles[i].selectSingleNode("../link").text, //      cmd:function(){ //        var shell = new ActiveXObject("WScript.Shell"); if (shell && this.link){ shell.run(this.link); //     } }}); } } }; xmlHttp.send(null); }
      
      





この例は、ActiveXを使用してXMLとシェルを操作するだけでなく、プラグインの機能も示しています。

www.softwarecanoe.de/pic/nppscripting.habr.png



その他のオプションについては、includesフォルダーに含まれるスクリプトを参照してください。



いくつかのリンク:

Google Codeのプロジェクトページ、

Microsoft Windowsスクリプト



ハッピースクリプト!



UPDchikuyonokの努力のおかげでエラーが発見され、Zen CodingはNotepad ++に適合しました!!!

エラーはすでに修正されています。



UPD 2t0Hの努力のおかげで 、別の間違いが発見されました。 非表示のメインメニューに新しいサブメニューは追加されませんでした。

エラーはすでに修正されています。



UPD 3新しいバージョンとそれに対応するAPI 。 プラグインはLUAでのプログラミング用に同じ名前で既に存在していたため、プラグインの名前を変更する必要がありました。 したがって、プラグインの以前のバージョン(NppScripting.dllおよびNppScriptingフォルダー)をアンインストールすることを忘れないでください。



All Articles