Subject: 26.1; default-directory in *Completions* buffer

From: Omar Antolín Camarena <[email-masked]>
Date: Wed, 20 May 2020 12:49:23 -0500

There is a bit of logic in `complete-setup-function' (from simple.el) to set the default directory in the *Completions* buffer:

;; FIXME: This is a bad hack.  We try to set the default-directory
;; in the *Completions* buffer so that the relative file names
;; displayed there can be treated as valid file names, independently
;; from the completion context.  But this suffers from many problems:
;; - It's not clear when the completions are file names.  With some
;;   completion tables (e.g. bzr revision specs), the listed
;;   completions can mix file names and other things.
;; - It doesn't pay attention to possible quoting.
;; - With fancy completion styles, the code below will not always
;;   find the right base directory.
(if minibuffer-completing-file-name
    (file-name-as-directory
     (expand-file-name
      (buffer-substring (minibuffer-prompt-end)
                        (- (point) (or completion-base-size 0))))))

As the comment says, this is brittle, but better than nothing. I believe, however, that the `file-name-as-directory' is a typo and probably `file-name-directory' was intended instead.

Say you have a directory ~/foo with files baz and bar. If you are completing file names and have type ~/foo/b the completions are bar and baz. The most useful value for default-directory in the *Completions* buffer would be ~/foo/, but the current code sets it to the non-existent ~/foo/b/ instead. If `complete-setup-function' were changed to use `file-name-directory' instead, then the default-directory would be set to ~/foo/.

Of course, there is no correct default-directory in general. As the comment mentions, sometimes only some of the completions are file names, and even those completions that are file names need not all be in the same directory. But I think this change would make the default-directory useful in many more cases than it currently is: now it basically is only a good guess when what you've type so far is a directory name.

With my suggested fix it's still easy to get useless default-directories. For example with directories:

~/foo: bar baz
~/fez: bing boom

the partial-completion completion style will produce the following completions for ~/f/b:

fez/bing fez/boom foo/bar foo/baz

The most useful default-directory for the *Completions* buffer would be ~/, of course. The current code would give ~/f/b/ and my proposed "fix" would produce ~/f/

