The desired behavior can be scripted if one wants to use a plugin (PythonScript) to achieve the goal.
I call the script FindNextClosesFindWindow.py and here is its listing:
# -*- coding: utf-8 -*-
from __future__ import print_function
# see https://community.notepad-plus-plus.org/topic/19844/setting-to-close-find-window-after-initiating-search
from Npp import *
import platform
from ctypes import (WinDLL, WINFUNCTYPE)
from ctypes.wintypes import (HWND, UINT, INT, WPARAM, LPARAM)
#-------------------------------------------------------------------------------
user32 = WinDLL('user32')
GWL_WNDPROC = -4 # used to set a new address for the window procedure
LRESULT = LPARAM
WndProcType = WINFUNCTYPE(
LRESULT, # return type
HWND, UINT, WPARAM, LPARAM # function arguments
)
running_32bit = platform.architecture()[0] == '32bit'
SetWindowLong = user32.SetWindowLongW if running_32bit else user32.SetWindowLongPtrW
SetWindowLong.restype = WndProcType
SetWindowLong.argtypes = [ HWND, INT, WndProcType ]
SendMessageW = user32.SendMessageW
SendMessageW.restype = LRESULT
SendMessageW.argtypes = [ HWND, UINT, WPARAM, LPARAM ]
WM_COMMAND = 0x111
WM_CLOSE = 0x10
IDOK = 1 # 'Find Next' button in Find dialog
# for the following see https://github.com/notepad-plus-plus/notepad-plus-plus/blob/3c9d58176b0fd890d26e96d0208d2d981f1544e4/PowerEditor/src/ScitillaComponent/FindReplaceDlg_rc.h#L1
IDC_FINDNEXT = 1723 # 'Find down-arrow' button in Find dialog
IDC_FINDPREV = 1721 # 'Find up-arrow' button in Find dialog
#-------------------------------------------------------------------------------
class FNCFW(object):
def __init__(self):
for try_count in (1, 2):
if try_count == 2: notepad.menuCommand(MENUCOMMAND.SEARCH_FIND)
for find_window_tab_caption in [ u'Find', u'Replace', u'Find in Files', u'Find in Projects', u'Mark' ]:
self.find_window_hwnd = user32.FindWindowExW(None, None, u'#32770', find_window_tab_caption)
if self.find_window_hwnd:
self.new_find_wnd_proc_hook_for_SetWindowLong = WndProcType(self.new_find_wnd_proc_hook)
self.orig_find_wnd_proc = SetWindowLong(self.find_window_hwnd, GWL_WNDPROC, self.new_find_wnd_proc_hook_for_SetWindowLong)
if try_count == 2: self.close_find_window()
return
def new_find_wnd_proc_hook(self, hwnd, msg, wParam, lParam):
orig_wnd_proc_ret_val = self.orig_find_wnd_proc(hwnd, msg, wParam, lParam)
if msg == WM_COMMAND and wParam in [ IDC_FINDNEXT, IDC_FINDPREV, IDOK ]: self.close_find_window()
return orig_wnd_proc_ret_val
def close_find_window(self): SendMessageW(self.find_window_hwnd, WM_CLOSE, 0, 0)
#-------------------------------------------------------------------------------
if __name__ == '__main__':
try:
fncfw
except NameError:
fncfw = FNCFW()
It can be set up in startup.py to run automatically when Notepad++ starts via these two lines:
import FindNextClosesFindWindow
fncfw = FindNextClosesFindWindow.FNCFW()