一部の古いツールは、外部のテキストエディタで動作するように設計されています。私はこれを次のように行うレガシーツールを使用して立ち往生しています:
私はこのツール(簡単に変更することはできません)をNotepad ++で使用しようとしています。ツールは起動したアプリケーションが閉じるまで一時ファイルのみを監視するため、これに関していくつかの問題が発生しました。 Notepad ++プロセスの新しいインスタンスが起動されると、デフォルトの動作では、すでに開いているNotepad ++のインスタンスでファイルをタブとして開き、新しいプロセスを閉じます。これにより、ツールはエディターがすぐに閉じられたと見なし、実際に行われた編集をすべて見逃します。
-multiInstコマンドライン引数を使用してNotepad ++を常に新しいインスタンスで起動するように強制することで、これを回避できます。タブ間で機能する(インスタンス間では機能しない)いくつかのNotepad ++プラグインも使用しているので、一時ファイルをタブとして開くことができるようにしたいと思います。
誰かが解決策のアイデアを持っていますか? Notepad ++でファイルをタブとして開くことができても、ファイルが開いている間は起動されたプロセスをメモリに保持できれば素晴らしいと思います。これは、タブモデルごとに1つのプロセスに似ていると思いますChrome使用します。バッチファイルなどを介して間接的にNotepad ++を起動することも検討しましたが、いつ検出できるかわかりません。タブ/ファイルはNotepad ++で閉じられました。
ファイルエディションのスパンについては、レガシーアプリケーションに別のプロセスのPIDを提供する必要があります。
残念ながら、私が知っているファイルエディションの終わりを検出するすべての簡単な方法は機能しません-Notepad ++:
したがって、NPPN_FILECLOSED通知を処理するnppプラグインを記述せずに、run_npp_cmd
の下でNotepad ++を起動する以外の解決策は見当たりません。
@echo off
start C:\your\path\to\notepad++.exe %1
echo Do your work and then let me go
pause
レガシーアプリケーションからrun_npp_cmd C:\path\to\your\data.txt
を呼び出すことができ、作業が完了したら、コマンドラインインスタンスを解放します...
概念実証ソリューションを思いついたと思いますが、それは少し複雑で、(現在)Notepad ++でクラッシュを引き起こすため、おそらくまだ実行可能ではありません。他の人が同様の問題の解決を検討しているかもしれないので、とにかくそれを投稿すると思いました。
ベータプラグイン Notepad ++ Python Script は、既存のNotepad ++通知へのフックを含む、Notepad ++でのスクリプトのサポートを追加します。プラグインには、「ATSTARTUP」まで常に実行される起動スクリプトが含まれています。プラグインの設定オプションで「」が選択されています。
これにより、コマンドウィンドウは正常に閉じますが、Notepad ++がロックされます。これはpythonプラグインの問題だと思います。通知コールバックからconsole.run()を呼び出すと問題が発生するようです。コマンドはクラッシュすることなく機能するため、適切にフォーマットされていることがわかります。ユーザーがトリガーしたスクリプトから実行します。このスクリプトはファイルが閉じられるたびに実行され、Notepad ++がハングするため、このソリューションを現在の状態で使用することはお勧めしません
レガシーツールから実行するコマンド:
start /min nppblock.bat
notepadpp_blocker.bat:
@echo off
FOR %%i IN (%1) DO (
set filename=%~nx1
)
title=nppblock_%filename%
echo Waiting for %filename% to be closed in Notepad++
"C:\Program Files (x86)\Notepad++\notepad++.exe" %1
pause
C:\ Program Files(x86)\ Notepad ++\plugins\PythonScript\scripts\startup.pyに追加:
import os.path
def fileBeforeCloseCallback(args):
filename = os.path.basename(notepad.getBufferFilename(args["bufferID"]));
killcmd = 'taskkill /f /fi "WINDOWTITLE eq nppblock_' + filename + '" /im cmd.exe'
console.run(killcmd)
notepad.callback(fileBeforeCloseCallback, [NOTIFICATION.FILEBEFORECLOSE])