To my mind a good compromise would be to ignore all the possible fancy completion tables and focus on behavior that is correct for read-file-name under the partial-completion completion style. (In principle the most reasonable default-directory could be computed from just the contents of the *Completions* buffer, but it might be convenient to "cheat" and use the minibuffer contents, as the current `completion-setup-function' does --and if Emacs does "cheat", it would be good for the cheat to work with partial-completion of paths.)

But the above "good compromise" would take some work that I haven't carefully thought out. I think simply changing `file-name-directory' to `file-name-as-directory' would be a clear improvement with no reason not to do it.

In GNU Emacs 26.1 (build 1, x86_64-pc-linux-gnu, X toolkit, Xaw3d scroll bars)
 of 2019-09-22, modified by Debian built on x86-grnet-01
Windowing system distributor 'The X.Org Foundation', version 11.0.12001000
Recent messages:
Loading /etc/emacs/site-start.d/50dictionaries-common.el (source)...
Loading debian-ispell...
Loading /var/cache/dictionaries-common/emacsen-ispell-default.el (source)...done
Loading debian-ispell...done
Loading /var/cache/dictionaries-common/emacsen-ispell-dicts.el (source)...done
Loading /etc/emacs/site-start.d/50dictionaries-common.el (source)...done
Loading mb-depth...done
Loading minibuf-eldef...done
For information about GNU Emacs and the GNU system, type C-h C-a.
Making completion list... [16 times]

Configured using:
 'configure --build x86_64-linux-gnu --prefix=/usr
 --sharedstatedir=/var/lib --libexecdir=/usr/lib
 --localstatedir=/var/lib --infodir=/usr/share/info
 --mandir=/usr/share/man --enable-libsystemd --with-pop=yes
 --enable-locallisppath=/etc/emacs:/usr/local/share/emacs/26.1/site-lisp:/usr/local/share/emacs/site-lisp:/usr/share/emacs/26.1/site-lisp:/usr/share/emacs/site-lisp
 --with-sound=alsa --without-gconf --with-mailutils --build
 x86_64-linux-gnu --prefix=/usr --sharedstatedir=/var/lib
 --libexecdir=/usr/lib --localstatedir=/var/lib
 --infodir=/usr/share/info --mandir=/usr/share/man --enable-libsystemd
 --with-pop=yes
 --enable-locallisppath=/etc/emacs:/usr/local/share/emacs/26.1/site-lisp:/usr/local/share/emacs/site-lisp:/usr/share/emacs/26.1/site-lisp:/usr/share/emacs/site-lisp
 --with-sound=alsa --without-gconf --with-mailutils --with-x=yes
 --with-x-toolkit=lucid --with-toolkit-scroll-bars --without-gsettings
 'CFLAGS=-g -O2 -fdebug-prefix-map=/build/emacs-StqULU/emacs-26.1+1=.
 -fstack-protector-strong -Wformat -Werror=format-security -Wall'
 'CPPFLAGS=-Wdate-time -D_FORTIFY_SOURCE=2' LDFLAGS=-Wl,-z,relro'

Configured features:
XAW3D XPM JPEG TIFF GIF PNG RSVG IMAGEMAGICK SOUND GPM DBUS NOTIFY ACL
LIBSELINUX GNUTLS LIBXML2 FREETYPE M17N_FLT LIBOTF XFT ZLIB
TOOLKIT_SCROLL_BARS LUCID X11 THREADS LIBSYSTEMD LCMS2

Important settings:
  value of $LANG: en_US.UTF-8
  locale-coding-system: utf-8-unix

Major mode: Lisp Interaction

Minor modes in effect:
  diff-auto-refine-mode: t
  goto-address-prog-mode: t
  show-paren-mode: t
  electric-pair-mode: t
  beginend-global-mode: t
  beginend-prog-mode: t
  global-dot-mode: t
  dot-mode: t
  global-gobble-whitespace-mode: t
  live-completions-mode: t
  restricto-mode: t
  minibuffer-electric-default-mode: t
  minibuffer-depth-indicate-mode: t
  override-global-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  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

Load-path shadows:
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ox hides /usr/share/emacs/26.1/lisp/org/ox
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ox-texinfo hides /usr/share/emacs/26.1/lisp/org/ox-texinfo
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ox-publish hides /usr/share/emacs/26.1/lisp/org/ox-publish
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ox-org hides /usr/share/emacs/26.1/lisp/org/ox-org
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ox-odt hides /usr/share/emacs/26.1/lisp/org/ox-odt
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ox-md hides /usr/share/emacs/26.1/lisp/org/ox-md
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ox-man hides /usr/share/emacs/26.1/lisp/org/ox-man
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ox-latex hides /usr/share/emacs/26.1/lisp/org/ox-latex
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ox-icalendar hides /usr/share/emacs/26.1/lisp/org/ox-icalendar
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ox-html hides /usr/share/emacs/26.1/lisp/org/ox-html
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ox-beamer hides /usr/share/emacs/26.1/lisp/org/ox-beamer
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ox-ascii hides /usr/share/emacs/26.1/lisp/org/ox-ascii
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org hides /usr/share/emacs/26.1/lisp/org/org
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-timer hides /usr/share/emacs/26.1/lisp/org/org-timer
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-table hides /usr/share/emacs/26.1/lisp/org/org-table
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-src hides /usr/share/emacs/26.1/lisp/org/org-src
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-protocol hides /usr/share/emacs/26.1/lisp/org/org-protocol
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-plot hides /usr/share/emacs/26.1/lisp/org/org-plot
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-pcomplete hides /usr/share/emacs/26.1/lisp/org/org-pcomplete
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-mouse hides /usr/share/emacs/26.1/lisp/org/org-mouse
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-mobile hides /usr/share/emacs/26.1/lisp/org/org-mobile
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-macs hides /usr/share/emacs/26.1/lisp/org/org-macs
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-macro hides /usr/share/emacs/26.1/lisp/org/org-macro
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-list hides /usr/share/emacs/26.1/lisp/org/org-list
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-lint hides /usr/share/emacs/26.1/lisp/org/org-lint
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-inlinetask hides /usr/share/emacs/26.1/lisp/org/org-inlinetask
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-indent hides /usr/share/emacs/26.1/lisp/org/org-indent
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-id hides /usr/share/emacs/26.1/lisp/org/org-id
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-habit hides /usr/share/emacs/26.1/lisp/org/org-habit
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-footnote hides /usr/share/emacs/26.1/lisp/org/org-footnote
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-feed hides /usr/share/emacs/26.1/lisp/org/org-feed
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-faces hides /usr/share/emacs/26.1/lisp/org/org-faces
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-entities hides /usr/share/emacs/26.1/lisp/org/org-entities
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-element hides /usr/share/emacs/26.1/lisp/org/org-element
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-duration hides /usr/share/emacs/26.1/lisp/org/org-duration
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-datetree hides /usr/share/emacs/26.1/lisp/org/org-datetree
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-ctags hides /usr/share/emacs/26.1/lisp/org/org-ctags
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-crypt hides /usr/share/emacs/26.1/lisp/org/org-crypt
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-compat hides /usr/share/emacs/26.1/lisp/org/org-compat
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-colview hides /usr/share/emacs/26.1/lisp/org/org-colview
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-clock hides /usr/share/emacs/26.1/lisp/org/org-clock
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-capture hides /usr/share/emacs/26.1/lisp/org/org-capture
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-attach hides /usr/share/emacs/26.1/lisp/org/org-attach
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-archive hides /usr/share/emacs/26.1/lisp/org/org-archive
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-agenda hides /usr/share/emacs/26.1/lisp/org/org-agenda
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob hides /usr/share/emacs/26.1/lisp/org/ob
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-vala hides /usr/share/emacs/26.1/lisp/org/ob-vala
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-tangle hides /usr/share/emacs/26.1/lisp/org/ob-tangle
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-table hides /usr/share/emacs/26.1/lisp/org/ob-table
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-stan hides /usr/share/emacs/26.1/lisp/org/ob-stan
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-sqlite hides /usr/share/emacs/26.1/lisp/org/ob-sqlite
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-sql hides /usr/share/emacs/26.1/lisp/org/ob-sql
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-shen hides /usr/share/emacs/26.1/lisp/org/ob-shen
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-shell hides /usr/share/emacs/26.1/lisp/org/ob-shell
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-sed hides /usr/share/emacs/26.1/lisp/org/ob-sed
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-screen hides /usr/share/emacs/26.1/lisp/org/ob-screen
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-scheme hides /usr/share/emacs/26.1/lisp/org/ob-scheme
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-sass hides /usr/share/emacs/26.1/lisp/org/ob-sass
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-ruby hides /usr/share/emacs/26.1/lisp/org/ob-ruby
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-ref hides /usr/share/emacs/26.1/lisp/org/ob-ref
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-python hides /usr/share/emacs/26.1/lisp/org/ob-python
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-processing hides /usr/share/emacs/26.1/lisp/org/ob-processing
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-plantuml hides /usr/share/emacs/26.1/lisp/org/ob-plantuml
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-picolisp hides /usr/share/emacs/26.1/lisp/org/ob-picolisp
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-perl hides /usr/share/emacs/26.1/lisp/org/ob-perl
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-org hides /usr/share/emacs/26.1/lisp/org/ob-org
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-octave hides /usr/share/emacs/26.1/lisp/org/ob-octave
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-ocaml hides /usr/share/emacs/26.1/lisp/org/ob-ocaml
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-mscgen hides /usr/share/emacs/26.1/lisp/org/ob-mscgen
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-maxima hides /usr/share/emacs/26.1/lisp/org/ob-maxima
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-matlab hides /usr/share/emacs/26.1/lisp/org/ob-matlab
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-makefile hides /usr/share/emacs/26.1/lisp/org/ob-makefile
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-lua hides /usr/share/emacs/26.1/lisp/org/ob-lua
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-lob hides /usr/share/emacs/26.1/lisp/org/ob-lob
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-lisp hides /usr/share/emacs/26.1/lisp/org/ob-lisp
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-lilypond hides /usr/share/emacs/26.1/lisp/org/ob-lilypond
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-ledger hides /usr/share/emacs/26.1/lisp/org/ob-ledger
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-latex hides /usr/share/emacs/26.1/lisp/org/ob-latex
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-js hides /usr/share/emacs/26.1/lisp/org/ob-js
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-java hides /usr/share/emacs/26.1/lisp/org/ob-java
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-io hides /usr/share/emacs/26.1/lisp/org/ob-io
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-hledger hides /usr/share/emacs/26.1/lisp/org/ob-hledger
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-haskell hides /usr/share/emacs/26.1/lisp/org/ob-haskell
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-groovy hides /usr/share/emacs/26.1/lisp/org/ob-groovy
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-gnuplot hides /usr/share/emacs/26.1/lisp/org/ob-gnuplot
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-fortran hides /usr/share/emacs/26.1/lisp/org/ob-fortran
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-forth hides /usr/share/emacs/26.1/lisp/org/ob-forth
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-exp hides /usr/share/emacs/26.1/lisp/org/ob-exp
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-eval hides /usr/share/emacs/26.1/lisp/org/ob-eval
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-emacs-lisp hides /usr/share/emacs/26.1/lisp/org/ob-emacs-lisp
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-ebnf hides /usr/share/emacs/26.1/lisp/org/ob-ebnf
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-dot hides /usr/share/emacs/26.1/lisp/org/ob-dot
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-ditaa hides /usr/share/emacs/26.1/lisp/org/ob-ditaa
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-css hides /usr/share/emacs/26.1/lisp/org/ob-css
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-core hides /usr/share/emacs/26.1/lisp/org/ob-core
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-coq hides /usr/share/emacs/26.1/lisp/org/ob-coq
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-comint hides /usr/share/emacs/26.1/lisp/org/ob-comint
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-clojure hides /usr/share/emacs/26.1/lisp/org/ob-clojure
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-calc hides /usr/share/emacs/26.1/lisp/org/ob-calc
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-awk hides /usr/share/emacs/26.1/lisp/org/ob-awk
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-asymptote hides /usr/share/emacs/26.1/lisp/org/ob-asymptote
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-abc hides /usr/share/emacs/26.1/lisp/org/ob-abc
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-R hides /usr/share/emacs/26.1/lisp/org/ob-R
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-J hides /usr/share/emacs/26.1/lisp/org/ob-J
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/ob-C hides /usr/share/emacs/26.1/lisp/org/ob-C
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-version hides /usr/share/emacs/26.1/lisp/org/org-version
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-loaddefs hides /usr/share/emacs/26.1/lisp/org/org-loaddefs
/home/omarantolin/.emacs.d/elpa/org-plus-contrib-20200518/org-install hides /usr/share/emacs/26.1/lisp/org/org-install

Features:
(shadow sort bbdb-message mailalias bbdb-mua bbdb-com crm bbdb bbdb-site
timezone mail-extr misc emacsbug message rmc puny dired dired-loaddefs
format-spec rfc822 mml mml-sec epa derived epg gnus-util rmail
rmail-loaddefs mm-decode mm-bodies mm-encode mail-parse rfc2231
mailabbrev gmm-utils mailheader sendmail rfc2047 rfc2045 ietf-drums
mail-utils vc-git diff-mode misc-text find-func goto-addr thingatpt
email-config pdf-loader paren elec-pair ace-link avy ring beginend
dot-mode eval-region-advice gobble-whitespace live-completions regexpect
restricto minibuf-eldef mb-depth completing-history block-undo
modus-vivendi-theme modus-operandi-theme cus-edit cus-start cus-load
wid-edit mm-util mail-prsvr diminish cl-extra help-mode use-package
use-package-ensure use-package-delight use-package-diminish
use-package-bind-key bind-key easy-mmode use-package-core finder-inf
tex-site slime-autoloads info package easymenu epg-config url-handlers
url-parse auth-source cl-seq eieio eieio-core cl-macs eieio-loaddefs
password-cache url-vars seq byte-opt gv bytecomp byte-compile cconv
edmacro kmacro cl-loaddefs cl-lib time-date mule-util tooltip eldoc
electric uniquify ediff-hook vc-hooks lisp-float-type mwheel term/x-win
x-win term/common-win x-dnd tool-bar dnd fontset image regexp-opt fringe
tabulated-list replace newcomment text-mode elisp-mode lisp-mode
prog-mode register page menu-bar rfn-eshadow isearch timer select
scroll-bar mouse jit-lock font-lock syntax facemenu font-core
term/tty-colors frame cl-generic cham georgian utf-8-lang misc-lang
vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932
hebrew greek romanian slovak czech european ethiopic indian cyrillic
chinese composite charscript charprop case-table epa-hook jka-cmpr-hook
help simple abbrev obarray minibuffer cl-preloaded 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 dbusbind inotify lcms2 dynamic-setting font-render-setting
x-toolkit x multi-tty make-network-process emacs)

Memory information:
((conses 16 353481 17018)
 (symbols 48 33822 1)
 (miscs 40 341 103)
 (strings 32 98435 4175)
 (string-bytes 1 2527759)
 (vectors 16 27936)
 (vector-slots 8 678970 15708)
 (floats 8 142 262)
 (intervals 56 325 0)
 (buffers 992 13))