all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Eli Zaretskii <eliz@gnu.org>
To: Vitalie Spinu <spinuvit@gmail.com>
Cc: 21368@debbugs.gnu.org
Subject: bug#21368: 25.0.50; Core navigation commands fail in a multi-line intangible text with	fringe
Date: Sat, 29 Aug 2015 10:25:22 +0300	[thread overview]
Message-ID: <83oahq36al.fsf@gnu.org> (raw)
In-Reply-To: <87io7zjclt.fsf@gmail.com>

> From: Vitalie Spinu <spinuvit@gmail.com>
> Cc: 21368@debbugs.gnu.org
> Date: Sat, 29 Aug 2015 00:02:22 +0200
> 
> >> On Fri, Aug 28 2015 22:45, Eli Zaretskii wrote:
> 
> > The first two do work, you just need to invoke backward-char twice to
> > see the cursor move.  
> 
> This is not happening with `M-x (backward-char 1)`. It does indeed work when
> backward-char is invoked interactively with C-b.
> 
> This is a relatively recent change in behavior (past 2-3 months or so).

What is a relatively recent change?  The C-b part or the M-x part?

> > Is there some important real-life use case that needs this to work?
> > Otherwise, I'm inclined to leave this alone.  After all, it's not a
> > catastrophe: the next call to previous-line will go to the line you
> > want.
> 
> I have encountered this issue in 3 different projects. One is the implementation
> of visual breakpoints in ESS which look like this:
> 
>    https://ess-tracebug.googlecode.com/svn/trunk/img/breakpoint_types.PNG
> 
> For years I used to have a defadvice workaround along the following lines:
>      ...
>      (when (and (eq major-mode 'ess-mode)
>                 (get-text-property (point) 'intangible))
>       (backward-char 1))
>      add-do-it 
>      ...
> 
> With the new emacs dev the backward-char stopped working. That's why I am
> finally reporting this bug.

Can't you use an overlay to show the bitmap on the fringe?  IOW,
instead of the first display property, define an empty overlay
(i.e. overlay whose start and end positions are equal) with a
before-string that is propertized with a 'fringe' display property.
Here's an example, based on your original scenario:

  (defun insert-with-fringe ()
    (let ((pt (point))
	  ov)
      (insert
       "      "
       (propertize "dummy" 'display "AAA\n" 'font-lock-face font-lock-doc-face)
       "some more text")
      (setq ov (make-overlay (+ pt 5) (+ pt 5)))
      (overlay-put ov 'before-string
		   (propertize "fringe"
			       'display
			       (list 'left-fringe
				     'filled-square font-lock-doc-face)))
      (previous-line)))

This produces the same display as in your example, but has none of its
problems, because the situation with 2 consecutive display strings on
adjacent buffer positions is eliminated.

> Another real life use case is the yet unfinished image-display package where I
> attempted to build a grid of images with intangible segments and simply rely on
> emacs motion commands for navigation between cells. This didn't work properly
> because the vertical motion was jumping columns.
> 
> Another example is a spredsheet application for data manipulation where I have
> read-only cells which I want to navigate with standard emacs motion
> commands. Same design as above and the same problem.

OK, but if using overlays as shown above doesn't fill your needs,
please don't hold your breath for a quick solution.  It's a hard
problem, and the code that handles it is already too convoluted.
Visual line movement is a tough nut when there's a lot of invisible
text around.  (Btw, yet another solution is to disable
line-move-visual in these cases -- would that be a good idea in those
real-life examples?)





  reply	other threads:[~2015-08-29  7:25 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-08-28 15:46 bug#21368: 25.0.50; Core navigation commands fail in a multi-line intangible text with fringe Vitalie Spinu
2015-08-28 19:45 ` Eli Zaretskii
2015-08-28 22:02   ` Vitalie Spinu
2015-08-29  7:25     ` Eli Zaretskii [this message]
2015-08-29 19:08       ` Vitalie Spinu
2015-08-29 19:17         ` Vitalie Spinu
2015-08-29 20:14           ` Eli Zaretskii
2015-08-29 20:11         ` Eli Zaretskii
2015-08-29 15:23     ` Wolfgang Jenkner
2015-08-29 19:11       ` Vitalie Spinu
2015-08-29 21:53         ` Wolfgang Jenkner
2015-08-30 11:46           ` Vitalie Spinu
2015-08-30 12:55             ` Wolfgang Jenkner
2015-08-30 15:02               ` Eli Zaretskii
2015-08-30 15:11                 ` Wolfgang Jenkner
2015-08-31 12:54                   ` Wolfgang Jenkner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=83oahq36al.fsf@gnu.org \
    --to=eliz@gnu.org \
    --cc=21368@debbugs.gnu.org \
    --cc=spinuvit@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.