Subject: 24.3; sh-script comment indent failure involving apostrophes in comments/heredocs on previous lines

From: Richard Tollerton <[email-masked]>
Date: Mon, 14 Jul 2014 15:16:18 -0500

This bug report will be sent to the Bug-GNU-Emacs mailing list
and the GNU bug tracker at debbugs.gnu.org.  Please check that
the From: line contains a valid email address.  After a delay of up
to one day, you should receive an acknowledgment at that address.

Please write in English if possible, as the Emacs maintainers
usually do not have translators for other languages.

Please describe exactly what actions triggered the bug, and
the precise symptoms of the bug.  If you can, give a recipe
starting from `emacs -Q':

1. Create a file test.sh with the following contents. (The file variable
is for convenience in reproducing the issue; the point is to set
sh-indent-command to t.)

# -*- mode: sh-script; sh-indent-comment: t; -*-
cat <<EOF
{}
can't
EOF

testfunc () {
    # don't
# do this
}

2. Set point to the line "# do this" and hit TAB. The line remains
incorrectly indented at offset 0.

3. Remove the apostrophe from the previous line so that it reads "#
dont". Move point back to "# do this" and hit TAB. This time, the line
becomes correctly indented.

Suggested workaround follows. Note, reproducing this seems to require
the heredoc, so I'm pretty sure this is a bandaid fix, not "the" fix.

>From b08b383fccad22032a3db17bb912c564497fe2f4 Mon Sep 17 00:00:00 2001
From: Richard Tollerton <[email-masked]>
Date: Mon, 14 Jul 2014 14:49:52 -0500
Subject: [PATCH] * lisp/progmodes/sh-script.el (sh-get-indent-info): Inhibit
 quotation   marks in comments from affecting indentation.

---
 lisp/progmodes/sh-script.el | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/lisp/progmodes/sh-script.el b/lisp/progmodes/sh-script.el
index dd1057e..315ac66 100644
--- a/lisp/progmodes/sh-script.el
+++ b/lisp/progmodes/sh-script.el
@@ -2883,10 +2883,13 @@ STRING	     This is ignored for the purposes of calculating
 
       (if prev-line-end
 	  (save-excursion
-	    ;; We start off at beginning of this line.
-	    ;; Scan previous statements while this is <=
-	    ;; start of previous line.
+	    ;; We start off at beginning of this line. Scan previous statements
+	    ;; while this is <= start of previous line. Comments at the end of
+	    ;; the previous line are skipped; we don't want quotation marks in
+	    ;; comments to affect indentation.
 	    (goto-char prev-line-end)
+	    (let ((ppss (syntax-ppss)))
+	      (when (nth 4 ppss) (goto-char (nth 8 ppss))))
 	    (setq x t)
 	    (while (and x (setq x  (sh-prev-thing)))
 	      (sh-debug "at %d x is: %s  result is: %s" (point) x result)
-- 
2.0.1

If Emacs crashed, and you have the Emacs process in the gdb debugger,
please include the output from the following gdb commands:
    `bt full' and `xbacktrace'.
For information about debugging Emacs, please read the file
/usr/share/emacs/24.3/etc/DEBUG.

In GNU Emacs 24.3.1 (x86_64-unknown-linux-gnu, X toolkit)
 of 2014-07-01 on weregild
