PureBasic Forum
http://forums.purebasic.com/english/

Notepad++ plugin
http://forums.purebasic.com/english/viewtopic.php?f=12&t=65680
Page 1 of 1

Author:  eddy [ Wed May 11, 2016 7:14 am ]
Post subject:  Notepad++ plugin

Hi,
Here is my first attempt to create Notepad++ plugin

How to install : copy DLL into plugins folder of notepad++

Code:
;unicode - DLL - compiler x86

Structure NppData
   *_nppHandle
   *_scintillaMainHandle
   *_scintillaSecondHandle
EndStructure                 

Structure ShortcutKey
   _isCtrl.b
   _isAlt.b
   _isShift.b
   _key.i
EndStructure

Structure FuncItem Align 4
   _itemName.s{64}
   *_pFunc
   _cmdID.i
   _init2Check.b
   *_pShortcutKey.ShortcutKey
EndStructure

; ==================================
; 2 MANDATORY DLL PROCEDURES
; ==================================
Declare Test()

ProcedureDLL AttachProcess(Instance)
   ;
   ;<< When Notepad++ is installing this plugin >>
   ; YOUR INIT CODE HERE
   ;
   Global NppData.NppData
   Global PluginName.s="My Custom Plugin Name"
   Global Dim FuncsArray.FuncItem(4)   ;menu with 4 items
   With FuncsArray(0)                  ;1) menu item with shortcut key
      \_itemName="Settings..."
      \_pFunc=@test()
      \_pShortcutKey=AllocateStructure(ShortcutKey)
      \_pShortcutKey\_isCtrl=#True
      \_pShortcutKey\_isShift=#True
      \_pShortcutKey\_isAlt=#True
      \_pShortcutKey\_key=#VK_NEXT
   EndWith                             ;2) menu separator
   With FuncsArray(1)
      \_itemName=""
   EndWith
   With FuncsArray(2)                  ;3) menu item with checked box
      \_itemName="Custom Option 1"
      \_pFunc=@Test()
      \_init2Check=#True
   EndWith
   With FuncsArray(3)                  ;4) menu item with unchecked box
      \_itemName="Custom Option 2"
      \_pFunc=@Test()
      \_init2Check=#False
   EndWith
EndProcedure

ProcedureDLL DetachProcess(Instance)
   ;
   ;<< When Notepad++ is uninstalling this plugin >>
   ; YOUR CLEANUP CODE HERE
   ;
   Protected i
   For i=0 To ArraySize(FuncsArray())
      FreeStructure(FuncsArray(i)\_pShortcutKey)
   Next
EndProcedure

; ==================================
; 5 MANDATORY NOTEPAD++ PROCEDURES
; ==================================

ProcedureCDLL.i isUnicode()
   ProcedureReturn #True
EndProcedure

ProcedureCDLL.s getName()
   ProcedureReturn PluginName
EndProcedure

ProcedureCDLL.i getFuncsArray(*FuncsArraySize.Integer)
   *FuncsArraySize\i=ArraySize(FuncsArray())
   ProcedureReturn @FuncsArray()
EndProcedure

ProcedureCDLL setInfo(*NppHandle, *ScintillaMainHandle, *ScintillaSecondHandle)
   NppData\_nppHandle=*NppHandle
   NppData\_scintillaMainHandle=*ScintillaMainHandle
   NppData\_scintillaSecondHandle=*ScintillaSecondHandle
   ;
   ;<< When Notepad++ info has changed >>
   ; YOUR CODE HERE
   ;
EndProcedure

ProcedureCDLL beNotified(*SCNotification.SCNotification)
   ;
   ;<< When Notepad++ scintilla notification has been received >>
   ; YOUR CODE HERE
   ;
EndProcedure

ProcedureCDLL.i messageProc(Message, wParam, lParam)
   ;
   ;<< When Notepad++ windows message has been received >>
   ; YOUR CODE HERE
   ;
   ProcedureReturn #True
EndProcedure

; ==================================
; YOUR PLUGIN PROCEDURES
; ==================================
Procedure Test()
   MessageRequester("PB Plugin for notepad++", "Test...")
EndProcedure

Author:  eddy [ Thu May 12, 2016 1:07 am ]
Post subject:  Re: Notepad++ plugin

Update
- menu creation

Author:  Tenaja [ Thu May 12, 2016 2:04 am ]
Post subject:  Re: Notepad++ plugin

Thanks for sharing that, eddy. I am going to save it for later...I know a couple years ago I would have appreciated having that available.

Author:  dige [ Thu May 12, 2016 9:04 am ]
Post subject:  Re: Notepad++ plugin

Thank you eddy! Well suited for learning purposes.

Author:  AZJIO [ Thu Feb 14, 2019 7:04 am ]
Post subject:  Re: Notepad++ plugin

how to get #NPPM_GETCURRENTSCINTILLA?
only WM_SIZE (=5) comes to messageProc

Author:  TassyJim [ Thu Feb 14, 2019 7:55 am ]
Post subject:  Re: Notepad++ plugin

I have recently been playing with this plugin so it was easy for me to do a test.

From the NPP source file "Notepad_plus_msgs.h"

I came up with this:
Code:
Protected NPPMSG.l =  #WM_USER + 1000
Protected NPPM_GETCURRENTSCINTILLA.l = NPPMSG + 4
Protected NPPM_GETNBOPENFILES.l = NPPMSG + 7
n =SendMessage_(NppData\_nppHandle, NPPM_GETNBOPENFILES, 0,0)


This test returns the number of open files plus one so I assume that it will correctly return NPPM_GETCURRENTSCINTILLA also.
I used GETNBOPENFILES because it was easy for me to see it working!

(WM_USER = 1024)

Jim

Author:  AZJIO [ Thu Feb 14, 2019 11:10 am ]
Post subject:  Re: Notepad++ plugin

Look here

C++
Code:
static HWND getCurrentScintilla()
{
   int which = 0;
   SendNpp(NPPM_GETCURRENTSCINTILLA, SCI_UNUSED, (LPARAM)&which);
   return (which == 0) ? nppData._scintillaMainHandle : nppData._scintillaSecondHandle;
}


