NAME

Win32::Mechanize::NotepadPlusPlus::Notepad::Messages - Define values for using messages, notifications, and their arguments

SYNOPSIS

use Win32::Mechanize::NotepadPlusPlus ':vars';
print "$_\n" for sort { $NPPMSG{$a} <=> $NPPMSG{$b} } keys %NPPMSG;             # prints all message keys in numerical order

DESCRIPTION

Notepad++'s Plugin Communication system defines a set of messages that applications (either plugins embedded in Notepad++, or external programs) can use for communicating with (and thus controlling) Notepad++.

The hashes in Win32::Mechanize::NotepadPlusPlus::Notepad::Messages give named access to the underlying messages, as well as named versions of the constants used as arguments for those messages.

MESSAGES

%NPPMSG

Most of the Notepad++ Messages are already implemented in the Win32::Mechanize::NotepadPlusPlus::Notepad interface, and under normal circumstances, the end-user should never need to access this %NPPMSG hash directly.

However, if you have a reason to use notepad->SendMessage directly, you can use the values from this hash. Usually, this would only be done if you want a unique wrapper around the message, or want to implement a new or unimplemented message.

As an example of using th %NPPMSG hash, this code replicates notepad->getNppVersion behavior:

my $nppv = notepad->SendMessage( $NPPMSG{NPPM_GETNPPVERSION}, 0, 0);
print "npp v", join('.', $v>>16, split//,($v&0xFFFF)), "\n";
DEPRECATED %nppm

Deprecated: This variable has been deleted. If you used it before, please replace with %NPPMSG or the other appropriate hash.

%VIEW

There are two groups of methods that access the views.

The first is getNumberOpenFiles(), which uses three of the %VIEW keys to count the number of files open in the specified view.

Key             | Value | Description
----------------+-------+------------------------------
ALL_OPEN_FILES  | 0     | Total of files in both views
PRIMARY_VIEW    | 1     | Only the files in the primary view (usually the left view: editor1)
SECOND_VIEW     | 2     | Only the files in the second view (usually the right view: editor2)

The second group are the buffer-related methods.

Key             | Value | Description
----------------+-------+------------------------------
MAIN_VIEW       | 0     | Access the main view (usually the left view: editor1)
SUB_VIEW        | 1     | Access the sub view (usually the right view: editor2)

Yes, the two groups have an off-by-one. That's the way the underlying Notepad++ code, and thus the Plugin Interface, was designed.

%MODELESS
TODO: issue #18

These would be used by the $NPPMSG{NPPM_MODELESSDIALOG} message. However, registerModelessDialog() has not yet been implemented.

Key                     | Description
------------------------|------------
MODELESSDIALOGADD       | Registers a dialog's hWnd
MODELESSDIALOGREMOVE    | Un-registers a dialog's hWnd
%STATUSBAR

These are be used by the setStatusBar() method for choosing which section of the status bar to change.

Key                     |   | Description
------------------------+---+-----------------
STATUSBAR_DOC_TYPE      | 0 | Document's syntax lexer (language)
STATUSBAR_DOC_SIZE      | 1 | File size
STATUSBAR_CUR_POS       | 2 | Current cursor position
STATUSBAR_EOF_FORMAT    | 3 | EOL (End-Of-Line) format
STATUSBAR_UNICODE_TYPE  | 4 | Encoding
STATUSBAR_TYPING_MODE   | 5 | Insert (INS) or Overwrite (OVR)
%MENUHANDLE

Used internally by getMainMenuHandle() and getPluginMenuHandle() to return handles to the specified menus.

Key             |   | Description
----------------+---+-----------------
NPPMAINMENU     | 1 | Main menu (contains File, Edit, ...)
NPPPLUGINMENU   | 0 | Plugins menu (a submenu of the Main menu)
%INTERNALVAR

Pass these to getNppDir() to access the internal variables described in the Macros section of the official docs.

Key                 | Description                               | Example
--------------------+-------------------------------------------+----------------------------
FULL_CURRENT_PATH   | full path to the active file              | E:\My Web\main\welcome.html
CURRENT_DIRECTORY   | active file’s directory                   | E:\My Web\main
FILE_NAME           | active file’s name                        | welcome.html
NAME_PART           | filename without extension                | welcome
EXT_PART            | extension                                 | html
CURRENT_WORD        | active selection or word under the cursor | text
CURRENT_LINE        | line number of cursor location            | 1
CURRENT_COLUMN      | column number of cursor location          | 5
NPP_DIRECTORY       | notepad++ executable's directory          | c:\Program Files\notepad++
NPP_FULL_FILE_PATH  | full path to the notepad++.exe            | c:\Program Files\notepad++\notepad++.exe
%LANGTYPE

Used by language parser methods.

L_TEXT      : 0  | L_CSS       : 20 | L_AU3           : 40 | L_BAANC         : 60 | L_REGISTRY      : 80 |
L_PHP       : 1  | L_PERL      : 21 | L_CAML          : 41 | L_SREC          : 61 | L_RUST          : 81 |
L_C         : 2  | L_PYTHON    : 22 | L_ADA           : 42 | L_IHEX          : 62 | L_SPICE         : 82 |
L_CPP       : 3  | L_LUA       : 23 | L_VERILOG       : 43 | L_TEHEX         : 63 | L_TXT2TAGS      : 83 |
L_CS        : 4  | L_TEX       : 24 | L_MATLAB        : 44 | L_SWIFT         : 64 | L_VISUALPROLOG  : 84 |
L_OBJC      : 5  | L_FORTRAN   : 25 | L_HASKELL       : 45 | L_ASN1          : 65 | L_EXTERNAL      : 85 |
L_JAVA      : 6  | L_BASH      : 26 | L_INNO          : 46 | L_AVS           : 66 |                 :    |
L_RC        : 7  | L_FLASH     : 27 | L_SEARCHRESULT  : 47 | L_BLITZBASIC    : 67 |                 :    |
L_HTML      : 8  | L_NSIS      : 28 | L_CMAKE         : 48 | L_PUREBASIC     : 68 |                 :    |
L_XML       : 9  | L_TCL       : 29 | L_YAML          : 49 | L_FREEBASIC     : 69 |                 :    |
L_MAKEFILE  : 10 | L_LISP      : 30 | L_COBOL         : 50 | L_CSOUND        : 70 |                 :    |
L_PASCAL    : 11 | L_SCHEME    : 31 | L_GUI4CLI       : 51 | L_ERLANG        : 71 |                 :    |
L_BATCH     : 12 | L_ASM       : 32 | L_D             : 52 | L_ESCRIPT       : 72 |                 :    |
L_INI       : 13 | L_DIFF      : 33 | L_POWERSHELL    : 53 | L_FORTH         : 73 |                 :    |
L_ASCII     : 14 | L_PROPS     : 34 | L_R             : 54 | L_LATEX         : 74 |                 :    |
L_USER      : 15 | L_PS        : 35 | L_JSP           : 55 | L_MMIXAL        : 75 |                 :    |
L_ASP       : 16 | L_RUBY      : 36 | L_COFFEESCRIPT  : 56 | L_NIMROD        : 76 |                 :    |
L_SQL       : 17 | L_SMALLTALK : 37 | L_JSON          : 57 | L_NNCRONTAB     : 77 |                 :    |
L_VB        : 18 | L_VHDL      : 38 | L_JAVASCRIPT    : 58 | L_OSCRIPT       : 78 |                 :    |
L_JS        : 19 | L_KIX       : 39 | L_FORTRAN_77    : 59 | L_REBOL         : 79 |                 :    |
%WINVER

I'm not sure it's really useful, but it's still privided.

print join "\n", map { "$_ => $WINVER{$_}" } sort keys %WINVER;
%WINPLATFORM

I'm not sure it's really useful, but it's still privided.

print join "\n", map { "$_ => $WINPLATFORM{$_}" } sort keys %WINPLATFORM;

NOTIFICATIONS

Not yet used, but the constants are available.

%NOTIFICATION

If you are interested, you can find all the message keys with code like the following:

use Win32::Mechanize::NotepadPlusPlus ':vars';
printf "%-39s => %d\n", $_, $NOTIFICATION{$_} for sort { $NOTIFICATION{$a} <=> $NOTIFICATION{$b} } keys %NOTIFICATION;   # prints all notification keys in numerical order
%DOCSTATUS

Used by the NPPN_READONLYCHANGED notification.

Key                     |   | Description
------------------------+---+-----------------
DOCSTATUS_READONLY      | 1 | The file changed its "is readonly" status
DOCSTATUS_BUFFERDIRTY   | 0 | The file changed its "is modified" status

Underlying the Notepad++ menu system (and any other Win32-API-based application), there are individual command IDs for each menu command. Notepad++ gives accesss through the NPPM_MENUCOMMAND message, and notepad->menuCommand() allows you to activate any menu entry's command by its menu ID.

You can find out the names and values of all the messages using:

use Win32::Mechanize::NotepadPlusPlus ':vars';
printf "%-40s => %s\n", $_, $NPPIDM{$_} for sort keys %NPPIDM;
%NPPIDM
# both of the next two are equivalent to notepad->close(), but using the command ID for File > Close
notepad->menuCommand( $NPPIDM{IDM_FILE_CLOSE} );
notepad->SendMessage( $NPPMSG{NPPM_MENUCOMMAND} , 0 , $NPPIDM{IDM_FILE_CLOSE} );
DEPRECATED %nppidm

Deprecated name for %NPPIDM. This variable no longer exists. If you were using it, replace it with %NPPIDM.

DEPRECATED %ENCODINGKEY

Deprecated: The %ENCODINGKEY hash variable no longer exists. Use "%BUFFERENCODING" for the correct values.

This deprecated hash incorrectly assumed there was a simple numerical offset between the values of notepad->getEncoding and the $NPPIDM{IDM_FORMAT_...} entries in "%NPPIDM".

%BUFFERENCODING

The numerical values from this hash can be passed to notepad->setEncoding to change the encoding of the buffer; the numerical values returned from notepad->getEncoding can be passed as keys for this hash to convert the encoding number back to a string.

Keys or values ending in _BOM indicate the Unicode Byte Order Mark will be included as the first bytes in the saved file.

Key                     | Value         | Description
------------------------+---------------+-----------------
ANSI                    | 0             | 256 codepoints
UTF8_BOM                | 1             | UTF-8 Encoding, using Byte Order Mark (BOM) at beginning of file
UCS2_BE_BOM             | 2             | UCS-2 Big Endian, using Byte Order Mark (BOM) at beginning of file
UCS2_LE_BOM             | 3             | UCS-2 Little Endian, using Byte Order Mark (BOM) at beginning of file
UTF8                    | 4             | UTF-8 Encoding, _not_ using Byte Order Mark (BOM) at beginning of file
------------------------+---------------+-----------------
COOKIE                  | 4             | Alias for UTF8         (name used in PythonScript BUFFERENCODING enum)
uni8Bit                 | 0             | Alias for ANSI         (from enum UniMode in source code)
uniUTF8                 | 1             | Alias for UTF8_BOM     (from enum UniMode in source code)
uni16BE                 | 2             | Alias for UCS2_BE_BOM  (from enum UniMode in source code)
uni16LE                 | 3             | Alias for UCS2_LE_BOM  (from enum UniMode in source code)
uniCookie               | 4             | Alias for UTF8_NO_BOM  (from enum UniMode in source code)
------------------------+---------------+-----------------
0                       | ANSI          | (string)
1                       | UTF8_BOM      | (string)
2                       | UCS2_BE_BOM   | (string)
3                       | UCS2_LE_BOM   | (string)
4                       | UTF8_NO_BOM   | (string)

INSTALLATION

Installed as part of Win32::Mechanize::NotepadPlusPlus

AUTHOR

Peter C. Jones <petercj AT cpan DOT org>

Please report any bugs or feature requests emailing <bug-Win32-Mechanize-NotepadPlusPlus AT rt.cpan.org> or thru the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Win32-Mechanize-NotepadPlusPlus, or thru the repository's interface at https://github.com/pryrt/Win32-Mechanize-NotepadPlusPlus/issues.

COPYRIGHT

Copyright (C) 2019,2020 Peter C. Jones

LICENSE

This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License. See http://dev.perl.org/licenses/ for more information.

2 POD Errors

The following errors were encountered while parsing the POD:

Around line 1020:

'=item' outside of any '=over'

Around line 1079:

You forgot a '=back' before '=head1'