* bug#5560: 23.1.92; parens matching in c-mode broken
@ 2010-02-11 3:01 David Reitter
2016-02-17 3:56 ` Andrew Hyatt
0 siblings, 1 reply; 10+ messages in thread
From: David Reitter @ 2010-02-11 3:01 UTC (permalink / raw)
To: 5560
[-- Attachment #1: Type: text/plain, Size: 11382 bytes --]
Parens matching in C mode is sometimes surprising. In the example
below, double-clicking on either of the first two opening parentheses
will mark the text until the " hyper_modifier : 0)", but that is correct
only for the second paren, while the first one is unmatched due to a space
following the backslash.
#define EV_MODIFIERS(e) \
((([e modifierFlags] & NSHelpKeyMask) ? \
hyper_modifier : 0) \
...
It would be more useful if an "unmatched parentheses" was shown, or if the region up to the end of the scan process (i.e. the space+newline) was marked.
In GNU Emacs 23.1.92.86 (x86_64-apple-darwin10.2.0, NS apple-appkit-1038.25)
of 2010-02-08 on scarlett.local - Aquamacs Distribution 2.0dev
Windowing system distributor `Apple', version 10.3.1038
configured using `configure '--with-ns' 'CFLAGS=-O0 -g''
Important settings:
value of $LC_ALL: nil
value of $LC_COLLATE: nil
value of $LC_CTYPE: nil
value of $LC_MESSAGES: nil
value of $LC_MONETARY: nil
value of $LC_NUMERIC: nil
value of $LC_TIME: nil
value of $LANG: en_US.UTF-8
value of $XMODIFIERS: nil
locale-coding-system: utf-8-unix
default enable-multibyte-characters: t
Major mode: ObjC/l
Minor modes in effect:
diff-auto-refine-mode: t
which-function-mode: t
savehist-mode: t
smart-frame-positioning-mode: t
aquamacs-autoface-mode: t
recentf-mode: t
osx-key-mode: t
tabbar-mwheel-mode: t
tabbar-mode: t
show-paren-mode: t
delete-selection-mode: t
pc-selection-mode: t
cua-mode: t
tooltip-mode: t
mouse-wheel-mode: t
tool-bar-mode: t
menu-bar-mode: t
file-name-shadow-mode: t
global-font-lock-mode: t
font-lock-mode: t
blink-cursor-mode: t
auto-encryption-mode: t
auto-compression-mode: t
column-number-mode: t
line-number-mode: t
transient-mark-mode: t
abbrev-mode: t
Recent input:
<double-wheel-down> <triple-wheel-down> <wheel-down>
<wheel-down> <double-wheel-down> <down-mouse-1> <mouse-1>
<down-mouse-1> <mouse-movement> <mouse-movement> <drag-mouse-1>
<kp-delete> <down> <down> <down> <S-down> <S-down>
<S-down> <S-down> <S-down> <S-left> <S-left> <S-left>
<S-left> <kp-delete> <kp-delete> <kp-delete> <kp-delete>
<kp-delete> <down> <down> <A-left> <S-down> <S-down>
<S-down> <S-down> <S-down> <kp-delete> <return> <up>
<up> <up> <up> <up> <up> <backspace> <down> <down>
<down> <up> <up> <up> <up> <up> <up> <up> <up> <up>
<up> <up> <up> <up> <up> <up> <up> <up> <up> <up> <up>
<up> <up> <up> <right> | <down> <down> <down> <down>
<down> <left> | <down> <down> <down> <down> <right>
<down> | <kp-delete> <up> <up> <up> <up> <up> <up>
<kp-delete> <up> <up> <up> <up> <up> <kp-delete> <up>
<right> <S-down> <S-down> <S-down> <S-down> <S-down>
<S-down> <S-down> <S-down> <S-down> <S-down> <S-down>
<S-down> <S-down> <S-down> <S-down> <S-down> <S-down>
<S-up> <S-up> ⌘X <down> <down> <down> <down> <down>
<down> <down> <down> <down> ⌘V <up> <up> <up> <up>
<up> <up> <up> <up> <up> <up> <up> <up> <up> <up> <up>
<tab> <down> <tab> <down> <tab> <down> <tab> <down>
<down> <up> <backspace> SPC \ <right> <tab> <down>
<tab> <down> <tab> <down> <tab> <A-right> SPC \ <down>
<A-backspace> <A-backspace> <tab> <down> <tab> <down>
<tab> <down> <tab> <A-right> ) <backspace> <down-mouse-1>
<mouse-1> <double-down-mouse-1> <double-mouse-1> <down-mouse-1>
<mouse-1> <down-mouse-1> <mouse-1> <double-down-mouse-1>
<double-mouse-1> <down-mouse-1> <mouse-1> <double-down-mouse-1>
<double-mouse-1> <down-mouse-1> <mouse-1> <double-down-mouse-1>
<double-mouse-1> <down-mouse-1> <mouse-1> <down-mouse-1>
<mouse-1> <double-down-mouse-1> <double-mouse-1> <down-mouse-1>
<mouse-1> <double-down-mouse-1> <double-mouse-1> <down-mouse-1>
<mouse-1> <double-down-mouse-1> <double-mouse-1> <down-mouse-1>
<mouse-1> <down-mouse-1> <mouse-movement> <mouse-movement>
<mouse-movement> <mouse-movement> <drag-mouse-1> <down-mouse-1>
<mouse-1> <down-mouse-1> <mouse-1> ) <backspace> <wheel-up>
<double-wheel-up> <down-mouse-1> <mouse-1> <double-down-mouse-1>
<double-mouse-1> <down-mouse-1> <mouse-1> <double-down-mouse-1>
<double-mouse-1> <down-mouse-1> <mouse-1> <double-down-mouse-1>
<double-mouse-1> <down-mouse-1> <mouse-1> <double-down-mouse-1>
<double-mouse-1> <down-mouse-1> <mouse-1> <double-down-mouse-1>
<double-mouse-1> <down-mouse-1> <mouse-1> <double-down-mouse-1>
<double-mouse-1> <down-mouse-1> <mouse-1> <double-down-mouse-1>
<double-mouse-1> <down-mouse-1> <mouse-1> <double-down-mouse-1>
<double-mouse-1> <down-mouse-1> <mouse-1> ⌘S <escape>
X C - M O D E <return> <down-mouse-1> <mouse-1> <double-down-mouse-1>
<double-mouse-1> <down-mouse-1> <mouse-1> <escape>
X <up> O B <return> ⌘S <down-mouse-1> <mouse-movement>
<mouse-movement> <drag-mouse-1> ⌘C <menu-bar> <help-menu>
<bug-diagnosis> <send-emacs-bug-report>
Recent messages:
Auto-saving...
Mark set [4 times]
Auto-saving...done
Auto-saving...done
Mark set
Auto-saving...done
Auto-saving...done
Saving file /Users/dr/ae.git/src/nsterm.m...
Wrote /Users/dr/ae.git/src/nsterm.m
(No changes need to be saved)
Load-path shadows:
/Users/dr/Library/Preferences/Aquamacs Emacs/Recent Files hides /Users/dr/Library/Preferences/Aquamacs Emacs/Aquamacs Emacs2/Recent Files
/Users/dr/Library/Preferences/Aquamacs Emacs/Preferences hides /Users/dr/Library/Preferences/Aquamacs Emacs/Aquamacs Emacs2/Preferences
/Users/dr/Library/Preferences/Aquamacs Emacs/places hides /Users/dr/Library/Preferences/Aquamacs Emacs/Aquamacs Emacs2/places
/Users/dr/Library/Preferences/Aquamacs Emacs/minibuffer-history hides /Users/dr/Library/Preferences/Aquamacs Emacs/Aquamacs Emacs2/minibuffer-history
/Users/dr/Library/Preferences/Aquamacs Emacs/frame-positions hides /Users/dr/Library/Preferences/Aquamacs Emacs/Aquamacs Emacs2/frame-positions
/Users/dr/Library/Preferences/Aquamacs Emacs/customizations hides /Users/dr/Library/Preferences/Aquamacs Emacs/Aquamacs Emacs2/customizations
/Library/Application Support/Aquamacs Emacs/JDEE/site-start hides /Library/Application Support/Aquamacs Emacs/SLIME/site-start
/Library/Application Support/Aquamacs Emacs/JDEE/cedet/speedbar/speedbar hides /Users/dr/ae.git/nextstep/Aquamacs.app/Contents/Resources/lisp/speedbar
/Library/Application Support/Aquamacs Emacs/JDEE/cedet/speedbar/sb-image hides /Users/dr/ae.git/nextstep/Aquamacs.app/Contents/Resources/lisp/sb-image
/Library/Application Support/Aquamacs Emacs/JDEE/cedet/common/ezimage hides /Users/dr/ae.git/nextstep/Aquamacs.app/Contents/Resources/lisp/ezimage
/Library/Application Support/Aquamacs Emacs/JDEE/cedet/speedbar/dframe hides /Users/dr/ae.git/nextstep/Aquamacs.app/Contents/Resources/lisp/dframe
/Library/Application Support/Aquamacs Emacs/JDEE/cedet/eieio/eieio hides /Users/dr/ae.git/nextstep/Aquamacs.app/Contents/Resources/lisp/emacs-lisp/eieio
/Library/Application Support/Aquamacs Emacs/JDEE/cedet/eieio/eieio-speedbar hides /Users/dr/ae.git/nextstep/Aquamacs.app/Contents/Resources/lisp/emacs-lisp/eieio-speedbar
/Library/Application Support/Aquamacs Emacs/JDEE/cedet/eieio/eieio-opt hides /Users/dr/ae.git/nextstep/Aquamacs.app/Contents/Resources/lisp/emacs-lisp/eieio-opt
/Library/Application Support/Aquamacs Emacs/JDEE/cedet/eieio/eieio-custom hides /Users/dr/ae.git/nextstep/Aquamacs.app/Contents/Resources/lisp/emacs-lisp/eieio-custom
/Library/Application Support/Aquamacs Emacs/JDEE/cedet/eieio/eieio-comp hides /Users/dr/ae.git/nextstep/Aquamacs.app/Contents/Resources/lisp/emacs-lisp/eieio-comp
/Library/Application Support/Aquamacs Emacs/JDEE/cedet/eieio/eieio-base hides /Users/dr/ae.git/nextstep/Aquamacs.app/Contents/Resources/lisp/emacs-lisp/eieio-base
/Library/Application Support/Aquamacs Emacs/JDEE/cedet/eieio/chart hides /Users/dr/ae.git/nextstep/Aquamacs.app/Contents/Resources/lisp/emacs-lisp/chart
/Library/Application Support/Aquamacs Emacs/JDEE/cedet/semantic/semantic hides /Users/dr/ae.git/nextstep/Aquamacs.app/Contents/Resources/lisp/cedet/semantic
/Library/Application Support/Aquamacs Emacs/JDEE/cedet/common/mode-local hides /Users/dr/ae.git/nextstep/Aquamacs.app/Contents/Resources/lisp/cedet/mode-local
/Library/Application Support/Aquamacs Emacs/JDEE/cedet/common/inversion hides /Users/dr/ae.git/nextstep/Aquamacs.app/Contents/Resources/lisp/cedet/inversion
/Library/Application Support/Aquamacs Emacs/JDEE/cedet/ede/ede hides /Users/dr/ae.git/nextstep/Aquamacs.app/Contents/Resources/lisp/cedet/ede
/Library/Application Support/Aquamacs Emacs/JDEE/cedet/common/cedet hides /Users/dr/ae.git/nextstep/Aquamacs.app/Contents/Resources/lisp/cedet/cedet
/Library/Application Support/Aquamacs Emacs/JDEE/cedet/common/cedet-files hides /Users/dr/ae.git/nextstep/Aquamacs.app/Contents/Resources/lisp/cedet/cedet-files
/Library/Application Support/Aquamacs Emacs/JDEE/site-start hides /Users/dr/ae.git/nextstep/Aquamacs.app/Contents/Resources/lisp/aquamacs/site-start
Features:
(shadow sort mail-extr message ecomplete rfc822 mml mml-sec
password-cache mm-decode mm-bodies mm-encode mailabbrev nnheader
gnus-util netrc gmm-utils mailheader canlock sha1 hex-util hashcash
emacsbug cc-mode cc-fonts cc-menus cc-cmds cc-styles cc-align cc-engine
cc-vars cc-defs log-edit ring pcvs-util add-log diff-mode vc
vc-dispatcher cl-specs edebug multi-isearch jka-compr find-func vc-git
url-http tls url-auth mail-parse rfc2231 rfc2047 rfc2045 qp ietf-drums
url-gw url-cache url url-proxy url-privacy url-expand url-methods
url-history url-cookie url-util url-parse url-vars mm-util mail-prsvr
mailcap mail-utils which-func imenu slime-autoloads load-emacs-plugins
aquamacs-mode-defaults auctex-config server tex-site smart-dnd
aquamacs-aux savehist mouse-sel one-buffer-one-frame
smart-frame-positioning drews_init color-theme-autoloads saveplace
visual-line aquamacs-bug aquamacs-autoface-mode aquamacs-editing
sendmail recentf tree-widget cus-edit osxkeys emulate-mac-keyboard-mode
frame-cmds strings misc-fns thingatpt+ thingatpt frame-fns avoid
aquamacs-mac-fontsets fit-frame aquamacs-frame-setup aquamacs-tabbar
tabbar-window cl cl-19 tabbar easy-mmode cus-start cus-load
load-emacs-pre-plugins aquamacs-site-start cocoa-compatibility filladapt
aquamacs-redo check-for-updates aquamacs-menu osx_defaults
aquamacs-tool-bar aquamacs mac-extra-functions aquamacs-tools
aquamacs-macros parse-time timezone time-date paren delsel pc-select
cua-base wid-edit regexp-opt advice advice-preload byte-opt bytecomp
byte-compile debug help-fns help-mode view image-file disp-table tooltip
ediff-hook vc-hooks lisp-float-type mwheel ns-win easymenu tool-bar dnd
fontset image fringe lisp-mode register page menu-bar rfn-eshadow timer
select scroll-bar mldrag 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 loaddefs button minibuffer faces
cus-face files text-properties overlay md5 base64 format env code-pages
mule custom widget hashtable-print-readable backquote
make-network-process ns multi-tty emacs)
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 203 bytes --]
^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#5560: 23.1.92; parens matching in c-mode broken
2010-02-11 3:01 bug#5560: 23.1.92; parens matching in c-mode broken David Reitter
@ 2016-02-17 3:56 ` Andrew Hyatt
2016-02-20 22:57 ` Alan Mackenzie
0 siblings, 1 reply; 10+ messages in thread
From: Andrew Hyatt @ 2016-02-17 3:56 UTC (permalink / raw)
To: David Reitter; +Cc: 5560
I can confirm this still doesn't work right in Emacs 25. However, I get
a slightly different experience, with clicking on all 3 left parens
highlighting until the first right paren only. Similarly, that right
paren seems to be the matching paren for all 3 left parens.
David Reitter <david.reitter@gmail.com> writes:
> Parens matching in C mode is sometimes surprising. In the example
> below, double-clicking on either of the first two opening parentheses
> will mark the text until the " hyper_modifier : 0)", but that is correct
> only for the second paren, while the first one is unmatched due to a space
> following the backslash.
>
> #define EV_MODIFIERS(e) \
> ((([e modifierFlags] & NSHelpKeyMask) ? \
> hyper_modifier : 0) \
> ...
>
>
> It would be more useful if an "unmatched parentheses" was shown, or if the region up to the end of the scan process (i.e. the space+newline) was marked.
>
>
>
>
> In GNU Emacs 23.1.92.86 (x86_64-apple-darwin10.2.0, NS apple-appkit-1038.25)
> of 2010-02-08 on scarlett.local - Aquamacs Distribution 2.0dev
> Windowing system distributor `Apple', version 10.3.1038
> configured using `configure '--with-ns' 'CFLAGS=-O0 -g''
>
> Important settings:
> value of $LC_ALL: nil
> value of $LC_COLLATE: nil
> value of $LC_CTYPE: nil
> value of $LC_MESSAGES: nil
> value of $LC_MONETARY: nil
> value of $LC_NUMERIC: nil
> value of $LC_TIME: nil
> value of $LANG: en_US.UTF-8
> value of $XMODIFIERS: nil
> locale-coding-system: utf-8-unix
> default enable-multibyte-characters: t
>
> Major mode: ObjC/l
>
> Minor modes in effect:
> diff-auto-refine-mode: t
> which-function-mode: t
> savehist-mode: t
> smart-frame-positioning-mode: t
> aquamacs-autoface-mode: t
> recentf-mode: t
> osx-key-mode: t
> tabbar-mwheel-mode: t
> tabbar-mode: t
> show-paren-mode: t
> delete-selection-mode: t
> pc-selection-mode: t
> cua-mode: t
> tooltip-mode: t
> mouse-wheel-mode: t
> tool-bar-mode: t
> menu-bar-mode: t
> file-name-shadow-mode: t
> global-font-lock-mode: t
> font-lock-mode: t
> blink-cursor-mode: t
> auto-encryption-mode: t
> auto-compression-mode: t
> column-number-mode: t
> line-number-mode: t
> transient-mark-mode: t
> abbrev-mode: t
>
> Recent input:
> <double-wheel-down> <triple-wheel-down> <wheel-down>
> <wheel-down> <double-wheel-down> <down-mouse-1> <mouse-1>
> <down-mouse-1> <mouse-movement> <mouse-movement> <drag-mouse-1>
> <kp-delete> <down> <down> <down> <S-down> <S-down>
> <S-down> <S-down> <S-down> <S-left> <S-left> <S-left>
> <S-left> <kp-delete> <kp-delete> <kp-delete> <kp-delete>
> <kp-delete> <down> <down> <A-left> <S-down> <S-down>
> <S-down> <S-down> <S-down> <kp-delete> <return> <up>
> <up> <up> <up> <up> <up> <backspace> <down> <down>
> <down> <up> <up> <up> <up> <up> <up> <up> <up> <up>
> <up> <up> <up> <up> <up> <up> <up> <up> <up> <up> <up>
> <up> <up> <up> <right> | <down> <down> <down> <down>
> <down> <left> | <down> <down> <down> <down> <right>
> <down> | <kp-delete> <up> <up> <up> <up> <up> <up>
> <kp-delete> <up> <up> <up> <up> <up> <kp-delete> <up>
> <right> <S-down> <S-down> <S-down> <S-down> <S-down>
> <S-down> <S-down> <S-down> <S-down> <S-down> <S-down>
> <S-down> <S-down> <S-down> <S-down> <S-down> <S-down>
> <S-up> <S-up> ⌘X <down> <down> <down> <down> <down>
> <down> <down> <down> <down> ⌘V <up> <up> <up> <up>
> <up> <up> <up> <up> <up> <up> <up> <up> <up> <up> <up>
> <tab> <down> <tab> <down> <tab> <down> <tab> <down>
> <down> <up> <backspace> SPC \ <right> <tab> <down>
> <tab> <down> <tab> <down> <tab> <A-right> SPC \ <down>
> <A-backspace> <A-backspace> <tab> <down> <tab> <down>
> <tab> <down> <tab> <A-right> ) <backspace> <down-mouse-1>
> <mouse-1> <double-down-mouse-1> <double-mouse-1> <down-mouse-1>
> <mouse-1> <down-mouse-1> <mouse-1> <double-down-mouse-1>
> <double-mouse-1> <down-mouse-1> <mouse-1> <double-down-mouse-1>
> <double-mouse-1> <down-mouse-1> <mouse-1> <double-down-mouse-1>
> <double-mouse-1> <down-mouse-1> <mouse-1> <down-mouse-1>
> <mouse-1> <double-down-mouse-1> <double-mouse-1> <down-mouse-1>
> <mouse-1> <double-down-mouse-1> <double-mouse-1> <down-mouse-1>
> <mouse-1> <double-down-mouse-1> <double-mouse-1> <down-mouse-1>
> <mouse-1> <down-mouse-1> <mouse-movement> <mouse-movement>
> <mouse-movement> <mouse-movement> <drag-mouse-1> <down-mouse-1>
> <mouse-1> <down-mouse-1> <mouse-1> ) <backspace> <wheel-up>
> <double-wheel-up> <down-mouse-1> <mouse-1> <double-down-mouse-1>
> <double-mouse-1> <down-mouse-1> <mouse-1> <double-down-mouse-1>
> <double-mouse-1> <down-mouse-1> <mouse-1> <double-down-mouse-1>
> <double-mouse-1> <down-mouse-1> <mouse-1> <double-down-mouse-1>
> <double-mouse-1> <down-mouse-1> <mouse-1> <double-down-mouse-1>
> <double-mouse-1> <down-mouse-1> <mouse-1> <double-down-mouse-1>
> <double-mouse-1> <down-mouse-1> <mouse-1> <double-down-mouse-1>
> <double-mouse-1> <down-mouse-1> <mouse-1> <double-down-mouse-1>
> <double-mouse-1> <down-mouse-1> <mouse-1> ⌘S <escape>
> X C - M O D E <return> <down-mouse-1> <mouse-1> <double-down-mouse-1>
> <double-mouse-1> <down-mouse-1> <mouse-1> <escape>
> X <up> O B <return> ⌘S <down-mouse-1> <mouse-movement>
> <mouse-movement> <drag-mouse-1> ⌘C <menu-bar> <help-menu>
> <bug-diagnosis> <send-emacs-bug-report>
>
> Recent messages:
> Auto-saving...
> Mark set [4 times]
> Auto-saving...done
> Auto-saving...done
> Mark set
> Auto-saving...done
> Auto-saving...done
> Saving file /Users/dr/ae.git/src/nsterm.m...
> Wrote /Users/dr/ae.git/src/nsterm.m
> (No changes need to be saved)
>
> Load-path shadows:
> /Users/dr/Library/Preferences/Aquamacs Emacs/Recent Files hides /Users/dr/Library/Preferences/Aquamacs Emacs/Aquamacs Emacs2/Recent Files
> /Users/dr/Library/Preferences/Aquamacs Emacs/Preferences hides /Users/dr/Library/Preferences/Aquamacs Emacs/Aquamacs Emacs2/Preferences
> /Users/dr/Library/Preferences/Aquamacs Emacs/places hides /Users/dr/Library/Preferences/Aquamacs Emacs/Aquamacs Emacs2/places
> /Users/dr/Library/Preferences/Aquamacs Emacs/minibuffer-history hides /Users/dr/Library/Preferences/Aquamacs Emacs/Aquamacs Emacs2/minibuffer-history
> /Users/dr/Library/Preferences/Aquamacs Emacs/frame-positions hides /Users/dr/Library/Preferences/Aquamacs Emacs/Aquamacs Emacs2/frame-positions
> /Users/dr/Library/Preferences/Aquamacs Emacs/customizations hides /Users/dr/Library/Preferences/Aquamacs Emacs/Aquamacs Emacs2/customizations
> /Library/Application Support/Aquamacs Emacs/JDEE/site-start hides /Library/Application Support/Aquamacs Emacs/SLIME/site-start
> /Library/Application Support/Aquamacs Emacs/JDEE/cedet/speedbar/speedbar hides /Users/dr/ae.git/nextstep/Aquamacs.app/Contents/Resources/lisp/speedbar
> /Library/Application Support/Aquamacs Emacs/JDEE/cedet/speedbar/sb-image hides /Users/dr/ae.git/nextstep/Aquamacs.app/Contents/Resources/lisp/sb-image
> /Library/Application Support/Aquamacs Emacs/JDEE/cedet/common/ezimage hides /Users/dr/ae.git/nextstep/Aquamacs.app/Contents/Resources/lisp/ezimage
> /Library/Application Support/Aquamacs Emacs/JDEE/cedet/speedbar/dframe hides /Users/dr/ae.git/nextstep/Aquamacs.app/Contents/Resources/lisp/dframe
> /Library/Application Support/Aquamacs Emacs/JDEE/cedet/eieio/eieio hides /Users/dr/ae.git/nextstep/Aquamacs.app/Contents/Resources/lisp/emacs-lisp/eieio
> /Library/Application Support/Aquamacs Emacs/JDEE/cedet/eieio/eieio-speedbar hides /Users/dr/ae.git/nextstep/Aquamacs.app/Contents/Resources/lisp/emacs-lisp/eieio-speedbar
> /Library/Application Support/Aquamacs Emacs/JDEE/cedet/eieio/eieio-opt hides /Users/dr/ae.git/nextstep/Aquamacs.app/Contents/Resources/lisp/emacs-lisp/eieio-opt
> /Library/Application Support/Aquamacs Emacs/JDEE/cedet/eieio/eieio-custom hides /Users/dr/ae.git/nextstep/Aquamacs.app/Contents/Resources/lisp/emacs-lisp/eieio-custom
> /Library/Application Support/Aquamacs Emacs/JDEE/cedet/eieio/eieio-comp hides /Users/dr/ae.git/nextstep/Aquamacs.app/Contents/Resources/lisp/emacs-lisp/eieio-comp
> /Library/Application Support/Aquamacs Emacs/JDEE/cedet/eieio/eieio-base hides /Users/dr/ae.git/nextstep/Aquamacs.app/Contents/Resources/lisp/emacs-lisp/eieio-base
> /Library/Application Support/Aquamacs Emacs/JDEE/cedet/eieio/chart hides /Users/dr/ae.git/nextstep/Aquamacs.app/Contents/Resources/lisp/emacs-lisp/chart
> /Library/Application Support/Aquamacs Emacs/JDEE/cedet/semantic/semantic hides /Users/dr/ae.git/nextstep/Aquamacs.app/Contents/Resources/lisp/cedet/semantic
> /Library/Application Support/Aquamacs Emacs/JDEE/cedet/common/mode-local hides /Users/dr/ae.git/nextstep/Aquamacs.app/Contents/Resources/lisp/cedet/mode-local
> /Library/Application Support/Aquamacs Emacs/JDEE/cedet/common/inversion hides /Users/dr/ae.git/nextstep/Aquamacs.app/Contents/Resources/lisp/cedet/inversion
> /Library/Application Support/Aquamacs Emacs/JDEE/cedet/ede/ede hides /Users/dr/ae.git/nextstep/Aquamacs.app/Contents/Resources/lisp/cedet/ede
> /Library/Application Support/Aquamacs Emacs/JDEE/cedet/common/cedet hides /Users/dr/ae.git/nextstep/Aquamacs.app/Contents/Resources/lisp/cedet/cedet
> /Library/Application Support/Aquamacs Emacs/JDEE/cedet/common/cedet-files hides /Users/dr/ae.git/nextstep/Aquamacs.app/Contents/Resources/lisp/cedet/cedet-files
> /Library/Application Support/Aquamacs Emacs/JDEE/site-start hides /Users/dr/ae.git/nextstep/Aquamacs.app/Contents/Resources/lisp/aquamacs/site-start
>
> Features:
> (shadow sort mail-extr message ecomplete rfc822 mml mml-sec
> password-cache mm-decode mm-bodies mm-encode mailabbrev nnheader
> gnus-util netrc gmm-utils mailheader canlock sha1 hex-util hashcash
> emacsbug cc-mode cc-fonts cc-menus cc-cmds cc-styles cc-align cc-engine
> cc-vars cc-defs log-edit ring pcvs-util add-log diff-mode vc
> vc-dispatcher cl-specs edebug multi-isearch jka-compr find-func vc-git
> url-http tls url-auth mail-parse rfc2231 rfc2047 rfc2045 qp ietf-drums
> url-gw url-cache url url-proxy url-privacy url-expand url-methods
> url-history url-cookie url-util url-parse url-vars mm-util mail-prsvr
> mailcap mail-utils which-func imenu slime-autoloads load-emacs-plugins
> aquamacs-mode-defaults auctex-config server tex-site smart-dnd
> aquamacs-aux savehist mouse-sel one-buffer-one-frame
> smart-frame-positioning drews_init color-theme-autoloads saveplace
> visual-line aquamacs-bug aquamacs-autoface-mode aquamacs-editing
> sendmail recentf tree-widget cus-edit osxkeys emulate-mac-keyboard-mode
> frame-cmds strings misc-fns thingatpt+ thingatpt frame-fns avoid
> aquamacs-mac-fontsets fit-frame aquamacs-frame-setup aquamacs-tabbar
> tabbar-window cl cl-19 tabbar easy-mmode cus-start cus-load
> load-emacs-pre-plugins aquamacs-site-start cocoa-compatibility filladapt
> aquamacs-redo check-for-updates aquamacs-menu osx_defaults
> aquamacs-tool-bar aquamacs mac-extra-functions aquamacs-tools
> aquamacs-macros parse-time timezone time-date paren delsel pc-select
> cua-base wid-edit regexp-opt advice advice-preload byte-opt bytecomp
> byte-compile debug help-fns help-mode view image-file disp-table tooltip
> ediff-hook vc-hooks lisp-float-type mwheel ns-win easymenu tool-bar dnd
> fontset image fringe lisp-mode register page menu-bar rfn-eshadow timer
> select scroll-bar mldrag 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 loaddefs button minibuffer faces
> cus-face files text-properties overlay md5 base64 format env code-pages
> mule custom widget hashtable-print-readable backquote
> make-network-process ns multi-tty emacs)
^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#5560: 23.1.92; parens matching in c-mode broken
2016-02-17 3:56 ` Andrew Hyatt
@ 2016-02-20 22:57 ` Alan Mackenzie
2016-02-21 12:35 ` Alan Mackenzie
0 siblings, 1 reply; 10+ messages in thread
From: Alan Mackenzie @ 2016-02-20 22:57 UTC (permalink / raw)
To: Andrew Hyatt; +Cc: David Reitter, 5560
Hello, David and Andrew.
On Tue, Feb 16, 2016 at 10:56:34PM -0500, Andrew Hyatt wrote:
> I can confirm this still doesn't work right in Emacs 25. However, I get
> a slightly different experience, with clicking on all 3 left parens
> highlighting until the first right paren only. Similarly, that right
> paren seems to be the matching paren for all 3 left parens.
What is (now) happening is this: the C Preprocessor construct ends at the
end of the second line (due to the space after the \ there). The first
two open parentheses on that line are unmatched. In such circumstances,
CC Mode splats the syntax of such characters by setting syntax-table text
properties on them. This is to prevent them spuriously matching parens
outside the CPP construct.
When you double click on one of the non-matching parens, the critical
piece of code reached is in `mouse-start-end'. Instead of checking the
syntax of the character in its context (i.e. respecting syntax-table text
properties), it simply checks the syntax of the bare character '(', and
finds it's an open paren. It then does (forward-sexp) to try and find the
matching ')'. This ignores the two "dummy" parens and then scans over
the real paren pair remaining.
One solution would be to replace the (obsolete) form in mouse.el:
(char-syntax (char-after start))
with the modern (and correct) form
(syntax-after start)
. A small problem with this is that `syntax-after' returns a cons of raw
numbers rather than the more picturesque character descriptors like ?\(.
A bigger problem is that there are still approximately 164 uses of
`char-syntax' in our sources, all (or most) of which need superseding by
`syntax-after'.
If this were to be done, double clicking on one of these unmatched parens
would attempt to match the "word it is in". I don't know exactly what
would happen. Probably not very much. In fact, I'm going to try it. (A
bit later): Double clicking on a "dummy paren" would mark the sequence of
three parens. I think this is better than marking up to the single close
paren, but not by much.
> David Reitter <david.reitter@gmail.com> writes:
> > Parens matching in C mode is sometimes surprising. In the example
> > below, double-clicking on either of the first two opening parentheses
> > will mark the text until the " hyper_modifier : 0)", but that is correct
> > only for the second paren, while the first one is unmatched due to a space
> > following the backslash.
> > #define EV_MODIFIERS(e) \
> > ((([e modifierFlags] & NSHelpKeyMask) ? \
> > hyper_modifier : 0) \
> > ...
> > It would be more useful if an "unmatched parentheses" was shown, or
> > if the region up to the end of the scan process (i.e. the
> > space+newline) was marked.
Giving a decent error message here would be difficult. We're down in the
depths of the mouse code, but the strategem of giving syntax-table text
properties to parentheses is a pure CC Mode one. Signaling an error if
a paren has other than paren syntax is liable to have unforseen side
effects somewhere, somehow, some time.
Do you (plural) think it is worth while fixing the mouse code, as
detailed above, or do you have any other ideas for a fix?
> > In GNU Emacs 23.1.92.86 (x86_64-apple-darwin10.2.0, NS apple-appkit-1038.25)
> > of 2010-02-08 on scarlett.local - Aquamacs Distribution 2.0dev
> > Windowing system distributor `Apple', version 10.3.1038
> > configured using `configure '--with-ns' 'CFLAGS=-O0 -g''
> > Major mode: ObjC/l
--
Alan Mackenzie (Nuremberg, Germany).
^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#5560: 23.1.92; parens matching in c-mode broken
2016-02-20 22:57 ` Alan Mackenzie
@ 2016-02-21 12:35 ` Alan Mackenzie
2016-02-21 21:40 ` David Reitter
0 siblings, 1 reply; 10+ messages in thread
From: Alan Mackenzie @ 2016-02-21 12:35 UTC (permalink / raw)
To: Andrew Hyatt; +Cc: David Reitter, 5560
Hello again, David and Andrew.
On Sat, Feb 20, 2016 at 10:57:23PM +0000, Alan Mackenzie wrote:
> On Tue, Feb 16, 2016 at 10:56:34PM -0500, Andrew Hyatt wrote:
> > I can confirm this still doesn't work right in Emacs 25. However, I get
> > a slightly different experience, with clicking on all 3 left parens
> > highlighting until the first right paren only. Similarly, that right
> > paren seems to be the matching paren for all 3 left parens.
> > David Reitter <david.reitter@gmail.com> writes:
> > > Parens matching in C mode is sometimes surprising. In the example
> > > below, double-clicking on either of the first two opening parentheses
> > > will mark the text until the " hyper_modifier : 0)", but that is correct
> > > only for the second paren, while the first one is unmatched due to a space
> > > following the backslash.
> > > #define EV_MODIFIERS(e) \
> > > ((([e modifierFlags] & NSHelpKeyMask) ? \
> > > hyper_modifier : 0) \
> > > ...
> > > It would be more useful if an "unmatched parentheses" was shown, or
> > > if the region up to the end of the scan process (i.e. the
> > > space+newline) was marked.
> Giving a decent error message here would be difficult. We're down in the
> depths of the mouse code, but the strategem of giving syntax-table text
> properties to parentheses is a pure CC Mode one. Signaling an error if
> a paren has other than paren syntax is liable to have unforseen side
> effects somewhere, somehow, some time.
After a night's sleep, I've changed my mind about the advisability of
such a fix. So, here is a fix. It works as indicated last night: if a
character whose normal syntax is open/close-paren has a different syntax
due to syntax-table text properties, a 'scan-error error is signaled:
either "Containing expression ends prematurely" for an open paren, or
"Unbalanced parentheses" for a close paren.
Here's the patch. Please try it out and let me know if there's anything
amiss about it. Otherwise, I'll commit it.
diff --git a/lisp/mouse.el b/lisp/mouse.el
index 85ffc43..22c5b48 100644
--- a/lisp/mouse.el
+++ b/lisp/mouse.el
@@ -931,20 +931,29 @@ mouse-start-end
(= start end)
(char-after start)
(= (char-syntax (char-after start)) ?\())
- (list start
- (save-excursion
- (goto-char start)
- (forward-sexp 1)
- (point))))
+ (if (/= (car (syntax-after start)) 4)
+ ;; This happens in CC Mode when unbalanced parens in CPP
+ ;; constructs are given punctuation syntax with
+ ;; syntax-table text properties. (2016-02-21).
+ (signal 'scan-error (list "Containing expression ends prematurely"
+ start start))
+ (list start
+ (save-excursion
+ (goto-char start)
+ (forward-sexp 1)
+ (point)))))
((and (= mode 1)
(= start end)
(char-after start)
(= (char-syntax (char-after start)) ?\)))
- (list (save-excursion
- (goto-char (1+ start))
- (backward-sexp 1)
- (point))
- (1+ start)))
+ (if (/= (car (syntax-after start)) 5)
+ ;; See above comment about CC Mode.
+ (signal 'scan-error (list "Unbalanced parentheses" start start))
+ (list (save-excursion
+ (goto-char (1+ start))
+ (backward-sexp 1)
+ (point))
+ (1+ start))))
((and (= mode 1)
(= start end)
(char-after start)
--
Alan Mackenzie (Nuremberg, Germany).
^ permalink raw reply related [flat|nested] 10+ messages in thread
* bug#5560: 23.1.92; parens matching in c-mode broken
2016-02-21 12:35 ` Alan Mackenzie
@ 2016-02-21 21:40 ` David Reitter
2016-02-21 23:21 ` John Wiegley
2016-02-22 10:35 ` Alan Mackenzie
0 siblings, 2 replies; 10+ messages in thread
From: David Reitter @ 2016-02-21 21:40 UTC (permalink / raw)
To: Alan Mackenzie; +Cc: Andrew Hyatt, 5560
Alan,
Your patch works as advertised for my test case. It’s certainly better to error out than to do the wrong thing.
I think you are catching the right situations, but my confidence is low because of the readability of the code (what is 4, 5?).
I think the question is whether that fix is appropriate for the 25.1 release. If you want to apply it there, I would probably test a whole lot of cases in modes that are derivates of c-mode.
- David
> On Feb 21, 2016, at 7:35 AM, Alan Mackenzie <acm@muc.de> wrote:
>
> Hello again, David and Andrew.
>
> On Sat, Feb 20, 2016 at 10:57:23PM +0000, Alan Mackenzie wrote:
>> On Tue, Feb 16, 2016 at 10:56:34PM -0500, Andrew Hyatt wrote:
>
>>> I can confirm this still doesn't work right in Emacs 25. However, I get
>>> a slightly different experience, with clicking on all 3 left parens
>>> highlighting until the first right paren only. Similarly, that right
>>> paren seems to be the matching paren for all 3 left parens.
>
>>> David Reitter <david.reitter@gmail.com> writes:
>
>>>> Parens matching in C mode is sometimes surprising. In the example
>>>> below, double-clicking on either of the first two opening parentheses
>>>> will mark the text until the " hyper_modifier : 0)", but that is correct
>>>> only for the second paren, while the first one is unmatched due to a space
>>>> following the backslash.
>
>>>> #define EV_MODIFIERS(e) \
>>>> ((([e modifierFlags] & NSHelpKeyMask) ? \
>>>> hyper_modifier : 0) \
>>>> ...
>
>
>>>> It would be more useful if an "unmatched parentheses" was shown, or
>>>> if the region up to the end of the scan process (i.e. the
>>>> space+newline) was marked.
>
>> Giving a decent error message here would be difficult. We're down in the
>> depths of the mouse code, but the strategem of giving syntax-table text
>> properties to parentheses is a pure CC Mode one. Signaling an error if
>> a paren has other than paren syntax is liable to have unforseen side
>> effects somewhere, somehow, some time.
>
> After a night's sleep, I've changed my mind about the advisability of
> such a fix. So, here is a fix. It works as indicated last night: if a
> character whose normal syntax is open/close-paren has a different syntax
> due to syntax-table text properties, a 'scan-error error is signaled:
> either "Containing expression ends prematurely" for an open paren, or
> "Unbalanced parentheses" for a close paren.
>
> Here's the patch. Please try it out and let me know if there's anything
> amiss about it. Otherwise, I'll commit it.
>
>
>
> diff --git a/lisp/mouse.el b/lisp/mouse.el
> index 85ffc43..22c5b48 100644
> --- a/lisp/mouse.el
> +++ b/lisp/mouse.el
> @@ -931,20 +931,29 @@ mouse-start-end
> (= start end)
> (char-after start)
> (= (char-syntax (char-after start)) ?\())
> - (list start
> - (save-excursion
> - (goto-char start)
> - (forward-sexp 1)
> - (point))))
> + (if (/= (car (syntax-after start)) 4)
> + ;; This happens in CC Mode when unbalanced parens in CPP
> + ;; constructs are given punctuation syntax with
> + ;; syntax-table text properties. (2016-02-21).
> + (signal 'scan-error (list "Containing expression ends prematurely"
> + start start))
> + (list start
> + (save-excursion
> + (goto-char start)
> + (forward-sexp 1)
> + (point)))))
> ((and (= mode 1)
> (= start end)
> (char-after start)
> (= (char-syntax (char-after start)) ?\)))
> - (list (save-excursion
> - (goto-char (1+ start))
> - (backward-sexp 1)
> - (point))
> - (1+ start)))
> + (if (/= (car (syntax-after start)) 5)
> + ;; See above comment about CC Mode.
> + (signal 'scan-error (list "Unbalanced parentheses" start start))
> + (list (save-excursion
> + (goto-char (1+ start))
> + (backward-sexp 1)
> + (point))
> + (1+ start))))
> ((and (= mode 1)
> (= start end)
> (char-after start)
>
>
>
> --
> Alan Mackenzie (Nuremberg, Germany).
^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#5560: 23.1.92; parens matching in c-mode broken
2016-02-21 21:40 ` David Reitter
@ 2016-02-21 23:21 ` John Wiegley
2016-02-22 10:51 ` Alan Mackenzie
2016-02-22 10:35 ` Alan Mackenzie
1 sibling, 1 reply; 10+ messages in thread
From: John Wiegley @ 2016-02-21 23:21 UTC (permalink / raw)
To: David Reitter; +Cc: Alan Mackenzie, Andrew Hyatt, 5560
>>>>> David Reitter <david.reitter@gmail.com> writes:
> I think the question is whether that fix is appropriate for the 25.1
> release. If you want to apply it there, I would probably test a whole lot of
> cases in modes that are derivates of c-mode.
Does this change past behavior? We still have room for fixes in 25.1, but if
it changes past behavior it will need sufficient testing.
--
John Wiegley GPG fingerprint = 4710 CF98 AF9B 327B B80F
http://newartisans.com 60E1 46C4 BD1A 7AC1 4BA2
^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#5560: 23.1.92; parens matching in c-mode broken
2016-02-21 21:40 ` David Reitter
2016-02-21 23:21 ` John Wiegley
@ 2016-02-22 10:35 ` Alan Mackenzie
2016-02-22 12:09 ` David Reitter
1 sibling, 1 reply; 10+ messages in thread
From: Alan Mackenzie @ 2016-02-22 10:35 UTC (permalink / raw)
To: David Reitter; +Cc: Andrew Hyatt, 5560
Hello, David.
On Sun, Feb 21, 2016 at 04:40:09PM -0500, David Reitter wrote:
> Alan,
> Your patch works as advertised for my test case. It’s certainly
> better to error out than to do the wrong thing.
> I think you are catching the right situations, but my confidence is
> low because of the readability of the code (what is 4, 5?).
4 and 5 are the low level codes for "open paren" and "close paren"
syntax. I don't like them much either, but `syntax-after' is the only
interface available which returns the syntax of a character in a buffer,
taking account of syntax-table text properties. 4 and 5 (or, more
precisely, (4 . ?\)), (5 . ?\()) are what we have to work with.
One way would be to create two constants with fancy names with values 4
and 5, but I don't think that helps much - anybody debugging and
suspicious of the values still has to find the page in the elisp manual
to check, but has an extra irritating indirection to cope with.
How would you feel about explanatory comments on the two lines -
something like:
+ (if (/= (car (syntax-after start)) 4) ; low-level code for ?\(
?
What we really need is a better interface. Perhaps `char-syntax-after',
which would actually return ?\( and ?\). In fact, I think I'll raise a
bug report for this.
> I think the question is whether that fix is appropriate for the 25.1
> release. If you want to apply it there, I would probably test a whole
> lot of cases in modes that are derivates of c-mode.
I think the fix should go into 25.1. I'm confident enough about the
mechanism of the bug that I'm not sure extensive testing is warranted.
> - David
--
Alan Mackenzie (Nuremberg, Germany).
^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#5560: 23.1.92; parens matching in c-mode broken
2016-02-21 23:21 ` John Wiegley
@ 2016-02-22 10:51 ` Alan Mackenzie
0 siblings, 0 replies; 10+ messages in thread
From: Alan Mackenzie @ 2016-02-22 10:51 UTC (permalink / raw)
To: John Wiegley; +Cc: David Reitter, Andrew Hyatt, 5560
Hello, John.
On Sun, Feb 21, 2016 at 03:21:52PM -0800, John Wiegley wrote:
> >>>>> David Reitter <david.reitter@gmail.com> writes:
> > I think the question is whether that fix is appropriate for the 25.1
> > release. If you want to apply it there, I would probably test a whole lot of
> > cases in modes that are derivates of c-mode.
> Does this change past behavior? We still have room for fixes in 25.1, but if
> it changes past behavior it will need sufficient testing.
The fix doesn't change past behaviour, beyond fixing the actual bug.
What is amazing is that on doing a triple click with mouse-1 on such an
unmatched paren, an error is signaled after the second click, but Emacs
then goes on to mark the line correctly after the third click.
> --
> John Wiegley GPG fingerprint = 4710 CF98 AF9B 327B B80F
> http://newartisans.com 60E1 46C4 BD1A 7AC1 4BA2
--
Alan Mackenzie (Nuremberg, Germany).
^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#5560: 23.1.92; parens matching in c-mode broken
2016-02-22 10:35 ` Alan Mackenzie
@ 2016-02-22 12:09 ` David Reitter
2016-02-25 9:54 ` Alan Mackenzie
0 siblings, 1 reply; 10+ messages in thread
From: David Reitter @ 2016-02-22 12:09 UTC (permalink / raw)
To: Alan Mackenzie; +Cc: Andrew Hyatt, 5560
On Feb 22, 2016, at 5:35 AM, Alan Mackenzie <acm@muc.de> wrote:
> How would you feel about explanatory comments on the two lines -
> something like
That would help. I didn’t mean to criticize your patch in this sense, as this is a more general interface problem as you point out.
What you are explaining though makes more sense to me. So yes, perhaps this needs to be in 25.1.
^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#5560: 23.1.92; parens matching in c-mode broken
2016-02-22 12:09 ` David Reitter
@ 2016-02-25 9:54 ` Alan Mackenzie
0 siblings, 0 replies; 10+ messages in thread
From: Alan Mackenzie @ 2016-02-25 9:54 UTC (permalink / raw)
To: David Reitter, 5560-done; +Cc: Andrew Hyatt, John Wiegley
Hello, David.
On Mon, Feb 22, 2016 at 07:09:00AM -0500, David Reitter wrote:
> On Feb 22, 2016, at 5:35 AM, Alan Mackenzie <acm@muc.de> wrote:
> > How would you feel about explanatory comments on the two lines -
> > something like
> That would help. I didn’t mean to criticize your patch in this sense,
> as this is a more general interface problem as you point out.
OK. I've added these comments.
> What you are explaining though makes more sense to me. So yes,
> perhaps this needs to be in 25.1.
I've committed the fix to the emacs-25 branch, and am closing the bug.
Sorry it took so long to fix.
--
Alan Mackenzie (Nuremberg, Germany).
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2016-02-25 9:54 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-02-11 3:01 bug#5560: 23.1.92; parens matching in c-mode broken David Reitter
2016-02-17 3:56 ` Andrew Hyatt
2016-02-20 22:57 ` Alan Mackenzie
2016-02-21 12:35 ` Alan Mackenzie
2016-02-21 21:40 ` David Reitter
2016-02-21 23:21 ` John Wiegley
2016-02-22 10:51 ` Alan Mackenzie
2016-02-22 10:35 ` Alan Mackenzie
2016-02-22 12:09 ` David Reitter
2016-02-25 9:54 ` Alan Mackenzie
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).