Subject: 25.3; [PATCH] Make filecache use extended completion

From: Andreas Politz <[email-masked]>
Date: Thu, 26 Oct 2017 08:56:16 +0200

As it is, file-cache-minibuffer-complete uses prefix completion via
{try,all}-completion only, which makes it less convenient.  The patch
below adds calls to completion-{try,all}-completion.

diff --git a/lisp/filecache.el b/lisp/filecache.el
index 38a434b11b..aac4f488cd 100644
--- a/lisp/filecache.el
+++ b/lisp/filecache.el
@@ -566,68 +566,67 @@ file-cache-minibuffer-complete
 the name is considered already unique; only the second substitution
 \(directories) is done."
   (interactive "P")
-  (let*
-      (
-       (completion-ignore-case file-cache-completion-ignore-case)
-       (case-fold-search       file-cache-case-fold-search)
-       (string                 (file-name-nondirectory (minibuffer-contents)))
-       (completion-string      (try-completion string file-cache-alist))
-       (completion-list)
-       (len)
-       (file-cache-string))
+  (let* ((completion-ignore-case file-cache-completion-ignore-case)
+         (case-fold-search       file-cache-case-fold-search)
+         (string                 (file-name-nondirectory (minibuffer-contents)))
+         (completion             (completion-try-completion
+                                  string file-cache-alist nil 0)))
     (cond
      ;; If it's the only match, replace the original contents
-     ((or arg (eq completion-string t))
-      (setq file-cache-string (file-cache-file-name string))
-      (if (string= file-cache-string (minibuffer-contents))
-	  (minibuffer-message file-cache-sole-match-message)
-	(delete-minibuffer-contents)
-	(insert file-cache-string)
-	(if file-cache-multiple-directory-message
-	    (minibuffer-message file-cache-multiple-directory-message))))
+     ((or arg (eq completion t))
+      (let ((file-name (file-cache-file-name string)))
+        (if (string= file-name (minibuffer-contents))
+            (minibuffer-message file-cache-sole-match-message)
+          (delete-minibuffer-contents)
+          (insert file-name)
+          (if file-cache-multiple-directory-message
+              (minibuffer-message file-cache-multiple-directory-message)))))
 
      ;; If it's the longest match, insert it
-     ((stringp completion-string)
-      ;; If we've already inserted a unique string, see if the user
-      ;; wants to use that one
-      (if (and (string= string completion-string)
-	       (assoc-string string file-cache-alist
-			     file-cache-ignore-case))
-	  (if (and (eq last-command this-command)
-		   (string= file-cache-last-completion completion-string))
-	      (progn
-		(delete-minibuffer-contents)
-		(insert (file-cache-file-name completion-string))
-		(setq file-cache-last-completion nil))
-	    (minibuffer-message file-cache-non-unique-message)
-	    (setq file-cache-last-completion string))
-	(setq file-cache-last-completion string)
-	(setq completion-list (all-completions string file-cache-alist)
-	      len             (length completion-list))
-	(if (> len 1)
-	    (progn
-	      (goto-char (point-max))
-	      (insert
-	       (substring completion-string (length string)))
-	      ;; Add our own setup function to the Completions Buffer
-	      (let ((completion-setup-hook
-                     (append completion-setup-hook
-                             (list 'file-cache-completion-setup-function))))
-		(with-output-to-temp-buffer file-cache-completions-buffer
-		  (display-completion-list
-                   (completion-hilit-commonality completion-list
-                                                 (length string))))))
-	  (setq file-cache-string (file-cache-file-name completion-string))
-	  (if (string= file-cache-string (minibuffer-contents))
-	      (minibuffer-message file-cache-sole-match-message)
-	    (delete-minibuffer-contents)
-	    (insert file-cache-string)
-	    (if file-cache-multiple-directory-message
-		(minibuffer-message file-cache-multiple-directory-message)))
-	  )))
+     ((consp completion)
+      (let ((newstring (car completion))
+            (newpoint  (cdr completion)))
+        ;; If we've already inserted a unique string, see if the user
+        ;; wants to use that one
+        (if (and (string= string newstring)
+                 (assoc-string string file-cache-alist
+                               file-cache-ignore-case))
+            (if (and (eq last-command this-command)
+                     (string= file-cache-last-completion newstring))
+                (progn
+                  (delete-minibuffer-contents)
+                  (insert (file-cache-file-name newstring))
+                  (setq file-cache-last-completion nil))
+              (minibuffer-message file-cache-non-unique-message)
+              (setq file-cache-last-completion string))
+          (setq file-cache-last-completion string)
+          (let* ((completion-list (completion-all-completions
+                                   newstring file-cache-alist nil newpoint))
+                 (base-size       (cdr (last completion-list))))
+            (when base-size
+              (setcdr (last completion-list) nil))
+            (if (> (length completion-list) 1)
+                (progn
+                  (delete-region (- (point-max) (length string)) (point-max))
+                  (save-excursion (insert newstring))
+                  (forward-char newpoint)
+                  ;; Add our own setup function to the Completions Buffer
+                  (let ((completion-setup-hook
+                         (append completion-setup-hook
+                                 (list 'file-cache-completion-setup-function))))
+                    (with-output-to-temp-buffer file-cache-completions-buffer
+                      (display-completion-list
+                       (completion-hilit-commonality completion-list newpoint)))))
+              (let ((file-name (file-cache-file-name newstring)))
+                (if (string= file-name (minibuffer-contents))
+                    (minibuffer-message file-cache-sole-match-message)
+                  (delete-minibuffer-contents)
+                  (insert file-name)
+                  (if file-cache-multiple-directory-message
+                      (minibuffer-message file-cache-multiple-directory-message)))))))))
 
      ;; No match
-     ((eq completion-string nil)
+     ((eq completion nil)
       (minibuffer-message file-cache-no-match-message)))))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

-ap

In GNU Emacs 25.3.1 (x86_64-pc-linux-gnu, GTK+ Version 3.22.19)
 of 2017-09-16 built on juergen
Windowing system distributor 'The X.Org Foundation', version 11.0.11905000
System Description:	Arch Linux

Configured using:
 'configure --prefix=/usr --sysconfdir=/etc --libexecdir=/usr/lib
 --localstatedir=/var --with-x-toolkit=gtk3 --with-xft --with-modules
 'CFLAGS=-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector-strong
 -fno-plt' CPPFLAGS=-D_FORTIFY_SOURCE=2
 LDFLAGS=-Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now'

Configured features:
XPM JPEG TIFF GIF PNG RSVG IMAGEMAGICK SOUND GPM DBUS GCONF GSETTINGS
NOTIFY ACL GNUTLS LIBXML2 FREETYPE M17N_FLT LIBOTF XFT ZLIB
TOOLKIT_SCROLL_BARS GTK3 X11 MODULES

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

Major mode: Org

Minor modes in effect:
  shell-dirtrack-mode: t
  TeX-PDF-mode: t
  pdf-occur-global-minor-mode: t
  sane/sync-mail-mode: t
  override-global-mode: t
  savehist-mode: t
  diff-auto-refine-mode: t
  tooltip-mode: t
  global-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
  auto-fill-function: org-auto-fill-function
  transient-mark-mode: t

Recent messages:
Wrote /home/politza/.emacs.d/etc/init.org
Mark set
Press C-c C-c when you are done editing.
Enter a change comment.  Type C-c C-c when done
Checking in /home/politza/.emacs.d/etc/init.org...done
Mark set
Saved text until "message file-cache-no-match-message)))))"
Finding changes in /home/politza/.emacs.d/etc/init.org...
No changes between working revision and workfile
Making completion list...

Load-path shadows:
/home/politza/.emacs.d/usr/elpa/org-20170814/ob-latex hides /usr/share/emacs/25.3/lisp/org/ob-latex
/home/politza/.emacs.d/usr/elpa/org-20170814/org-mobile hides /usr/share/emacs/25.3/lisp/org/org-mobile
/home/politza/.emacs.d/usr/elpa/org-20170814/ob-screen hides /usr/share/emacs/25.3/lisp/org/ob-screen
/home/politza/.emacs.d/usr/elpa/org-20170814/org-plot hides /usr/share/emacs/25.3/lisp/org/org-plot
/home/politza/.emacs.d/usr/elpa/org-20170814/org-capture hides /usr/share/emacs/25.3/lisp/org/org-capture
/home/politza/.emacs.d/usr/elpa/org-20170814/ob-org hides /usr/share/emacs/25.3/lisp/org/ob-org
/home/politza/.emacs.d/usr/elpa/org-20170814/ox-ascii hides /usr/share/emacs/25.3/lisp/org/ox-ascii
/home/politza/.emacs.d/usr/elpa/org-20170814/org-agenda hides /usr/share/emacs/25.3/lisp/org/org-agenda
/home/politza/.emacs.d/usr/elpa/org-20170814/org-protocol hides /usr/share/emacs/25.3/lisp/org/org-protocol
/home/politza/.emacs.d/usr/elpa/org-20170814/ox-icalendar hides /usr/share/emacs/25.3/lisp/org/ox-icalendar
/home/politza/.emacs.d/usr/elpa/org-20170814/org-gnus hides /usr/share/emacs/25.3/lisp/org/org-gnus
/home/politza/.emacs.d/usr/elpa/org-20170814/ob-io hides /usr/share/emacs/25.3/lisp/org/ob-io
/home/politza/.emacs.d/usr/elpa/org-20170814/ob-comint hides /usr/share/emacs/25.3/lisp/org/ob-comint
/home/politza/.emacs.d/usr/elpa/org-20170814/ob-matlab hides /usr/share/emacs/25.3/lisp/org/ob-matlab
/home/politza/.emacs.d/usr/elpa/org-20170814/org-compat hides /usr/share/emacs/25.3/lisp/org/org-compat
/home/politza/.emacs.d/usr/elpa/org-20170814/org-src hides /usr/share/emacs/25.3/lisp/org/org-src
/home/politza/.emacs.d/usr/elpa/org-20170814/ob-ditaa hides /usr/share/emacs/25.3/lisp/org/ob-ditaa
/home/politza/.emacs.d/usr/elpa/org-20170814/org-bibtex hides /usr/share/emacs/25.3/lisp/org/org-bibtex
/home/politza/.emacs.d/usr/elpa/org-20170814/org-feed hides /usr/share/emacs/25.3/lisp/org/org-feed
/home/politza/.emacs.d/usr/elpa/org-20170814/org-bbdb hides /usr/share/emacs/25.3/lisp/org/org-bbdb
/home/politza/.emacs.d/usr/elpa/org-20170814/ox-texinfo hides /usr/share/emacs/25.3/lisp/org/ox-texinfo
/home/politza/.emacs.d/usr/elpa/org-20170814/org-entities hides /usr/share/emacs/25.3/lisp/org/org-entities
/home/politza/.emacs.d/usr/elpa/org-20170814/ob-css hides /usr/share/emacs/25.3/lisp/org/ob-css
/home/politza/.emacs.d/usr/elpa/org-20170814/org-macro hides /usr/share/emacs/25.3/lisp/org/org-macro
/home/politza/.emacs.d/usr/elpa/org-20170814/org-crypt hides /usr/share/emacs/25.3/lisp/org/org-crypt
/home/politza/.emacs.d/usr/elpa/org-20170814/ob-core hides /usr/share/emacs/25.3/lisp/org/ob-core
/home/politza/.emacs.d/usr/elpa/org-20170814/ox-latex hides /usr/share/emacs/25.3/lisp/org/ox-latex
/home/politza/.emacs.d/usr/elpa/org-20170814/ob-sass hides /usr/share/emacs/25.3/lisp/org/ob-sass
/home/politza/.emacs.d/usr/elpa/org-20170814/org-mouse hides /usr/share/emacs/25.3/lisp/org/org-mouse
/home/politza/.emacs.d/usr/elpa/org-20170814/org-info hides /usr/share/emacs/25.3/lisp/org/org-info
/home/politza/.emacs.d/usr/elpa/org-20170814/ob-shen hides /usr/share/emacs/25.3/lisp/org/ob-shen
/home/politza/.emacs.d/usr/elpa/org-20170814/ob-sql hides /usr/share/emacs/25.3/lisp/org/ob-sql
/home/politza/.emacs.d/usr/elpa/org-20170814/ox-html hides /usr/share/emacs/25.3/lisp/org/ox-html
/home/politza/.emacs.d/usr/elpa/org-20170814/ob-makefile hides /usr/share/emacs/25.3/lisp/org/ob-makefile
/home/politza/.emacs.d/usr/elpa/org-20170814/org-colview hides /usr/share/emacs/25.3/lisp/org/org-colview
/home/politza/.emacs.d/usr/elpa/org-20170814/ob-plantuml hides /usr/share/emacs/25.3/lisp/org/ob-plantuml
/home/politza/.emacs.d/usr/elpa/org-20170814/ob-scheme hides /usr/share/emacs/25.3/lisp/org/ob-scheme
/home/politza/.emacs.d/usr/elpa/org-20170814/ob-ref hides /usr/share/emacs/25.3/lisp/org/ob-ref
/home/politza/.emacs.d/usr/elpa/org-20170814/ob-picolisp hides /usr/share/emacs/25.3/lisp/org/ob-picolisp
/home/politza/.emacs.d/usr/elpa/org-20170814/ob hides /usr/share/emacs/25.3/lisp/org/ob
/home/politza/.emacs.d/usr/elpa/org-20170814/ob-js hides /usr/share/emacs/25.3/lisp/org/ob-js
/home/politza/.emacs.d/usr/elpa/org-20170814/ob-octave hides /usr/share/emacs/25.3/lisp/org/ob-octave
/home/politza/.emacs.d/usr/elpa/org-20170814/ob-calc hides /usr/share/emacs/25.3/lisp/org/ob-calc
/home/politza/.emacs.d/usr/elpa/org-20170814/ob-eval hides /usr/share/emacs/25.3/lisp/org/ob-eval
/home/politza/.emacs.d/usr/elpa/org-20170814/org-indent hides /usr/share/emacs/25.3/lisp/org/org-indent
/home/politza/.emacs.d/usr/elpa/org-20170814/org-eshell hides /usr/share/emacs/25.3/lisp/org/org-eshell
/home/politza/.emacs.d/usr/elpa/org-20170814/ob-mscgen hides /usr/share/emacs/25.3/lisp/org/ob-mscgen
/home/politza/.emacs.d/usr/elpa/org-20170814/ob-C hides /usr/share/emacs/25.3/lisp/org/ob-C
/home/politza/.emacs.d/usr/elpa/org-20170814/org-list hides /usr/share/emacs/25.3/lisp/org/org-list
/home/politza/.emacs.d/usr/elpa/org-20170814/ob-lisp hides /usr/share/emacs/25.3/lisp/org/ob-lisp
/home/politza/.emacs.d/usr/elpa/org-20170814/ox-publish hides /usr/share/emacs/25.3/lisp/org/ox-publish
/home/politza/.emacs.d/usr/elpa/org-20170814/org-docview hides /usr/share/emacs/25.3/lisp/org/org-docview
/home/politza/.emacs.d/usr/elpa/org-20170814/ob-keys hides /usr/share/emacs/25.3/lisp/org/ob-keys
/home/politza/.emacs.d/usr/elpa/org-20170814/ox-org hides /usr/share/emacs/25.3/lisp/org/ox-org
/home/politza/.emacs.d/usr/elpa/org-20170814/ob-asymptote hides /usr/share/emacs/25.3/lisp/org/ob-asymptote
/home/politza/.emacs.d/usr/elpa/org-20170814/ob-ocaml hides /usr/share/emacs/25.3/lisp/org/ob-ocaml
/home/politza/.emacs.d/usr/elpa/org-20170814/org-loaddefs hides /usr/share/emacs/25.3/lisp/org/org-loaddefs
/home/politza/.emacs.d/usr/elpa/org-20170814/org-habit hides /usr/share/emacs/25.3/lisp/org/org-habit
/home/politza/.emacs.d/usr/elpa/org-20170814/org-clock hides /usr/share/emacs/25.3/lisp/org/org-clock
/home/politza/.emacs.d/usr/elpa/org-20170814/org-pcomplete hides /usr/share/emacs/25.3/lisp/org/org-pcomplete
/home/politza/.emacs.d/usr/elpa/org-20170814/ob-lilypond hides /usr/share/emacs/25.3/lisp/org/ob-lilypond
/home/politza/.emacs.d/usr/elpa/org-20170814/ob-tangle hides /usr/share/emacs/25.3/lisp/org/ob-tangle
/home/politza/.emacs.d/usr/elpa/org-20170814/ob-dot hides /usr/share/emacs/25.3/lisp/org/ob-dot
/home/politza/.emacs.d/usr/elpa/org-20170814/ox hides /usr/share/emacs/25.3/lisp/org/ox
/home/politza/.emacs.d/usr/elpa/org-20170814/ob-python hides /usr/share/emacs/25.3/lisp/org/ob-python
/home/politza/.emacs.d/usr/elpa/org-20170814/org-macs hides /usr/share/emacs/25.3/lisp/org/org-macs
/home/politza/.emacs.d/usr/elpa/org-20170814/org-id hides /usr/share/emacs/25.3/lisp/org/org-id
/home/politza/.emacs.d/usr/elpa/org-20170814/ob-clojure hides /usr/share/emacs/25.3/lisp/org/ob-clojure
/home/politza/.emacs.d/usr/elpa/org-20170814/ob-perl hides /usr/share/emacs/25.3/lisp/org/ob-perl
/home/politza/.emacs.d/usr/elpa/org-20170814/org-w3m hides /usr/share/emacs/25.3/lisp/org/org-w3m
/home/politza/.emacs.d/usr/elpa/org-20170814/ox-md hides /usr/share/emacs/25.3/lisp/org/ox-md
/home/politza/.emacs.d/usr/elpa/org-20170814/org-mhe hides /usr/share/emacs/25.3/lisp/org/org-mhe
/home/politza/.emacs.d/usr/elpa/org-20170814/org-attach hides /usr/share/emacs/25.3/lisp/org/org-attach
/home/politza/.emacs.d/usr/elpa/org-20170814/org-datetree hides /usr/share/emacs/25.3/lisp/org/org-datetree
/home/politza/.emacs.d/usr/elpa/org-20170814/ob-ledger hides /usr/share/emacs/25.3/lisp/org/ob-ledger
/home/politza/.emacs.d/usr/elpa/org-20170814/ob-lob hides /usr/share/emacs/25.3/lisp/org/ob-lob
/home/politza/.emacs.d/usr/elpa/org-20170814/org-table hides /usr/share/emacs/25.3/lisp/org/org-table
/home/politza/.emacs.d/usr/elpa/org-20170814/org-archive hides /usr/share/emacs/25.3/lisp/org/org-archive
/home/politza/.emacs.d/usr/elpa/org-20170814/org-version hides /usr/share/emacs/25.3/lisp/org/org-version
/home/politza/.emacs.d/usr/elpa/org-20170814/ob-awk hides /usr/share/emacs/25.3/lisp/org/ob-awk
/home/politza/.emacs.d/usr/elpa/org-20170814/ox-odt hides /usr/share/emacs/25.3/lisp/org/ox-odt
/home/politza/.emacs.d/usr/elpa/org-20170814/ob-maxima hides /usr/share/emacs/25.3/lisp/org/ob-maxima
/home/politza/.emacs.d/usr/elpa/org-20170814/org-footnote hides /usr/share/emacs/25.3/lisp/org/org-footnote
/home/politza/.emacs.d/usr/elpa/org-20170814/org-irc hides /usr/share/emacs/25.3/lisp/org/org-irc
/home/politza/.emacs.d/usr/elpa/org-20170814/org-ctags hides /usr/share/emacs/25.3/lisp/org/org-ctags
/home/politza/.emacs.d/usr/elpa/org-20170814/org-install hides /usr/share/emacs/25.3/lisp/org/org-install
/home/politza/.emacs.d/usr/elpa/org-20170814/org hides /usr/share/emacs/25.3/lisp/org/org
/home/politza/.emacs.d/usr/elpa/org-20170814/ob-java hides /usr/share/emacs/25.3/lisp/org/ob-java
/home/politza/.emacs.d/usr/elpa/org-20170814/ob-emacs-lisp hides /usr/share/emacs/25.3/lisp/org/ob-emacs-lisp
/home/politza/.emacs.d/usr/elpa/org-20170814/ox-man hides /usr/share/emacs/25.3/lisp/org/ox-man
/home/politza/.emacs.d/usr/elpa/org-20170814/ob-scala hides /usr/share/emacs/25.3/lisp/org/ob-scala
/home/politza/.emacs.d/usr/elpa/org-20170814/ox-beamer hides /usr/share/emacs/25.3/lisp/org/ox-beamer
/home/politza/.emacs.d/usr/elpa/org-20170814/ob-sqlite hides /usr/share/emacs/25.3/lisp/org/ob-sqlite
/home/politza/.emacs.d/usr/elpa/org-20170814/ob-exp hides /usr/share/emacs/25.3/lisp/org/ob-exp
/home/politza/.emacs.d/usr/elpa/org-20170814/ob-haskell hides /usr/share/emacs/25.3/lisp/org/ob-haskell
/home/politza/.emacs.d/usr/elpa/org-20170814/ob-gnuplot hides /usr/share/emacs/25.3/lisp/org/ob-gnuplot
/home/politza/.emacs.d/usr/elpa/org-20170814/ob-ruby hides /usr/share/emacs/25.3/lisp/org/ob-ruby
/home/politza/.emacs.d/usr/elpa/org-20170814/org-inlinetask hides /usr/share/emacs/25.3/lisp/org/org-inlinetask
/home/politza/.emacs.d/usr/elpa/org-20170814/org-timer hides /usr/share/emacs/25.3/lisp/org/org-timer
/home/politza/.emacs.d/usr/elpa/org-20170814/ob-R hides /usr/share/emacs/25.3/lisp/org/ob-R
/home/politza/.emacs.d/usr/elpa/org-20170814/ob-table hides /usr/share/emacs/25.3/lisp/org/ob-table
/home/politza/.emacs.d/usr/elpa/org-20170814/org-rmail hides /usr/share/emacs/25.3/lisp/org/org-rmail
/home/politza/.emacs.d/usr/elpa/org-20170814/org-element hides /usr/share/emacs/25.3/lisp/org/org-element
/home/politza/.emacs.d/usr/elpa/org-20170814/ob-fortran hides /usr/share/emacs/25.3/lisp/org/ob-fortran
/home/politza/.emacs.d/usr/elpa/org-20170814/org-faces hides /usr/share/emacs/25.3/lisp/org/org-faces

Features:
(shadow emacsbug sendmail ispell log-edit pcvs-util add-log edebug debug
dabbrev apropos nnir url-util url-parse url-vars shr-color color shr dom
browse-url preview prv-emacs tex-buf font-latex latex tex-ispell
tex-style tex-mode latexenc ox-odt rng-loc rng-uri rng-parse rng-match
rng-dt rng-util rng-pttrn nxml-parse nxml-ns nxml-enc xmltok nxml-util
ox-latex ox-icalendar ox-html table ox-ascii ox-publish ox flow-fill
sort smiley gnus-cite mm-archive mail-extr gnus-async gnus-bcklg qp
gnus-ml disp-table nndraft nnmh utf-7 network-stream nsm starttls
nnfolder nnnil gnus-agent gnus-srvr gnus-score score-mode nnvirtual
gnus-msg gnus-art mm-uu mml2015 mm-view mml-smime smime dig mailcap nntp
gnus-cache gnus-sum gnus-group gnus-undo gnus-start gnus-cloud nnimap
nnmail mail-source tls gnutls utf7 netrc nnoo parse-time gnus-spec
gnus-int gnus-range message idna rfc822 mml mml-sec epg mm-decode
mm-bodies mm-encode mail-parse rfc2231 rfc2047 rfc2045 ietf-drums
mailabbrev gmm-utils mailheader gnus-win gnus gnus-ems nnheader
mail-utils org-table pdf-sync pdf-annot pdf-outline pdf-links
pdf-history tabify eieio-opt speedbar sb-image ezimage dframe pulse
dired-aux smerge-mode whitespace vc vc-dispatcher misearch multi-isearch
company-oddmuse company-keywords company-etags company-gtags
company-dabbrev-code company-dabbrev company-files company-capf
company-cmake company-xcode company-clang company-semantic company-eclim
company-template company-css company-nxml company-bbdb racer thingatpt f
s etags xref project dash view tramp-cmds tramp-cache tramp-sh tramp
tramp-compat auth-source mm-util help-fns mail-prsvr tramp-loaddefs
trampver ucs-normalize shell filecache company rust-mode json map gud
ediff-merg ediff-wind ediff-diff ediff-mult ediff-help ediff-init
ediff-util ediff tex dbus xml crm pdf-occur ibuf-ext ibuffer tablist
tablist-filter semantic/wisent/comp semantic/wisent
semantic/wisent/wisent semantic/util-modes semantic/util semantic
semantic/tag semantic/lex semantic/fw eieio eieio-core cl-macs
mode-local cedet pdf-isearch let-alist pdf-misc imenu pdf-tools cus-edit
cus-start cus-load wid-edit pdf-view password-cache bookmark pp
pdf-cache pdf-info tq pdf-util restart-emacs desktop frameset
tsdh-dark-theme completion-dyninit edmacro kmacro man use-package
diminish bind-key rx server savehist vc-git diff-mode org-rmail org-mhe
org-irc org-info org-gnus gnus-util org-docview doc-view subr-x
jka-compr image-mode dired org-bibtex bibtex org-bbdb org-w3m
org-element cl-seq avl-tree org advice org-macro org-footnote
org-pcomplete pcomplete org-list org-faces org-entities 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 ob-core ob-eval org-compat org-macs
org-loaddefs format-spec find-func cal-menu calendar cal-loaddefs
compile comint ansi-color ring finder-inf tex-site info package
epg-config seq byte-opt gv bytecomp byte-compile cl-extra help-mode
easymenu cconv cl-loaddefs pcase cl-lib time-date mule-util tooltip
eldoc electric uniquify ediff-hook vc-hooks lisp-float-type mwheel x-win
term/common-win x-dnd tool-bar dnd fontset image regexp-opt fringe
tabulated-list newcomment elisp-mode lisp-mode prog-mode register page
menu-bar rfn-eshadow timer select scroll-bar mouse jit-lock font-lock
syntax facemenu font-core 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 charscript case-table epa-hook jka-cmpr-hook help
simple abbrev 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 dynamic-setting system-font-setting font-render-setting
move-toolbar gtk x-toolkit x multi-tty make-network-process emacs)

Memory information:
((conses 16 644433 74788)
 (symbols 48 57971 0)
 (miscs 40 1356 1667)
 (strings 32 158027 13031)
 (string-bytes 1 5412591)
 (vectors 16 86481)
 (vector-slots 8 1967783 42765)
 (floats 8 1471 869)
 (intervals 56 8047 954)
 (buffers 976 95))