我现在使用记事本++ 几个月了,并且完成了所有设置,但是当我关闭最后一个选项卡时,找不到让 npp 关闭的方法。它总是会启动一个新的空文档。
任何想法如何让 npp 在关闭最后一个文档时关闭?
我现在使用记事本++ 几个月了,并且完成了所有设置,但是当我关闭最后一个选项卡时,找不到让 npp 关闭的方法。它总是会启动一个新的空文档。
任何想法如何让 npp 在关闭最后一个文档时关闭?
Notepad++ 的最新更新包括关闭最后一个选项卡后关闭应用程序的功能。
要更新 Notepad++,请转到 ?>Update Notepad++ 并按照安装向导进行操作。
更新完成后,您将在“设置”>“首选项”菜单中选择“关闭最后一个选项卡时退出”(在选项卡栏输入组下)。
这完全基于 ufo 的代码。只有当您关闭最后一个文档时它才有效,无论它是否是新的,并且它不会冻结 npp。
为简洁起见,这里再次执行以下步骤:
保存并重新启动 Npp 以加载脚本。
from threading import Timer
def shutdownNppOnLastFileClosed(args):
def closeNpp():
notepad.menuCommand(MENUCOMMAND.FILE_EXIT)
files = notepad.getFiles()
if len(files) == 2:
t = Timer(0.1, closeNpp)
t.start()
notepad.callback(shutdownNppOnLastFileClosed, [NOTIFICATION.FILEBEFORECLOSE])
如果你熟悉 Python,你可以试试 N++ 的Python Script插件。您将为文档关闭事件设置回调脚本。在它内部对所有打开的文档进行一些迭代,当只剩下 1 个没有文本时,则终止 N++。
我个人将“Alt + x”键映射到“Exit”Notepad++,这比通常工作的“Alt + F4”更容易掌握。
/编辑
我其实很喜欢你的想法,所以我自己很快就尝试了。花了大约 20 分钟才弄清楚。这是一个完整的解决方案:
def shutdownNppOnLastFileClosed(args):
import os
files = notepad.getFiles()
# there are always at least 2 'buffers' open in N++
if len(files) == 2:
currentBufferID = notepad.getCurrentBufferID()
for (filename, bufferID, index, view) in files:
if os.path.exists(filename):
break
notepad.activateBufferID(bufferID)
if editor.getLength() > 0:
break
# TODO: just to be on the safe side - if we
# reached here, we actually should also check
# if the 2 left empty buffers are not unsaved,
# but I couldn't find a way to do that.
else:
# following 'menuCommand' looks cleaner than
# the 'sys.exit' but it currently deadlocks N++:
#notepad.menuCommand(MENUCOMMAND.FILE_EXIT)
sys.exit(0)
notepad.activateBufferID(currentBufferID)
notepad.callback(shutdownNppOnLastFileClosed, [NOTIFICATION.FILECLOSED])
notepad++ 是一个 MDI 表单应用程序,就像 MS OFFICE 一样,关闭子 MDI 表单不会影响主应用程序,所以,我认为除非你重建 nodepad++ 的源代码,否则我认为这是不知道的。