• Login
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.
  • A
    Alan Kilborn
    last edited by Oct 19, 2017, 7:12 PM

    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?

    C 1 Reply Last reply Oct 20, 2017, 11:33 AM Reply Quote 0
    • C
      Claudia Frank @Alan Kilborn
      last edited by Oct 20, 2017, 11:33 AM

      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

      A 1 Reply Last reply Oct 20, 2017, 1:26 PM Reply Quote 0
      • A
        Alan Kilborn @Claudia Frank
        last edited by Oct 20, 2017, 1:26 PM

        @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.

        C 1 Reply Last reply Oct 20, 2017, 9:35 PM Reply Quote 0
        • C
          Claudia Frank @Alan Kilborn
          last edited by Oct 20, 2017, 9:35 PM

          @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
          • A
            Alan Kilborn
            last edited by Oct 23, 2017, 3:18 PM

            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.

            C 1 Reply Last reply Oct 24, 2017, 9:27 PM Reply Quote 0
            • C
              Claudia Frank @Alan Kilborn
              last edited by Oct 24, 2017, 9:27 PM

              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

              A 1 Reply Last reply Oct 25, 2017, 3:29 PM Reply Quote 0
              • A
                Alan Kilborn @Claudia Frank
                last edited by Oct 25, 2017, 3:29 PM

                @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
                2 out of 7
                • First post
                  2/7
                  Last post
                The Community of users of the Notepad++ text editor.
                Powered by NodeBB | Contributors