[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: invisible
From: |
martin rudalics |
Subject: |
Re: invisible |
Date: |
Mon, 26 Nov 2007 08:59:50 +0100 |
User-agent: |
Mozilla Thunderbird 1.0 (Windows/20041206) |
> If you have a conrete situation where the current behavior is
> problematic, firsyt you need to understand how those things work:
> there are 2 places where invisibility impacts movement:
> - when combined with `intangible', it impacts every single movement of
> `point', including within elisp functions. This may "do the right
> thing" in some sense, but it tends to break a lot of code, and
> it can be terribly difficult to write code that works in the face of
> intangible properties. So I highly recommend against the use of
> `intangible' except for those rare cases where it's *really*
> absolutely needed.
Intangible text was never mentioned in this thread.
> - when not combined with `intangible', invisible properties have the
> effect (just like composition and display properties) that after each
> *command* (i..e more or less just after running post-command-hook)
> point is moved outside of the invisible text. Now since it's done at
> the end of a command (which may have moved point many times in
> arbitrarily complex ways), you can't do it right 100% of the time.
> OTOH this interacts fine with pretty much any elisp code.
>
> Many of the problems you point out have to do with interactions with C-n
> and C-p which are surprisingly complex functions. The interaction
> between all three is even worse.
>
> So if you can try and reproduce the problem with only C-n/C-p (i.e. no
> intangible text and with non-nil disable-point-adjustement) or with
> only intangible text or with only invisible text, that makes it more
> likely we can try and fix it.
This thread is about `line-move-ignore-invisible' - an option defined in
simple.el with the following doc-string:
*Non-nil means C-n and C-p ignore invisible lines.
Outline mode sets this.
Either this option makes sense - then we have to talk about C-n/C-p
_and_ invisible text - or it doesn't. In the latter case let's remove
the option and the problem is resolved.
> Also the interaction with those things is sufficiently bad, that there
> are many problematic cases. So if the problem only appears when you mix
> those, to have a better chance of seeing your bug fixed, try to make
> sure the symptom is really serious: e.g. C-n does move at all (or moves
> backward).
I never use "those things" hence I don't care about whether these
qualify as "serious symptoms". I just reacted to a couple of problems
reported by others. One of these was
"the cursor stays put, i.e., C-p is a no-op here"
reported in 2004. Apparently, it didn't have much chance getting fixed
then.
> And focus on *1* problem at a time.
I focused on *1* solution at a time.
>>Meanwhile could you please check my patch for simple.el too?
>
>
> Please post it again,
Attached.
*** simple.el.~1.888.~ Sat Nov 10 09:23:20 2007
--- simple.el Sun Nov 18 16:02:42 2007
***************
*** 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))))
--- 3862,3869 ----
(save-excursion
;; Like end-of-line but ignores fields.
(skip-chars-forward "^\n")
! (while (and line-move-ignore-invisible
! (not (eobp)) (invisible-p (point)))
(goto-char (next-char-property-change (point)))
(skip-chars-forward "^\n"))
(point))))
***************
*** 3940,3948 ****
This function works only in certain cases,
because what we really need is for `move-to-column'
and `current-column' to be able to ignore invisible text."
! (if (zerop col)
! (beginning-of-line)
(move-to-column col))
(when (and line-move-ignore-invisible
(not (bolp)) (invisible-p (1- (point))))
--- 3941,3956 ----
This function works only in certain cases,
because what we really need is for `move-to-column'
and `current-column' to be able to ignore invisible text."
! (cond
! ((zerop col)
! (beginning-of-line))
! (line-move-ignore-invisible
(move-to-column col))
+ (t
+ ;; Tedious.
+ (save-restriction
+ (narrow-to-region (line-beginning-position) (line-end-position))
+ (move-to-column col))))
(when (and line-move-ignore-invisible
(not (bolp)) (invisible-p (1- (point))))
- Re: invisible, (continued)
- Re: invisible, Stephen Berman, 2007/11/24
- Re: invisible, martin rudalics, 2007/11/24
- Re: invisible, Stefan Monnier, 2007/11/25
- Re: invisible, martin rudalics, 2007/11/26
- Re: invisible, Stefan Monnier, 2007/11/26
- Re: invisible, martin rudalics, 2007/11/26
- Re: invisible, Stefan Monnier, 2007/11/26
- Re: invisible, Stefan Monnier, 2007/11/25
- Re: invisible,
martin rudalics <=
- Re: invisible, Stefan Monnier, 2007/11/26
- Re: invisible, martin rudalics, 2007/11/26
- Re: invisible, Stefan Monnier, 2007/11/26
- Re: invisible, martin rudalics, 2007/11/27
- Re: invisible, martin rudalics, 2007/11/27
- Re: invisible, Stefan Monnier, 2007/11/27
- Re: invisible, martin rudalics, 2007/11/28
- Re: invisible, Stefan Monnier, 2007/11/28
- Re: invisible, martin rudalics, 2007/11/28
- Re: invisible, Stephen Berman, 2007/11/28