Subject: Re: bug#26694: preview-at-point fails on very long lines with "End of buffer"

From: Mosè Giordano <[email-masked]>
Date: Sun, 28 May 2017 17:58:10 +0200

Hi Keita,

2017-05-28 15:12 GMT+02:00 Ikumi Keita <[email-masked]>:
> I looked into this problem and would like to share my thoughts about
> this.

Thanks!  As I said, mine was more a workaround rather than a real fix,
I'm happy someone else is addressing the issue :-)

> (1) Some problems of the essentially same origin still remain.
>    (a) Open Frank's sample file and enable TeX-source-correlate-mode.
>    (b) Put the region over "$x$".
>    (c) Type C-c C-p C-r.  "End of buffer" error again.  C-c C-r gives
>        the same error, too.
>
>     Here is the relavant codes Mosè modified in tex-buf.el:
>         (when TeX-source-correlate-mode
>             (let ((line-col (with-current-buffer orig-buffer
>                            (cons (TeX-line-number-at-pos)
>                                  (current-column)))))
>            (goto-char (point-min))
>            (forward-line (1- (abs (- header-offset (car line-col)))))
>            (forward-char (cdr line-col))))
>     It is this `forward-char' that raises the error.  The number
>     returned by `(current-column)' is not correct when, in original
>     buffer, the region starts in the middle of a line and the point is
>     on the first line of the region.  If a relatively small region has
>     no newline in it and is put on the rightward enough of a very long
>     line, the returned value is too large for `forward-char'.
>
> (2) We can find a function `TeX-region-update-point', which does a
>     similar job but without adjustment of the column.  I suppose we can
>     unify them.
>
> Considering that, in addition to (1) and (2), update of the position of
> the point in _region_.tex is only necessary when we invoke viewer, call
> to `TeX-region-update-point' can be summarized in `TeX-command' with
> test of `(string= name "View")'.
>
> I made a tentative patch along these idea and attached it to this
> message.  I stopped using `current-column' and use difference betewwn
> point and max{beginning of line, beginning of region}.

I like your approach!  In addition, this doesn't need changing the
arguments of `TeX-region-create', that's what I wanted to avoid.

> (3) It seems that the feature of forward and inverse search for region
>     file is not mature yet.  If I understand correctly, it works only
>     with evince, atril and pdf-tools as viewer, right?

Evince and Atril yes (see release notes for AUCTeX 11.89), I don't
know about pdf-tools but it's possible.

>     The other
>     viewers in `TeX-view-program-list-builtin' receive the file name and
>     line number with "%b" and "%n" expanders, but these are not expanded
>     to suitable value when using region file.
>     Maybe we should add other expanders which work even with region
>     file.

Other expanders?  Why not adapting the existing ones?  Anyway, I'm not
sure that inverse search would work with other viewers.

> (4) Using `current-column' might not be suitable even when we use evince
>     or atril.  The function `TeX-evince-sync-view-1' passes required
>     parameters to the viewers like this:
>            (list :struct :int32 (TeX-line-number-at-pos)
>                  :int32 (1+ (current-column)))
>     Most of CJK letters count as occuping 2 columns, so the column
>     number is not equal to the number of the characters counting from
>     the beginning of a line.   (I don't know what is the correct
>     "column" parameters for evince and atril (number of letters?
>     bytes in UTF8? or other?), so don't know how we should change this
>     part.)

I don't know, sorry.

Bye,
Mosè