gnu: emacs-switch-window: Update to 1.5.1.
[jackhill/guix/guix.git] / gnu / packages / emacs.scm
index 41fc240..3eb639d 100644 (file)
@@ -11,7 +11,7 @@
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 David Thompson <davet@gnu.org>
 ;;; Copyright © 2016 Matthew Jordan <matthewjordandevops@yandex.com>
-;;; Copyright © 2016 Roel Janssen <roel@gnu.org>
+;;; Copyright © 2016, 2017 Roel Janssen <roel@gnu.org>
 ;;; Copyright © 2016, 2017 ng0 <contact.ng0@cryptolab.net>
 ;;; Copyright © 2016 Alex Griffin <a@ajgrf.com>
 ;;; Copyright © 2016, 2017 Nicolas Goaziou <mail@nicolasgoaziou.fr>
@@ -25,6 +25,9 @@
 ;;; Copyright © 2017 Kei Kebreau <kei@openmailbox.org>
 ;;; Copyright © 2017 George Clemmer <myglc2@gmail.com>
 ;;; Copyright © 2017 Feng Shu <tumashu@163.com>
+;;; Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2017 Oleg Pykhalov <go.wigust@gmail.com>
+;;; Copyright © 2017 Mekeor Melire <mekeor.melire@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -92,7 +95,8 @@
   #:use-module (gnu packages gd)
   #:use-module (gnu packages fontutils)
   #:use-module (guix utils)
-  #:use-module (srfi srfi-1))
+  #:use-module (srfi srfi-1)
+  #:use-module (ice-9 match))
 
 (define-public emacs
   (package
@@ -333,28 +337,7 @@ metadata.")
               (sha256
                (base32
                 "0pp3n8q6kc70blqsaw0zlzp6bc327dpgdrjr0cnh7hqg1lras7ka"))))