Configured using:
 `configure '--prefix=/usr' '--sysconfdir=/etc' '--libexecdir=/usr/lib'
 '--localstatedir=/var' '--without-all' '--with-xml2'
 '--with-x-toolkit=athena' '--with-link-time-optimization'
 '--with-makeinfo' '--with-compress-info' 'CFLAGS=-march=x86-64
 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4'
 'LDFLAGS=-Wl,-O1,--sort-common,--as-needed,-z,relro'
 'CPPFLAGS=-D_FORTIFY_SOURCE=2''

Important settings:
  value of $LANG: en_US.UTF-8
  locale-coding-system: utf-8-unix
  default enable-multibyte-characters: t

Major mode: Shell-script

Minor modes in effect:
  sh-electric-here-document-mode: t
  shell-dirtrack-mode: t
  xterm-mouse-mode: t
  diff-auto-refine-mode: t
  winner-mode: t
  recentf-mode: t
  show-paren-mode: t
  global-whitespace-newline-mode: t
  global-whitespace-mode: t
  electric-layout-mode: t
  tooltip-mode: t
  mouse-wheel-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:
B ESC O B ESC O B ESC O B ESC O B ESC O B ESC O B ESC 
O B ESC O B ESC O B ESC O B ESC O B ESC O B ESC O B 
ESC O B ESC O B ESC O B ESC O B ESC O B ESC O B ESC 
O B ESC O B ESC O B ESC O B ESC O B ESC O B ESC O B 
ESC O B ESC O B ESC O B ESC O B ESC O B ESC O B ESC 
[ 6 ~ C-s c o m m e n t RET ESC O H C-c ESC [ 1 ; 5 
D ESC : s h - i n d e n t - c o m TAB RET ESC [ < 0 
; 1 4 0 ; 5 6 M ESC [ < 0 ; 1 4 0 ; 5 6 m ESC [ 1 ; 
5 H C-y ESC ] 5 2 ; s ; I y A t K i 0 g b W 9 k Z T 
o g c 2 g t c 2 N y a X B 0 O y B z a C 1 p b m R l 
b n Q t Y 2 9 t b W V u d D o g d D s g L S o t ESC 
\ RET ESC O B ESC O B ESC O B ESC O D ESC O C ESC O 
A ESC O A ESC O B ESC O B ESC O B ESC O D ESC O C C-x 
C-s ESC x e DEL r e p o TAB r t - e m TAB b g DEL TAB 
RET

Recent messages:
Wrote /home/rtollert/penguin/user/rtollert/nilrats/trunk/1.0/source/tests/base/testproc_RepoDebug.sh
Mark set [2 times]
Making completion list... [4 times]
Mark set
Mark saved where search started
t
Mark set [2 times]
Saving file /home/rtollert/test.sh...
Wrote /home/rtollert/test.sh
Making completion list...

Load-path shadows:
/home/rtollert/mnt/conf/emacs/site-lisp/color-theme-6.6.0/color-theme hides /usr/share/emacs/site-lisp/color-theme
/home/rtollert/mnt/conf/emacs/site-lisp/color-theme-6.6.0/themes/color-theme-library hides /usr/share/emacs/site-lisp/themes/color-theme-library
/home/rtollert/mnt/conf/emacs/site-lisp/color-theme-6.6.0/themes/color-theme-example hides /usr/share/emacs/site-lisp/themes/color-theme-example
~/mnt/conf/emacs/site-lisp/ox-confluence hides /usr/share/emacs/site-lisp/org_contrib/lisp/ox-confluence
/usr/share/emacs/site-lisp/flim/hex-util hides /usr/share/emacs/24.3/lisp/hex-util
/usr/share/emacs/site-lisp/flim/md4 hides /usr/share/emacs/24.3/lisp/md4
/usr/share/emacs/site-lisp/org/ob-clojure hides /usr/share/emacs/24.3/lisp/org/ob-clojure
/usr/share/emacs/site-lisp/org/ob-asymptote hides /usr/share/emacs/24.3/lisp/org/ob-asymptote
/usr/share/emacs/site-lisp/org/ob-lisp hides /usr/share/emacs/24.3/lisp/org/ob-lisp
/usr/share/emacs/site-lisp/org/ob-lob hides /usr/share/emacs/24.3/lisp/org/ob-lob
/usr/share/emacs/site-lisp/org/ob-gnuplot hides /usr/share/emacs/24.3/lisp/org/ob-gnuplot
/usr/share/emacs/site-lisp/org_contrib/lisp/org-mew hides /usr/share/emacs/24.3/lisp/org/org-mew
/usr/share/emacs/site-lisp/org/org-bibtex hides /usr/share/emacs/24.3/lisp/org/org-bibtex
/usr/share/emacs/site-lisp/org/ob-haskell hides /usr/share/emacs/24.3/lisp/org/ob-haskell
/usr/share/emacs/site-lisp/org/ob-C hides /usr/share/emacs/24.3/lisp/org/ob-C
/usr/share/emacs/site-lisp/org/ob-js hides /usr/share/emacs/24.3/lisp/org/ob-js
/usr/share/emacs/site-lisp/org/org-mhe hides /usr/share/emacs/24.3/lisp/org/org-mhe
/usr/share/emacs/site-lisp/org/ob-matlab hides /usr/share/emacs/24.3/lisp/org/ob-matlab
/usr/share/emacs/site-lisp/org/ob-fortran hides /usr/share/emacs/24.3/lisp/org/ob-fortran
/usr/share/emacs/site-lisp/org/org-protocol hides /usr/share/emacs/24.3/lisp/org/org-protocol
/usr/share/emacs/site-lisp/org/org-ctags hides /usr/share/emacs/24.3/lisp/org/org-ctags
/usr/share/emacs/site-lisp/org/ob-scala hides /usr/share/emacs/24.3/lisp/org/ob-scala
/usr/share/emacs/site-lisp/org_contrib/lisp/org-wl hides /usr/share/emacs/24.3/lisp/org/org-wl
/usr/share/emacs/site-lisp/org/ob-picolisp hides /usr/share/emacs/24.3/lisp/org/ob-picolisp
/usr/share/emacs/site-lisp/org/org-entities hides /usr/share/emacs/24.3/lisp/org/org-entities
/usr/share/emacs/site-lisp/org/org-eshell hides /usr/share/emacs/24.3/lisp/org/org-eshell
/usr/share/emacs/site-lisp/org/org-clock hides /usr/share/emacs/24.3/lisp/org/org-clock
/usr/share/emacs/site-lisp/org/org-w3m hides /usr/share/emacs/24.3/lisp/org/org-w3m
/usr/share/emacs/site-lisp/org/org-src hides /usr/share/emacs/24.3/lisp/org/org-src
/usr/share/emacs/site-lisp/org/org-crypt hides /usr/share/emacs/24.3/lisp/org/org-crypt
/usr/share/emacs/site-lisp/org/ob-ditaa hides /usr/share/emacs/24.3/lisp/org/ob-ditaa
/usr/share/emacs/site-lisp/org/ob-css hides /usr/share/emacs/24.3/lisp/org/ob-css
/usr/share/emacs/site-lisp/org/ob-ocaml hides /usr/share/emacs/24.3/lisp/org/ob-ocaml
/usr/share/emacs/site-lisp/org/org-compat hides /usr/share/emacs/24.3/lisp/org/org-compat
/usr/share/emacs/site-lisp/org/ob-exp hides /usr/share/emacs/24.3/lisp/org/ob-exp
/usr/share/emacs/site-lisp/org/org-attach hides /usr/share/emacs/24.3/lisp/org/org-attach
/usr/share/emacs/site-lisp/org/org-agenda hides /usr/share/emacs/24.3/lisp/org/org-agenda
/usr/share/emacs/site-lisp/org/org-timer hides /usr/share/emacs/24.3/lisp/org/org-timer
/usr/share/emacs/site-lisp/org/ob-screen hides /usr/share/emacs/24.3/lisp/org/ob-screen
/usr/share/emacs/site-lisp/org/ob-table hides /usr/share/emacs/24.3/lisp/org/ob-table
/usr/share/emacs/site-lisp/org/ob-octave hides /usr/share/emacs/24.3/lisp/org/ob-octave
/usr/share/emacs/site-lisp/org/ob hides /usr/share/emacs/24.3/lisp/org/ob
/usr/share/emacs/site-lisp/org/org-footnote hides /usr/share/emacs/24.3/lisp/org/org-footnote
/usr/share/emacs/site-lisp/org/org-capture hides /usr/share/emacs/24.3/lisp/org/org-capture
/usr/share/emacs/site-lisp/org/ob-mscgen hides /usr/share/emacs/24.3/lisp/org/ob-mscgen
/usr/share/emacs/site-lisp/org/org-feed hides /usr/share/emacs/24.3/lisp/org/org-feed
/usr/share/emacs/site-lisp/org/ob-plantuml hides /usr/share/emacs/24.3/lisp/org/ob-plantuml
/usr/share/emacs/site-lisp/org/org-inlinetask hides /usr/share/emacs/24.3/lisp/org/org-inlinetask
/usr/share/emacs/site-lisp/org/ob-latex hides /usr/share/emacs/24.3/lisp/org/ob-latex
/usr/share/emacs/site-lisp/org/ob-scheme hides /usr/share/emacs/24.3/lisp/org/ob-scheme
/usr/share/emacs/site-lisp/org/org-mobile hides /usr/share/emacs/24.3/lisp/org/org-mobile
/usr/share/emacs/site-lisp/org/ob-comint hides /usr/share/emacs/24.3/lisp/org/ob-comint
/usr/share/emacs/site-lisp/org/ob-sh hides /usr/share/emacs/24.3/lisp/org/ob-sh
/usr/share/emacs/site-lisp/org/ob-ledger hides /usr/share/emacs/24.3/lisp/org/ob-ledger
/usr/share/emacs/site-lisp/org/org-plot hides /usr/share/emacs/24.3/lisp/org/org-plot
/usr/share/emacs/site-lisp/org/ob-sql hides /usr/share/emacs/24.3/lisp/org/ob-sql
/usr/share/emacs/site-lisp/org/org-id hides /usr/share/emacs/24.3/lisp/org/org-id
/usr/share/emacs/site-lisp/org/ob-sqlite hides /usr/share/emacs/24.3/lisp/org/ob-sqlite
/usr/share/emacs/site-lisp/org/org-element hides /usr/share/emacs/24.3/lisp/org/org-element
/usr/share/emacs/site-lisp/org/ob-R hides /usr/share/emacs/24.3/lisp/org/ob-R
/usr/share/emacs/site-lisp/org/org-mouse hides /usr/share/emacs/24.3/lisp/org/org-mouse
/usr/share/emacs/site-lisp/org/ob-io hides /usr/share/emacs/24.3/lisp/org/ob-io
/usr/share/emacs/site-lisp/org/org-colview hides /usr/share/emacs/24.3/lisp/org/org-colview
/usr/share/emacs/site-lisp/org/org-indent hides /usr/share/emacs/24.3/lisp/org/org-indent
/usr/share/emacs/site-lisp/org/ob-eval hides /usr/share/emacs/24.3/lisp/org/ob-eval
/usr/share/emacs/site-lisp/org/ob-emacs-lisp hides /usr/share/emacs/24.3/lisp/org/ob-emacs-lisp
/usr/share/emacs/site-lisp/org/org-macs hides /usr/share/emacs/24.3/lisp/org/org-macs
/usr/share/emacs/site-lisp/org/ob-calc hides /usr/share/emacs/24.3/lisp/org/ob-calc
/usr/share/emacs/site-lisp/org/org-docview hides /usr/share/emacs/24.3/lisp/org/org-docview
/usr/share/emacs/site-lisp/org/ob-ruby hides /usr/share/emacs/24.3/lisp/org/ob-ruby
/usr/share/emacs/site-lisp/org/ob-lilypond hides /usr/share/emacs/24.3/lisp/org/ob-lilypond
/usr/share/emacs/site-lisp/org/ob-org hides /usr/share/emacs/24.3/lisp/org/ob-org
/usr/share/emacs/site-lisp/org/org-rmail hides /usr/share/emacs/24.3/lisp/org/org-rmail
/usr/share/emacs/site-lisp/org/org-info hides /usr/share/emacs/24.3/lisp/org/org-info
/usr/share/emacs/site-lisp/org/org-list hides /usr/share/emacs/24.3/lisp/org/org-list
/usr/share/emacs/site-lisp/org/org-datetree hides /usr/share/emacs/24.3/lisp/org/org-datetree
/usr/share/emacs/site-lisp/org/ob-maxima hides /usr/share/emacs/24.3/lisp/org/ob-maxima
/usr/share/emacs/site-lisp/org/org hides /usr/share/emacs/24.3/lisp/org/org
/usr/share/emacs/site-lisp/org/ob-java hides /usr/share/emacs/24.3/lisp/org/ob-java
/usr/share/emacs/site-lisp/org/org-bbdb hides /usr/share/emacs/24.3/lisp/org/org-bbdb
/usr/share/emacs/site-lisp/org/ob-tangle hides /usr/share/emacs/24.3/lisp/org/ob-tangle
/usr/share/emacs/site-lisp/org_contrib/lisp/org-vm hides /usr/share/emacs/24.3/lisp/org/org-vm
/usr/share/emacs/site-lisp/org/ob-awk hides /usr/share/emacs/24.3/lisp/org/ob-awk
/usr/share/emacs/site-lisp/org/ob-sass hides /usr/share/emacs/24.3/lisp/org/ob-sass
/usr/share/emacs/site-lisp/org/org-archive hides /usr/share/emacs/24.3/lisp/org/org-archive
/usr/share/emacs/site-lisp/org/ob-shen hides /usr/share/emacs/24.3/lisp/org/ob-shen
/usr/share/emacs/site-lisp/org/ob-dot hides /usr/share/emacs/24.3/lisp/org/ob-dot
/usr/share/emacs/site-lisp/org/org-gnus hides /usr/share/emacs/24.3/lisp/org/org-gnus
/usr/share/emacs/site-lisp/org/org-pcomplete hides /usr/share/emacs/24.3/lisp/org/org-pcomplete
/usr/share/emacs/site-lisp/org/ob-python hides /usr/share/emacs/24.3/lisp/org/ob-python
/usr/share/emacs/site-lisp/org/ob-ref hides /usr/share/emacs/24.3/lisp/org/ob-ref
/usr/share/emacs/site-lisp/org/ob-keys hides /usr/share/emacs/24.3/lisp/org/ob-keys
/usr/share/emacs/site-lisp/org/org-faces hides /usr/share/emacs/24.3/lisp/org/org-faces
/usr/share/emacs/site-lisp/org/org-habit hides /usr/share/emacs/24.3/lisp/org/org-habit
/usr/share/emacs/site-lisp/org/org-irc hides /usr/share/emacs/24.3/lisp/org/org-irc
/usr/share/emacs/site-lisp/org/org-table hides /usr/share/emacs/24.3/lisp/org/org-table
/usr/share/emacs/site-lisp/org/ob-perl hides /usr/share/emacs/24.3/lisp/org/ob-perl
/usr/share/emacs/site-lisp/org/org-version hides /usr/share/emacs/24.3/lisp/org/org-version
/usr/share/emacs/site-lisp/org/org-install hides /usr/share/emacs/24.3/lisp/org/org-install
/usr/share/emacs/site-lisp/org/org-loaddefs hides /usr/share/emacs/24.3/lisp/org/org-loaddefs
/usr/share/emacs/site-lisp/flim/hmac-md5 hides /usr/share/emacs/24.3/lisp/net/hmac-md5
/usr/share/emacs/site-lisp/flim/sasl-cram hides /usr/share/emacs/24.3/lisp/net/sasl-cram
/usr/share/emacs/site-lisp/flim/hmac-def hides /usr/share/emacs/24.3/lisp/net/hmac-def
/usr/share/emacs/site-lisp/flim/sasl-ntlm hides /usr/share/emacs/24.3/lisp/net/sasl-ntlm
/usr/share/emacs/site-lisp/flim/sasl-digest hides /usr/share/emacs/24.3/lisp/net/sasl-digest
/usr/share/emacs/site-lisp/flim/sasl hides /usr/share/emacs/24.3/lisp/net/sasl
/usr/share/emacs/site-lisp/flim/ntlm hides /usr/share/emacs/24.3/lisp/net/ntlm
/usr/share/emacs/site-lisp/semi/smime hides /usr/share/emacs/24.3/lisp/gnus/smime
/usr/share/emacs/site-lisp/semi/pgg-pgp hides /usr/share/emacs/24.3/lisp/obsolete/pgg-pgp
/usr/share/emacs/site-lisp/semi/pgg-gpg hides /usr/share/emacs/24.3/lisp/obsolete/pgg-gpg
/usr/share/emacs/site-lisp/semi/pgg-parse hides /usr/share/emacs/24.3/lisp/obsolete/pgg-parse
/usr/share/emacs/site-lisp/semi/pgg-pgp5 hides /usr/share/emacs/24.3/lisp/obsolete/pgg-pgp5
/usr/share/emacs/site-lisp/semi/pgg hides /usr/share/emacs/24.3/lisp/obsolete/pgg
/usr/share/emacs/site-lisp/semi/pgg-def hides /usr/share/emacs/24.3/lisp/obsolete/pgg-def

Features:
(shadow emacsbug time debug vhdl-mode hippie-exp assoc verilog-mode diff
vera-mode tcl simula sieve sieve-mode sieve-manage ruby-mode prolog
perl-mode pascal octave-mod modula2 meta-mode m4-mode ld-script js json
info-look idlwave idlwave-help idlw-help icon hideshow fortran f90
delphi css-mode cperl-mode cfengine cfengine3 asm-mode antlr-mode
ada-mode which-func imenu align find-file sql ps-mode apropos gud
tramp-cache tramp-sh tramp tramp-compat tramp-loaddefs tabify pcmpl-unix
dired-aux autoconf autoconf-mode sh-script smie executable tmm cus-edit
cc-langs cc-mode cc-fonts cc-guess cc-menus cc-cmds cc-styles cc-align
cc-engine cc-vars cc-defs ibuf-ext ibuffer url-handlers git-commit-mode
python shell view two-column iso-transl rebase-mode rx sgml-mode
nxml-uchnm rng-xsd xsd-regexp rng-cmpct rng-nxml rng-valid rng-loc
rng-uri rng-parse nxml-parse rng-match rng-dt rng-util rng-pttrn nxml-ns
nxml-mode nxml-outln nxml-rap nxml-util nxml-glyph nxml-enc xmltok
dcl-mode tempo mailalias smtpmail sendmail qp vc-git conf-mode make-mode
misearch multi-isearch sort mail-extr network-stream starttls url-http
tls url-gw url-auth url-queue url-cache url url-proxy url-privacy
url-expand url-methods url-history url-cookie url-domsuf url-util
shr-color color shr gnus-art mm-uu mml2015 epg-config gnus-sum nnoo
gnus-group gnus-undo nnmail mail-source gnus-start gnus-spec gnus-int
gnus-range gnus-win gnus gnus-ems nnheader mm-archive windmove help-mode
mule-util cal-move parse-time flyspell ispell org-rmail org-mhe org-irc
org-info org-gnus org-docview org-bibtex bibtex org-bbdb org-w3m pp
server git-commit-mode-autoloads magit-autoloads info package mime-w3m
cl-macs gv mime eword-decode mime-parse std11 luna calist w3m browse-url
doc-view jka-compr dired image-mode timezone w3m-hist w3m-fb
bookmark-w3m w3m-ems w3m-ccl ccl w3m-favicon w3m-image w3m-proc w3m-util
ox-confluence ox-latex ox-icalendar ox-html ox-ascii ox-publish ox
org-element org org-macro org-footnote org-pcomplete pcomplete org-list
org-faces org-entities noutline outline org-version ob-emacs-lisp ob
ob-tangle org-src ob-ref ob-lob ob-table ob-keys ob-exp ob-comint
ob-core ob-eval org-compat org-macs org-loaddefs find-func xt-mouse
notmuch hl-line notmuch-version notmuch-message notmuch-maildir-fcc
notmuch-hello notmuch-tree notmuch-parser notmuch-show notmuch-print
notmuch-crypto notmuch-mua notmuch-address notmuch-wash diff-mode
easy-mmode coolj notmuch-query goto-addr thingatpt icalendar diary-lib
diary-loaddefs cal-menu calendar cal-loaddefs notmuch-tag crm
notmuch-lib warnings cl message idna format-spec rfc822 mml mailabbrev
mail-utils gmm-utils mailheader mm-view mml-smime mml-sec smime mel
mime-def alist mcharset mcs-20 mcs-e20 pces pces-e20 pces-20 broken
pcustom path-util poe pym static apel-ver product mm-decode mm-bodies
mm-encode mailcap mail-parse rfc2231 rfc2047 rfc2045 ietf-drums woman
man winner ffap url-parse auth-source eieio byte-opt bytecomp
byte-compile cconv gnus-util mm-util mail-prsvr password-cache url-vars
ascope edmacro kmacro vc-p4 derived p4-lowlevel ediff-merg ediff-diff
ediff-wind ediff-help ediff-util ediff-mult ediff-init ediff vc
vc-dispatcher recentf tree-widget wid-edit easymenu advice help-fns
cl-lib advice-preload disp-table time-date paren grep compile comint
ansi-color ring whitespace electric cus-start cus-load xterm-frobs
tooltip 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
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 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 dynamic-setting
x-toolkit x multi-tty emacs)

-- 
Richard Tollerton <[email-masked]>