unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Drew Adams <drew.adams@oracle.com>
To: 18011@debbugs.gnu.org
Subject: bug#18011: 24.4.50; REGRESSION, `help-echo' function value now needs `save-excursion'
Date: Sun, 13 Jul 2014 16:11:24 -0700 (PDT)	[thread overview]
Message-ID: <a687506e-f255-4cfe-a19c-723ddd634ac9@default> (raw)

I have some code that uses a function value for `help-echo' in Dired
buffers.  It works fine in Emacs 24.3 and prior.  In later builds it has
this problem: When you press mouse-1 and hold it down on a date field in
Dired, point is not set there as it should be.  Instead, the text cursor
moves with the mouse after you do that.

The oldest post-24.3 build I have is this one, and it exhibits the
problem (as do recent builds):

In GNU Emacs 24.3.50.1 (i386-mingw-nt6.1.7601)
 of 2013-05-14 on ODIEONE
Bzr revision: 112586 juri@jurta.org-20130514233814-nnkh1ymiqgoq2fk6
Windowing system distributor `Microsoft Corp.', version 6.1.7601
Configured using:
 `configure --with-gcc (4.7) --no-opt --enable-checking --cflags
 -IC:/Devel/emacs/build/include --ldflags -LC:/Devel/emacs/build/lib'

Recipe to repro the problem from emacs -Q:

1. Evaluate this code:

(defun my-help (window buffer pos)
  (with-current-buffer buffer (goto-char pos)))

(defun dired-insert-set-properties (beg end)
  (save-excursion
    (goto-char beg)
    (while (< (point) end)
      (ignore-errors
	(if (not (dired-move-to-filename))
	    (unless (or (looking-at-p "^$")
			(looking-at-p dired-subdir-regexp))
	      (put-text-property (line-beginning-position)
				 (1+ (line-end-position))
				 'invisible 'dired-hide-details-information))
	  (put-text-property (+ (line-beginning-position) 1) (1- (point))
			     'invisible 'dired-hide-details-detail)
	  (add-text-properties ; @@@@@@@
	   (line-beginning-position) (line-end-position)
	   '(mouse-face highlight help-echo my-help))
	  ;; (add-text-properties
	  ;;  (point)
	  ;;  (progn
	  ;;    (dired-move-to-end-of-filename)
	  ;;    (point))
	  ;;  '(mouse-face
	  ;;    highlight
	  ;;    dired-filename t
	  ;;    ;; help-echo "mouse-2: visit this file in other window"))
	  (when (< (+ (point) 4) (line-end-position))
	    (put-text-property (+ (point) 4) (line-end-position)
			       'invisible 'dired-hide-details-link))))
      (forward-line 1))))

2. Then press & hold mouse-1 on a date field in Dired.  Release mouse-1
   and move the mouse.  You can see that point was not set: the text
   cursor follows the mouse.

The change above to the original `dired-insert-set-properties' is just
to substitute the `add-text-properties' sexp indicated by `@@@@@@@' for
the one that is commented out.  The two differences are these:

1. `mouse-face' is put on the whole line, not just the file-name part.

2. The value of `help-echo' is a function, `my-help', and that function
   uses `goto-char'.

I've fixed my code by wrapping the `goto-char' in `save-excursion'.
But I suspect that that workaround papers over a bug (regression).  Why
should a `help-echo' function need to `save-excursion'?

Note that if the mouse-face is not placed over the place where you click
(in the test, it is on the whole line, and you click on the date field)
then there is no problem.

HTH.  Close the bug if you don't care about this - I have my fix.


In GNU Emacs 24.4.50.1 (i686-pc-mingw32)
 of 2014-06-28 on ODIEONE
Bzr revision: 117431 rgm@gnu.org-20140628015517-eku6hj8mpgcvfnso
Windowing system distributor `Microsoft Corp.', version 6.1.7601
Configured using:
 `configure --prefix=/c/Devel/emacs/snapshot/trunk
 --enable-checking=yes,glyphs 'CFLAGS=-O0 -g3'
 LDFLAGS=-Lc:/Devel/emacs/lib 'CPPFLAGS=-DGC_MCHECK=1
 -Ic:/Devel/emacs/include''





             reply	other threads:[~2014-07-13 23:11 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-07-13 23:11 Drew Adams [this message]
2014-07-13 23:41 ` bug#18011: 24.4.50; REGRESSION, `help-echo' function value now needs `save-excursion' Glenn Morris
2014-07-14  3:53   ` Drew Adams

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

  List information: https://www.gnu.org/software/emacs/

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

  git send-email \
    --in-reply-to=a687506e-f255-4cfe-a19c-723ddd634ac9@default \
    --to=drew.adams@oracle.com \
    --cc=18011@debbugs.gnu.org \
    /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 public inbox

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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).