NppExec v0.6.2 has been released!



  • NppExec v0.6.2:

    • changed: now NppExec uses CreateFile+FILE_FLAG_WRITE_THROUGH while writing
      files to avoid filling with zero bytes on system shutdown.
    • changed: now NppExec changes the current directory to %TEMP% when an unnamed
      file (such as “new 1”) is activated and “Follow $(CURRENT_DIRECTORY)” is on.
      To revert to the old behavior (the current directory is not changed when an
      unnamed file is activated), set the manual option “Cd_UnnamedFile” to 0.
    • added: now NppExec supports “cloud location path” in Notepad++'s settings.
      With cloud location path specified in Notepad++'s settings, NppExec does
      the following:
      • On start, NppExec tries to read its configuration files from the cloud
        location path. If these files do not exist or are filled with NULs,
        NppExec reads its configuration from $(PLUGINS_CONFIG_DIR).
      • When NppExec saves its configuration files, first they are saved to
        $(PLUGINS_CONFIG_DIR) and then copied to the cloud location path. Thus,
        NppExec always has copies of its current configuration files within the
        $(PLUGINS_CONFIG_DIR) folder.
      • NppExec’s saved scripts - the “npes_saved.txt” file - are monitored in
        the cloud location path. So, if you manually edit the “npes_saved.txt”
        within the cloud location, NppExec detects it. If, however, you manually
        edit the “npes_saved.txt” within the $(PLUGINS_CONFIG_DIR) folder, it is
        ignored.
        When the cloud location path is not specified in Notepad++'s settings,
        NppExec reads and stores its configuration within $(PLUGINS_CONFIG_DIR).
        And the “npes_saved.txt” is monitored in that folder.
    • added: $(NPP_FULL_FILE_PATH), $(CLOUD_LOCATION_PATH)
    • added: indirect variable reference, e.g. $($(name)). Examples:
      set local c = 123 // $(c) = 123
      set local b = c // $(b) = c
      set local a = $($(b)) // $(a) = $($(b)) = $(c) = 123
      set local $($(b)) = 456 // $(c) = 456
      unset local $($(b)) // deletes $(c)
      set local i = # // $(i) = #
      set local j = 1 // $(j) = 1
      echo $($(i)$(j)) // echo $(#1)
    • changed: now the variables $(ARGC), $(ARGV), $(ARGV[1]) and so on support
      the indirect variable reference (see above)
    • added: Ctrl+Break in the Console aborts the currently running script

    As always, get it either here:
    https://github.com/d0vgan/nppexec/releases/tag/v062
    or here:
    https://sourceforge.net/projects/npp-plugins/files/NppExec/NppExec Plugin v0.6.2/

    Have fun!



  • @Vitaliy-Dovgan said in NppExec v0.6.2 has been released!:

    NppExec v0.6.2:

    Already installed and experimenting. I like the indirect variable references - probably need to relook at some of my scripts - I know that would have come in handy in the past.

    Thanks for continued support of this great plugin!

    Cheers.



  • Hello, @vitaliy-dovgan and All,

    As administrator, I took the liberty to modify slightly your post, because of a side-effect of the Markdown syntax !

    Indeed, when you write :

    set local c = 123 // $(c) = 123
    

    we get this sentence:

    set local c = 123 // $© = 123

    And so, I modified this sentence, and the other ones containing $(c), with :

    set local c = 123 // $\(c\) = 123
    

    which correctly displays :

    set local c = 123 // $(c) = 123


    Many thanks for your continued support and enhancements of this main N++ plugin !

    Best Regards,

    guy038



  • @Vitaliy-Dovgan

    Maybe not possible, maybe an enhancement if not - can I get the return “value” of an NppExec script? I see I can get the exit status:

    $(LAST_CMD_RESULT)  :  result of the last NppExec's command
                             (1 - succeeded, 0 - failed, -1 - invalid arg)
    

    It would be incredible if I could run an NppExec script as a “subroutine” for input to another:

    SET LOCAL RESULT = NPP_EXEC my_script
    

    My thought would be to create a getopt-like script similar to:

    ::getopt
    SET LOCAL START = 0
    SET LOCAL END ~ $(ARGC) - 1
    IF $(START)==$(END) GOTO END
    :LOOP
    ECHO $(ARGV[$(START)])
    SET LOCAL START ~ $(START) + 1
    IF $(START)<=$(END) GOTO LOOP
    :END
    

    Instead of ECHO, I could concat the args into a variable and return that - just thinking about uses for the new indirect variable reference expansion.

    Cheers.



  • @Michael-Vincent
    If I understand the idea correctly, the same goal can be achieved by setting a non-local variable within a script. E.g.

    set x = 1
    set s = abc ded
    

    will make these variables available everywhere (inside a script, outside a script, inside other scripts) until unset is called for them.



  • @Vitaliy-Dovgan said in NppExec v0.6.2 has been released!:

    achieved by setting a non-local variable within a script

    I hadn’t considered that but yes, that would do it. NPP_EXEC returns to where it was called acting like a subroutine call and we can use SET (not LOCAL) to store the return value.

    Thanks for that!

    Cheers.


Log in to reply