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

From: Qwerky <>
Date: Tue, 6 Aug 2019 17:50:36 -0600

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.


You are subscribed to
To change subscription settings, send an e-mail to
To unsubscribe, send an e-mail to
Received on Tue 06 Aug 2019 - 19:50:36 EDT

This archive was generated by hypermail 2.2.0 : Wed 07 Aug 2019 - 06:56:14 EDT