[Top][All Lists]

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

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

From: Ikumi Keita
Subject: bug#26694: preview-at-point fails on very long lines with "End of buffer"
Date: Sun, 28 May 2017 22:12:02 +0900

[ Dropped Frank from the recipients. ]

Hi Mosè and all,

> I think you're right, a good solution would be to add one more
> argument to `TeX-region-create' with the adjusted line-col
> information.  However, in order to avoid changing the signature of the
> function I decided to apply a work around: the point is moved only
> when `TeX-source-correlate-mode' is non nil (because point is moved
> only to make forward/inverse search work) and this variable is
> let-bound to nil when running the preview (forward/inverse search is
> not needed here).

> I dropped a few comments about this work-around in the code, in case
> someone want to improve the fix, maybe as suggested above.  In any
> case, I'm closing this ticket as the issue should be fixed.

I looked into this problem and would like to share my thoughts about

(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)
           (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}.

(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?  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

(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

Ikumi Keita

Attachment: region-point-update
Description: fix for updating point in region file

reply via email to

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