It is currently Tue Dec 10, 2019 8:07 am

All times are UTC + 1 hour




Post new topic Reply to topic  [ 11 posts ] 
Author Message
 Post subject: Notepad++ plugin
PostPosted: Wed May 11, 2016 7:14 am 
Offline
Addict
Addict
User avatar

Joined: Mon May 26, 2003 3:07 pm
Posts: 1477
Location: Nantes
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

_________________
Imagewin8.1 x64 5.31 | IDE | PB plugin | Tools | Sprite | JSON | visual tool


Top
 Profile  
Reply with quote  
 Post subject: Re: Notepad++ plugin
PostPosted: Thu May 12, 2016 1:07 am 
Offline
Addict
Addict
User avatar

Joined: Mon May 26, 2003 3:07 pm
Posts: 1477
Location: Nantes
Update
- menu creation

_________________
Imagewin8.1 x64 5.31 | IDE | PB plugin | Tools | Sprite | JSON | visual tool


Top
 Profile  
Reply with quote  
 Post subject: Re: Notepad++ plugin
PostPosted: Thu May 12, 2016 2:04 am 
Offline
Addict
Addict
User avatar

Joined: Tue Nov 09, 2010 10:15 pm
Posts: 1573
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.


Top
 Profile  
Reply with quote  
 Post subject: Re: Notepad++ plugin
PostPosted: Thu May 12, 2016 9:04 am 
Offline
Addict
Addict
User avatar

Joined: Wed Apr 30, 2003 8:15 am
Posts: 990
Location: Germany
Thank you eddy! Well suited for learning purposes.

_________________
"Daddy, I'll run faster, then it is not so far..."


Top
 Profile  
Reply with quote  
 Post subject: Re: Notepad++ plugin
PostPosted: Thu Feb 14, 2019 7:04 am 
Offline
User
User

Joined: Sun May 14, 2017 1:48 am
Posts: 22
how to get #NPPM_GETCURRENTSCINTILLA?
only WM_SIZE (=5) comes to messageProc


Top
 Profile  
Reply with quote  
 Post subject: Re: Notepad++ plugin
PostPosted: Thu Feb 14, 2019 7:55 am 
Offline
User
User

Joined: Sun Jun 16, 2013 6:27 am
Posts: 89
Location: Tasmania (Australia)
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


Top
 Profile  
Reply with quote  
 Post subject: Re: Notepad++ plugin
PostPosted: Thu Feb 14, 2019 11:10 am 
Offline
User
User

Joined: Sun May 14, 2017 1:48 am
Posts: 22
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


Top
 Profile  
Reply with quote  
 Post subject: Re: Notepad++ plugin
PostPosted: Thu Feb 21, 2019 2:43 am 
Offline
User
User

Joined: Sun May 14, 2017 1:48 am
Posts: 22
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?


Top
 Profile  
Reply with quote  
 Post subject: Re: Notepad++ plugin
PostPosted: Thu Feb 21, 2019 5:20 am 
Offline
User
User

Joined: Sun Jun 16, 2013 6:27 am
Posts: 89
Location: Tasmania (Australia)
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


Top
 Profile  
Reply with quote  
 Post subject: Re: Notepad++ plugin
PostPosted: Thu Feb 21, 2019 6:14 am 
Offline
User
User

Joined: Sun May 14, 2017 1:48 am
Posts: 22
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


Top
 Profile  
Reply with quote  
 Post subject: Re: Notepad++ plugin
PostPosted: Sun Apr 07, 2019 1:46 pm 
Offline
User
User

Joined: Sun May 14, 2017 1:48 am
Posts: 22
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


Top
 Profile  
Reply with quote  
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 11 posts ] 

All times are UTC + 1 hour


Who is online

Users browsing this forum: No registered users and 12 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
Jump to:  

 


Powered by phpBB © 2008 phpBB Group
subSilver+ theme by Canver Software, sponsor Sanal Modifiye