Community
    • Login

    Pythonscript set-selection question

    Scheduled Pinned Locked Moved Help wanted · · · – – – · · ·
    7 Posts 2 Posters 2.6k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Alan KilbornA
      Alan Kilborn
      last edited by

      It is my experience that whenever you have selected text, one end or the other of it will have a flashing cursor. Thus, I was surprised to see that after executing some Pythonscript code that modifies a rectangular selection (user makes a column block, then invokes script), that what results (intended to be multiple single line blocks of various lengths, all starting at the original left column) has at least one odd selection which has no cursor touching it. See video, at about 8 seconds the script is run:

      The odd line is line 78 (and maybe line 84). Is this a valid situation or some sort of bug?

      Claudia FrankC 1 Reply Last reply Reply Quote 0
      • Claudia FrankC
        Claudia Frank @Alan Kilborn
        last edited by

        Hi Alan,

        the gif indicates that this happens after a replace operation, is this the case?
        If so, did you recalculate the selection afterwards? Do you mess with virtualspaceoptions?

        Cheers
        Claudia

        Alan KilbornA 1 Reply Last reply Reply Quote 0
        • Alan KilbornA
          Alan Kilborn @Claudia Frank
          last edited by

          @Claudia-Frank

          Hello Claudia!

          Yes it is a replace operation and yes virtual space can be in play here. My goal is to analyze what changed from the replace and then set new multiple selections based upon that. Note that before the script is run we have a true rectangular block (which may contain virtual spaces). Afterward it won’t be that any more but will be “N” selections of various “widths”, on “N” consecutive lines (N=height of pre-script-run column selection). Maybe I’m just doing it wrong. Do I have to set the selection to “nothing” before beginning to set a different selection(s)?

          I’m not sure what you mean by “recalculate the selection afterwards”. For each line I grab original content into a variable, then do the replace, then compare the line’s new content to the original to determine how I want to set the selection I will leave active for that line.

          Any hints would be great as I find “selection-set” stuff a bit hard to understand in PS!

          A related question is how to actually set a true rectangular selection in code. Whenever I’ve tried to do this, actions performed after it seem like they are acting on “N” different selections of stream type, not one selection of rectangular type. I can’t be more specific right now but I know this has come up for me in the past.

          Claudia FrankC 1 Reply Last reply Reply Quote 0
          • Claudia FrankC
            Claudia Frank @Alan Kilborn
            last edited by

            @Alan-Kilborn

            Alan, what I was thinking about it is something like this.
            Assuming a text like

            '''
            abc-abc-abc
            b
            bb
            bbb
            bbbb
            bbb
            abc-abbbc-abc
            abc-abc-abc
            '''
            

            with a rectangular selection of (8, 49)

            and you want to replace ‘bb’ within the selection with a code like this

            user_selection = editor.getUserCharSelection()
            for i in xrange(editor.getSelections()):
                editor.setTargetStart(editor.getSelectionNStart(i))
                editor.setTargetEnd(editor.getSelectionNEnd(i))
                if editor.searchInTarget('bb') > -1:
                    editor.replaceTarget(editor.getTextRange(editor.getTargetStart(), editor.getTargetEnd()).replace('bb',''))
            

            will result in

            because parts of the selections have been replaced. Now it depends what you want to achieve
            because if you want to have the initial selection parameters and add code like

            editor.setRectangularSelectionAnchor(user_selection[0])
            editor.setRectangularSelectionCaret(user_selection[1])
            

            after replacement code, selection will expand.

            So you might consider reducing the resulting selection by the amount of text to be replaced.

            Makes this sense to you? Or did I misunderstood your initial question?

            Cheers
            Claudia

            1 Reply Last reply Reply Quote 0
            • Alan KilbornA
              Alan Kilborn
              last edited by

              Well my original question was intended to be “How can I have some selected text without a blinking caret at one end of it or the other?” Like on ine 78 in my gif.

              However, getting into my real goal…I’d like to do the replacement and have selections on each line remain that reflect what happened during the replacement.

              The partial line selections could either:

              • get shorter (so the section for that line would reduce), possibly even down to zero (in which case only a blinking caret would remain in the column of the original rect block’s left side)
              • get longer (so the section for that line would extend)
              • stay the same length (in which case the selection highlight for a given line wouldn’t change)

              So maybe this text:

              abcdefghijklmnopqrstuvwxyz
              abcdefghijklmnopqrstuvwxyz
              abcdefghijklmnopqrstuvwxyz
              abcdefghijklmnopqrstuvwxyz
              abcdefghijklmnopqrstuvwxyz

              gets column-selected by the user like this:

              Imgur

              then a script runs a replacement and the desired selection after running looks something like this (note, just a selection demo as the text doesn’t change):

              Imgur

              In this demo each line is consistent…a selection (starting in the column of the original rectangular block’s left side column) with blinking cursor at the right-end of the selection.

              I’m finding this difficult as I can get into situations like on line 78 and I don’t know what to think about that…I don’t know, I’ll keep experimenting with it.

              Claudia FrankC 1 Reply Last reply Reply Quote 0
              • Claudia FrankC
                Claudia Frank @Alan Kilborn
                last edited by

                I’d like to do the replacement and have selections on each line remain that reflect what happened during the replacement.

                Not sure if this can be solved using selection functions but is it needed to have a selection
                or could you use indicators (like smart highlighting) instead?

                Cheers
                Claudia

                Alan KilbornA 1 Reply Last reply Reply Quote 0
                • Alan KilbornA
                  Alan Kilborn @Claudia Frank
                  last edited by

                  @Claudia-Frank

                  No worries, Claudia…I can let it go; it’s not that important…I withdraw the question(s).
                  :)

                  1 Reply Last reply Reply Quote 0
                  • First post
                    Last post
                  The Community of users of the Notepad++ text editor.
                  Powered by NodeBB | Contributors