bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#69837: 29.2; vtable-update-object only works in visible windows


From: Adam Porter
Subject: bug#69837: 29.2; vtable-update-object only works in visible windows
Date: Sun, 17 Mar 2024 21:05:56 -0500
User-agent: Mozilla Thunderbird

Hi Eli,

On 3/17/24 01:25, Eli Zaretskii wrote:
Date: Sat, 16 Mar 2024 22:41:37 -0500
From: Adam Porter <adam@alphapapa.net>

I've discovered that `vtable-update-object' only works in buffers that
are in visible windows.  When trying to update vtables in buffers that
aren't, the object being updated or replaced fails to be found in the
cache, apparently because `vtable--cache-key' uses `window-width' in its
value (so maybe if, when the vtable buffer is not visible, the selected
window happens to have the same width as the window in which the vtable
buffer was previously displayed, it will work by chance).

Does using with-selected-window help to solve the issue?

Sometimes, but not reliably, because it doesn't matter whether the window is selected (and the buffer might not have a window, anyway). I'll try to give a step-by-step explanation:

1. vtable-update-object looks in the vtable's cache to find the cached information about the representation of the object being updated or replaced.

2. In the process of doing that, it calls vtable--cache-key, which returns a cons cell containing the frame-terminal and window-width.

3. So if the selected frame is on the same terminal, and the selected window has the same width, as the ones when the vtable was last generated, the cache key will match. This will allow vtable-update-object to access the cached values and look for the object in them.

But if the terminal is different, or if the selected window's width is different, the cache key will be different, so vtable-update-object will fail, even when it could potentially succeed.

In my case, the vtable's buffer is (or can be) in a window that is in a non-current tab (using tab-bar-mode) in the same frame, so its window is not visible. And so if the selected window in the current tab has the same width as the vtable's window, vtable-update-object may work. But if the widths don't match, it will fail.

(I suppose it may also fail if the vtable's buffer's window is visible but has changed width since the vtable was generated, but I haven't tested that.)

If not, can you show a recipe, starting from "emacs -Q", that
reproduces the problem, so we could study it in more detail?

I had hoped to avoid writing that much code to demonstrate it. But if the explanation above doesn't suffice, let me know and I will.

Thanks,
Adam





reply via email to

[Prev in Thread] Current Thread [Next in Thread]