|
From: | Dmitry Gutov |
Subject: | Re: bug#9782: 24.0.90; move-to-window-line not taking header line into account |
Date: | Sat, 16 Aug 2014 03:33:44 +0400 |
User-agent: | Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.0 |
Hi again, If you don't mind, I'd like to renew this discussion for a bit. On 05/07/2013 09:19 PM, Dmitry Gutov wrote:
On 07.05.2013 20:50, Eli Zaretskii wrote:I mean fixing the row number <-> line number discrepancy from the other side, by making a wrapper for `move-to-window-line', the only function of the bunch that deals with line numbers. It's used in `company-pseudo-tooltip-show'.count-screen-lines also deals with line numbers.Yes, but that would be fixing the discrepancy from the other side, and then `company--row', reimplemented using `count-screen-lines', would conflict with row values from mouse events, so this will only work when we don't need to compare them (i.e. when using multiple overlays).
Now we've used the following function to get the current line number, for a while:
(defun company--row (&optional pos) (save-excursion (when pos (goto-char pos)) (count-screen-lines (window-start) (progn (vertical-motion 0) (point)))))It has a fundamental problem: it doesn't deal well with `display'; this is most apparent in the `M-x report-emacs-bug' buffer, leading to bugs like this: https://github.com/company-mode/company-mode/issues/136
The actual behavior is a bit different in my Emacs compared to the screenshot, but the problem is there.
Since `vertical-motion' doesn't jump into the "virtual" text inside the multiline `display' property, `company--row' returns lower values than it should. `move-to-window-line' takes multiline `display' into account just fine, so (move-to-window-line (company--row)) might move to a different line than the point is at.
Do you have any further suggestions? Should we revert to using `posn-col-row'?
Maybe I could do an alternative implementation of `move-to-window-line' that disregards multiline `display' the same way, using `vertical-motion', but this approach would probably cause buffer text jumping when the popup is displayed in more cases than the `posn-col-row' one.
[Prev in Thread] | Current Thread | [Next in Thread] |