-    (build-system trivial-build-system)
-    (native-inputs `(("emacs" ,emacs-minimal)))
-    (arguments
-     `(#:modules ((guix build utils)
-                  (guix build emacs-utils))
-       #:builder
-       (begin
-         (use-modules (guix build utils))
-         (use-modules (guix build emacs-utils))
-
-         (let* ((emacs    (string-append (assoc-ref %build-inputs "emacs")
-                                         "/bin/emacs"))
-                (source   (assoc-ref %build-inputs "source"))
-                (lisp-dir (string-append %output
-                                         "/share/emacs/site-lisp"))
-                (target   (string-append lisp-dir "/paredit.el")))
-           (mkdir-p lisp-dir)
-           (copy-file source target)
-           (with-directory-excursion lisp-dir
-             (parameterize ((%emacs emacs))
-               (emacs-generate-autoloads ,name lisp-dir)
-               (emacs-batch-eval '(byte-compile-file "paredit.el"))))))))
+    (build-system emacs-build-system)
     (home-page "http://mumble.net/~campbell/emacs/paredit/")
     (synopsis "Emacs minor mode for editing parentheses")
     (description
@@ -384,31 +367,7 @@ when typing parentheses directly or commenting out code line by line.")
               (sha256
                (base32
                 "0xxrmf0jnyljxvllc22qa0v8lgi4k1ldnayjm5hf68m25jsr378l"))))
-    (build-system gnu-build-system)
-    (arguments
-     `(#:modules ((guix build gnu-build-system)
-                  (guix build emacs-utils)
-                  (guix build utils))
-       #:imported-modules (,@%gnu-build-system-modules
-                           (guix build emacs-utils))
-
-       #:make-flags (list (string-append "PREFIX="
-                                         (assoc-ref %outputs "out"))
-                          ;; Don't put .el files in a 'git-modes'
-                          ;; sub-directory.
-                          (string-append "LISPDIR="
-                                         (assoc-ref %outputs "out")
-                                         "/share/emacs/site-lisp"))
-       #:tests? #f  ; no check target
-       #:phases (modify-phases %standard-phases
-                  (delete 'configure)
-                  (add-after 'install 'emacs-autoloads
-                             (lambda* (#:key outputs #:allow-other-keys)
-                               (let* ((out  (assoc-ref outputs "out"))
-                                      (lisp (string-append
-                                             out "/share/emacs/site-lisp/")))
-                                 (emacs-generate-autoloads ,name lisp)))))))
-    (native-inputs `(("emacs" ,emacs-minimal)))
+    (build-system emacs-build-system)
     (home-page "https://github.com/magit/git-modes")
     (synopsis "Emacs major modes for Git configuration files")
     (description
@@ -692,30 +651,7 @@ programs.")
               (sha256
                (base32
                 "07312bvvyz86lf64vdkxg2l1wgfjl25ljdjwlf1bdzj01c4hm88x"))))
-    (build-system trivial-build-system)
-    (arguments
-     `(#:modules ((guix build utils)
-                  (guix build emacs-utils))
-
-       #:builder (begin
-                   (use-modules (guix build emacs-utils)
-                                (guix build utils))
-
-                   (let* ((out     (assoc-ref %outputs "out"))
-                          (lispdir (string-append out
-                                                  "/share/emacs/site-lisp/"
-                                                  "guix.d/let-alist-"
-                                                  ,version))
-                          (emacs   (assoc-ref %build-inputs "emacs")))
-
-                     (mkdir-p lispdir)
-                     (copy-file (assoc-ref %build-inputs "source")
-                                (string-append lispdir "/let-alist.el"))
-
-                     (setenv "PATH" (string-append emacs "/bin"))
-                     (emacs-byte-compile-directory lispdir)
-                     #t))))
-    (native-inputs `(("emacs" ,emacs-minimal)))
+    (build-system emacs-build-system)
     (home-page "https://elpa.gnu.org/packages/let-alist.html")
     (synopsis "Easily let-bind values of an assoc-list by their names")
     (description
@@ -1125,13 +1061,6 @@ than @code{electric-indent-mode}.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-before 'install 'patch-exec-paths
-           (lambda* (#:key inputs #:allow-other-keys)
-             (emacs-substitute-variables "ag.el"
-               ("ag-executable"
-                (string-append (assoc-ref inputs "the-silver-searcher")
-                               "/bin/ag")))
-             #t))
          (add-before 'install 'make-info
            (lambda _
              (with-directory-excursion "docs"
@@ -1142,14 +1071,14 @@ than @code{electric-indent-mode}.")
                     (info (string-append out "/share/info")))
                (install-file "docs/_build/texinfo/agel.info" info)
                #t))))))
-    (inputs
-     `(("the-silver-searcher" ,the-silver-searcher)))
     (native-inputs
      `(("python-sphinx" ,python-sphinx)
        ("texinfo" ,texinfo)))
     (propagated-inputs
      `(("dash" ,emacs-dash)
-       ("s" ,emacs-s)))
+       ("s" ,emacs-s)
+       ;; We need to use 'ag' as the executable on remote systems.
+       ("the-silver-searcher" ,the-silver-searcher)))
     (home-page "https://github.com/Wilfred/ag.el")
     (synopsis "Front-end for ag (the-silver-searcher) for Emacs")
     (description "This package provides the ability to use the silver
@@ -1162,14 +1091,14 @@ rather than the contents of files.")
 (define-public emacs-async
   (package
     (name "emacs-async")
-    (version "1.9")
+    (version "1.9.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://elpa.gnu.org/packages/async-"
                                   version ".tar"))
               (sha256
                (base32
-                "1ip5nc8xyln5szvqwp6wqva9xr84pn8ssn3nnphrszr19y4js2bm"))))
+                "17fnvrj7jww29sav6a6jpizclg4w2962m6h37akpii71gf0vrffw"))))
     (build-system emacs-build-system)
     (home-page "https://elpa.gnu.org/packages/async.html")
     (synopsis "Asynchronous processing in Emacs")
@@ -1197,7 +1126,10 @@ as a library for other Emacs packages.")
     (build-system emacs-build-system)
     ;; We use 'emacs' because AUCTeX requires dbus at compile time
     ;; ('emacs-minimal' does not provide dbus).
-    (arguments `(#:emacs ,emacs))
+    (arguments
+     `(#:emacs ,emacs
+       #:include '("\\.el$" "^images/" "^latex/" "\\.info$")
+       #:exclude '("^tests/" "^latex/README")))
     (native-inputs
      `(("perl" ,perl)))
     (home-page "https://www.gnu.org/software/auctex/")
@@ -1208,6 +1140,30 @@ writing input files for TeX, LaTeX, ConTeXt, Texinfo, and docTeX using Emacs
 or XEmacs.")
     (license license:gpl3+)))
 
+(define-public emacs-autothemer
+  (package
+    (name "emacs-autothemer")
+    (version "0.2.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/sebastiansturm/autothemer/archive/"
+                           version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0rd28r9wfrbll212am4ih9hrvypx785aff76va2cbfxdwm9kixsa"))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     `(("emacs-dash" ,emacs-dash)))
+    (home-page "https://github.com/sebastiansturm/autothemer")
+    (synopsis "Conveniently create Emacs themes")
+    (description
+     "Autothemer provides a thin layer on top of @code{deftheme} and
+@code{custom-theme-set-faces} that creates a new custom color theme, based on
+a set of simplified face specifications and a user-supplied color palette")
+    (license license:gpl3+)))
+
 (define-public emacs-calfw
   (package
     (name "emacs-calfw")
@@ -1226,8 +1182,39 @@ or XEmacs.")
     (home-page "https://github.com/kiwanami/emacs-calfw/")
     (synopsis "Calendar framework for Emacs")
     (description
-     "This package displays a calendar view with various shedule data in
-the Emacs buffer.")
+     "This package displays a calendar view with various schedule data in the
+Emacs buffer.")
+    (license license:gpl3+)))
+
+(define-public emacs-direnv
+  (package
+    (name "emacs-direnv")
+    (version "1.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/wbolster/emacs-direnv/archive/"
+             version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0m9nxawklhiiysyibzzhh2zkxgq1fskqvaqb06f7r8dnhabfy9fr"))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     `(("dash" ,emacs-dash)
+       ("with-editor" ,emacs-with-editor)))
+    (home-page "https://github.com/wbolster/emacs-direnv")
+    (synopsis "Direnv integration for Emacs")
+    (description
+     "This package provides support for invoking direnv to get the environment
+for the current file and updating the environment within Emacs to match.
+
+Direnv can be invoked manually, and a global minor mode is included that will
+update the environment when the active buffer changes.
+
+Using emacs-direnv means that programs started from Emacs will use the
+environment set through Direnv.")
     (license license:gpl3+)))
 
 (define-public emacs-google-maps
@@ -1406,7 +1393,7 @@ type, for example: packages, buffers, files, etc.")
 (define-public emacs-guix
   (package
     (name "emacs-guix")
-    (version "0.3.1")
+    (version "0.3.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/alezost/guix.el"
@@ -1414,7 +1401,7 @@ type, for example: packages, buffers, files, etc.")
                                   "/emacs-guix-" version ".tar.gz"))
               (sha256
                (base32
-                "0s7s90rfba8ccbilbvmbcwn4qp4m0jv9y58xq8avm39cygmjgyxz"))))
+                "0bffxlaq4w9yijl9prnfm26fisr2rd1whjg1yzvri1zl6zh9s0lk"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
@@ -1432,6 +1419,13 @@ type, for example: packages, buffers, files, etc.")
                                                   "2."
                                                   (basename file)))
                                                #:directories? #t)))
+               (string-append "--with-guix-site-ccache-dir="
+                              (car (find-files (string-append guix "/lib/guile")
+                                               (lambda (file stat)
+                                                 (string-prefix?
+                                                  "2." (basename file)))
+                                               #:directories? #t))
+                              "/site-ccache")
                (string-append "--with-geiser-lispdir=" geiser site-lisp)
                (string-append "--with-dash-lispdir="
                               dash site-lisp "/guix.d/dash-"
@@ -1779,6 +1773,29 @@ keep pressing the key until it selects what you want.  There's also
 column by drawing a thin line down the length of the editing window.")
     (license license:gpl3+)))
 
+(define-public emacs-inf-ruby
+  (package
+    (name "emacs-inf-ruby")
+    (version "2.5.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/nonsequitur/inf-ruby/"
+                           "archive/" version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0m7323k649ckxql1grsdnf71bjhys7l4qb8wbpphb1mr1q8i4066"))))
+    (build-system emacs-build-system)
+    (home-page "https://github.com/nonsequitur/inf-ruby")
+    (synopsis "Provides a REPL buffer connected to a Ruby subprocess in Emacs")
+    (description
+     "@code{inf-ruby} provides a Read Eval Print Loop (REPL) buffer, allowing
+for easy interaction with a ruby subprocess.  Features include support for
+detecting specific uses of Ruby, e.g. when using rails, and using a
+appropriate console.")
+    (license license:gpl3+)))
+
 (define-public emacs-znc
   (package
     (name "emacs-znc")
@@ -2055,6 +2072,7 @@ source code using IPython.")
                (base32
                 "07wgcvg038l88gxvjr0gjpjhyk743w22x1rqghz3gkmif0g70say"))))
     (build-system emacs-build-system)
+    (arguments '(#:include '("\\.el$" "\\.wsdl$" "\\.info$")))
     (propagated-inputs
      `(("emacs-async" ,emacs-async)))
     (home-page "https://elpa.gnu.org/packages/debbugs.html")
@@ -2333,7 +2351,10 @@ in @code{html-mode}.")
     (native-inputs
      `(("texinfo" ,texinfo)))
     (arguments
-     `(#:phases
+     `(#:include '("\\.el$" "\\.lisp$" "\\.asd$" "contrib")
+       #:exclude '("^slime-tests.el" "^contrib/test/"
+                   "^contrib/Makefile$" "^contrib/README.md$")
+       #:phases
        (modify-phases %standard-phases
          (add-before 'install 'configure
            (lambda* _
@@ -2584,7 +2605,7 @@ dark background.")
 (define-public emacs-smartparens
   (package
     (name "emacs-smartparens")
-    (version "1.9.0")
+    (version "1.10.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -2593,7 +2614,7 @@ dark background.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "12065r7h1s9v8lnq5mk3654dkw4cq60ky8aniqq5n2ivv6qd2d4q"))))
+                "1nwsi6fbbxjq3r22r6knmx71la3g0lmwfb95i9q4k138gn0m2l3i"))))
     (build-system emacs-build-system)
     (propagated-inputs `(("emacs-dash" ,emacs-dash)))
     (home-page "https://github.com/Fuco1/smartparens")
@@ -2815,7 +2836,7 @@ highlighted.  Pressing that character will switch to that window.")
 (define-public emacs-iedit
   (package
     (name "emacs-iedit")
-    (version "0.9.9")
+    (version "0.9.9.9")
     (source
      (origin
        (method url-fetch)
@@ -2824,7 +2845,7 @@ highlighted.  Pressing that character will switch to that window.")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "00v86zllcsivmiibigbr91qij2zdf1lr9db8z8again1sn63wkdj"))))
+         "1hv8q6pr85ss9g3158l1fqv3m62vsq8rslsi86jicr2dcxyascr0"))))
     (build-system emacs-build-system)
     (home-page "http://www.emacswiki.org/emacs/Iedit")
     (synopsis "Edit multiple regions in the same way simultaneously")
@@ -2882,6 +2903,16 @@ S-expression.")
                (base32
                 "117mvjqh4nm8mvmwmmvy4qmkdg23ldlzk08y91g8b8ac8kxwqg81"))))
     (build-system emacs-build-system)
+    (native-inputs
+     `(("emacs-dash" ,emacs-dash)
+       ("emacs-s" ,emacs-s)
+       ("ert-runner" ,ert-runner)))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'check
+           (lambda _
+             (zero? (system* "ert-runner")))))))
     (home-page "https://github.com/clojure-emacs/clojure-mode")
     (synopsis "Major mode for Clojure code")
     (description
@@ -2994,6 +3025,27 @@ complement basic functions provided by @code{subr.el}.  All provided functions
 work on lists, strings and vectors.")
     (license license:gpl3+)))
 
+(define-public emacs-sparql-mode
+  (package
+    (name "emacs-sparql-mode")
+    (version "2.0.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/ljos/sparql-mode/archive/"
+                                  "v" version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1s93mkllxnhy7fw616cnnc2danacdlarys0g3cn89drh0llh53cv"))))
+    (build-system emacs-build-system)
+    (home-page "https://github.com/ljos/sparql-mode")
+    (synopsis "SPARQL mode for Emacs")
+    (description "This package provides a major mode for Emacs that provides
+syntax highlighting for SPARQL.  It also provides a way to execute queries
+against a SPARQL HTTP endpoint, such as is provided by Fuseki.  It is also
+possible to query other endpoints like DBPedia.")
+    (license license:gpl3+)))
+
 (define-public emacs-better-defaults
   (package
     (name "emacs-better-defaults")
@@ -3060,14 +3112,21 @@ E-Prime forbids the use of the \"to be\" form to strengthen your writing.")
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "Makeconf"
                (("SHELL = /bin/sh")
-                (string-append "SHELL = " (which "sh")))))))))
+                (string-append "SHELL = " (which "sh"))))))
+         ;; FIXME: the texlive-union insists on regenerating fonts.  It stores
+         ;; them in HOME, so it needs to be writeable.
+         (add-before 'build 'set-HOME
+           (lambda _ (setenv "HOME" "/tmp") #t)))))
     (inputs
      `(("emacs" ,emacs-minimal)
        ("r-minimal" ,r-minimal)))
     (native-inputs
      `(("perl" ,perl)
        ("texinfo" ,texinfo)
-       ("texlive" ,texlive)))
+       ("texlive" ,(texlive-union (list texlive-latex-natbib
+                                        texlive-latex-seminar
+                                        texlive-latex-hyperref
+                                        texlive-tex-texinfo)))))
     (home-page "http://ess.r-project.org/")
     (synopsis "Emacs mode for statistical analysis programs")
     (description "Emacs Speaks Statistics (ESS) is an add-on package for GNU
@@ -3122,7 +3181,7 @@ strings, and code folding.")
 (define-public emacs-markdown-mode
   (package
     (name "emacs-markdown-mode")
-    (version "2.1")
+    (version "2.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://raw.githubusercontent.com/jrblevin"
@@ -3131,7 +3190,7 @@ strings, and code folding.")
               (file-name (string-append "markdown-mode-" version ".el"))
               (sha256
                (base32
-                "1faibar32jnjia9202swblw91q6z1g5s4k9xmypwjahfh8yznl6w"))))
+                "04isd2sdnms9acpmkd6n7b7y7j0x2kank2kry0zwbxs3bwdavgav"))))
     (build-system emacs-build-system)
     (home-page "http://jblevins.org/projects/markdown-mode/")
     (synopsis "Emacs Major mode for Markdown files")
