Subject: 24.3.93; Bash font lock: pretty inconsistent treatment of `` and $()

From: Carlos Pita <[email-masked]>
Date: Mon, 01 Sep 2014 11:17:23 -0300

The syntax table treats ` as an string quote character, so

`if [[ $x == x ]]; then echo x; else echo y fi`

$(if [[ $x == x ]]; then echo x; else echo y fi)

are highlighted in a very different way although they are semantically
equivalent.

Related to do above, I don't know whether the different highlighting of
the first word in:

$(if [[ $x == x ]]; then echo x; else echo y fi)

if [[ $x == x ]]; then echo x; else echo y fi

is intended or accidental, but it looks pretty weird. Moreover

$([[ $x == x ]] && echo x)

[[ $x == x ]] && echo x

will highlight exactly equal, which is not consistent with the previous
example.

All in all, I would suggest to:

1) Highlight $(...) and `...` the same way.

2) Don't set the face of the first symbol following $( in any special
way.

Regards
--
Carlos

In GNU Emacs 24.3.93.1 (x86_64-unknown-linux-gnu, GTK+ Version 3.12.2)
 of 2014-08-27 on carlos
Windowing system distributor `The X.Org Foundation', version 11.0.11600000
Configured using:
 `configure --prefix=/usr --sysconfdir=/etc --libexecdir=/usr/lib
 --localstatedir=/var --with-x-toolkit=gtk3 --with-xft
 'CFLAGS=-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector-strong
 --param=ssp-buffer-size=4' CPPFLAGS=-D_FORTIFY_SOURCE=2
 LDFLAGS=-Wl,-O1,--sort-common,--as-needed,-z,relro'

Important settings:
  value of $LC_COLLATE: en_US.UTF-8
  value of $LC_CTYPE: en_US.UTF-8
  value of $LC_MESSAGES: en_US.UTF-8
  value of $LC_MONETARY: en_US.UTF-8
  value of $LC_NUMERIC: en_US.UTF-8
  value of $LC_TIME: en_US.UTF-8
  value of $LANG: en_US.UTF-8
  locale-coding-system: utf-8-unix

Major mode: Shell-script

Minor modes in effect:
  shell-dirtrack-mode: t
  sh-electric-here-document-mode: t
  show-paren-mode: t
  eldoc-mode: t
  yas-global-mode: t
  yas-minor-mode: t
  ido-ubiquitous-mode: t
  global-auto-complete-mode: t
  auto-complete-mode: t
  ido-everywhere: t
  winner-mode: t
  tooltip-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  column-number-mode: t
  line-number-mode: t
  transient-mark-mode: t

Recent input:
( ( x ) ) SPC & & S-SPC l s SPC " x " ) <return> $ 
( l s <backspace> <backspace> [ [ SPC $ x SPC ] ] SPC 
& & SPC l s SPC " x " ) <return> $ ( <backspace> <backspace> 
<up> C-k C-y <return> <return> C-y C-a " C-e " <up> 
<up> <down> <down> C-a C-SPC <down> M-w <down> C-y 
<up> <right> <right> <right> C-d C-d C-d C-d ( ( <right> 
<right> <right> <right> <backspace> <backspace> <backspace> 
) ) <up> <up> C-x C-s <down> <down> <down> <up> e <return> 
<backspace> <backspace> C-e <return> <up> <up> <up> 
<up> <up> <up> <up> C-SPC <down> <down> <down> <down> 
M-w <down> <return> <return> <up> <up> C-y <up> <up> 
<up> <up> C-v <down> <down> <down> <right> <up> <up> 
<up> <left> <left> C-SPC C-g <down> C-SPC <down> <down> 
<down> <right> <left> C-x r t " <return> <right> <right> 
<right> <right> <right> <right> <right> <right> <right> 
<right> <right> <right> <right> <right> <right> <right> 
<up> <up> <up> " <down> C-e " <down> C-e " <down> C-e 
" <down> <return> <return> <up> <up> <up> <up> <up> 
<up> <up> <up> C-SPC <down> M-w <down> <down> <down> 
<down> <down> <down> C-y <up> C-e <left> <left> <left> 
<left> <left> <backspace> <backspace> i f <right> <right> 
<right> <right> SPC f i <down> <up> <return> C-/ <left> 
<left> <right> <right> <backspace> <backspace> f i 
C-g <up> <down> <left> <left> <left> <right> <backspace> 
<return> <up> <down> M-^ <up> C-x C-s <down> <right> 
<right> <right> <right> <right> <right> <right> <right> 
<right> <right> <right> <right> <right> <right> <right> 
<right> <right> <right> <right> <right> ; <down> C-x 
C-s <down> <down> <up> <up> <up> C-SPC <down> M-w <down> 
<up> C-y C-a <up> C-d C-d ` C-e <backspace> ` <down> 
<down> M-x r e p o <tab> r t - e <tab> <return>

Recent messages:
[yas] Snippet 0 exited.
Undo!
Quit
Saving file /tmp/test.sh...
Wrote /tmp/test.sh
Saving file /tmp/test.sh...
Wrote /tmp/test.sh
Mark activated
Mark set
Making completion list...

Load-path shadows:
~/.emacs.d/lisp/rmail hides /usr/share/emacs/24.3.93/lisp/mail/rmail

Features:
(shadow emacsbug xterm descr-text tramp-cache tramp tramp-compat
tramp-loaddefs trampver shell view woman man misearch multi-isearch
cus-edit cus-start cus-load sh-script smie executable gnus-draft
mailalias smtpmail sendmail oauth2 warnings json plstore nnir url-http
url-gw url-auth url-queue face-remap org-colview diary-lib
diary-loaddefs cal-iso org-agenda bookmark thingatpt tabify image-file
org-capture pp rect vc-git org-element org-rmail org-mhe org-irc
org-info org-gnus org-docview doc-view jka-compr image-mode dired
org-bibtex bibtex org-bbdb org-w3m mule-util shr-color color shr
browse-url gnus-dup sort smiley gnus-cite mm-archive mail-extr
gnus-async gnus-bcklg qp gnus-ml disp-table gnus-topic nndraft nnmh
nnfolder utf-7 epa-file epa derived epg gnutls network-stream starttls
nnimap parse-time tls utf7 netrc gnus-agent gnus-srvr gnus-score
score-mode nnvirtual gnus-msg gnus-art mm-uu mml2015 epg-config mm-view
mml-smime smime dig nntp gnus-cache gnus-sum nnoo gnus-group gnus-undo
nnmail mail-source google-contacts-message google-contacts xml url-cache
url url-proxy url-privacy url-expand url-methods url-history url-cookie
url-domsuf mailcap url-util url-parse auth-source eieio eieio-core
password-cache url-vars google-oauth gnus-start gnus-spec gnus-int
gnus-range message idna rfc822 mml mml-sec mm-decode mm-bodies mm-encode
mail-parse rfc2231 rfc2047 rfc2045 ietf-drums mailabbrev gmm-utils
mailheader gnus-win gnus gnus-ems nnheader gnus-util mail-utils mm-util
mail-prsvr wid-edit server flymake compile paredit paren eldoc cl-macs
ob-python ob-R org byte-opt bytecomp byte-compile cconv org-macro
org-footnote org-pcomplete pcomplete org-list org-faces org-entities
time-date noutline outline easy-mmode org-version ob-emacs-lisp ob
ob-tangle org-src ob-ref ob-lob ob-table ob-keys ob-exp ob-comint comint
ansi-color ob-core ob-eval org-compat org-macs org-loaddefs format-spec
find-func cal-menu calendar cal-loaddefs yasnippet help-mode
ido-ubiquitous cl gv advice help-fns auto-complete-config auto-complete
popup imenu-anywhere imenu ido windmove winner ring edmacro kmacro
cl-loaddefs cl-lib info easymenu package wombat-theme 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
dbusbind gfilenotify dynamic-setting system-font-setting
font-render-setting move-toolbar gtk x-toolkit x multi-tty emacs)

Memory information:
((conses 16 618712 75891)
 (symbols 48 57188 0)
 (miscs 40 3530 2211)
 (strings 32 220578 14464)
 (string-bytes 1 4703140)
 (vectors 16 51134)
 (vector-slots 8 1666305 45219)
 (floats 8 1010 1759)
 (intervals 56 28363 1382)
 (buffers 960 89)
 (heap 1024 65685 4604))