[plugin development] Correctly handling npp indentation



  • Hello community,

    The context :
    I’m currently creating a npp plugin to help my co-workers programming in “4GL progress”.
    I already have a pretty good UDL xml which color the synthax nicely and allow the use of smart indentation to be pretty efficient.

    The problem :
    The only problem is that i need to indent only for 1 line after the “THEN” keyword (think of it as a block of 1 line) and i can’t do that with the non-less awesome UDL2.0.

    My thoughts :
    I was thinking about handling the SCN_CHARADDED notification, check for new lines and set the current line (which is the new line) indentation to what i want.
    Expect it doesn’t work. It looks like npp correct the line indentation AFTER what im doing during the notification.
    Same goes for SCN_MODIFIED and checking for lines added.

    The question :
    Can you think of a solution to overwrite npp’s auto-indentation? Or do you know if i can Send_message something to npp to deactivate auto-indentation in npp?

    (Sorry for the double post, i posted in the wrong place and couldn’t delete the first topic…)
    ++



  • I had to do something similar in one of my plugins. What I did was catch the SCN_CHARADDED and then waited for SCN_UPDATEUI to actually modify any text. See this section of my plugin.



  • Wow thank you very much dail! I found a solution but yours is so much cleaner =)

    I adapted your solution in C#, ill post it here if it can help someone else

    In a static class:

    public static Action ActionAfterUpdateUi { get; set; }
    

    On SCN_CHARADDED, define your action :

    ActionAfterUpdateUi = () => {
      Npp.SetCurrentLineRelativeIndent(0);
    };
    

    On SCN_CHARADDED, define your action :

    ActionAfterUpdateUi = () => {
      Npp.SetCurrentLineRelativeIndent(0);
    };
    

    On SCN_UPDATEUI, execute the action :

    if (Plug.ActionAfterUpdateUi != null) {
        Plug.ActionAfterUpdateUi();
        Plug.ActionAfterUpdateUi = null;
    }
    

    Thanks again dail!



  • Glad this worked for you. Also glad you took time to describe the problem in the original post. Most people post a sentence or two and expect others to know exactly what they want! :)