Re: Optimize Notification processing

Jean Lalonde <[email protected]> Sun, 18 May 2025 14:40:40 -0700 (PDT)
Newsgroups gmane.comp.lib.scintilla.devel
Message-ID <[email protected]>
Thanks for the help Mitchell.

Sorry but I'm (easily) confused. And I'm not very familiar with events and 
masks...

> I could be wrong, but you may be able to get away with just listening for 
`SCN_UPDATEUI` and `SCN_CHARADDED` and setting the mod mask to 0 to ignore 
them all:
> - For `SCN_UPDATEUI`, `updated & (SC_UPDATE_CONTENT | 
SC_UPDATE_SELECTION) > 0` can be used for detecting position, content and 
selection changes.
> - For `SCN_CHARADDED`, if `ch` is 10, the user pressed enter and you can 
perform auto-indent.

How would you translate this into pseudo code? What does mean " setting the 
mod mask to 0 to ignore them all"?

I tested the mask o_Sci.SETMODEVENTMASK(SCN_UPDATEUI|SCN_CHARADDED) and 
logged the events.  I'm getting SCN_UPDATEUI and SCN_CHARADDED events but 
also other types as shown by the following extracts (only one by type) from 
my log file:

20250518@17:17:20.199 SciOnNotify obj.SCNCode 2007 SCN_UPDATEUI
20250518@17:17:20.200 SciOnNotify obj.modType 0
20250518@17:17:20.205 SciOnNotify obj.Ch 0
20250518@17:17:20.210 SciOnNotify obj.modifiers 0

20250518@17:17:21.039 SciOnNotify obj.SCNCode 2000 SCN_STYLENEEDED
20250518@17:17:21.039 SciOnNotify obj.modType 0
20250518@17:17:21.045 SciOnNotify obj.Ch 0
20250518@17:17:21.050 SciOnNotify obj.modifiers 0

20250518@17:17:21.204 SciOnNotify obj.SCNCode 2028 UNKNOWN_2028
20250518@17:17:21.204 SciOnNotify obj.modType 0
20250518@17:17:21.211 SciOnNotify obj.Ch 0
20250518@17:17:21.217 SciOnNotify obj.modifiers 0

20250518@17:17:21.279 SciOnNotify obj.SCNCode 2013 SCN_PAINTED
20250518@17:17:21.284 SciOnNotify obj.modType 0
20250518@17:17:21.290 SciOnNotify obj.Ch 0
20250518@17:17:21.297 SciOnNotify obj.modifiers 0

20250518@17:17:23.662 SciOnNotify obj.SCNCode 2008 SCN_MODIFIED
20250518@17:17:23.662 SciOnNotify obj.modType 4466765987840
20250518@17:17:23.669 SciOnNotify obj.Ch 0
20250518@17:17:23.675 SciOnNotify obj.modifiers 0

When adding a new line:

20250518@17:17:23.740 SciOnNotify obj.SCNCode 2001 SCN_CHARADDED
20250518@17:17:23.744 SciOnNotify obj.modType 0
20250518@17:17:23.750 SciOnNotify obj.Ch 55834574848
20250518@17:17:23.756 SciOnNotify obj.modifiers 13
20250518@17:17:23.763 SciOnNotify obj.SCNCode 2001 SCN_CHARADDED
20250518@17:17:23.768 SciOnNotify obj.modType 0
20250518@17:17:23.773 SciOnNotify obj.Ch 42949672960
20250518@17:17:23.779 SciOnNotify obj.modifiers 10

20250518@17:17:26.345 SciOnNotify obj.SCNCode 2029 UNKNOWN_2029
20250518@17:17:26.345 SciOnNotify obj.modType 0
20250518@17:17:26.352 SciOnNotify obj.Ch 0
20250518@17:17:26.358 SciOnNotify obj.modifiers 0

20250518@17:17:27.710 SciOnNotify obj.SCNCode 2028 UNKNOWN_2028
20250518@17:17:27.710 SciOnNotify obj.modType 0
20250518@17:17:27.717 SciOnNotify obj.Ch 0
20250518@17:17:27.723 SciOnNotify obj.modifiers 0

FYI, I'm using Scintilla.DLL v3.7.6 with a wrapper written in AutoHotkey v1.

Le dimanche 18 mai 2025 à 15 h 57 min 04 s UTC-4, Mitchell a écrit :

> Hi,
>
> > On May 18, 2025, at 3:40 PM, Jean Lalonde <[email protected]> wrote:
> > 
> > Hi,
> > 
> > I'd like to check with you if I have the optimal setting to minimize the 
> number of notifications but get all those I need to update the status bar 
> with the length of text in the editor, length of selected text, position of 
> the caret (line, column), etc. and to process line auto-indentation (as 
> explained in Scintilla Usage Notes).
> > 
> > I'm setting this event mask:
> > 
> > o_Sci.SETMODEVENTMASK(SCN_MODIFIED) ; eventMask can be SCN_MODIFIED or 
> SC_MOD_INSERTTEXT|SC_MOD_DELETETEXT
>
> I could be wrong, but you may be able to get away with just listening for 
> `SCN_UPDATEUI` and `SCN_CHARADDED` and setting the mod mask to 0 to ignore 
> them all:
> - For `SCN_UPDATEUI`, `updated & (SC_UPDATE_CONTENT | SC_UPDATE_SELECTION) 
> > 0` can be used for detecting position, content and selection changes.
> - For `SCN_CHARADDED`, if `ch` is 10, the user pressed enter and you can 
> perform auto-indent.
>
> Cheers,
> Mitchell
>
> > 
> > I'm setting the notification handler with this:
> > 
> > o_Sci.NOTIFY := "SciOnNotify"
> > 
> > And inside SciOnNotify(), I first update the status bar:
> > 
> > if (obj.SCNCode == SCN_CHARADDED and obj.Modifiers = 10) ; 
> SCN_CHARADDED:=2001, 10 for LF
> > {
> > Gosub, AutoIndent
> > }
> > 
> > ... and update the status bar:
> > 
> > if (obj.SCNCode = SCN_MODIFIED) ; SCN_MODIFIED:=2008
> > and (obj.ModType != 20) ; SC_MOD_CHANGESTYLE := 0x4 | SC_PERFORMED_USER 
> := 0x10 = 0x14 = 20
> > {
> > Gosub, UpdateStatusbar
> > }
> > 
> > This works for what I need. But can it be optimized?
> > 
> > Thanks you for your input.
> > 
> > -- 
> > You received this message because you are subscribed to the Google 
> Groups "scintilla-interest" group.
> > To unsubscribe from this group and stop receiving emails from it, send 
> an email to [email protected].
> > To view this discussion visit 
> https://groups.google.com/d/msgid/scintilla-interest/ea0c2cfa-4f75-450a-bf53-6ca85121e586n%40googlegroups.com
> .
>
>

-- 
You received this message because you are subscribed to the Google Groups "scintilla-interest" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].
To view this discussion visit https://groups.google.com/d/msgid/scintilla-interest/e284991d-c5ec-42bd-880a-804a0b02cca6n%40googlegroups.com.