Win32-Mechanize-NotepadPlusPlus
view release on metacpan or search on metacpan
lib/Win32/Mechanize/NotepadPlusPlus/Notepad.pm view on Meta::CPAN
notepad->getMainMenuHandle();
Gets the handle for the main Notepad++ application menu (which contains File, Edit, Search, ...).
=cut
sub getMainMenuHandle {
my $self = shift;
return $self->SendMessage( $NPPMSG{NPPM_GETMENUHANDLE} , 1, 0);
# NPPM_GETMENUHANDLE
}
=item getPluginMenuHandle
notepad->getPluginMenuHandle();
Gets the handle for the Plugins menu.
=cut
sub getPluginMenuHandle {
my $self = shift;
return $self->SendMessage( $NPPMSG{NPPM_GETMENUHANDLE} , 0, 0);
# NPPM_GETMENUHANDLE
}
=item menuCommand
notepad->menuCommand($menuCommand);
Runs a Notepad++ menu command. Use the MENUCOMMAND values from the C<%NPPIDM> hash (described below), or integers directly from the nativeLang.xml file, or the string name from the hash.
=cut
sub menuCommand {
my $self = shift;
my $menuCmdId = shift;
$menuCmdId = $NPPIDM{$menuCmdId} if exists $NPPIDM{$menuCmdId}; # allow named command string, or the actual ID
return $self->SendMessage( $NPPMSG{NPPM_MENUCOMMAND} , 0 , $menuCmdId );
# NPPM_MENUCOMMAND
}
=item runMenuCommand
notepad->runMenuCommand(@menuNames);
notepad->runMenuCommand(@menuNames, { refreshCache => $value } );
Runs a command from the menus. For built-in menus use C<notepad-E<gt>menuCommand()>, for non built-in menus (e.g. TextFX and macros youâve defined), use C<notepad-E<gt>runMenuCommand(menuName, menuOption)>. For other plugin commands (in the plugin ...
Menus are searched for the text, and when found, the internal ID of the menu command is cached. When runMenuCommand is called, the cache is first checked if it holds the internal ID for the given menuName and menuOption. If it does, it simply uses th...
C<@menuNames> is a one-or-more element list of strings; each string can either be a name from the menu hierarchy (either a menu name or a command name) or a pipe-separated string with multiple names. See the example below.
Returns:
True if the menu command was found, otherwise False
e.g.:
notepad()->runMenuCommand('Tools', 'SHA-256', 'Generate from selection into clipboard');
notepad()->runMenuCommand('Tools', 'SHA-256 | Generate from selection into clipboard');
notepad()->runMenuCommand('Tools | SHA-256', 'Generate from selection into clipboard');
notepad()->runMenuCommand('Tools | SHA-256 | Generate from selection into clipboard');
notepad()->runMenuCommand('Macro', 'Trim Trailing Space and Save', { refreshCache => 1 });
=cut
my %cacheMenuCommands;
sub runMenuCommand {
my $self = shift;
# 2019-Oct-14: see debug\menuNav.pl for my attempt to find a specific menu; I will need to add caching here, as well as add test coverage...
# It appears 'menuOption' was meant to be a submenu item; in which case, I might want to collapse it down, or otherwise determine whether the third argument is passed or not
# https://github.com/bruderstein/PythonScript/blob/1d9230ffcb2c110918c1c9d36176bcce0a6572b6/PythonScript/src/NotepadPlusWrapper.cpp#L865
#printf STDERR "\n__%04d__:runMenuCommand(%s)\n", __LINE__, join ", ", map { defined $_ ? qq('$_') : '<undef>'} @_;
my %opts = ();
%opts = %{pop(@_)} if ref($_[-1]) and UNIVERSAL::isa($_[-1],'HASH');
$opts{refreshCache} = 0 unless exists $opts{refreshCache};
#printf STDERR "\n__%04d__:runMenuCommand(%s, {refreshCache => %s})\n", __LINE__, join(", ", map { defined $_ ? qq('$_') : '<undef>'} @_), $opts{refreshCache};
## printf STDERR "\n__%04d__:\tcacheMenuCommands = (%s\n\t\t)\n", __LINE__, join("\n\t\t\t", '', map { "'$_' => '$cacheMenuCommands{$_}'" } keys %cacheMenuCommands);
my $cacheKey = undef;
my $action;
if(!$opts{refreshCache}) {
$cacheKey = join ' | ', @_;
$action = $cacheMenuCommands{$cacheKey} if exists $cacheMenuCommands{$cacheKey};
}
#printf STDERR "__%04d__:\tcacheKey = '%s'\n", __LINE__, $cacheKey // '<undef>';
$action //= _findActionInMenu( $self->{_menuID} , @_ );
#printf STDERR "__%04d__:\taction(%s) = '%s'\n", __LINE__, $self->{_menuID} // '<undef>', $action // '<undef>';
return undef unless defined $action; # pass the problem up the chain
$cacheMenuCommands{$cacheKey} = $action if defined($cacheKey) and defined $action;
# 2019-Oct-15: I just realized I don't know how to run the menu item
# oh, PythonScript source code implies it's SendMessage(m_nppHandle, WM_COMMAND, commandID, 0);
#define WM_COMMAND 0x0111
$NPPMSG{WM_COMMAND} = Win32::GuiTest::WM_COMMAND unless exists $NPPMSG{WM_COMMAND};
return $self->SendMessage( $NPPMSG{WM_COMMAND} , $action, 0);
#exit https://stackoverflow.com/questions/18589385/retrieve-list-of-menu-items-in-windows-in-c
}
=item runPluginCommand
notepad->runPluginCommand($pluginName, $menuOption, $refreshCache);
notepad->runPluginCommand($pluginName, $menuOption);
Runs a command from the plugin menu. Use to run direct commands from the Plugins menu. To call TextFX or other menu functions, either use C<notepad-E<gt>menuCommand(menuCommand)> (for Notepad++ menu commands), or C<notepad-E<gt>runMenuCommand(menuNam...
Note that menuOption can be a submenu in a pluginâs menu. So:
notepad->runPluginCommand('Python Script', 'demo script');
Could run a script called âdemo scriptâ from the Scripts submenu of Python Script.
Menus are searched for the text, and when found, the internal ID of the menu command is cached. When runPluginCommand is called, the cache is first checked if it holds the internal ID for the given menuName and menuOption. If it does, it simply uses ...
( run in 0.629 second using v1.01-cache-2.11-cpan-f03e8824b8d )