mailmap: Update entries for Nikita.
[jackhill/guix/guix.git] / gnu / packages / text-editors.scm
index b35486b..f415fd7 100644 (file)
@@ -1,13 +1,16 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2016 José Miguel Sánchez García <jmi2k@openmailbox.org>
 ;;; Copyright © 2016 Carlo Zancanaro <carlo@zancanaro.id.au>
-;;; Copyright © 2017, 2018 Eric Bavier <bavier@member.fsf.org>
+;;; Copyright © 2017, 2018, 2020 Eric Bavier <bavier@posteo.net>
 ;;; Copyright © 2017 Feng Shu <tumashu@163.com>
-;;; Copyright © 2017 ng0 <ng0@n0.is>
+;;; Copyright © 2017 Nikita <nikita@n0.is>
 ;;; Copyright © 2014 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.org>
-;;; Copyright © 2017, 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2019 Andreas Enge <andreas@enge.fr>
+;;; Copyright © 2019, 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2020 Tom Zander <tomz@freedommail.ch>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix utils)
+  #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system glib-or-gtk)
+  #:use-module (guix build-system python)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (gnu packages)
+  #:use-module (gnu packages aspell)
   #:use-module (gnu packages assembly)
+  #:use-module (gnu packages autotools)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages gcc)
+  #:use-module (gnu packages gettext)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages guile)
+  #:use-module (gnu packages haskell-xyz)
   #:use-module (gnu packages libbsd)
   #:use-module (gnu packages libreoffice)
+  #:use-module (gnu packages llvm)
   #:use-module (gnu packages lua)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages pcre)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages regex)
   #:use-module (gnu packages ruby)
   #:use-module (gnu packages terminals)