Happened
Code:
Procedure GetCurrentScintilla()
   Protected instance_sci
   SendMessage_(NppData\_nppHandle, #NPPM_GETCURRENTSCINTILLA, 0, @instance_sci)
   MessageRequester("GetCurrentScintilla", Str(instance_sci))
EndProcedure


Code:
Procedure GetCurrentScintilla()
   Protected instance_sci
   SendMessage_(NppData\_nppHandle, #NPPM_GETCURRENTSCINTILLA, 0, @instance_sci)
   If instance_sci
      ProcedureReturn NppData\_scintillaSecondHandle
   Else
      ProcedureReturn NppData\_scintillaMainHandle
   EndIf
EndProcedure

Author:  AZJIO [ Thu Feb 21, 2019 2:43 am ]
Post subject:  Re: Notepad++ plugin

I can not assign hotkeys

Code:
Structure ShortcutKey Align #PB_Structure_AlignC
   _isCtrl.b
   _isAlt.b
   _isShift.b
   _key.u ;i
EndStructure
.....
\_pShortcutKey=AllocateStructure(ShortcutKey)
\_pShortcutKey\_isCtrl=#True
\_pShortcutKey\_isShift=#False
\_pShortcutKey\_isAlt=#True
; \_pShortcutKey\_key=#VK_NEXT
\_pShortcutKey\_key=$44


This is in the official template.
Code:
struct ShortcutKey
{
   bool _isCtrl;
   bool _isAlt;
   bool _isShift;
   UCHAR _key;
};
.....
bool setCommand(size_t index, TCHAR *cmdName, PFUNCPLUGINCMD pFunc, ShortcutKey *sk = NULL, bool check0nInit = false);
.....
 funcItem[index]._pShKey = sk;

Maybe the problem is in the size of the structure?

Author:  TassyJim [ Thu Feb 21, 2019 5:20 am ]
Post subject:  Re: Notepad++ plugin

Try
Code:
Structure ShortcutKey
  _isCtrl.b
  _isAlt.b
  _isShift.b
  _key.a
EndStructure


The value for the key field is the #VK_ code so for F10 you need 121 etc

I needed to make one other change depending on whether I am compiling for 64 bit or 32 bit.
Code:
CompilerIf #PB_Compiler_Processor = #PB_Processor_x64
  ProcedureCDLL setInfo(*Npp.NppData)
    NppData\_nppHandle=*Npp\_NppHandle
    NppData\_scintillaMainHandle=*Npp\_ScintillaMainHandle
    NppData\_scintillaSecondHandle=*Npp\_ScintillaSecondHandle
    ;MessageRequester("DLL",Str(NppData\_scintillaMainHandle))
    ;
    ;<< When Notepad++ info has changed >>
    ; YOUR CODE HERE
    ;
  EndProcedure
CompilerElse
  ProcedureCDLL setInfo(*NppHandle, *ScintillaMainHandle, *ScintillaSecondHandle)
    NppData\_nppHandle=*NppHandle
    NppData\_scintillaMainHandle=*ScintillaMainHandle
    NppData\_scintillaSecondHandle=*ScintillaSecondHandle
    ; MessageRequester("DLL",Str(*ScintillaMainHandle)+" "+Str(NppData\_scintillaMainHandle))
    ;
    ;<< When Notepad++ info has changed >>
    ; YOUR CODE HERE
    ;
  EndProcedure
 
CompilerEndIf

I am sure that I haven't done it correctly but it works for me so I am happy.

Jim

Author:  AZJIO [ Thu Feb 21, 2019 6:14 am ]
Post subject:  Re: Notepad++ plugin

TassyJim wrote:
The value for the key field is the #VK_ code so for F10 you need 121 etc

I needed to make one other change depending on whether I am compiling for 64 bit or 32 bit.

Code:
CompilerIf #PB_Compiler_Processor = #PB_Processor_x86
   ProcedureCDLL setInfo(*NppHandle, *ScintillaMainHandle, *ScintillaSecondHandle)
      NppData\_nppHandle=*NppHandle
      NppData\_scintillaMainHandle=*ScintillaMainHandle
      NppData\_scintillaSecondHandle=*ScintillaSecondHandle
   EndProcedure
CompilerElse
   ProcedureCDLL setInfo(*Npp.NppData)
      CopyStructure(*Npp, NppData, NppData)
   EndProcedure
CompilerEndIf

Code:
#VK_F10

Author:  AZJIO [ Sun Apr 07, 2019 1:46 pm ]
Post subject:  Re: Notepad++ plugin

NNP_Const.pb
Code:
; notepad-plus-plus-7.6.3
; Notepad_plus_msgs.h
; menuCmdID.h

#ALL_OPEN_FILES = 0
#PRIMARY_VIEW = 1
#SECOND_VIEW = 2
#MODELESSDIALOGADD = 0
#MODELESSDIALOGREMOVE = 1
#MAIN_VIEW = 0
#SUB_VIEW = 1
#STATUSBAR_DOC_TYPE = 0
#STATUSBAR_DOC_SIZE = 1
#STATUSBAR_CUR_POS = 2
#STATUSBAR_EOF_FORMAT = 3
#STATUSBAR_UNICODE_TYPE = 4
#STATUSBAR_TYPING_MODE = 5
#NPPPLUGINMENU = 0
#NPPMAINMENU = 1
#DOCSTATUS_READONLY = 1
#DOCSTATUS_BUFFERDIRTY = 2

#VAR_NOT_RECOGNIZED = 0
#FULL_CURRENT_PATH = 1
#CURRENT_DIRECTORY = 2
#FILE_NAME = 3
#NAME_PART = 4
#EXT_PART = 5
#CURRENT_WORD = 6
#NPP_DIRECTORY = 7
#CURRENT_LINE = 8
#CURRENT_COLUMN = 9
#NPP_FULL_FILE_PATH = 10
#GETFILENAMEATCURSOR = 11

#IDM_FILE_PRINTNOW = 1001
#IDM_FILEMENU_EXISTCMDPOSITION = 22
#IDM_VIEW_GOTO_ANOTHER_VIEW = 10001
#IDM_VIEW_CLONE_TO_ANOTHER_VIEW = 10002
#IDM_VIEW_GOTO_NEW_INSTANCE = 10003
#IDM_VIEW_LOAD_IN_NEW_INSTANCE = 10004
; #IDM_FORMAT_CONVERT = 200

#WM_USER = 1024
#NPPMSG = #WM_USER + 1000

#NPPM_GETCURRENTSCINTILLA = (#NPPMSG + 4)
#NPPM_GETCURRENTLANGTYPE = (#NPPMSG + 5)
#NPPM_SETCURRENTLANGTYPE = (#NPPMSG + 6)
#NPPM_GETNBOPENFILES = (#NPPMSG + 7)
#NPPM_GETOPENFILENAMES = (#NPPMSG + 8)
#NPPM_MODELESSDIALOG = (#NPPMSG + 12)
#NPPM_GETNBSESSIONFILES = (#NPPMSG + 13)
#NPPM_GETSESSIONFILES = (#NPPMSG + 14)
#NPPM_SAVESESSION = (#NPPMSG + 15)
#NPPM_SAVECURRENTSESSION = (#NPPMSG + 16)
#NPPM_GETOPENFILENAMESPRIMARY = (#NPPMSG + 17)
#NPPM_GETOPENFILENAMESSECOND = (#NPPMSG + 18)
#NPPM_CREATESCINTILLAHANDLE = (#NPPMSG + 20)
#NPPM_DESTROYSCINTILLAHANDLE = (#NPPMSG + 21)
#NPPM_GETNBUSERLANG = (#NPPMSG + 22)
#NPPM_GETCURRENTDOCINDEX = (#NPPMSG + 23)
#NPPM_SETSTATUSBAR = (#NPPMSG + 24)
#NPPM_GETMENUHANDLE = (#NPPMSG + 25)
#NPPM_ENCODESCI = (#NPPMSG + 26)
#NPPM_DECODESCI = (#NPPMSG + 27)
#NPPM_ACTIVATEDOC = (#NPPMSG + 28)
#NPPM_LAUNCHFINDINFILESDLG = (#NPPMSG + 29)
#NPPM_DMMSHOW = (#NPPMSG + 30)
#NPPM_DMMHIDE = (#NPPMSG + 31)
#NPPM_DMMUPDATEDISPINFO = (#NPPMSG + 32)
#NPPM_DMMREGASDCKDLG = (#NPPMSG + 33)
#NPPM_LOADSESSION = (#NPPMSG + 34)
#NPPM_DMMVIEWOTHERTAB = (#NPPMSG + 35)
#NPPM_RELOADFILE = (#NPPMSG + 36)
#NPPM_SWITCHTOFILE = (#NPPMSG + 37)
#NPPM_SAVECURRENTFILE = (#NPPMSG + 38)
#NPPM_SAVEALLFILES = (#NPPMSG + 39)
#NPPM_SETMENUITEMCHECK = (#NPPMSG + 40)
#NPPM_ADDTOOLBARICON = (#NPPMSG + 41)
#NPPM_GETWINDOWSVERSION = (#NPPMSG + 42)
#NPPM_DMMGETPLUGINHWNDBYNAME = (#NPPMSG + 43)
#NPPM_MAKECURRENTBUFFERDIRTY = (#NPPMSG + 44)
#NPPM_GETENABLETHEMETEXTUREFUNC = (#NPPMSG + 45)
#NPPM_GETPLUGINSCONFIGDIR = (#NPPMSG + 46)
#NPPM_MSGTOPLUGIN = (#NPPMSG + 47)
#NPPM_MENUCOMMAND = (#NPPMSG + 48)
#NPPM_TRIGGERTABBARCONTEXTMENU = (#NPPMSG + 49)
#NPPM_GETNPPVERSION = (#NPPMSG + 50)
#NPPM_HIDETABBAR = (#NPPMSG + 51)
#NPPM_ISTABBARHIDDEN = (#NPPMSG + 52)
#NPPM_GETPOSFROMBUFFERID = (#NPPMSG + 57)
#NPPM_GETFULLPATHFROMBUFFERID = (#NPPMSG + 58)
#NPPM_GETBUFFERIDFROMPOS = (#NPPMSG + 59)
#NPPM_GETCURRENTBUFFERID = (#NPPMSG + 60)
#NPPM_RELOADBUFFERID = (#NPPMSG + 61)
#NPPM_GETBUFFERLANGTYPE = (#NPPMSG + 64)
#NPPM_SETBUFFERLANGTYPE = (#NPPMSG + 65)
#NPPM_GETBUFFERENCODING = (#NPPMSG + 66)
#NPPM_SETBUFFERENCODING = (#NPPMSG + 67)
#NPPM_GETBUFFERFORMAT = (#NPPMSG + 68)
#NPPM_SETBUFFERFORMAT = (#NPPMSG + 69)
#NPPM_HIDETOOLBAR = (#NPPMSG + 70)
#NPPM_ISTOOLBARHIDDEN = (#NPPMSG + 71)
#NPPM_HIDEMENU = (#NPPMSG + 72)
#NPPM_ISMENUHIDDEN = (#NPPMSG + 73)
#NPPM_HIDESTATUSBAR = (#NPPMSG + 74)
#NPPM_ISSTATUSBARHIDDEN = (#NPPMSG + 75)
#NPPM_GETSHORTCUTBYCMDID = (#NPPMSG + 76)
#NPPM_DOOPEN = (#NPPMSG + 77)
#NPPM_SAVECURRENTFILEAS = (#NPPMSG + 78)
#NPPM_GETCURRENTNATIVELANGENCODING = (#NPPMSG + 79)
#NPPM_ALLOCATESUPPORTED = (#NPPMSG + 80)
#NPPM_ALLOCATECMDID = (#NPPMSG + 81)
#NPPM_ALLOCATEMARKER = (#NPPMSG + 82)
#NPPM_GETLANGUAGENAME = (#NPPMSG + 83)
#NPPM_GETLANGUAGEDESC = (#NPPMSG + 84)
#NPPM_SHOWDOCSWITCHER = (#NPPMSG + 85)
#NPPM_ISDOCSWITCHERSHOWN = (#NPPMSG + 86)
#NPPM_GETAPPDATAPLUGINSALLOWED = (#NPPMSG + 87)
#NPPM_GETCURRENTVIEW = (#NPPMSG + 88)
#NPPM_DOCSWITCHERDISABLECOLUMN = (#NPPMSG + 89)
#NPPM_GETEDITORDEFAULTFOREGROUNDCOLOR = (#NPPMSG + 90)
#NPPM_GETEDITORDEFAULTBACKGROUNDCOLOR = (#NPPMSG + 91)
#NPPM_SETSMOOTHFONT = (#NPPMSG + 92)
#NPPM_SETEDITORBORDEREDGE = (#NPPMSG + 93)
#NPPM_SAVEFILE = (#NPPMSG + 94)
#NPPM_DISABLEAUTOUPDATE = (#NPPMSG + 95)
#NPPM_REMOVESHORTCUTBYCMDID = (#NPPMSG + 96)
#NPPM_GETPLUGINHOMEPATH = (#NPPMSG + 97)


#NPPN_FIRST = 1000
#NPPN_READY = (#NPPN_FIRST + 1)
#NPPN_TBMODIFICATION = (#NPPN_FIRST + 2)
#NPPN_FILEBEFORECLOSE = (#NPPN_FIRST + 3)
#NPPN_FILEOPENED = (#NPPN_FIRST + 4)
#NPPN_FILECLOSED = (#NPPN_FIRST + 5)
#NPPN_FILEBEFOREOPEN = (#NPPN_FIRST + 6)
#NPPN_FILEBEFORESAVE = (#NPPN_FIRST + 7)
#NPPN_FILESAVED = (#NPPN_FIRST + 8)
#NPPN_SHUTDOWN = (#NPPN_FIRST + 9)
#NPPN_BUFFERACTIVATED = (#NPPN_FIRST + 10)
#NPPN_LANGCHANGED = (#NPPN_FIRST + 11)
#NPPN_WORDSTYLESUPDATED = (#NPPN_FIRST + 12)
#NPPN_SHORTCUTREMAPPED = (#NPPN_FIRST + 13)
#NPPN_FILEBEFORELOAD = (#NPPN_FIRST + 14)
#NPPN_FILELOADFAILED = (#NPPN_FIRST + 15)
#NPPN_READONLYCHANGED = (#NPPN_FIRST + 16)
#NPPN_DOCORDERCHANGED = (#NPPN_FIRST + 17)
#NPPN_SNAPSHOTDIRTYFILELOADED = (#NPPN_FIRST + 18)
#NPPN_BEFORESHUTDOWN = (#NPPN_FIRST + 19)
#NPPN_CANCELSHUTDOWN = (#NPPN_FIRST + 20)
#NPPN_FILEBEFORERENAME = (#NPPN_FIRST + 21)
#NPPN_FILERENAMECANCEL = (#NPPN_FIRST + 22)
#NPPN_FILERENAMED = (#NPPN_FIRST + 23)
#NPPN_FILEBEFOREDELETE = (#NPPN_FIRST + 24)
#NPPN_FILEDELETEFAILED = (#NPPN_FIRST + 25)
#NPPN_FILEDELETED = (#NPPN_FIRST + 26)




#RUNCOMMAND_USER = (#WM_USER + 3000)
#NPPM_GETFULLCURRENTPATH = (#RUNCOMMAND_USER + #FULL_CURRENT_PATH)
#NPPM_GETCURRENTDIRECTORY = (#RUNCOMMAND_USER + #CURRENT_DIRECTORY)
#NPPM_GETFILENAME = (#RUNCOMMAND_USER + #FILE_NAME)
#NPPM_GETNAMEPART = (#RUNCOMMAND_USER + #NAME_PART)
#NPPM_GETEXTPART = (#RUNCOMMAND_USER + #EXT_PART)
#NPPM_GETCURRENTWORD = (#RUNCOMMAND_USER + #CURRENT_WORD)
#NPPM_GETNPPDIRECTORY = (#RUNCOMMAND_USER + #NPP_DIRECTORY)
#NPPM_GETFILENAMEATCURSOR = (#RUNCOMMAND_USER + #GETFILENAMEATCURSOR)
#NPPM_GETCURRENTLINE = (#RUNCOMMAND_USER + #CURRENT_LINE)
#NPPM_GETCURRENTCOLUMN = (#RUNCOMMAND_USER + #CURRENT_COLUMN)
#NPPM_GETNPPFULLFILEPATH = (#RUNCOMMAND_USER + #NPP_FULL_FILE_PATH)









#IDM = 40000
#IDM_FILE = (#IDM + 1000)
#IDM_FILE_NEW = (#IDM_FILE + 1)
#IDM_FILE_OPEN = (#IDM_FILE + 2)
#IDM_FILE_CLOSE = (#IDM_FILE + 3)
#IDM_FILE_CLOSEALL = (#IDM_FILE + 4)
#IDM_FILE_CLOSEALL_BUT_CURRENT = (#IDM_FILE + 5)
#IDM_FILE_SAVE = (#IDM_FILE + 6)
#IDM_FILE_SAVEALL = (#IDM_FILE + 7)
#IDM_FILE_SAVEAS = (#IDM_FILE + 8)
#IDM_FILE_CLOSEALL_TOLEFT = (#IDM_FILE + 9)
#IDM_FILE_PRINT = (#IDM_FILE + 10)
#IDM_FILE_EXIT = (#IDM_FILE + 11)
#IDM_FILE_LOADSESSION = (#IDM_FILE + 12)
#IDM_FILE_SAVESESSION = (#IDM_FILE + 13)
#IDM_FILE_RELOAD = (#IDM_FILE + 14)
#IDM_FILE_SAVECOPYAS = (#IDM_FILE + 15)
#IDM_FILE_DELETE = (#IDM_FILE + 16)
#IDM_FILE_RENAME = (#IDM_FILE + 17)
#IDM_FILE_CLOSEALL_TORIGHT = (#IDM_FILE + 18)
#IDM_FILE_OPEN_FOLDER = (#IDM_FILE + 19)
#IDM_FILE_OPEN_CMD = (#IDM_FILE + 20)
#IDM_FILE_RESTORELASTCLOSEDFILE = (#IDM_FILE + 21)
#IDM_FILE_OPENFOLDERASWORSPACE = (#IDM_FILE + 22)
#IDM_FILE_OPEN_DEFAULT_VIEWER = (#IDM_FILE + 23)
#IDM_EDIT = (#IDM + 2000)
#IDM_EDIT_CUT = (#IDM_EDIT + 1)
#IDM_EDIT_COPY = (#IDM_EDIT + 2)
#IDM_EDIT_UNDO = (#IDM_EDIT + 3)
#IDM_EDIT_REDO = (#IDM_EDIT + 4)
#IDM_EDIT_PASTE = (#IDM_EDIT + 5)
#IDM_EDIT_DELETE = (#IDM_EDIT + 6)
#IDM_EDIT_SELECTALL = (#IDM_EDIT + 7)
#IDM_EDIT_BEGINENDSELECT = (#IDM_EDIT + 20)
#IDM_EDIT_INS_TAB = (#IDM_EDIT + 8)
#IDM_EDIT_RMV_TAB = (#IDM_EDIT + 9)
#IDM_EDIT_DUP_LINE = (#IDM_EDIT + 10)
#IDM_EDIT_TRANSPOSE_LINE = (#IDM_EDIT + 11)
#IDM_EDIT_SPLIT_LINES = (#IDM_EDIT + 12)
#IDM_EDIT_JOIN_LINES = (#IDM_EDIT + 13)
#IDM_EDIT_LINE_UP = (#IDM_EDIT + 14)
#IDM_EDIT_LINE_DOWN = (#IDM_EDIT + 15)
#IDM_EDIT_UPPERCASE = (#IDM_EDIT + 16)
#IDM_EDIT_LOWERCASE = (#IDM_EDIT + 17)
#IDM_EDIT_PROPERCASE_FORCE = (#IDM_EDIT + 67)
#IDM_EDIT_PROPERCASE_BLEND = (#IDM_EDIT + 68)
#IDM_EDIT_SENTENCECASE_FORCE = (#IDM_EDIT + 69)
#IDM_EDIT_SENTENCECASE_BLEND = (#IDM_EDIT + 70)
#IDM_EDIT_INVERTCASE = (#IDM_EDIT + 71)
#IDM_EDIT_RANDOMCASE = (#IDM_EDIT + 72)
#IDM_EDIT_REMOVEEMPTYLINES = (#IDM_EDIT + 55)
#IDM_EDIT_REMOVEEMPTYLINESWITHBLANK = (#IDM_EDIT + 56)
#IDM_EDIT_BLANKLINEABOVECURRENT = (#IDM_EDIT + 57)
#IDM_EDIT_BLANKLINEBELOWCURRENT = (#IDM_EDIT + 58)
#IDM_EDIT_SORTLINES_LEXICOGRAPHIC_ASCENDING = (#IDM_EDIT + 59)
#IDM_EDIT_SORTLINES_LEXICOGRAPHIC_DESCENDING = (#IDM_EDIT + 60)
#IDM_EDIT_SORTLINES_INTEGER_ASCENDING = (#IDM_EDIT + 61)
#IDM_EDIT_SORTLINES_INTEGER_DESCENDING = (#IDM_EDIT + 62)
#IDM_EDIT_SORTLINES_DECIMALCOMMA_ASCENDING = (#IDM_EDIT + 63)
#IDM_EDIT_SORTLINES_DECIMALCOMMA_DESCENDING = (#IDM_EDIT + 64)
#IDM_EDIT_SORTLINES_DECIMALDOT_ASCENDING = (#IDM_EDIT + 65)
#IDM_EDIT_SORTLINES_DECIMALDOT_DESCENDING = (#IDM_EDIT + 66)
#IDM_EDIT_OPENASFILE = (#IDM_EDIT + 73)
#IDM_EDIT_OPENINFOLDER = (#IDM_EDIT + 74)
#IDM_EDIT_SEARCHONINTERNET = (#IDM_EDIT + 75)
#IDM_EDIT_CHANGESEARCHENGINE = (#IDM_EDIT + 76)
#IDM_MACRO_STARTRECORDINGMACRO = (#IDM_EDIT + 18)
#IDM_MACRO_STOPRECORDINGMACRO = (#IDM_EDIT + 19)
#IDM_MACRO_PLAYBACKRECORDEDMACRO = (#IDM_EDIT + 21)
#IDM_EDIT_BLOCK_COMMENT = (#IDM_EDIT + 22)
#IDM_EDIT_STREAM_COMMENT = (#IDM_EDIT + 23)
#IDM_EDIT_TRIMTRAILING = (#IDM_EDIT + 24)
#IDM_EDIT_TRIMLINEHEAD = (#IDM_EDIT + 42)
#IDM_EDIT_TRIM_BOTH = (#IDM_EDIT + 43)
#IDM_EDIT_EOL2WS = (#IDM_EDIT + 44)
#IDM_EDIT_TRIMALL = (#IDM_EDIT + 45)
#IDM_EDIT_TAB2SW = (#IDM_EDIT + 46)
#IDM_EDIT_SW2TAB_LEADING = (#IDM_EDIT + 53)
#IDM_EDIT_SW2TAB_ALL = (#IDM_EDIT + 54)
#IDM_EDIT_STREAM_UNCOMMENT = (#IDM_EDIT + 47)
#IDM_MACRO_SAVECURRENTMACRO = (#IDM_EDIT + 25)
#IDM_EDIT_RTL = (#IDM_EDIT + 26)
#IDM_EDIT_LTR = (#IDM_EDIT + 27)
#IDM_EDIT_SETREADONLY = (#IDM_EDIT + 28)
#IDM_EDIT_FULLPATHTOCLIP = (#IDM_EDIT + 29)
#IDM_EDIT_FILENAMETOCLIP = (#IDM_EDIT + 30)
#IDM_EDIT_CURRENTDIRTOCLIP = (#IDM_EDIT + 31)
#IDM_MACRO_RUNMULTIMACRODLG = (#IDM_EDIT + 32)
#IDM_EDIT_CLEARREADONLY = (#IDM_EDIT + 33)
#IDM_EDIT_COLUMNMODE = (#IDM_EDIT + 34)
#IDM_EDIT_BLOCK_COMMENT_SET = (#IDM_EDIT + 35)
#IDM_EDIT_BLOCK_UNCOMMENT = (#IDM_EDIT + 36)
#IDM_EDIT_COLUMNMODETIP = (#IDM_EDIT + 37)
#IDM_EDIT_PASTE_AS_HTML = (#IDM_EDIT + 38)
#IDM_EDIT_PASTE_AS_RTF = (#IDM_EDIT + 39)
#IDM_EDIT_COPY_BINARY = (#IDM_EDIT + 48)
#IDM_EDIT_CUT_BINARY = (#IDM_EDIT + 49)
#IDM_EDIT_PASTE_BINARY = (#IDM_EDIT + 50)
#IDM_EDIT_CHAR_PANEL = (#IDM_EDIT + 51)
#IDM_EDIT_CLIPBOARDHISTORY_PANEL = (#IDM_EDIT + 52)
#IDM_EDIT_AUTOCOMPLETE = (50000 + 0)
#IDM_EDIT_AUTOCOMPLETE_CURRENTFILE = (50000 + 1)
#IDM_EDIT_FUNCCALLTIP = (50000 + 2)
#IDM_EDIT_AUTOCOMPLETE_PATH = (50000 + 6)
#IDM_OPEN_ALL_RECENT_FILE = (#IDM_EDIT + 40)
#IDM_CLEAN_RECENT_FILE_LIST = (#IDM_EDIT + 41)
#IDM_SEARCH = (#IDM + 3000)
#IDM_SEARCH_FIND = (#IDM_SEARCH + 1)
#IDM_SEARCH_FINDNEXT = (#IDM_SEARCH + 2)
#IDM_SEARCH_REPLACE = (#IDM_SEARCH + 3)
#IDM_SEARCH_GOTOLINE = (#IDM_SEARCH + 4)
#IDM_SEARCH_TOGGLE_BOOKMARK = (#IDM_SEARCH + 5)
#IDM_SEARCH_NEXT_BOOKMARK = (#IDM_SEARCH + 6)
#IDM_SEARCH_PREV_BOOKMARK = (#IDM_SEARCH + 7)
#IDM_SEARCH_CLEAR_BOOKMARKS = (#IDM_SEARCH + 8)
#IDM_SEARCH_GOTOMATCHINGBRACE = (#IDM_SEARCH + 9)
#IDM_SEARCH_FINDPREV = (#IDM_SEARCH + 10)
#IDM_SEARCH_FINDINCREMENT = (#IDM_SEARCH + 11)
#IDM_SEARCH_FINDINFILES = (#IDM_SEARCH + 13)
#IDM_SEARCH_VOLATILE_FINDNEXT = (#IDM_SEARCH + 14)
#IDM_SEARCH_VOLATILE_FINDPREV = (#IDM_SEARCH + 15)
#IDM_SEARCH_CUTMARKEDLINES = (#IDM_SEARCH + 18)
#IDM_SEARCH_COPYMARKEDLINES = (#IDM_SEARCH + 19)
#IDM_SEARCH_PASTEMARKEDLINES = (#IDM_SEARCH + 20)
#IDM_SEARCH_DELETEMARKEDLINES = (#IDM_SEARCH + 21)
#IDM_SEARCH_MARKALLEXT1 = (#IDM_SEARCH + 22)
#IDM_SEARCH_UNMARKALLEXT1 = (#IDM_SEARCH + 23)
#IDM_SEARCH_MARKALLEXT2 = (#IDM_SEARCH + 24)
#IDM_SEARCH_UNMARKALLEXT2 = (#IDM_SEARCH + 25)
#IDM_SEARCH_MARKALLEXT3 = (#IDM_SEARCH + 26)
#IDM_SEARCH_UNMARKALLEXT3 = (#IDM_SEARCH + 27)
#IDM_SEARCH_MARKALLEXT4 = (#IDM_SEARCH + 28)
#IDM_SEARCH_UNMARKALLEXT4 = (#IDM_SEARCH + 29)
#IDM_SEARCH_MARKALLEXT5 = (#IDM_SEARCH + 30)
#IDM_SEARCH_UNMARKALLEXT5 = (#IDM_SEARCH + 31)
#IDM_SEARCH_CLEARALLMARKS = (#IDM_SEARCH + 32)
#IDM_SEARCH_GOPREVMARKER1 = (#IDM_SEARCH + 33)
#IDM_SEARCH_GOPREVMARKER2 = (#IDM_SEARCH + 34)
#IDM_SEARCH_GOPREVMARKER3 = (#IDM_SEARCH + 35)
#IDM_SEARCH_GOPREVMARKER4 = (#IDM_SEARCH + 36)
#IDM_SEARCH_GOPREVMARKER5 = (#IDM_SEARCH + 37)
#IDM_SEARCH_GOPREVMARKER_DEF = (#IDM_SEARCH + 38)
#IDM_SEARCH_GONEXTMARKER1 = (#IDM_SEARCH + 39)
#IDM_SEARCH_GONEXTMARKER2 = (#IDM_SEARCH + 40)
#IDM_SEARCH_GONEXTMARKER3 = (#IDM_SEARCH + 41)
#IDM_SEARCH_GONEXTMARKER4 = (#IDM_SEARCH + 42)
#IDM_SEARCH_GONEXTMARKER5 = (#IDM_SEARCH + 43)
#IDM_SEARCH_GONEXTMARKER_DEF = (#IDM_SEARCH + 44)
#IDM_FOCUS_ON_FOUND_RESULTS = (#IDM_SEARCH + 45)
#IDM_SEARCH_GOTONEXTFOUND = (#IDM_SEARCH + 46)
#IDM_SEARCH_GOTOPREVFOUND = (#IDM_SEARCH + 47)
#IDM_SEARCH_SETANDFINDNEXT = (#IDM_SEARCH + 48)
#IDM_SEARCH_SETANDFINDPREV = (#IDM_SEARCH + 49)
#IDM_SEARCH_INVERSEMARKS = (#IDM_SEARCH + 50)
#IDM_SEARCH_DELETEUNMARKEDLINES = (#IDM_SEARCH + 51)
#IDM_SEARCH_FINDCHARINRANGE = (#IDM_SEARCH + 52)
#IDM_SEARCH_SELECTMATCHINGBRACES = (#IDM_SEARCH + 53)
#IDM_SEARCH_MARK = (#IDM_SEARCH + 54)
#IDM_MISC = (#IDM + 3500)
#IDM_FILESWITCHER_FILESCLOSE = (#IDM_MISC + 1)
#IDM_FILESWITCHER_FILESCLOSEOTHERS = (#IDM_MISC + 2)
#IDM_VIEW = (#IDM + 4000)
; #IDM_VIEW_TOOLBAR_HIDE = (#IDM_VIEW + 1)
#IDM_VIEW_TOOLBAR_REDUCE = (#IDM_VIEW + 2)
#IDM_VIEW_TOOLBAR_ENLARGE = (#IDM_VIEW + 3)
#IDM_VIEW_TOOLBAR_STANDARD = (#IDM_VIEW + 4)
#IDM_VIEW_REDUCETABBAR = (#IDM_VIEW + 5)
#IDM_VIEW_LOCKTABBAR = (#IDM_VIEW + 6)
#IDM_VIEW_DRAWTABBAR_TOPBAR = (#IDM_VIEW + 7)
#IDM_VIEW_DRAWTABBAR_INACIVETAB = (#IDM_VIEW + 8)
#IDM_VIEW_POSTIT = (#IDM_VIEW + 9)
#IDM_VIEW_TOGGLE_FOLDALL = (#IDM_VIEW + 10)
; #IDM_VIEW_USER_DLG = (#IDM_VIEW + 11)
#IDM_VIEW_LINENUMBER = (#IDM_VIEW + 12)
#IDM_VIEW_SYMBOLMARGIN = (#IDM_VIEW + 13)
#IDM_VIEW_FOLDERMAGIN = (#IDM_VIEW + 14)
#IDM_VIEW_FOLDERMAGIN_SIMPLE = (#IDM_VIEW + 15)
#IDM_VIEW_FOLDERMAGIN_ARROW = (#IDM_VIEW + 16)
#IDM_VIEW_FOLDERMAGIN_CIRCLE = (#IDM_VIEW + 17)
#IDM_VIEW_FOLDERMAGIN_BOX = (#IDM_VIEW + 18)
#IDM_VIEW_ALL_CHARACTERS = (#IDM_VIEW + 19)
#IDM_VIEW_INDENT_GUIDE = (#IDM_VIEW + 20)
#IDM_VIEW_CURLINE_HILITING = (#IDM_VIEW + 21)
#IDM_VIEW_WRAP = (#IDM_VIEW + 22)
#IDM_VIEW_ZOOMIN = (#IDM_VIEW + 23)
#IDM_VIEW_ZOOMOUT = (#IDM_VIEW + 24)
#IDM_VIEW_TAB_SPACE = (#IDM_VIEW + 25)
#IDM_VIEW_EOL = (#IDM_VIEW + 26)
#IDM_VIEW_EDGELINE = (#IDM_VIEW + 27)
#IDM_VIEW_EDGEBACKGROUND = (#IDM_VIEW + 28)
#IDM_VIEW_TOGGLE_UNFOLDALL = (#IDM_VIEW + 29)
#IDM_VIEW_FOLD_CURRENT = (#IDM_VIEW + 30)
#IDM_VIEW_UNFOLD_CURRENT = (#IDM_VIEW + 31)
#IDM_VIEW_FULLSCREENTOGGLE = (#IDM_VIEW + 32)
#IDM_VIEW_ZOOMRESTORE = (#IDM_VIEW + 33)
#IDM_VIEW_ALWAYSONTOP = (#IDM_VIEW + 34)
#IDM_VIEW_SYNSCROLLV = (#IDM_VIEW + 35)
#IDM_VIEW_SYNSCROLLH = (#IDM_VIEW + 36)
#IDM_VIEW_EDGENONE = (#IDM_VIEW + 37)
#IDM_VIEW_DRAWTABBAR_CLOSEBOTTUN = (#IDM_VIEW + 38)
#IDM_VIEW_DRAWTABBAR_DBCLK2CLOSE = (#IDM_VIEW + 39)
#IDM_VIEW_REFRESHTABAR = (#IDM_VIEW + 40)
#IDM_VIEW_WRAP_SYMBOL = (#IDM_VIEW + 41)
#IDM_VIEW_HIDELINES = (#IDM_VIEW + 42)
#IDM_VIEW_DRAWTABBAR_VERTICAL = (#IDM_VIEW + 43)
#IDM_VIEW_DRAWTABBAR_MULTILINE = (#IDM_VIEW + 44)
#IDM_VIEW_DOCCHANGEMARGIN = (#IDM_VIEW + 45)
#IDM_VIEW_LWDEF = (#IDM_VIEW + 46)
#IDM_VIEW_LWALIGN = (#IDM_VIEW + 47)
#IDM_VIEW_LWINDENT = (#IDM_VIEW + 48)
#IDM_VIEW_SUMMARY = (#IDM_VIEW + 49)
#IDM_VIEW_FOLD = (#IDM_VIEW + 50)
#IDM_VIEW_FOLD_1 = (#IDM_VIEW_FOLD + 1)
#IDM_VIEW_FOLD_2 = (#IDM_VIEW_FOLD + 2)
#IDM_VIEW_FOLD_3 = (#IDM_VIEW_FOLD + 3)
#IDM_VIEW_FOLD_4 = (#IDM_VIEW_FOLD + 4)
#IDM_VIEW_FOLD_5 = (#IDM_VIEW_FOLD + 5)
#IDM_VIEW_FOLD_6 = (#IDM_VIEW_FOLD + 6)
#IDM_VIEW_FOLD_7 = (#IDM_VIEW_FOLD + 7)
#IDM_VIEW_FOLD_8 = (#IDM_VIEW_FOLD + 8)
#IDM_VIEW_UNFOLD = (#IDM_VIEW + 60)
#IDM_VIEW_UNFOLD_1 = (#IDM_VIEW_UNFOLD + 1)
#IDM_VIEW_UNFOLD_2 = (#IDM_VIEW_UNFOLD + 2)
#IDM_VIEW_UNFOLD_3 = (#IDM_VIEW_UNFOLD + 3)
#IDM_VIEW_UNFOLD_4 = (#IDM_VIEW_UNFOLD + 4)
#IDM_VIEW_UNFOLD_5 = (#IDM_VIEW_UNFOLD + 5)
#IDM_VIEW_UNFOLD_6 = (#IDM_VIEW_UNFOLD + 6)
#IDM_VIEW_UNFOLD_7 = (#IDM_VIEW_UNFOLD + 7)
#IDM_VIEW_UNFOLD_8 = (#IDM_VIEW_UNFOLD + 8)
#IDM_VIEW_FILESWITCHER_PANEL = (#IDM_VIEW + 70)
#IDM_VIEW_SWITCHTO_OTHER_VIEW = (#IDM_VIEW + 72)
#IDM_EXPORT_FUNC_LIST_AND_QUIT = (#IDM_VIEW + 73)
#IDM_VIEW_DOC_MAP = (#IDM_VIEW + 80)
#IDM_VIEW_PROJECT_PANEL_1 = (#IDM_VIEW + 81)
#IDM_VIEW_PROJECT_PANEL_2 = (#IDM_VIEW + 82)
#IDM_VIEW_PROJECT_PANEL_3 = (#IDM_VIEW + 83)
#IDM_VIEW_FUNC_LIST = (#IDM_VIEW + 84)
#IDM_VIEW_FILEBROWSER = (#IDM_VIEW + 85)
#IDM_VIEW_TAB1 = (#IDM_VIEW + 86)
#IDM_VIEW_TAB2 = (#IDM_VIEW + 87)
#IDM_VIEW_TAB3 = (#IDM_VIEW + 88)
#IDM_VIEW_TAB4 = (#IDM_VIEW + 89)
#IDM_VIEW_TAB5 = (#IDM_VIEW + 90)
#IDM_VIEW_TAB6 = (#IDM_VIEW + 91)
#IDM_VIEW_TAB7 = (#IDM_VIEW + 92)
#IDM_VIEW_TAB8 = (#IDM_VIEW + 93)
#IDM_VIEW_TAB9 = (#IDM_VIEW + 94)
#IDM_VIEW_TAB_NEXT = (#IDM_VIEW + 95)
#IDM_VIEW_TAB_PREV = (#IDM_VIEW + 96)
#IDM_VIEW_MONITORING = (#IDM_VIEW + 97)
#IDM_VIEW_TAB_MOVEFORWARD = (#IDM_VIEW + 98)
#IDM_VIEW_TAB_MOVEBACKWARD = (#IDM_VIEW + 99)
#IDM_FORMAT = (#IDM + 5000)
#IDM_FORMAT_TODOS = (#IDM_FORMAT + 1)
#IDM_FORMAT_TOUNIX = (#IDM_FORMAT + 2)
#IDM_FORMAT_TOMAC = (#IDM_FORMAT + 3)
#IDM_FORMAT_ANSI = (#IDM_FORMAT + 4)
#IDM_FORMAT_UTF_8 = (#IDM_FORMAT + 5)
#IDM_FORMAT_UCS_2BE = (#IDM_FORMAT + 6)
#IDM_FORMAT_UCS_2LE = (#IDM_FORMAT + 7)
#IDM_FORMAT_AS_UTF_8 = (#IDM_FORMAT + 8)
#IDM_FORMAT_CONV2_ANSI = (#IDM_FORMAT + 9)
#IDM_FORMAT_CONV2_AS_UTF_8 = (#IDM_FORMAT + 10)
#IDM_FORMAT_CONV2_UTF_8 = (#IDM_FORMAT + 11)
#IDM_FORMAT_CONV2_UCS_2BE = (#IDM_FORMAT + 12)
#IDM_FORMAT_CONV2_UCS_2LE = (#IDM_FORMAT + 13)
#IDM_FORMAT_ENCODE = (#IDM_FORMAT + 20)
#IDM_FORMAT_WIN_1250 = (#IDM_FORMAT_ENCODE + 0)
#IDM_FORMAT_WIN_1251 = (#IDM_FORMAT_ENCODE + 1)
#IDM_FORMAT_WIN_1252 = (#IDM_FORMAT_ENCODE + 2)
#IDM_FORMAT_WIN_1253 = (#IDM_FORMAT_ENCODE + 3)
#IDM_FORMAT_WIN_1254 = (#IDM_FORMAT_ENCODE + 4)
#IDM_FORMAT_WIN_1255 = (#IDM_FORMAT_ENCODE + 5)
#IDM_FORMAT_WIN_1256 = (#IDM_FORMAT_ENCODE + 6)
#IDM_FORMAT_WIN_1257 = (#IDM_FORMAT_ENCODE + 7)
#IDM_FORMAT_WIN_1258 = (#IDM_FORMAT_ENCODE + 8)
#IDM_FORMAT_ISO_8859_1 = (#IDM_FORMAT_ENCODE + 9)
#IDM_FORMAT_ISO_8859_2 = (#IDM_FORMAT_ENCODE + 10)
#IDM_FORMAT_ISO_8859_3 = (#IDM_FORMAT_ENCODE + 11)
#IDM_FORMAT_ISO_8859_4 = (#IDM_FORMAT_ENCODE + 12)
#IDM_FORMAT_ISO_8859_5 = (#IDM_FORMAT_ENCODE + 13)
#IDM_FORMAT_ISO_8859_6 = (#IDM_FORMAT_ENCODE + 14)
#IDM_FORMAT_ISO_8859_7 = (#IDM_FORMAT_ENCODE + 15)
#IDM_FORMAT_ISO_8859_8 = (#IDM_FORMAT_ENCODE + 16)
#IDM_FORMAT_ISO_8859_9 = (#IDM_FORMAT_ENCODE + 17)
; #IDM_FORMAT_ISO_8859_10 = (#IDM_FORMAT_ENCODE + 18)
; #IDM_FORMAT_ISO_8859_11 = (#IDM_FORMAT_ENCODE + 19)
#IDM_FORMAT_ISO_8859_13 = (#IDM_FORMAT_ENCODE + 20)
#IDM_FORMAT_ISO_8859_14 = (#IDM_FORMAT_ENCODE + 21)
#IDM_FORMAT_ISO_8859_15 = (#IDM_FORMAT_ENCODE + 22)
; #IDM_FORMAT_ISO_8859_16 = (#IDM_FORMAT_ENCODE + 23)
#IDM_FORMAT_DOS_437 = (#IDM_FORMAT_ENCODE + 24)
#IDM_FORMAT_DOS_720 = (#IDM_FORMAT_ENCODE + 25)
#IDM_FORMAT_DOS_737 = (#IDM_FORMAT_ENCODE + 26)
#IDM_FORMAT_DOS_775 = (#IDM_FORMAT_ENCODE + 27)
#IDM_FORMAT_DOS_850 = (#IDM_FORMAT_ENCODE + 28)
#IDM_FORMAT_DOS_852 = (#IDM_FORMAT_ENCODE + 29)
#IDM_FORMAT_DOS_855 = (#IDM_FORMAT_ENCODE + 30)
#IDM_FORMAT_DOS_857 = (#IDM_FORMAT_ENCODE + 31)
#IDM_FORMAT_DOS_858 = (#IDM_FORMAT_ENCODE + 32)
#IDM_FORMAT_DOS_860 = (#IDM_FORMAT_ENCODE + 33)
#IDM_FORMAT_DOS_861 = (#IDM_FORMAT_ENCODE + 34)
#IDM_FORMAT_DOS_862 = (#IDM_FORMAT_ENCODE + 35)
#IDM_FORMAT_DOS_863 = (#IDM_FORMAT_ENCODE + 36)
#IDM_FORMAT_DOS_865 = (#IDM_FORMAT_ENCODE + 37)
#IDM_FORMAT_DOS_866 = (#IDM_FORMAT_ENCODE + 38)
#IDM_FORMAT_DOS_869 = (#IDM_FORMAT_ENCODE + 39)
#IDM_FORMAT_BIG5 = (#IDM_FORMAT_ENCODE + 40)
#IDM_FORMAT_GB2312 = (#IDM_FORMAT_ENCODE + 41)
#IDM_FORMAT_SHIFT_JIS = (#IDM_FORMAT_ENCODE + 42)
#IDM_FORMAT_KOREAN_WIN = (#IDM_FORMAT_ENCODE + 43)
#IDM_FORMAT_EUC_KR = (#IDM_FORMAT_ENCODE + 44)
#IDM_FORMAT_TIS_620 = (#IDM_FORMAT_ENCODE + 45)
#IDM_FORMAT_MAC_CYRILLIC = (#IDM_FORMAT_ENCODE + 46)
#IDM_FORMAT_KOI8U_CYRILLIC = (#IDM_FORMAT_ENCODE + 47)
#IDM_FORMAT_KOI8R_CYRILLIC = (#IDM_FORMAT_ENCODE + 48)
#IDM_LANG = (#IDM + 6000)
#IDM_LANGSTYLE_CONFIG_DLG = (#IDM_LANG + 1)
#IDM_LANG_C = (#IDM_LANG + 2)
#IDM_LANG_CPP = (#IDM_LANG + 3)
#IDM_LANG_JAVA = (#IDM_LANG + 4)
#IDM_LANG_HTML = (#IDM_LANG + 5)
#IDM_LANG_XML = (#IDM_LANG + 6)
#IDM_LANG_JS = (#IDM_LANG + 7)
#IDM_LANG_PHP = (#IDM_LANG + 8)
#IDM_LANG_ASP = (#IDM_LANG + 9)
#IDM_LANG_CSS = (#IDM_LANG + 10)
#IDM_LANG_PASCAL = (#IDM_LANG + 11)
#IDM_LANG_PYTHON = (#IDM_LANG + 12)
#IDM_LANG_PERL = (#IDM_LANG + 13)
#IDM_LANG_OBJC = (#IDM_LANG + 14)
#IDM_LANG_ASCII = (#IDM_LANG + 15)
#IDM_LANG_TEXT = (#IDM_LANG + 16)
#IDM_LANG_RC = (#IDM_LANG + 17)
#IDM_LANG_MAKEFILE = (#IDM_LANG + 18)
#IDM_LANG_INI = (#IDM_LANG + 19)
#IDM_LANG_SQL = (#IDM_LANG + 20)
#IDM_LANG_VB = (#IDM_LANG + 21)
#IDM_LANG_BATCH = (#IDM_LANG + 22)
#IDM_LANG_CS = (#IDM_LANG + 23)
#IDM_LANG_LUA = (#IDM_LANG + 24)
#IDM_LANG_TEX = (#IDM_LANG + 25)
#IDM_LANG_FORTRAN = (#IDM_LANG + 26)
#IDM_LANG_BASH = (#IDM_LANG + 27)
#IDM_LANG_FLASH = (#IDM_LANG + 28)
#IDM_LANG_NSIS = (#IDM_LANG + 29)
#IDM_LANG_TCL = (#IDM_LANG + 30)
#IDM_LANG_LISP = (#IDM_LANG + 31)
#IDM_LANG_SCHEME = (#IDM_LANG + 32)
#IDM_LANG_ASM = (#IDM_LANG + 33)
#IDM_LANG_DIFF = (#IDM_LANG + 34)
#IDM_LANG_PROPS = (#IDM_LANG + 35)
#IDM_LANG_PS = (#IDM_LANG + 36)
#IDM_LANG_RUBY = (#IDM_LANG + 37)
#IDM_LANG_SMALLTALK = (#IDM_LANG + 38)
#IDM_LANG_VHDL = (#IDM_LANG + 39)
#IDM_LANG_CAML = (#IDM_LANG + 40)
#IDM_LANG_KIX = (#IDM_LANG + 41)
#IDM_LANG_ADA = (#IDM_LANG + 42)
#IDM_LANG_VERILOG = (#IDM_LANG + 43)
#IDM_LANG_AU3 = (#IDM_LANG + 44)
#IDM_LANG_MATLAB = (#IDM_LANG + 45)
#IDM_LANG_HASKELL = (#IDM_LANG + 46)
#IDM_LANG_INNO = (#IDM_LANG + 47)
#IDM_LANG_CMAKE = (#IDM_LANG + 48)
#IDM_LANG_YAML = (#IDM_LANG + 49)
#IDM_LANG_COBOL = (#IDM_LANG + 50)
#IDM_LANG_D = (#IDM_LANG + 51)
#IDM_LANG_GUI4CLI = (#IDM_LANG + 52)
#IDM_LANG_POWERSHELL = (#IDM_LANG + 53)
#IDM_LANG_R = (#IDM_LANG + 54)
#IDM_LANG_JSP = (#IDM_LANG + 55)
#IDM_LANG_COFFEESCRIPT = (#IDM_LANG + 56)
#IDM_LANG_JSON = (#IDM_LANG + 57)
#IDM_LANG_FORTRAN_77 = (#IDM_LANG + 58)
#IDM_LANG_BAANC = (#IDM_LANG + 59)
#IDM_LANG_SREC = (#IDM_LANG + 60)
#IDM_LANG_IHEX = (#IDM_LANG + 61)
#IDM_LANG_TEHEX = (#IDM_LANG + 62)
#IDM_LANG_SWIFT = (#IDM_LANG + 63)
#IDM_LANG_ASN1 = (#IDM_LANG + 64)
#IDM_LANG_AVS = (#IDM_LANG + 65)
#IDM_LANG_BLITZBASIC = (#IDM_LANG + 66)
#IDM_LANG_PUREBASIC = (#IDM_LANG + 67)
#IDM_LANG_FREEBASIC = (#IDM_LANG + 68)
#IDM_LANG_CSOUND = (#IDM_LANG + 69)
#IDM_LANG_ERLANG = (#IDM_LANG + 70)
#IDM_LANG_ESCRIPT = (#IDM_LANG + 71)
#IDM_LANG_FORTH = (#IDM_LANG + 72)
#IDM_LANG_LATEX = (#IDM_LANG + 73)
#IDM_LANG_MMIXAL = (#IDM_LANG + 74)
#IDM_LANG_NIMROD = (#IDM_LANG + 75)
#IDM_LANG_NNCRONTAB = (#IDM_LANG + 76)
#IDM_LANG_OSCRIPT = (#IDM_LANG + 77)
#IDM_LANG_REBOL = (#IDM_LANG + 78)
#IDM_LANG_REGISTRY = (#IDM_LANG + 79)
#IDM_LANG_RUST = (#IDM_LANG + 80)
#IDM_LANG_SPICE = (#IDM_LANG + 81)
#IDM_LANG_TXT2TAGS = (#IDM_LANG + 82)
#IDM_LANG_VISUALPROLOG = (#IDM_LANG + 83)
#IDM_LANG_EXTERNAL = (#IDM_LANG + 165)
#IDM_LANG_EXTERNAL_LIMIT = (#IDM_LANG + 179)
#IDM_LANG_USER = (#IDM_LANG + 180)
#IDM_LANG_USER_LIMIT = (#IDM_LANG + 210)
#IDM_LANG_USER_DLG = (#IDM_LANG + 250)
#IDM_ABOUT = (#IDM  + 7000)
#IDM_HOMESWEETHOME = (#IDM_ABOUT  + 1)
#IDM_PROJECTPAGE = (#IDM_ABOUT  + 2)
#IDM_ONLINEHELP = (#IDM_ABOUT  + 3)
#IDM_FORUM = (#IDM_ABOUT  + 4)
#IDM_PLUGINSHOME = (#IDM_ABOUT  + 5)
#IDM_UPDATE_NPP = (#IDM_ABOUT  + 6)
#IDM_WIKIFAQ = (#IDM_ABOUT  + 7)
#IDM_HELP = (#IDM_ABOUT  + 8)
#IDM_CONFUPDATERPROXY = (#IDM_ABOUT  + 9)
#IDM_CMDLINEARGUMENTS = (#IDM_ABOUT  + 10)
#IDM_ONLINESUPPORT = (#IDM_ABOUT  + 11)
#IDM_DEBUGINFO = (#IDM_ABOUT  + 12)
#IDM_SETTING = (#IDM + 8000)
; #IDM_SETTING_TAB_SIZE = (#IDM_SETTING + 1)
; #IDM_SETTING_TAB_REPLCESPACE = (#IDM_SETTING + 2)
; #IDM_SETTING_HISTORY_SIZE = (#IDM_SETTING + 3)
; #IDM_SETTING_EDGE_SIZE = (#IDM_SETTING + 4)
#IDM_SETTING_IMPORTPLUGIN = (#IDM_SETTING + 5)
#IDM_SETTING_IMPORTSTYLETHEMS = (#IDM_SETTING + 6)
#IDM_SETTING_TRAYICON = (#IDM_SETTING + 8)
#IDM_SETTING_SHORTCUT_MAPPER = (#IDM_SETTING + 9)
#IDM_SETTING_REMEMBER_LAST_SESSION = (#IDM_SETTING + 10)
#IDM_SETTING_PREFERECE = (#IDM_SETTING + 11)
#IDM_SETTING_PLUGINADM = (#IDM_SETTING + 15)
#IDM_SETTING_SHORTCUT_MAPPER_MACRO = (#IDM_SETTING + 16)
#IDM_SETTING_SHORTCUT_MAPPER_RUN = (#IDM_SETTING + 17)
#IDM_SETTING_EDITCONTEXTMENU = (#IDM_SETTING + 18)
#IDM_TOOL = (#IDM + 8500)
#IDM_TOOL_MD5_GENERATE = (#IDM_TOOL + 1)
#IDM_TOOL_MD5_GENERATEFROMFILE = (#IDM_TOOL + 2)
#IDM_TOOL_MD5_GENERATEINTOCLIPBOARD = (#IDM_TOOL + 3)
#IDM_TOOL_SHA256_GENERATE = (#IDM_TOOL + 4)
#IDM_TOOL_SHA256_GENERATEFROMFILE = (#IDM_TOOL + 5)
#IDM_TOOL_SHA256_GENERATEINTOCLIPBOARD = (#IDM_TOOL + 6)
#IDM_EXECUTE = (#IDM + 9000)
#IDM_SYSTRAYPOPUP = (#IDM + 3100)
#IDM_SYSTRAYPOPUP_ACTIVATE = (#IDM_SYSTRAYPOPUP + 1)
#IDM_SYSTRAYPOPUP_NEWDOC = (#IDM_SYSTRAYPOPUP + 2)
#IDM_SYSTRAYPOPUP_NEW_AND_PASTE = (#IDM_SYSTRAYPOPUP + 3)
#IDM_SYSTRAYPOPUP_OPENFILE = (#IDM_SYSTRAYPOPUP + 4)
#IDM_SYSTRAYPOPUP_CLOSE = (#IDM_SYSTRAYPOPUP + 5)


Code:
How to get constants?

Open the file "Notepad_plus_msgs.h"

Replacement using regular expression
#define\h+?((?:NPP[MN]|IDM)_[A-Z_\d]+?)\h*?\(([A-Z_\d]+?\h*?\+\h*?[A-Z_\d]+?)\)
#\1 = (#\2)
We get strings like a constant format in PureBasic

Search for constants in the previous result using group output
#(?:NPP[MN]|IDM)_[A-Z_\d]+?\h*?=\h*?\(#[A-Z_\d]+?\h*?\+\h*?[A-Z_\d]+?\)

we get 121 constant

Repeat the same with the file "menuCmdID.h" and we get 446 constants

We repeat the same 2-step search for both files again.
#define\h+?([A-Z_\d]+?)\h+?(\d+)
#\1 = \2

#[A-Z_\d]+? = \d+


Notepad++ plugin_template.pb
Code:
; Все плаги сейчас в юникоде, поэтому этот исходник в юникоде
EnableExplicit

Structure NppData Align #PB_Structure_AlignC
   *_nppHandle
   *_scintillaMainHandle
   *_scintillaSecondHandle
EndStructure

Structure ShortcutKey Align #PB_Structure_AlignC
   _isCtrl.b
   _isAlt.b
   _isShift.b
   _key.u ;i
EndStructure

Structure FuncItem Align #PB_Structure_AlignC
   _itemName.s{64}
   *_pFunc
   _cmdID.l ; тут я поменял i на l, иначе в x64 не работает
   _init2Check.b
   *_pShortcutKey.ShortcutKey
EndStructure

; ==================================
; 2 Обязательные процедуры DLL (AttachProcess, DetachProcess)
; ==================================
Declare item1()
Declare item2()
Declare itemError()
Declare NppMenuCommand(command)
Declare GetCurrentScintilla()
Declare ScintillaMsg(*point, msg, param1 = 0, param2 = 0)

; Константы NPP для вызовов функций
; Описание команд и уведомлений NPP http://docs.notepad-plus-plus.org/index.php/Messages_And_Notifications
; числовые значения констант NPP https://github.com/editorconfig/editorconfig-notepad-plus-plus/blob/master/src/Notepad_plus_msgs.hpp
; числовые значения констант Scintilla https://github.com/notepad-plus-plus/notepad-plus-plus/blob/master/scintilla/include/Scintilla.h

XIncludeFile "NNP_Const.pb"
;{
; Константы для получения экземпляра Scintilla
; #WM_USER = 1024
; #NPPMSG = #WM_USER + 1000
; #NPPM_GETCURRENTSCINTILLA = #NPPMSG + 4 ; для получения экземпляра Scintilla в режиме отображения сразу двух документов
; #NPPM_SETMENUITEMCHECK = #NPPMSG + 40 ; для установки / снятия галки с пункта меню

; Константы вызова меню
; #NPPM_MENUCOMMAND = 2024 + 48
; #IDM = 40000
; #IDM_SEARCH = (#IDM + 3000)
; #IDM_SEARCH_TOGGLE_BOOKMARK = (#IDM_SEARCH + 5) ; Переключить закладку в строке
; #IDM_SEARCH_REPLACE = (#IDM_SEARCH + 3)        ; показать окно поиска изамены

; Константы чтобы получить имя файла
; #FILE_NAME = 3
; #RUNCOMMAND_USER = (#WM_USER + 3000)
; #NPPM_GETFILENAME = #RUNCOMMAND_USER + #FILE_NAME

; Константы уведомления
; #NPPN_FIRST = 1000
; #NPPN_BUFFERACTIVATED = (#NPPN_FIRST + 10) ; пполезное уведомление при смене вкладки
; #NPPN_READY = (#NPPN_FIRST + 1)            ; уведомление что NPP и плагины загружены и можно обрабатывать уведомления
;}

; глобальные константы
Global *sciptr, post_processing = 1
; *sciptr - указатель Scintilla текущего документа
Global NppData.NppData ; создаём структуру NppData (3 дескриптора, NPP, Scintilla1, Scintilla2)
; Global PluginName.s = "Plugin name" ; Имя плагина, отображается в меню плагинов, см. getName() ниже

Prototype ScintillaDirect(sciptr, msg, param1 = 0, param2 = 0)
Global Scintilla.ScintillaDirect = 0

; Открываем DLL-файл чтобы получить из него функцию Scintilla_DirectFunction
If OpenLibrary(0, "SciLexer.dll")
   ; Если под номером 0 является открытая библиотека, получаем из её функцию Scintilla_DirectFunction
   If IsLibrary(0)
      Scintilla = GetFunction(0, "Scintilla_DirectFunction")
      CloseLibrary(0)
   ;    If Not Scintilla
   ;       ..... Завершение не сработало
   ;    EndIf
   EndIf
EndIf


; Начало блока: фатальная ошибка
; Это чтобы при фатальных ошибках выводить осмысленное сообщение с указанием строки, файла, типа ошибки
; Добавилось 4 Кб к DLL (зависит от числа команд/строк в исходнике), по крайней мере на время теста полезно.
CompilerIf #PB_Compiler_LineNumbering = 0
   CompilerError "Включите в настройках компилятора поддержку OnError"
;    CompilerError "Turn on compiler support OnError"
CompilerEndIf

Procedure FatalError()
   Protected Result.s

   Result = "Ошибка программы"
;    Result = "Program error"

   CompilerIf #PB_Compiler_LineNumbering
      Result + " в строке " + ErrorLine() + ", файла: " + GetFilePart(ErrorFile())
;       Result + " in line " + ErrorLine() + ", of file: " + GetFilePart(ErrorFile())
   CompilerEndIf

   Result + Chr(10) + Chr(10) + "Ошибка типа: " + Chr(34) + ErrorMessage() + Chr(34)
;    Result + Chr(10) + Chr(10) + "Type Error: " + Chr(34) + ErrorMessage() + Chr(34)
   MessageRequester("Ошибка программы!", Result, #MB_OK | #MB_ICONERROR)
;    MessageRequester("Program error!", Result, #MB_OK | #MB_ICONERROR)
EndProcedure
; Конец блока: фатальная ошибка

ProcedureDLL AttachProcess(Instance)
   ;
   ;<< Когда Notepad++ задействовал этот плагин при запуске Notepad++ >>
   ; Ваш код инициализации здесь

   OnErrorCall(@FatalError()) ; вызывает процедуру FatalError(), если произойдёт ошибка. Отсюда начинаем использовать её.
   ;

   If Scintilla
      Global Dim FuncsArray.FuncItem(2)   ; массив FuncsArray по структуре FuncItem, являющейся пунктами меню
      With FuncsArray(0)               ; 1) задаём элементы структуры, это будет пункт меню с горячей клавишей (которая не работает)
         \_itemName = "item 1"         ; Задаём имя пункта, отображается в меню плагина, дочерний к "Plugin name"
         \_pFunc = @item1()            ; Задаём имя процедуры item1, которая будет выполнятся при клике на пункте
         \_pShortcutKey = AllocateStructure(ShortcutKey) ; выделяем память для структуры горячей клавиши
         \_pShortcutKey\_isCtrl = #True              ; Будет ли нажат Ctrl (#True / #False)
         \_pShortcutKey\_isShift = #True              ; Будет ли нажат Shift (#True / #False)
         \_pShortcutKey\_isAlt = #True                 ; Будет ли нажат Alt (#True / #False)
         \_pShortcutKey\_key = #VK_NEXT              ; Собственно клавиша
      EndWith
      ; Делаем аналог предыдущего пункта
      With FuncsArray(1)
         \_itemName = "item 2" ; Задаём имя 2-го пункта
         \_pFunc = @item2()     ; Задаём имя процедуры item2 для 2-го пункта
   ;       \_init2Check = #True ; Здесь задаём будет ли элемент отмечен галкой,
   ;       \_init2Check = #False ; но это не значит, что изменение этого поля структуры будет влиять, см. ниже NPPM_SETMENUITEMCHECK
                          ; клавиши не создаём, они всё равно не работают
      EndWith
   ;    With FuncsArray(2) ; Пункт-разделитель, учитывайте индексы
   ;       \_itemName = ""
   ;    EndWith
   ; Пунктов можно делать сколько угодно, просто добавляем индекс к item, к элементу массива, и к размеру создаваемого массива (Dim)
   Else ; если не получили функцию из DLL, то добавляем один пункт в виде сообщения об ошибке
      Global Dim FuncsArray.FuncItem(1)
      With FuncsArray(0)
         \_itemName = "Error"
         \_pFunc = @itemError()
      EndWith
   EndIf
EndProcedure

ProcedureDLL DetachProcess(Instance)
   ;
   ;<< Когда Notepad++ удаляет этот плагин >>
   ; Ваш код очистки здесь
   ;
   Protected i
   For i = 0 To ArraySize(FuncsArray())
      FreeStructure(FuncsArray(i)\_pShortcutKey)
   Next
EndProcedure

; ==================================
; 5 Обязательные процедуры Notepad++
; ==================================

; NPP спрашивает, является ли плагин в юникоде, возвращаем "ДА"
ProcedureCDLL.i isUnicode()
   ProcedureReturn #PB_Compiler_Unicode
EndProcedure

; NPP спрашивает имя плагина
ProcedureCDLL.s getName()
;    ProcedureReturn PluginName
   ProcedureReturn "Plugin name" ; передаём имя плагина явно, чтобы не плодить переменных
EndProcedure

; NPP спрашивает, элементы меню, чтобы встроить их в меню "Плагины"
ProcedureCDLL.i getFuncsArray(*FuncsArraySize.Integer)
   *FuncsArraySize\i = ArraySize(FuncsArray()) ; Возвращаем ему размер массива структур пунктов меню
   ProcedureReturn @FuncsArray()           ; Возвращаем указатель на массив структур пунктов меню
EndProcedure

; Компиляция взависимости от x86 или x64
; setInfo выполняется при запуске программы и передаёт плагинам дескрипторы NPP, Scintilla1, Scintilla2
CompilerIf #PB_Compiler_Processor = #PB_Processor_x86

   ProcedureCDLL setInfo(*NppHandle, *ScintillaMainHandle, *ScintillaSecondHandle)
      ; Здесь мы заполняем элементы нашей структуры NppData, то есть получаем от NPP дескприторы NPP, Scintilla1, Scintilla2
      NppData\_nppHandle = *NppHandle
      NppData\_scintillaMainHandle = *ScintillaMainHandle
      NppData\_scintillaSecondHandle = *ScintillaSecondHandle
      ;
      ;<< Когда инфа Notepad++ изменилась >>
      ; Ваш код здесь
      ;
   EndProcedure

CompilerElse ; иначе для x64

   ProcedureCDLL setInfo(*Npp.NppData)

      CopyStructure(*Npp, NppData, NppData) ; копируем структуру переданную из NPP в нашу
      ;
      ;<< Когда инфа Notepad++ изменилась >>
      ; Ваш код здесь
   EndProcedure

CompilerEndIf


; УВЕДОМЛЕНИЯ, что мы получаем в структуре SCNotification
; Переписываем данные из структуры в переменные
; code=             *SCNotification.SCNotification\nmhdr\code
; pos=              *SCNotification.SCNotification\Position
; ch=               *SCNotification.SCNotification\ch
; modificationType= *SCNotification.SCNotification\modifiers
; text=             *SCNotification.SCNotification\text
; Length=           *SCNotification.SCNotification\length
; linesAdded=       *SCNotification.SCNotification\linesAdded
; message=          *SCNotification.SCNotification\message
; wParam=           *SCNotification.SCNotification\wParam
; lParam=           *SCNotification.SCNotification\lParam
; line=             *SCNotification.SCNotification\line
; foldLevelNow=     *SCNotification.SCNotification\foldLevelNow
; foldLevelPrev=    *SCNotification.SCNotification\foldLevelPrev
; margin=           *SCNotification.SCNotification\margin
; listType=         *SCNotification.SCNotification\listType
; x=                *SCNotification.SCNotification\x
; y=                *SCNotification.SCNotification\y

ProcedureCDLL beNotified(*SCNotification.SCNotification)
   Protected i
   ; Если вы не используете уведомления, а только пункты меню, просто удалите конструкцию от "With *SCNotification" до "EndWith"
   ;<< Когда было получено уведомление scintilla Notepad++ >>
   ; Ваш код здесь

   With *SCNotification
      Select \nmhdr\code
;          Case #NPPN_READY ; Notepad++ загружен, теперь можно обрабатывать уведомления
;             post_processing = 0 ; флаг полезен если используются уведомления, чтобы они не работали когда NPP в процессе запуска
         Case #NPPN_BUFFERACTIVATED ; реагируем на смену вкладки
            *sciptr = SendMessage_(GetCurrentScintilla(), #SCI_GETDIRECTPOINTER, 0, 0) ; дескриптор текущего экземпляра scintilla
;             мы можем получать *sciptr при выполнении пункта меню, а не запрашивать его при смене вкладки, это зависит как часто происходит запрос
;          Case #SCN_SAVEPOINTLEFT ; точка сохранения оставлена, файл требует сохранения
;             flag_not_save = 1
;          Case #SCN_SAVEPOINTREACHED ; произошло сохранение документа
;             flag_not_save = 0
;          Case #SCN_MODIFIED ; реакция на модификацию документа (плаг пометки изменений)
;             Select #True
;                Case Bool(\modificationType & 1) ; если в типе модификации есть флаг вставки SC_MOD_INSERTTEXT, то (ввод символа или Ctrl+V)
;                   If post_processing ; пример запрета уведомления на запуске
;                      ProcedureReturn
;                   EndIf
;                Case Bool(\modificationType & 2) ; если в типе модификации есть флаг удаления SC_MOD_DELETETEXT, то (удаление символа или выделенного)
;                   If post_processing ; пример запрета уведомления на запуске
;                      ProcedureReturn
;                   EndIf
;             EndSelect
;          Case #NPPN_LANGCHANGED ; изменить синтаксис документа, например с AutoIt3 на PureBasic
;             SetWindowTitle(#Window_0, GetExt())
;          Case #SCN_CHARADDED ; реакция на ввод символа (плаг автозавершение)
;             Select \ch
;                Case 'a' To 'z',  'A' To 'Z', '0' To '9', '_'
;                   SetWindowTitle(#Window_0 , Chr(\ch))
;                Default
;                   SetWindowTitle(#Window_0 , Chr(\ch))
;             EndSelect
      EndSelect
      ; Придумать вывод в консоль

;    Что мы можем получить в уведомлении
;    LineStart = ScintillaMsg(*sciptr, #SCI_LINEFROMPOSITION, \position)           ; Получаем номер строки начала вставки
;    LineEnd = ScintillaMsg(*sciptr, #SCI_LINEFROMPOSITION, \position + \Length)     ; Получаем номер строки конец вставки
;    LengthDoc = ScintillaMsg(*sciptr, #SCI_GETLENGTH) ; длина текста
;    CountLine = ScintillaMsg(*sciptr, #SCI_GETLINECOUNT) ; возвращает количество строк
;    For i = 0 To CountLine
;       выполнить пошаговые операции со строками
;    Next

   EndWith
EndProcedure


ProcedureCDLL.i messageProc(Message, wParam, lParam)
   ;
   ;<< Когда было получено windows-сообщение Notepad++ >>
   ; Ваш код здесь
   ;
   ProcedureReturn #True
EndProcedure

; ==================================
; Ещё несколько системных процедур
; ==================================

; Это оболочка функции Scintilla, полученной из SciLexer.dll,
; проверяет, что существует указатель функции и указатель экземляра
; А также передаёт по умолчанию последние два параметра если пользователь их не задал явно.
; !!! Если заранее сделать проверку Scintilla на запуске и учёт обязательных 4-х параметров, то от оболочки можно избавиться !!!
Procedure ScintillaMsg(*point, msg, param1 = 0, param2 = 0)
   If Scintilla And *point
      ProcedureReturn Scintilla(*point, msg, param1, param2) ; Scintilla - прототип функции Scintilla_DirectFunction
   Else
      ProcedureReturn 0
   EndIf
EndProcedure

; Процедура для определения текущего окна Scintilla, одного из двух
Procedure GetCurrentScintilla()
   Protected instance_sci
   SendMessage_(NppData\_nppHandle, #NPPM_GETCURRENTSCINTILLA, 0, @instance_sci)
   If instance_sci
      ProcedureReturn NppData\_scintillaSecondHandle
   Else
      ProcedureReturn NppData\_scintillaMainHandle
   EndIf
EndProcedure

; любой пункт меню можно выполнить используя константы #IDM_...
Procedure NppMenuCommand(IDM_COMMAND)
   SendMessage_(NppData\_nppHandle, #NPPM_MENUCOMMAND, 0, IDM_COMMAND)
EndProcedure

; ==================================
; Ваши процедуры плагина
; ==================================

Procedure item1()
   If post_processing
      post_processing = 0
      SendMessage_(NppData\_nppHandle, #NPPM_SETMENUITEMCHECK, FuncsArray(0)\_cmdID, 1) ; Пример переключения галки пункта меню
   Else
      post_processing = 1
      SendMessage_(NppData\_nppHandle, #NPPM_SETMENUITEMCHECK, FuncsArray(0)\_cmdID, 0)
   EndIf
EndProcedure

Procedure item2()
;    Protected
   ScintillaMsg(*sciptr, #SCI_GOTOLINE, 1)
   NppMenuCommand(#IDM_SEARCH_TOGGLE_BOOKMARK)
   ScintillaMsg(*sciptr, #SCI_GOTOPOS, 1)
EndProcedure

Procedure itemError()
   MessageRequester("Ошибка", "Не удалось найти SciLexer.dll", #MB_OK | #MB_ICONERROR)
;    MessageRequester("Error", "Could not find SciLexer.dll", #MB_OK | #MB_ICONERROR)
EndProcedure

Page 1 of 1 All times are UTC + 1 hour
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/