GNU bug report logs -
#17956
24.3.92; Calling highlight-regexp non-interactively causes errors from face-name
Previous Next
Reported by: Mat Smiglarski <penthief <at> SDF.ORG>
Date: Sun, 6 Jul 2014 14:57:02 UTC
Severity: normal
Fixed in version 24.3.92
Done: Juri Linkov <juri <at> jurta.org>
Bug is archived. No further changes may be made.
To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 17956 in the body.
You can then email your comments to 17956 AT debbugs.gnu.org in the normal way.
Toggle the display of automated, internal messages from the tracker.
Report forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#17956
; Package
emacs
.
(Sun, 06 Jul 2014 14:57:02 GMT)
Full text and
rfc822 format available.
Acknowledgement sent
to
Mat Smiglarski <penthief <at> SDF.ORG>
:
New bug report received and forwarded. Copy sent to
bug-gnu-emacs <at> gnu.org
.
(Sun, 06 Jul 2014 14:57:03 GMT)
Full text and
rfc822 format available.
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
The logic within #'highlight-regexp for selecting a face is based on
previous calls. This is a good feature, however it may be the cause of
an issue where deleting the frame, visiting the same buffer in another
frame, and then calling the highlight-regexp function interactively.
This does not happen on 24.3.1.
To reproduce:
1. Start emacs:
$ emacs -Q
2. Create new frame:
C-x 5 2 <RET>
3. create buffer:
C-x b "bug" <RET>
4. (optional) Insert text:
123
5. Highlight text non-interactively:
M-: (highlight-regexp "1" "hi-green")
6. Kill frame
C-x 5 0 <RET>
7. Visit buffer on initial frame
C-x b "bug" <RET>
8. Highlight-regexp non-interactively, supplying a default argument
M-x highlight-regexp <RET> 2 <RET>
The following error is encountered:
face-name: Wrong type argument: symbolp, "hi-green"
NB: This bug does not occur when the second call to highlight-regexp is
interactive.
An alternative recipe to reproduce the bug is the following:
A. start emacs with the following script:
$ emacs -Q -l bug-highlight-regexp.el
Where bug-highlight-regexp.el contains the following:
(defun bug-highlight-regexp-non-interactive-then-interactive ()
"
Calling #'highlight-regexp non-interactively and
supplying a non-nil face parameter causes errors
with interactive calls (to #'highlight-regexp).
"
(interactive)
(let ((bug-frame (make-frame))
(bug-buffer (get-buffer-create "Bug Demo")))
(select-frame bug-frame)
(switch-to-buffer bug-buffer)
;; The regexp does not have to match, and
;; any valid face parameter can be supplied.
(highlight-regexp "anything" "hi-green")
(delete-frame bug-frame)
(with-selected-frame (make-frame)
(switch-to-buffer bug-buffer)
(message "Do `M-x highlight-regexp' with any pattern to invoke
bug\n"))))
B. Do M-x bug-highlight-regexp-non-interactive-then-interactive <RET>
C. Call M-x highlight-regexp
Regards,
Mat
In GNU Emacs 24.3.92.1 (x86_64-unknown-linux-gnu, GTK+ Version 3.10.8)
of 2014-06-29 on zz
Windowing system distributor `The X.Org Foundation', version
11.0.11501000
System Description: Ubuntu 14.04 LTS
Configured using:
`configure --with-dbus --with-libotf --with-m17n-flt'
Important settings:
value of $LC_CTYPE: en_US.UTF-8
value of $LANG: en_US.UTF-8
value of $XMODIFIERS: @im=ibus
locale-coding-system: utf-8-unix
Major mode: Fundamental
Minor modes in effect:
hi-lock-mode: t
tooltip-mode: t
electric-indent-mode: t
mouse-wheel-mode: t
tool-bar-mode: t
menu-bar-mode: t
file-name-shadow-mode: t
global-font-lock-mode: t
blink-cursor-mode: t
auto-composition-mode: t
auto-encryption-mode: t
auto-compression-mode: t
line-number-mode: t
transient-mark-mode: t
Recent input:
M-x b u g - h i <tab> <return> <switch-frame> <switch-frame>
M-x h i g h l i <tab> r e <tab> <return> a <return>
M-x r e p o r <tab> <return>
Recent messages:
For information about GNU Emacs and the GNU system, type C-h C-a.
Do `M-x highlight-regexp' with any pattern to invoke bug
face-name: Wrong type argument: symbolp, "hi-green"
Load-path shadows:
None found.
Features:
(shadow sort gnus-util mail-extr emacsbug message format-spec rfc822 mml
easymenu mml-sec mm-decode mm-bodies mm-encode mail-parse rfc2231
mailabbrev gmm-utils mailheader sendmail rfc2047 rfc2045 ietf-drums
mm-util help-fns mail-prsvr mail-utils hi-lock time-date tooltip
electric uniquify ediff-hook vc-hooks lisp-float-type mwheel x-win x-dnd
tool-bar dnd fontset image regexp-opt fringe tabulated-list newcomment
lisp-mode prog-mode register page menu-bar rfn-eshadow timer select
scroll-bar mouse jit-lock font-lock syntax facemenu font-core frame cham
georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao
korean japanese hebrew greek romanian slovak czech european ethiopic
indian cyrillic chinese case-table epa-hook jka-cmpr-hook help simple
abbrev minibuffer nadvice loaddefs button faces cus-face macroexp files
text-properties overlay sha1 md5 base64 format env code-pages mule
custom widget hashtable-print-readable backquote make-network-process
gfilenotify dynamic-setting system-font-setting font-render-setting
move-toolbar gtk x-toolkit x multi-tty emacs)
Memory information:
((conses 16 73527 8937)
(symbols 48 17463 0)
(miscs 40 45 114)
(strings 32 9680 4115)
(string-bytes 1 258474)
(vectors 16 9839)
(vector-slots 8 401423 10857)
(floats 8 74 272)
(intervals 56 173 4)
(buffers 960 12)
(heap 1024 22961 900))
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#17956
; Package
emacs
.
(Sun, 06 Jul 2014 23:59:03 GMT)
Full text and
rfc822 format available.
Message #8 received at 17956 <at> debbugs.gnu.org (full text, mbox):
> M-: (highlight-regexp "1" "hi-green")
> [...]
> The following error is encountered:
> face-name: Wrong type argument: symbolp, "hi-green"
The reason why `highlight-regexp' fails is because
`face-name' rejects non-symbol faces whereas `facep'
accepts them. This contradiction might cause similar
bugs in other places that naively expect a face always
to be a symbol. For instance, grepping for `face-name'
shows such code as in `x-resolve-font-name'
(or (symbolp face)
(setq face (face-name face)))
that didn't fail only because was never called with
a non-nil non-symbol `face'.
So it would be safer not to assume that a face can be only a symbol:
=== modified file 'lisp/faces.el'
--- lisp/faces.el 2014-04-30 18:01:36 +0000
+++ lisp/faces.el 2014-07-06 23:38:01 +0000
@@ -359,7 +359,10 @@ (defun make-face-x-resource-internal (fa
(defun face-name (face)
"Return the name of face FACE."
- (symbol-name (check-face face)))
+ (check-face face)
+ (if (symbolp face)
+ (symbol-name face)
+ face))
(defun face-all-attributes (face &optional frame)
@@ -2731,8 +2734,8 @@ (defun x-resolve-font-name (pattern &opt
contains wildcards.
Given optional arguments FACE and FRAME, return a font which is
also the same size as FACE on FRAME, or fail."
- (or (symbolp face)
- (setq face (face-name face)))
+ (when face
+ (setq face (face-name face)))
(and (eq frame t)
(setq frame nil))
(if pattern
Reply sent
to
Juri Linkov <juri <at> jurta.org>
:
You have taken responsibility.
(Tue, 08 Jul 2014 09:05:02 GMT)
Full text and
rfc822 format available.
Notification sent
to
Mat Smiglarski <penthief <at> SDF.ORG>
:
bug acknowledged by developer.
(Tue, 08 Jul 2014 09:05:03 GMT)
Full text and
rfc822 format available.
Message #13 received at 17956-done <at> debbugs.gnu.org (full text, mbox):
Version: 24.3.92
> So it would be safer not to assume that a face can be only a symbol:
This regression is fixed now in the emacs-24 branch.
bug archived.
Request was from
Debbugs Internal Request <help-debbugs <at> gnu.org>
to
internal_control <at> debbugs.gnu.org
.
(Tue, 05 Aug 2014 11:24:04 GMT)
Full text and
rfc822 format available.
This bug report was last modified 9 years and 292 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.