Re: [code] [textadept] Caret horizontal position jumps after buffer switch -- FIXED

From: Mitchell <m.att.foicica.com>
Date: Fri, 20 Sep 2019 18:25:52 -0400 (EDT)

Hi Qwerky,

On Thu, 19 Sep 2019, Qwerky wrote:

> Hi Mitchell,
>
> On 2019-09-19 12:20, Mitchell wrote:
>> Hi Qwerky,
>>
>> On Wed, 18 Sep 2019, Qwerky wrote:
>>
>>> Hi Mitchell,
>>>
>>> On 2019-08-07 17:48, Qwerky wrote:
>>>>
>>>>
>>>> On 2019-08-07 09:07, Mitchell wrote:
>>>>> Hi,
>>>>>
>>>>> On Tue, 6 Aug 2019, Qwerky wrote:
>>>>>
>>>>>>
>>>>>> On 2019-08-06 15:47, Qwerky wrote:
>>>>>>>
>>>>>>>
>>>>>>> On 2019-08-06 13:42, Mitchell wrote:
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> On Tue, 6 Aug 2019, Qwerky wrote:
>>>>>>>>
>>>>>>>>> Hi.  In my /USERHOME/init.lua, I have buffer.caret_sticky set to
>>>>>>>>> buffer.CARETSTICKY_OFF (the default, confirmed to be '0'); I have
>>>>>>>>> also
>>>>>>>>> tried
>>>>>>>>> the other sticky options.  Regardless, the caret's horizontal
>>>>>>>>> position
>>>>>>>>> changes from what it was previously in a buffer, to a different
>>>>>>>>> position
>>>>>>>>> when
>>>>>>>>> switching back to that buffer (happens for all buffers).
>>>>>>>>>
>>>>>>>>> With two (or more) buffers open, place caret in buffer one at known
>>>>>>>>> column,
>>>>>>>>> eg. 10, and place caret in buffer two at different known column, eg.
>>>>>>>>> 20.
>>>>>>>>> From
>>>>>>>>> buffer one, switch to buffer two.  Move caret up a line and back
>>>>>>>>> down
>>>>>>>>> again.
>>>>>>>>> Switch back to buffer one, and move caret up (or down) a line. 
>>>>>>>>> Caret
>>>>>>>>> jumps
>>>>>>>>> from column 10 to column 20.
>>>>>>>>>
>>>>>>>>> Is there some other setting that is responsible for this (I have
>>>>>>>>> searched!)?
>>>>>>>>
>>>>>>>> I think the simplest explanation is that caret sticky is not a
>>>>>>>> per-buffer
>>>>>>>> setting, but a per-view one.
>>>>>>>>
>>>>>>>> Textadept does its best to try and differentiate between buffers and
>>>>>>>> views
>>>>>>>> as we know them, but Scintilla doesn't always make this easy.
>>>>>>>>
>>>>>>>> Cheers,
>>>>>>>> Mitchell
>>>>>>>
>>>>>>> Hi Mitchell,
>>>>>>>
>>>>>>> Thanks.  I can't say I fully understand, but accept your word on it.
>>>>>>> When
>>>>>>> I look at the code in /core/ui.lua for switching between buffers, it
>>>>>>> seems
>>>>>>> to be saving/restoring the the caret location (which I believe
>>>>>>> includes
>>>>>>> both line and column), so I don't really understand why the caret
>>>>>>> jumps
>>>>>>> that way.  And I'm unsure what code modifications would correct the
>>>>>>> issue.
>>>>>>> However, if someone saw a way to do so, I would not be averse to
>>>>>>> modifying
>>>>>>> the (Lua) code, as long as it doesn't mean recompiling. :-)
>>>>>>>
>>>>>>> qwerky
>>>>>>>
>>>>>> Hi Mitchell,
>>>>>>
>>>>>> This is just a hack, but it seems to correct the issue: In the
>>>>>> 'events_connect(events.BUFFER_AFTER_SWITCH)' function of /core/ui.lua,
>>>>>> just
>>>>>> before the end of the function (immediately following the line
>>>>>> 'buffer.x_offset = buffer._x_offset or 0'), I placed the two lines
>>>>>> 'buffer.char_right()' and 'buffer.char_left()'.
>>>>>>
>>>>>> It seems that after the switch, the caret position is restored, but not
>>>>>> somehow anchored to where it should be, so it looses track when the
>>>>>> caret
>>>>>> is
>>>>>> moved to a new line (up or down).  The above hack just moves the caret
>>>>>> right/left to anchor that position, before the user can move the caret
>>>>>> to
>>>>>> a
>>>>>> new line, and is invisible to the user.  But I'm sure that you will
>>>>>> know
>>>>>> the
>>>>>> correct way to fix it.
>>>>>
>>>>> I have committed a proper fix[1]. Thanks for looking into this!
>>>>>
>>>>> Cheers,
>>>>> Mitchell
>>>>>
>>>>> [1]: https://foicica.com/hg/textadept/rev/e74361d427dd
>>>>
>>>> Hi Mitchell,
>>>>
>>>> Thanks.  Your fix is working well for me.  I even tried it with 'sticky'
>>>> on, and it seemed to work well still.  :-)
>>>>
>>>> qwerky
>>>>
>>> While this fix works in the general case, I'm sorry to report that it does
>>> not work when virtual space is involved.  I've implemented a fix in ui.lua
>>> as
>>> follows:
>>>
>>> In events_connect(events.BUFFER_BEFORE_SWITCH, function(), saved the
>>> virtual
>>> column with the line:
>>>
>>>   buffer._virtual_column =
>>> buffer.selection_n_caret_virtual_space[buffer.main_selection]
>>>
>>> and in events_connect(events.BUFFER_AFTER_SWITCH, function(), cursor-right
>>> to
>>> the saved virtual column by addition of the lines:
>>>
>>>   local i = buffer._virtual_column
>>>   while i > 0 do
>>>     buffer.char_right()
>>>     i = i - 1
>>>   end
>>>
>>> While this does fix the issue, it is a kludge, and I'm sure you will be
>>> able
>>> to implement a proper fix.
>>>
>>> Even from my earliest postings, I'm sure you know that I am likely your
>>> most
>>> ardent virtual-space/unbound-cursor/free-cursor user!  :-)
>>
>> Try this[1].
>>
>> Cheers,
>> Mitchell
>>
>> [1]: https://foicica.com/hg/textadept/rev/ac02ad2c6d19
>
> Thanks for the fast response.  The fix works well in the general case, and
> even in the general virtual-space case--excellent!  And the code is much
> nicer than mine.
>
> The only issue I see, has to do with rectangular selections--and I am
> referring now even to rectangular selections made in the usual way (that is
> to say, with <shift-alt> or with the mouse), without reference to my
> Rectangular Selections module.
>
> If you make a stream selection in each of several buffers, with each
> selection ending at a different column but in virtual space, and move back
> and forth among the buffers, the caret returns to the correct column.  Very
> good.
>
> But, if one of the selections is a rectangular selection, and still ending in
> virtual space, then when you return to that buffer, the caret is in a
> different column.
>
> In your fix, in each of the lines with
> buffer.selection_n_XXX_virtual_space[0], I changed the '0' to
> 'buffer.main_selection':
> buffer.selection_n_XXX_virtual_space[buffer.main_selection], and this seemed
> to correct the issue.
>
> Please try, and you can tell me if I'm way off base here, or whether it does
> indeed correct.

Okay, I committed what I think is the fix[1].

Cheers,
Mitchell

[1]: https://foicica.com/hg/textadept/rev/0bf485d0d6c7

-- 
You are subscribed to code.att.foicica.com.
To change subscription settings, send an e-mail to code+help.att.foicica.com.
To unsubscribe, send an e-mail to code+unsubscribe.att.foicica.com.
Received on Fri 20 Sep 2019 - 18:25:52 EDT

This archive was generated by hypermail 2.2.0 : Sat 21 Sep 2019 - 06:49:40 EDT