-  #:use-module (gnu packages xml))
+  #:use-module (gnu packages texinfo)
+  #:use-module (gnu packages version-control)
+  #:use-module (gnu packages xml)
+  #:use-module (gnu packages xorg))
 
 (define-public vis
   (package
     (version "0.5")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://github.com/martanne/"
-                                  name "/archive/v" version ".tar.gz"))
-              (file-name (string-append name "-" version ".tar.gz"))
+              (uri (string-append "https://github.com/martanne/vis/releases"
+                                  "/download/v" version
+                                  "/vis-v" version ".tar.gz"))
               (sha256
                (base32
-                "1xbxb3q963s6sav63yw0x30lm0wvxsrzb7hr6a7dh4f8r7mp1skp"))))
+                "0aw35n8xk7ir84ckvczc6yshj9ynishrlz0qlv4yc1afbra1gxmn"))))
     (build-system gnu-build-system)
     (arguments
      `(#:test-target "test"
@@ -110,7 +124,7 @@ based command language.")
 (define-public kakoune
   (package
     (name "kakoune")
-    (version "2019.01.20")
+    (version "2020.01.16")
     (source
      (origin
        (method url-fetch)
@@ -118,7 +132,7 @@ based command language.")
                            "releases/download/v" version "/"
                            "kakoune-" version ".tar.bz2"))
        (sha256
-        (base32 "15drk7i17qdiqxqkjxhrxfclryj9qzb5ymxd20dwl05y4yi064cr"))))
+        (base32 "1bhd990gywdwdhxc5dn83wwj418c5cw1ndqycf7k0a02kxlg3550"))))
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags
@@ -179,6 +193,97 @@ interface similar to many user-friendly editors.  JOE has some of the key
 bindings and many of the powerful features of GNU Emacs.")
     (license license:gpl3+)))
 
+(define-public jucipp
+  (package
+    (name "jucipp")
+    (version "1.5.1")
+    (home-page "https://gitlab.com/cppit/jucipp")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference (url home-page)
+                                  (commit (string-append "v" version))
+                                  ;; Two submodules are required which are
+                                  ;; developed alongside JuCi++ and difficult
+                                  ;; to package separately.
+                                  (recursive? #t)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32 "0v7fmsya2zn1xx59bkv4cbyinmcnv52hm4j40nbfwalcks631xrr"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:configure-flags '("-DBUILD_TESTING=ON"
+
+                           ;; These arguments are here to facilitate an "in-source"
+                           ;; build using "./build" instead of the default "../build".
+                           ;; The test suite expects that to be the case.
+                           "..")
+       #:out-of-source? #f
+       #:phases (modify-phases %standard-phases
+                  (add-before 'configure 'enter-build-directory
+                    (lambda _
+                      (mkdir "build")
+                      (chdir "build")
+                      #t))
+
+                  ;; This phase is necessary to fix a test failure, see
+                  ;; <https://gitlab.com/cppit/jucipp/-/issues/423>.
+                  (add-after 'unpack 'add-reference-to-clang-internal-header
+                    (lambda* (#:key inputs #:allow-other-keys)
+                      (substitute* "src/compile_commands.cc"
+                        ((".*-I/usr/lib/clang.*" all)
+                         (string-append "arguments.emplace_back(\"-I"
+                                        (assoc-ref inputs "libclang")
+                                        "/lib/clang/"
+                                        ,@(list (package-version clang))
+                                        "/include\");\n"
+                                        all)))
+                      #t))
+                  (add-after 'unpack 'patch-tiny-process-library
+                    (lambda _
+                      (with-directory-excursion "lib/tiny-process-library"
+                        (substitute* '("process_unix.cpp"
+                                       "tests/io_test.cpp")
+                          (("/bin/sh") (which "sh"))))
+                      #t))
+                  (add-after 'unpack 'disable-git-test
+                    (lambda _
+                      (substitute* "tests/CMakeLists.txt"
+                        ;; Disable the git test, as it requires the full checkout.
+                        (("add_test\\(git_test.*\\)") ""))
+                      #t))
+                  (add-before 'check 'pre-check
+                    (lambda* (#:key inputs #:allow-other-keys)
+                      ;; Tests do not expect HOME to be empty.
+                      (setenv "HOME" "/etc")
+
+                      ;; Most tests require an X server.
+                      (let ((xorg-server (assoc-ref inputs "xorg-server"))
+                            (display ":1"))
+                        (setenv "DISPLAY" display)
+                        (system (string-append xorg-server "/bin/Xvfb "
+                                               display " &")))
+                      #t)))))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("xorg-server" ,xorg-server-for-tests)))
+    (inputs
+     `(("aspell" ,aspell)
+       ("boost" ,boost)
+       ("gtkmm" ,gtkmm)
+       ("gtksourceviewmm" ,gtksourceviewmm)
+       ("libclang" ,clang)
+       ("libgit2" ,libgit2)))
+    (synopsis "Lightweight C++ IDE")
+    (description
+     "juCi++ is a small @dfn{IDE} (Integrated Development Environment)
+designed especially towards libclang with speed, stability, and ease of use
+in mind.
+
+It supports autocompletion, on-the-fly warnings and errors, syntax
+highlighting, and integrates with Git as well as the CMake and Meson build
+systems.")
+    (license license:expat)))
+
 (define-public leafpad
   (package
     (name "leafpad")
@@ -245,7 +350,7 @@ Wordstar-, EMACS-, Pico, Nedit or vi-like key bindings.  e3 can be used on
 (define-public mg
   (package
     (name "mg")
-    (version "20180408")
+    (version "20180927")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -254,7 +359,7 @@ Wordstar-, EMACS-, Pico, Nedit or vi-like key bindings.  e3 can be used on
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "06w86xk7sjl2x2h3z6msn8kpmwj05qdimcym77wzhz5s94dzh1bl"))
+                "14vrm8lvwksf697sqks7xfd1xaqjlqjc9afjk33sksq5p27wr203"))
               (modules '((guix build utils)))
               (snippet '(begin
                           (substitute* "GNUmakefile"
@@ -293,15 +398,122 @@ Wordstar-, EMACS-, Pico, Nedit or vi-like key bindings.  e3 can be used on
     (home-page "https://homepage.boetes.org/software/mg/")
     (synopsis "Microscopic GNU Emacs clone")
     (description
-     "Mg (mg) is a GNU Emacs style editor, with which it is \"broadly\"
-compatible.  This is a portable version of the mg maintained by the OpenBSD
-team.")
+     "Mg (@command{mg}) is a GNU Emacs style editor, with which it is
+\"broadly\" compatible.  This is a portable version of the mg maintained by the
+OpenBSD team.")
     (license license:public-domain)))
 
+(define-public qemacs
+  (package
+    (name "qemacs")
+    (version "0.3.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://bellard.org/qemacs/"
+                           "qemacs-" version ".tar.gz"))
+       (sha256
+        (base32 "156z4wpj49i6j388yjird5qvrph7hz0grb4r44l4jf3q8imadyrg"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f                      ;no test
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'build-qhtml
+           ;; Build fails without first creating qHTML library.
+           (lambda _ (invoke "make" "-C" "libqhtml")))
+         (add-before 'install 'fix-man-pages-directory
+           ;; Install in $out/share/man instead of $out/man.
+           (lambda _
+             (substitute* "Makefile"
+               (("/man/man1" all) (string-append "/share" all)))
+             #t))
+         (add-before 'install 'create-directories
+           ;; Ensure directories exist before installing files.
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (for-each (lambda (d) (mkdir-p (string-append out d)))
+                         '("/bin" "/share/man/man1" "/share/qe"))
+               #t)))
+         (add-after 'install 'install-extra-documentation
+           ;; Install sample configuration file, Info, and HTML manual.
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((share (string-append (assoc-ref outputs "out") "/share"))
+                    (doc (string-append share "/doc/" ,name "-" ,version))
+                    (html (string-append share "/html"))
+                    (info (string-append share "/info"))
+                    (makeinfo (string-append (assoc-ref %build-inputs "texinfo")
+                                             "/bin/makeinfo")))
+               ;; First fix Texinfo documentation, create appropriate
+               ;; directories, then generate Info and HTML files there.
+               (substitute* "qe-doc.texi"
+                 (("^M-([{}])" _ bracket) (string-append "M-@" bracket)))
+               (for-each (lambda (d) (mkdir-p d)) (list html info))
+               (invoke makeinfo "qe-doc.texi" "-o" info)
+               (invoke makeinfo "qe-doc.texi" "--html" "--no-split" "-o" html)
+               ;; Install sample configuration file.
+               (install-file "config.eg" doc)
+               #t))))))
+    (native-inputs
+     `(("texinfo" ,texinfo)))
+    (inputs
+     `(("libx11" ,libx11)
+       ("libxext" ,libxext)
+       ("libxv" ,libxv)))
+    (home-page "https://bellard.org/qemacs/")
+    (synopsis "Small but powerful text editor")
+    (description "QEmacs (for Quick Emacs) is a very small but
+powerful editor.  It has features that even big editors lack:
+
+@itemize
+
+@item Full screen editor with an Emacs look and feel with all Emacs
+common features: multi-buffer, multi-window, command mode, universal
+argument, keyboard macros, config file with C-like syntax, minibuffer
+with completion and history.
+
+@item Can edit files of hundreds of Megabytes without being slow by
+using a highly optimized internal representation and by mmaping the
+file.
+
+@item Full Unicode support, including multi charset handling (8859-x,
+UTF8, SJIS, EUC-JP, ...) and bidirectional editing respecting the
+Unicode bidi algorithm.  Arabic and Indic scripts handling (in
+progress).
+
+@item WYSIWYG HTML/XML/CSS2 mode graphical editing.  Also supports
+Lynx like rendering on VT100 terminals.
+
+@item WYSIWYG DocBook mode based on XML/CSS2 renderer.
+
+@item C mode: coloring with immediate update.  Emacs like auto-indent.
+
+@item Shell mode: colorized VT100 emulation so that your shell work
+exactly as you expect.  Compile mode with next/prev error.
+
+@item Input methods for most languages, including Chinese (input
+methods come from the Yudit editor).
+
+@item Hexadecimal editing mode with insertion and block commands.
+Unicode hexa editing is also supported.
+
+@item Works on any VT100 terminals without termcap.  UTF8 VT100
+support included with double width glyphs.
+
+@item X11 support.  Support multiple proportional fonts at the same
+time (as XEmacs).  X Input methods supported.  Xft extension supported
+for anti aliased font display.
+
+@item Small! Full version (including HTML/XML/CSS2/DocBook rendering
+and all charsets): 200KB big.  Basic version (without bidir/unicode
+scripts/input/X11/C/Shell/HTML/Dired): 49KB.
+@end itemize")
+    (license license:lgpl2.1+)))
+
 (define-public ghostwriter
   (package
     (name "ghostwriter")
-    (version "1.7.4")
+    (version "1.8.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -310,7 +522,7 @@ team.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1pqlr08z5syqcq5p282asxwzrrm7c1w94baxyb467swh8yp3fj5m"))))
+                "13yn82m1l2pq93wbl569a2lzpc3sn8a8g30hsgdch1l9xlmhwran"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)
@@ -318,9 +530,13 @@ team.")
     (inputs
      `(("hunspell" ,hunspell)
        ("qtbase" ,qtbase)
+       ("qtdeclarative" ,qtdeclarative)
        ("qtmultimedia" ,qtmultimedia)
+       ("qtquickcontrols" ,qtquickcontrols)
        ("qtsvg" ,qtsvg)
-       ("qtwebkit" ,qtwebkit)))
+       ("qtwebchannel" ,qtwebchannel)))
+    (propagated-inputs                  ; To get native-search-path
+     `(("qtwebengine" ,qtwebengine)))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -350,6 +566,108 @@ team.")
 environment with Markdown markup.")
     (license license:gpl3+)))           ; icons/* under CC-BY-SA3
 
+(define-public manuskript
+  (package
+    (name "manuskript")
+    (version "0.11.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/olivierkes/manuskript.git")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1l6l9k6k69yv8xqpll0zv9cwdqqg4zvxy90l6sx5nv2yywh5crla"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:tests? #f                      ;no test
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (delete 'build)
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (share (string-append out "/share/manuskript")))
+               ;; Install data.
+               (mkdir-p share)
+               (for-each
+                (lambda (d)
+                  (let ((destination  (string-append share "/" d)))
+                    (mkdir-p destination)
+                    (copy-recursively d destination)))
+                '("bin" "i18n" "icons" "libs" "manuskript" "resources"))
+               ;; Install documentation.
+               (let ((doc (string-append out
+                                         "/doc/manuskript-" ,version
+                                         "/sample-projects")))
+                 (mkdir-p doc)
+                 (copy-recursively "sample-projects" doc))
+               ;; Wrap executable in "$out/share/manuskript/bin" and
+               ;; link to it from "$out/bin".
+               (let ((bin (string-append out "/bin"))
+                     (executable (string-append share "/bin/manuskript")))
+                 (wrap-program executable
+                   (list "PYTHONPATH" 'prefix (list (getenv "PYTHONPATH"))))
+                 (mkdir-p bin)
+                 (with-directory-excursion bin
+                   (symlink (string-append share "/bin/manuskript")
+                            "manuskript")))
+               ;; Install icons and create .desktop file.
+               (let ((apps (string-append out "/share/applications"))
+                     (icons-dir (string-append out "/share/pixmaps")))
+                 (install-file "icons/Manuskript/manuskript.svg" icons-dir)
+                 (mkdir-p apps)
+                 (with-output-to-file (string-append apps "/manuskript.desktop")
+                   (lambda _
+                     (format #t
+                             "[Desktop Entry]~@
+                         Name=Manuskript~@
+                         MimeType=application/x-manuskript-book;~@
+                         Exec=~a/bin/manuskript %f~@
+                         Comment=Tool for writers~@
+                         Comment[es]=Herramienta para escritores/as~@
+                         Keywords=manuskript;office;write;edit;novel;text;msk~@
+                         Terminal=false~@
+                         Type=Application~@
+                         Icon=manuskript~@
+                         Categories=Office;WordProcessor;~%"
+                             out))))
+               #t))))))
+    (inputs
+     `(("ghc-pandoc" ,ghc-pandoc)
+       ("python-lxml" ,python-lxml)
+       ("python-markdown" ,python-markdown)
+       ("python-pyqt" ,python-pyqt)
+       ("qtsvg" ,qtsvg)))
+    (home-page "http://www.theologeek.ch/manuskript/")
+    (synopsis "Tool for writers")
+    (description "Manuskript provides a rich environment to help
+writers create their first draft and then further refine and edit
+their masterpiece.  With Manuskript you can:
+
+@itemize
+@item Grow your premise from one sentence, to a paragraph, to a full
+summary,
+@item Create characters,
+@item Conceive plots,
+@item Construct outlines (Outline mode and/or Index cards),
+@item Write with focus (Distraction free mode),
+@item Build worlds,
+@item Track items,
+@item Edit and re-organize chapters and scenes,
+@item View Story line,
+@item Compose with fiction or non-fiction templates and writing modes,
+@item Import and export document formats such as HTML, ePub,
+OpenDocument, DocX, and more.
+@end itemize
+
+Additionally Manuskript can help in many more ways with a spell
+checker, markdown highlighter, frequency analyzer, and automatic save
+in plain text file format.")
+    (license license:gpl3+)))
+
 (define-public editorconfig-core-c
   (package
     (name "editorconfig-core-c")
@@ -397,15 +715,14 @@ editors.")
 (define-public texmacs
   (package
     (name "texmacs")
-    (version "1.99.9")
+    (version "1.99.11")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://www.texmacs.org/Download/ftp/tmftp/"
                            "source/TeXmacs-" version "-src.tar.gz"))
        (sha256
-        (base32
-         "0i95sf9y8qpgxd8f39cprbp3s200nm9lml0xdpyn46n838acvw19"))
+        (base32 "12bp0f34izzqimz49lfpgf4lyz3h45s9xbmk8v6zsawdjki76alg"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -421,7 +738,7 @@ editors.")
        ("python" ,python-wrapper)
        ("qt" ,qt-4)))
     (arguments
-     `(#:tests? #f ;no check target
+     `(#:tests? #f                      ; no check target
        #:phases
        (modify-phases %standard-phases
          (add-before 'configure 'gzip-flags
@@ -437,3 +754,249 @@ types of content.  It has robust support for mathematical formulas and plots.
 and Octave.  TeXmacs is completely extensible via Guile.")
     (license license:gpl3+)
     (home-page "https://www.texmacs.org/tmweb/home/welcome.en.html")))
+
+(define-public scintilla
+  (package
+    (name "scintilla")
+    (version "4.3.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (let ((v (apply string-append (string-split version #\.))))
+              (string-append "https://www.scintilla.org/scintilla" v ".tgz")))
+       (sha256
+        (base32 "0zh8c19r1zd4kr9jg2ws0n2n5ic2siz5zbns6cvylyfbpf69ghy2"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:make-flags (list "GTK3=1" "CC=gcc" "-Cgtk")
+       #:tests? #f                      ;require un-packaged Pyside
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)            ;no configure script
+         (add-after 'unpack 'build-shared-library
+           (lambda _
+             (substitute* "gtk/makefile"
+               (("scintilla\\.a") "libscintilla.so")
+               (("\\$\\(AR\\) \\$\\(ARFLAGS\\) \\$@ \\$\\^")
+                "$(CC) -shared $^ -o $@")
+               (("\\$\\(RANLIB\\) \\$@") ""))
+             #t))
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (lib (string-append out "/lib"))
+                    (include (string-append out "/include")))
+               (install-file "bin/libscintilla.so" lib)
+               (for-each (lambda (f) (install-file f include))
+                         (find-files "include/" "."))
+               #t))))))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("python" ,python-wrapper)))
+    (inputs
+     `(("gtk+" ,gtk+)))
+    (home-page "https://www.scintilla.org/")
+    (synopsis "Code editor for GTK+")
+    (description "Scintilla is a source code editing component for
+GTK+.  It has the usual features found in text editing components, as
+well as some that are especially useful for editing and debugging
+source code; these include support for syntax styling, error
+indicators, code completion and call tips.  Styling choices are more
+open than with many editors: Scintilla lets you use proportional
+fonts, bold and italics, multiple foreground and background colours,
+and multiple fonts.")
+    (license license:hpnd)))
+
+(define-public geany
+  (package
+    (name "geany")
+    (version "1.36")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://download.geany.org/"
+                                  "geany-" version ".tar.bz2"))
+              (sha256
+               (base32
+                "0gnm17cr4rf3pmkf0axz4a0fxwnvp55ji0q0lzy88yqbshyxv14i"))
+              (modules '((guix build utils)))
+              (snippet '(begin
+                          (delete-file-recursively "scintilla")
+                          #t))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("doxygen" ,doxygen)
+       ("glib" ,glib "bin")
+       ("intltool" ,intltool)
+       ("libtool" ,libtool)
+       ("pkg-config" ,pkg-config)
+       ("python-docutils" ,python-docutils))) ;for rst2html
+    (inputs
+     `(("gtk+" ,gtk+)
+       ("scintilla" ,scintilla)))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'use-scintilla-shared-library
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "configure.ac"
+               (("scintilla/Makefile") "")
+               (("scintilla/include/Makefile") ""))
+             (substitute* "Makefile.am"
+               (("scintilla ") ""))
+             (substitute* "src/Makefile.am"
+               (("\\$\\(top_builddir\\)/scintilla/libscintilla.la") "")
+               (("geany_LDFLAGS =" all) (string-append all " -lscintilla")))
+             (substitute* "doc/Makefile.am"
+               (("\\$\\(INSTALL_DATA\\) \\$\\(top_srcdir\\)/scintilla/License.txt \\$\\(DOCDIR\\)/ScintillaLicense.txt") ""))
+             (substitute* "tests/Makefile.am"
+               (("AM_LDFLAGS =" all) (string-append all " -lscintilla")))
+             (for-each delete-file (list "autogen.sh" "configure" "Makefile.in"))
+             #t)))))
+    (home-page "https://www.geany.org")
+    (synopsis "Fast and lightweight IDE")
+    (description "Geany is a small and fast Integrated Development
+Environment (IDE) that only has a few dependencies on other packages and is as
+independent as possible from special desktop environments like KDE or GNOME.
+
+The basic features of Geany are:
+@itemize
+@item syntax highlighting
+@item code completion
+@item auto completion of often constructed constructs like if, for and while
+@item auto completion of XML and HTML tags
+@item call tips
+@item folding
+@item many supported filetypes like C, Java, PHP, HTML, Python, Perl, Pascal
+@item symbol lists
+@item embedded terminal emulation
+@item extensibility through plugins
+@end itemize")
+    (license license:gpl2+)))
+
+(define-public fe
+  (package
+    (name "fe")
+    ;; Stable release is 1.8.  However, this development version
+    ;; introduces support for UTF-8.
+    (version "2.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://www.moria.de/~michael/fe/"
+                                  "fe-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1hwws7si1752z6hp61zxznvgsb6846lp8zl1hn5ddhsbafwalwb9"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f                      ;no test
+       ;; Sendmail is only used to send a crash log.  Disable the
+       ;; feature since it is (1) undocumented (2) not very useful.
+       #:configure-flags (list "--disable-sendmail")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'install-doc
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (doc (string-append out "/share/doc/" ,name "-" ,version)))
+               (for-each (lambda (f) (install-file f doc))
+                         '("fe.doc" "fe.html" "fe.ps" "feref.ps" "README"))
+               #t))))))
+    (native-inputs
+     `(("gettext" ,gettext-minimal)))
+    (inputs
+     `(("ncurses" ,ncurses)))
+    (home-page "http://www.moria.de/~michael/fe/")
+    (synopsis "Small folding editor")
+    (description "Fe is a small folding editor.  It folds
+arbitrary text regions; it is not bound to syntactic units.
+
+Fe has no configuration or extension language and requires no setup.
+Its user interface is emacs-like and it has menus for the very most
+important functions to help beginners.  Further there is a reference
+card.  It offers:
+
+@itemize
+@item Regions and Emacs-like kill ring
+@item Incremental search
+@item Keyboard macros
+@item Editing binary files
+@item Multiple windows and views
+@item Compose function for Latin 1 characters
+@end itemize")
+    (license license:gpl2+)))
+
+(define-public ne
+  (package
+    (name "ne")
+    (version "3.2.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/vigna/ne.git")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0h6d08cnwrk96ss83i9bragwwanph6x54sm3ak1z81146dsqsiif"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("perl" ,perl)
+       ("texinfo" ,texinfo)))
+    (inputs
+     `(("ncurses" ,ncurses)))
+    (arguments
+     `(#:tests? #f
+       #:make-flags
+       (list "CC=gcc"
+             (string-append "PREFIX=" (assoc-ref %outputs "out"))
+             (string-append "LDFLAGS=-L" (assoc-ref %build-inputs "ncurses")
+                            "/lib"))
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'configure
+           (lambda _
+             (substitute* "src/makefile"
+              (("-lcurses") "-lncurses"))
+             #t)))))
+    (home-page "http://ne.di.unimi.it/")
+    (synopsis "Text editor with menu bar")
+    (description "This package provides a modeless text editor with menu bar.
+It supports syntax highlighting, regular expressions, configurable menus,
+keybindings, autocomplete and unlimited undo.  It can pipe a marked block
+of text through any command line filter.  It can also open very large binary
+files.  It was originally developed on the Amiga 3000T.")
+    (license license:gpl3+)))
+
+(define-public hexer
+  (package
+    (name "hexer")
+    (version "1.0.6")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append "https://devel.ringlet.net/files/editors/hexer/"
+                            "hexer-" version ".tar.xz"))
+        (sha256
+          (base32 "157z17z8qivdin2km2wp86x1bv1nx15frrwcz11mk0l3ab74mf76"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f                      ;no upstream tests
+       #:make-flags
+       (list "CC=gcc"
+             (string-append "PREFIX=" (assoc-ref %outputs "out"))
+             (string-append "LTERMCAP=-lncurses")
+             (string-append "LDFLAGS=-L" (assoc-ref %build-inputs "ncurses")
+                            "/lib"))
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure))))         ;no configure script
+    (inputs
+     `(("ncurses" ,ncurses)))
+    (home-page "https://devel.ringlet.net/editors/hexer/")
+    (synopsis "Multi buffer editor for binary files with vi-like interface")
+    (description "Hexer is a multi-buffer editor for binary files for Unix-like
+systems that displays its buffer(s) as a hex dump.  The user interface is kept
+similar to vi/ex.")
+    (license license:bsd-3)))