@@ -3169,7 +3228,7 @@ If you want to mark a folder manually as a project just create an empty
 (define-public emacs-elfeed
   (package
     (name "emacs-elfeed")
-    (version "2.1.0")
+    (version "2.1.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/skeeto/elfeed/archive/"
@@ -3177,7 +3236,7 @@ If you want to mark a folder manually as a project just create an empty
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "145glas04zd0s2rmnif46vhyijs4z03v871gfp1dcrwxvvvns8ap"))))
+                "1wlwc8fbkg6w1c8p856ikc20xm72f51clnzz419p0g8cavy27npw"))))
     (build-system emacs-build-system)
     (arguments
      `(#:phases
@@ -3238,6 +3297,25 @@ identifiers based on their names.  Each identifier gets a color based on a hash
 of its name.")
     (license license:bsd-2)))
 
+(define-public emacs-rainbow-mode
+  (package
+    (name "emacs-rainbow-mode")
+    (version "0.12")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "http://elpa.gnu.org/packages/rainbow-mode-" version ".el"))
+              (sha256
+               (base32
+                "10a7qs7fvw4qi4vxj9n56j26gjk61bl79dgz4md1d26slb2j1c04"))))
+    (build-system emacs-build-system)
+    (home-page "http://elpa.gnu.org/packages/rainbow-mode.html")
+    (synopsis "Colorize color names in buffers")
+    (description
+     "This minor mode sets background color to strings that match color
+names, e.g. #0000ff is displayed in white with a blue background.")
+    (license license:gpl3+)))
+
 (define-public emacs-visual-fill-column
   (package
     (name "emacs-visual-fill-column")
@@ -3311,7 +3389,7 @@ that uses the standard completion function completing-read.")
 (define-public emacs-yaml-mode
   (package
     (name "emacs-yaml-mode")
-    (version "0.0.12")
+    (version "0.0.13")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://raw.githubusercontent.com/yoshiki"
@@ -3319,7 +3397,7 @@ that uses the standard completion function completing-read.")
               (file-name (string-append "yaml-mode-" version ".el"))
               (sha256
                (base32
-                "17wq433ycli0qx4gdhgrmb392qblm6y2dwcyn38j5ja1lasfb0ax"))))
+                "0im88sk9dqw03x6d6zaspgvg9i0pfpgb8f2zygrmbifh2w4pwmvj"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/yoshiki/yaml-mode")
     (synopsis "Major mode for editing YAML files")
@@ -3357,7 +3435,7 @@ Dust.js, React/JSX, Angularjs, ejs, etc.")
 (define-public emacs-helm
   (package
     (name "emacs-helm")
-    (version "1.9.8")
+    (version "2.7.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -3366,7 +3444,7 @@ Dust.js, React/JSX, Angularjs, ejs, etc.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "019dpzr6l83k1fgxn40aqxjvrpz4dl5d9vi7fc5wjnifmxaqxia6"))))
+                "0pay8pi3fszykgskfbxsp4byad497cgfz4m886mxnkba1naxf6h7"))))
     (build-system emacs-build-system)
     (propagated-inputs
      `(("emacs-async" ,emacs-async)
@@ -3383,6 +3461,55 @@ considered to be its successor.  Helm sets out to clean up the legacy code in
 not tied in the trap of backward compatibility.")
     (license license:gpl3+)))
 
