emacs-devel
[Top][All Lists]
Advanced

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

Re: invisible


From: martin rudalics
Subject: Re: invisible
Date: Sun, 02 Dec 2007 10:47:21 +0100
User-agent: Mozilla Thunderbird 1.0 (Windows/20041206)

> Obviously conflating the two variables into one is a change visible to
> the user.  I'm just saying that it would fix your bug as well.

It's not my bug.  Which means, I don't have a user perspective here and
everything I say is purely speculative in this regard.

> And I think it's a choice that might make a lot of sense.

Maybe. Just that people have to be aware that any character they insert
after rear-sticky invisible text will become invisible too.

>>Because I'm not allowed to disable point-adjustment for the normal
>>`line-move-ignore-invisible' t case.
>
>
> AFAICT the reason is not that you're not allowed but that you haven't
> needed to do it.  If you needed to do it, I don't think it'd be a big
> problem since line-move already tries to avoid invisible text (so
> point-adjustment shouldn't make much difference if any).

`line-move-ignore-invisible' is about _invisibility_ only.  Adjusting
point is about invisibility, composition, intangibility, fields ...
Now, if I set `line-move-ignore-invisible' to nil I might want to stop
at the next invisible newline but still respect the remaining
properties.  I understand that's what "conflating" is all about and I
agree that there's no peculiar reason why we should just consider
invisibility and not the rest.  Moreover `line-move-ignore-invisible'
seems broken anyway and hard to get right.

> So I now think that setting disable-point-adjustment only in the
> interactive case is actually incorrect: it should also be set in the
> non-interactive case.

Currently point-adjustment affects point-setting only _after_ a command
is executed.  `line-move-ignore-invisible' affects point-setting for
every single line move, regardless of whether this happens in a command
or how often this happens in a command.

Anyway.  Is the attached patch about what you have in mind?
*** simple.el.~1.888.~  Sat Nov 10 09:23:20 2007
--- simple.el   Sun Dec  2 10:40:22 2007
***************
*** 3593,3603 ****
            (end-of-line)
            (insert (if use-hard-newlines hard-newline "\n")))
        (line-move arg nil nil try-vscroll))
!     (if (interactive-p)
!       (condition-case nil
!           (line-move arg nil nil try-vscroll)
!         ((beginning-of-buffer end-of-buffer) (ding)))
!       (line-move arg nil nil try-vscroll)))
    nil)

  (defun previous-line (&optional arg try-vscroll)
--- 3593,3602 ----
            (end-of-line)
            (insert (if use-hard-newlines hard-newline "\n")))
        (line-move arg nil nil try-vscroll))
!     ;; Disable point-adjustment with `line-move-ignore-invisible' nil.
!     (unless line-move-ignore-invisible
!       (setq disable-point-adjustment t))
!     (line-move arg nil nil try-vscroll))
    nil)

  (defun previous-line (&optional arg try-vscroll)
***************
*** 3619,3629 ****
  to use and more reliable (no dependence on goal column, etc.)."
    (interactive "p\np")
    (or arg (setq arg 1))
!   (if (interactive-p)
!       (condition-case nil
!         (line-move (- arg) nil nil try-vscroll)
!       ((beginning-of-buffer end-of-buffer) (ding)))
!     (line-move (- arg) nil nil try-vscroll))
    nil)

  (defcustom track-eol nil
--- 3618,3627 ----
  to use and more reliable (no dependence on goal column, etc.)."
    (interactive "p\np")
    (or arg (setq arg 1))
!   ;; Disable point-adjustment with `line-move-ignore-invisible' nil.
!   (unless line-move-ignore-invisible
!     (setq disable-point-adjustment t))
!   (line-move (- arg) nil nil try-vscroll)
    nil)

  (defcustom track-eol nil
***************
*** 3746,3753 ****
                        most-positive-fixnum
                      (current-column))))

!         (if (not (or (integerp selective-display)
!                        line-move-ignore-invisible))
              ;; Use just newline characters.
              ;; Set ARG to 0 if we move as many lines as requested.
              (or (if (> arg 0)
--- 3744,3751 ----
                        most-positive-fixnum
                      (current-column))))

!         (if (and (not (integerp selective-display))
!                    disable-point-adjustment)
              ;; Use just newline characters.
              ;; Set ARG to 0 if we move as many lines as requested.
              (or (if (> arg 0)
***************
*** 3862,3868 ****
             (save-excursion
               ;; Like end-of-line but ignores fields.
               (skip-chars-forward "^\n")
!              (while (and (not (eobp)) (invisible-p (point)))
                 (goto-char (next-char-property-change (point)))
                 (skip-chars-forward "^\n"))
               (point))))
--- 3860,3867 ----
             (save-excursion
               ;; Like end-of-line but ignores fields.
               (skip-chars-forward "^\n")
!              (while (and (not disable-point-adjustment)
!                          (not (eobp)) (invisible-p (point)))
                 (goto-char (next-char-property-change (point)))
                 (skip-chars-forward "^\n"))
               (point))))
***************
*** 3944,3950 ****
        (beginning-of-line)
      (move-to-column col))

!   (when (and line-move-ignore-invisible
             (not (bolp)) (invisible-p (1- (point))))
      (let ((normal-location (point))
          (normal-column (current-column)))
--- 3943,3949 ----
        (beginning-of-line)
      (move-to-column col))

!   (when (and (not disable-point-adjustment)
             (not (bolp)) (invisible-p (1- (point))))
      (let ((normal-location (point))
          (normal-column (current-column)))

reply via email to

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