+(define-public emacs-helm-swoop
+  (package
+    (name "emacs-helm-swoop")
+    (version "1.7.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/ShingoFukuyama/helm-swoop/archive/"
+                    version
+                    ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1z34pfi0gsk054pxr906ilaalaw0xz3s536163gf9ykkwmc2356d"))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     `(("emacs-helm" ,emacs-helm)))
+    (home-page "https://github.com/ShingoFukuyama/helm-swoop")
+    (synopsis "Filter and jump to lines in an Emacs buffer using Helm")
+    (description
+     "This package builds on the Helm interface to provide several commands
+for search-based navigation of buffers.")
+    (license license:gpl2+)))
+
+(define-public emacs-helm-projectile
+  (package
+    (name "emacs-helm-projectile")
+    (version "0.14.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/bbatsov/helm-projectile/archive/v"
+                    version
+                    ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "19cfmilqh8kbab3b2hmx6lyrj73q6vfmn3p730x95g23iz16mnd5"))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     `(("emacs-dash" ,emacs-dash)
+       ("emacs-helm" ,emacs-helm)
+       ("emacs-projectile" ,emacs-projectile)))
+    (home-page "https://github.com/bbatsov/helm-projectile")
+    (synopsis "Helm integration for Projectile")
+    (description
+     "This Emacs library provides a Helm interface for Projectile.")
+    (license license:gpl3+)))
+
 (define-public emacs-cider
   (package
     (name "emacs-cider")
@@ -3495,6 +3622,7 @@ extensions.")
        (method url-fetch)
        ;; There is no versioned source.
        (uri "https://www.emacswiki.org/emacs/download/goto-chg.el")
+       (file-name (string-append "goto-chg-" version ".el"))
        (sha256
         (base32
          "078d6p4br5vips7b9x4v6cy0wxf6m5ij9gpqd4g33bryn22gnpij"))))
@@ -3574,14 +3702,14 @@ passive voice.")
 (define-public emacs-org
   (package
     (name "emacs-org")
-    (version "20170502")
+    (version "20170622")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://elpa.gnu.org/packages/org-"
                                   version ".tar"))
               (sha256
                (base32
-                "12inz804j55ycprb2m3ay54d1bhwhjssmn5nrfm7cfklyhfsy27s"))))
+                "0922lcbr2r7bkswljqzbm5y3ny1n67qfrmf7h7z9hsw2wy0505dp"))))
     (build-system emacs-build-system)
     (home-page "http://orgmode.org/")
     (synopsis "Outline-based notes management and organizer")
@@ -4140,7 +4268,7 @@ jQuery and Bootstrap resources included via osscdn.")
 (define-public emacspeak
   (package
     (name "emacspeak")
-    (version "45.0")
+    (version "46.0")
     (source
      (origin
        (method url-fetch)
@@ -4149,7 +4277,11 @@ jQuery and Bootstrap resources included via osscdn.")
              version "/emacspeak-" version ".tar.bz2"))
        (sha256
         (base32
-         "0npcr867xbbhwa0i7v26hnk4z2d51522jwcfwc594j74kbv3g6ka"))))
+         "15x4yfp3wl2fxm1nkx6pz3clw6zyw3argcsqxgcx6pa28sivlg2n"))
+       (modules '((guix build utils)))
+       (snippet
+        ;; Delete the bundled byte-compiled elisp files.
+        '(for-each delete-file (find-files "lisp" "\\.elc$")))))
     (build-system gnu-build-system)
     (arguments
      '(#:make-flags (list (string-append "prefix="
@@ -4157,25 +4289,35 @@ jQuery and Bootstrap resources included via osscdn.")
        #:phases
        (modify-phases %standard-phases
          (replace 'configure
-           (lambda* (#:key outputs #:allow-other-keys)
-             (substitute* "Makefile"
-               (("\\$\\(INSTALL\\) -d \\$\\(libdir\\)/servers/linux-outloud")
-                "")
-               (("\\$\\(INSTALL\\)  -m 755 \\$\\{OUTLOUD\\}.*$") "")
-               (("\\*info\\*") "*"))
-             (substitute* "etc/emacspeak.sh.def"
-               (("<emacspeak-dir>")
-                (string-append (assoc-ref outputs "out")
-                               "/share/emacs/site-lisp/emacspeak/lisp")))
+           (lambda _
+             ;; Configure Emacspeak according to etc/install.org.
              (zero? (system* "make" "config"))))
-         (add-after 'install 'install-espeak-server
+         (add-after 'build 'build-espeak
+           (lambda _
+             (zero? (system* "make" "espeak"))))
+         (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out")))
-               (with-directory-excursion "servers/linux-espeak"
-                 (and (zero? (system* "make"))
-                      (zero? (system* "make" "install"
-                                      (string-append "PREFIX=" out))))))))
-         (add-after 'install-espeak-server 'wrap-program
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin"))
+                    (lisp (string-append out "/share/emacs/site-lisp/emacspeak"))
+                    (info (string-append out "/share/info")))
+               ;; According to etc/install.org, the Emacspeak directory should
+               ;; be copied to its installation destination.
+               (for-each
+                (lambda (file)
+                  (copy-recursively file (string-append lisp "/" file)))
+                '("etc" "info" "lisp" "media" "servers" "sounds" "stumpwm"
+                  "xsl"))
+               ;; Make sure emacspeak is loaded from the correct directory.
+               (substitute* "etc/emacspeak.sh"
+                 (("exec emacs.*$")
+                  (string-append "exec emacs -l " lisp
+                                 "/lisp/emacspeak-setup.el $CL_ALL")))
+               ;; Install the convenient startup script.
+               (mkdir-p bin)
+               (copy-file "etc/emacspeak.sh" (string-append bin "/emacspeak")))
+             #t))
+         (add-after 'install 'wrap-program
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
                     (emacspeak (string-append out "/bin/emacspeak"))
@@ -4451,7 +4593,7 @@ It should enable you to implement low-level X11 applications.")
 (define-public emacs-exwm
   (package
     (name "emacs-exwm")
-    (version "0.13")
+    (version "0.14")
     (synopsis "Emacs X window manager")
     (source (origin
               (method url-fetch)
@@ -4459,7 +4601,7 @@ It should enable you to implement low-level X11 applications.")
                                   version ".tar"))
               (sha256
                (base32
-                "0n1wzy6chh024r0yaywjbf7mdsrxs6hrfycv5v0ps0drf6q3zldc"))))
+                "14hjjpbasm84p54fxy73fg7g1fdwqkvisdw8dwwgzkflmd647mkx"))))
     (build-system emacs-build-system)
     (propagated-inputs
      `(("emacs-xelb" ,emacs-xelb)))
@@ -4512,7 +4654,8 @@ It should enable you to implement low-level X11 applications.")
                               (require 'exwm)
                               (require 'exwm-config)
                               (exwm-config-default)
-                              (message "exwm configuration not found. Falling back to default configuration..."))))))
+                              (message (concat "exwm configuration not found. "
+                                               "Falling back to default configuration...")))))))
                (chmod exwm-executable #o555)
                #t))))))
     (home-page "https://github.com/ch11ng/exwm")
@@ -4520,6 +4663,94 @@ It should enable you to implement low-level X11 applications.")
 built on top of XELB.")
     (license license:gpl3+)))
 
+(define-public emacs-switch-window
+  (package
+    (name "emacs-switch-window")
+    (version "1.5.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/dimitri/switch-window/archive/v"
+                    version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "07f99apxscwvsp2bjxsbi462c433kcglrjh6xl0gyafs1nvvvnd8"))))
+    (build-system emacs-build-system)
+    (home-page "https://github.com/dimitri/switch-window")
+    (synopsis "Emacs window switch tool")
+    (description "Switch-window is an emacs window switch tool, which
+offer a visual way to choose a window to switch to, delete, split or
+other operations.")
+    (license license:wtfpl2)))
+
+(define-public emacs-exwm-x
+  (package
+    (name "emacs-exwm-x")
+    (version "1.1")
+    (synopsis "Derivative window manager based on EXWM")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/tumashu/exwm-x/archive/v"
+                    version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "06w6mp25prrlbr7p23rmnm4agdvjydw4c9dy32kzasgy0gplzbn7"))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     `(("emacs-exwm" ,emacs-exwm)
+       ("emacs-switch-window" ,emacs-switch-window)
+       ("emacs-ivy" ,emacs-ivy)))
+    (inputs
+     `(("xhost" ,xhost)
+       ("dbus" ,dbus)))
+    ;; Need emacs instead of emacs-minimal,
+    ;; for emacs's bin path will be inserted into bin/exwm-x file.
+    (arguments
+     `(#:emacs ,emacs
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'build 'install-xsession
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (xsessions (string-append out "/share/xsessions"))
+                    (bin (string-append out "/bin"))
+                    (exwm-executable (string-append bin "/exwm-x")))
+               ;; Add a .desktop file to xsessions
+               (mkdir-p xsessions)
+               (mkdir-p bin)
+               (with-output-to-file
+                   (string-append xsessions "/exwm-x.desktop")
+                 (lambda _
+                   (format #t "[Desktop Entry]~@
+                     Name=~a~@
+                     Comment=~a~@
+                     Exec=~a~@
+                     TryExec=~@*~a~@
+                     Type=Application~%" ,name ,synopsis exwm-executable)))
+               ;; Add a shell wrapper to bin
+               ;; Set DISPLAY variable to work around
+               ;; https://github.com/ch11ng/exwm/issues/213
+               (with-output-to-file exwm-executable
+                 (lambda _
+                   (format #t "#!~a ~@
+                     export DISPLAY=:0 ~@
+                     ~a +SI:localuser:$USER ~@
+                     exec ~a --exit-with-session ~a \"$@\" --eval '~s' ~%"
+                           (string-append (assoc-ref inputs "bash") "/bin/sh")
+                           (string-append (assoc-ref inputs "xhost") "/bin/xhost")
+                           (string-append (assoc-ref inputs "dbus") "/bin/dbus-launch")
+                           (string-append (assoc-ref inputs "emacs") "/bin/emacs")
+                           '(require 'exwmx-loader))))
+               (chmod exwm-executable #o555)
+               #t))))))
+    (home-page "https://github.com/tumashu/exwm-x")
+    (description "EXWM-X is a derivative window manager based on EXWM, with focus
+on mouse-control.")
+    (license license:gpl3+)))
+
 (define-public emacs-gnuplot
   (package
     (name "emacs-gnuplot")
@@ -4570,6 +4801,7 @@ with gnuplot.")
      (origin
        (method url-fetch)
        (uri "http://www.emacswiki.org/emacs/download/transpose-frame.el")
+       (file-name (string-append "transpose-frame-" version ".el"))
        (sha256
         (base32
          "1f67yksgw9s6j0033hmqzaxx2a93jm11sd5ys7cc3li5gfh680m4"))))
@@ -4589,6 +4821,7 @@ selected frame.")
      (origin
        (method url-fetch)
        (uri "https://www.emacswiki.org/emacs/download/key-chord.el")
+       (file-name (string-append "key-chord-" version ".el"))
        (sha256
         (base32
          "03m44pqggfrd53nh9dvpdjgm0rvca34qxmd30hr33hzprzjambxg"))))
@@ -4646,3 +4879,293 @@ addition of surrounding pairs, such as parantheses and quotes, in evil mode.")
 comment out lines of code in evil mode.  It provides @code{gcc} to comment out
 lines, and @code{gc} to comment out the target of a motion.")
     (license license:gpl3+)))
+
+;; Tests for emacs-ansi have a circular dependency with ert-runner, and
+;; therefore cannot be run
+(define-public emacs-ansi
+  (package
+    (name "emacs-ansi")
+    (version "0.4.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/rejeep/ansi.el/archive/v"
+                           version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "13jj4vbi98j3p17hs99bmy7g21jd5h4v3wpxk4pkvhylm3bfwjw8"))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     `(("emacs-dash" ,emacs-dash)
+       ("emacs-s" ,emacs-s)))
+    (home-page "https://github.com/rejeep/ansi.el")
+    (synopsis "Convert strings to ANSI")
+    (description "@code{emacs-ansi} defines functions that turns simple
+strings to ANSI strings.  Turning a string into an ANSI string can be to add
+color to a text, add color in the background of a text or adding a style, such
+as bold, underscore or italic.")
+    (license license:gpl3+)))
+
+;; Tests for emacs-commander have a circular dependency with ert-runner, and
+;; therefore cannot be run
+(define-public emacs-commander
+  (package
+    (name "emacs-commander")
+    (version "0.7.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/rejeep/commander.el/archive/v"
+                           version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "196s2i15z7gwxa97l1wkxvjnfmj5n38wwm6d3g4zz15l2vqggc2y"))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     `(("emacs-dash" ,emacs-dash)
+       ("emacs-f" ,emacs-f)
+       ("emacs-s" ,emacs-s)))
+    (home-page "https://github.com/rejeep/commander.el")
+    (synopsis "Emacs command line parser")
+    (description "@code{emacs-commander} provides command line parsing for
+Emacs.")
+    (license license:gpl3+)))
+
+;; Tests for ert-runner have a circular dependency with ecukes, and therefore
+;; cannot be run
+(define-public ert-runner
+  (let ((dependencies
+         `(("emacs-ansi" ,emacs-ansi)
+           ("emacs-commander" ,emacs-commander)
+           ("emacs-dash" ,emacs-dash)
+           ("emacs-f" ,emacs-f)
+           ("emacs-s" ,emacs-s)
+           ("emacs-shut-up" ,emacs-shut-up))))
+    (package
+      (name "ert-runner")
+      (version "0.7.0")
+      (source
+       (origin
+         (method url-fetch)
+         (uri (string-append "https://github.com/rejeep/ert-runner.el/archive/v"
+                             version ".tar.gz"))
+         (file-name (string-append name "-" version ".tar.gz"))
+         (sha256
+          (base32
+           "1657nck9i96a4xgl8crfqq0s8gflzp21pkkzwg6m3z5npjxklgwp"))))
+      (build-system emacs-build-system)
+      (inputs dependencies)
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-after 'install 'install-executable
+             (lambda* (#:key inputs outputs #:allow-other-keys)
+               (let ((out (assoc-ref outputs "out")))
+                 (substitute* "bin/ert-runner"
+                   (("ERT_RUNNER=\"\\$\\(dirname \\$\\(dirname \\$0\\)\\)")
+                    (string-append "ERT_RUNNER=\"" out
+                                   "/share/emacs/site-lisp/guix.d/"
+                                   ,name "-" ,version)))
+                 (install-file "bin/ert-runner" (string-append out "/bin"))
+                 (wrap-program (string-append out "/bin/ert-runner")
+                   (list "EMACSLOADPATH" ":" '=
+                         (append
+                          ,(match dependencies
+                             (((labels packages) ...)
+                              `(map (lambda (label package version)
+                                      (string-append (assoc-ref inputs label)
+                                                     "/share/emacs/site-lisp/guix.d/"
+                                                     (string-drop package 6)
+                                                     "-" version))
+                                    ',labels
+                                    ',(map package-name packages)
+                                    ',(map package-version packages))))
+                          ;; empty element to include the default load path as
+                          ;; determined by emacs' standard initialization
+                          ;; procedure
+                          (list ""))))
+                 #t))))
+         #:include (cons* "^reporters/.*\\.el$" %default-include)))
+      (home-page "https://github.com/rejeep/ert-runner.el")
+      (synopsis "Opinionated Ert testing workflow")
+      (description "@code{ert-runner} is a tool for Emacs projects tested
+using ERT.  It assumes a certain test structure setup and can therefore make
+running tests easier.")
+      (license license:gpl3+))))
+
+(define-public emacs-disable-mouse
+  (package
+    (name "emacs-disable-mouse")
+    (version "0.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/purcell/disable-mouse/archive/"
+             version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0haqpq23r1wx04lsqrrg3p5visg9hx5i36dg55ab003wfsrlrzbc"))))
+    (build-system emacs-build-system)
+    (home-page "https://github.com/purcell/disable-mouse")
+    (synopsis "Disable mouse commands globally")
+    (description
+     "Provides @code{disable-mouse-mode} and @code{global-disable-mouse-mode},
+pair of minor modes which suppress all mouse events by intercepting them and
+running a customisable handler command (@code{ignore} by default). ")
+    (license license:gpl3+)))
+
+(define-public emacs-restclient
+  (let ((commit "07a3888bb36d0e29608142ebe743b4362b800f40")
+        (revision "1"))                 ;Guix package revision,
+                                        ;upstream doesn't have official releases
+    (package
+      (name "emacs-restclient")
+      (version (string-append revision "."
+                              (string-take commit 7)))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/pashky/restclient.el.git")
+                      (commit commit)))
+                (sha256
+                 (base32
+                  "00lmjhb5im1kgrp54yipf1h9pshxzgjlg71yf2rq5n973gvb0w0q"))
+                (file-name (git-file-name name version))))
+      (build-system emacs-build-system)
+      (propagated-inputs
+       `(("emacs-helm" ,emacs-helm)))
+      (home-page "https://github.com/pashky/restclient.el")
+      (synopsis "Explore and test HTTP REST webservices")
+      (description
+       "This tool allows for testing and exploration of HTTP REST Web services
+from within Emacs.  Restclient runs queries from a plan-text query sheet,
+displays results pretty-printed in XML or JSON with @code{restclient-mode}")
+      (license license:public-domain))))
+
+(define-public emacs-dired-hacks
+  (let ((commit "eda68006ce73bbf6b9b995bfd70d08bec8cade36")
+        (revision "1"))
+    (package
+      (name "emacs-dired-hacks")
+      (version (string-append "0.0.1-" revision "."
+                              (string-take commit 7)))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/Fuco1/dired-hacks.git")
+                      (commit commit)))
+                (file-name (string-append name "-" version "-checkout"))
+                (sha256
+                 (base32
+                  "1w7ssl9zssn5rcha6apf4h8drkd02k4xgvs203bdbqyqp9wz9brx"))))
+      (build-system emacs-build-system)
+      (propagated-inputs
+       `(("emacs-dash" ,emacs-dash)
+         ("emacs-f" ,emacs-f)
+         ("emacs-s" ,emacs-s)))
+      (home-page "https://github.com/Fuco1/dired-hacks")
+      (synopsis
+       "Collection of useful dired additions")
+      (description
+       "Collection of Emacs dired mode additions:
+@itemize
+@item dired-avfs
+@item dired-columns
+@item dired-filter
+@item dired-hacks-utils
+@item dired-images
+@item dired-list
+@item dired-narrow
+@item dired-open
+@item dired-rainbow
+@item dired-ranger
+@item dired-subtree
+@item dired-tagsistant
+@end itemize\n")
+      (license license:gpl3+))))
+
+(define-public emacs-which-key
+  (package
+    (name "emacs-which-key")
+    (version "3.0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/justbur/emacs-which-key/archive/v"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "0zc9yivdkbxmcllhlbbcvsbj8g8nzzgs0xib488s08p4s0l7xs8m"))
+       (file-name (string-append name "-" version ".tar.gz"))))
+    (build-system emacs-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'install 'check
+           (lambda _
+             (zero? (system* "emacs" "--batch" "-L" "."
+                             "-l" "which-key-tests.el"
+                             "-f" "ert-run-tests-batch-and-exit")))))))
+    (home-page "https://github.com/justbur/emacs-which-key")
+    (synopsis "Display available key bindings in popup")
+    (description
+     "@code{emacs-which-key} is a minor mode for Emacs that displays the key
+bindings following your currently entered incomplete command (a prefix) in a
+popup.  For example, after enabling the minor mode if you enter C-x and wait
+for the default of 1 second, the minibuffer will expand with all of the
+available key bindings that follow C-x (or as many as space allows given your
+settings).")
+    (license license:gpl3+)))
+
+(define-public emacs-org-edit-latex
+  (package
+    (name "emacs-org-edit-latex")
+    (version "0.8.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/et2010/org-edit-latex/archive/v"
+             version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1y4h6wrs8286h9pbsv4d8fr67a885vz8b2k80qgv5qddipi2i78p"))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     `(("emacs-auctex" ,emacs-auctex)
+       ;; The version of org in Emacs 25.2 is not sufficient, because the
+       ;; `org-latex-make-preamble' function is required.
+       ("emacs-org" ,emacs-org)))
+    (home-page "https://github.com/et2010/org-edit-latex")
+    (synopsis "Edit a latex fragment just like editing a src block")
+    (description "@code{emacs-org-edit-latex} is an extension for org-mode.
+It lets you edit a latex fragment in a dedicated buffer just like editing a
+src block.")
+    (license license:gpl3+)))
+
+(define-public emacs-emamux
+  (package
+    (name "emacs-emamux")
+    (version "0.14")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/syohex/emacs-emamux/archive/"
+                    version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0wlqg4icy037bj70b0qmhvwvmiwhagpnx6pnxhq6gzy1hvwlilkx"))))
+    (build-system emacs-build-system)
+    (home-page "https://github.com/syohex/emacs-emamux")
+    (synopsis "Manipulate Tmux from Emacs")
+    (description
+     "@code{emacs-emamux} lets Emacs interact with the @code{tmux} terminal
+multiplexer.")
+    (license license:gpl3+)))