gnu: facter: Update to 4.0.33.
[jackhill/guix/guix.git] / gnu / packages / text-editors.scm
CommitLineData
a2c1dcea
JMSG
1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2016 José Miguel Sánchez García <jmi2k@openmailbox.org>
5613ea79 3;;; Copyright © 2016 Carlo Zancanaro <carlo@zancanaro.id.au>
89d3869b 4;;; Copyright © 2017, 2018, 2020 Eric Bavier <bavier@posteo.net>
0bf11648 5;;; Copyright © 2017 Feng Shu <tumashu@163.com>
3c986a7d 6;;; Copyright © 2017 Nikita <nikita@n0.is>
bcd757fd 7;;; Copyright © 2014 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.org>
77100119 8;;; Copyright © 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
2238211a 9;;; Copyright © 2019 Efraim Flashner <efraim@flashner.co.il>
75a137da 10;;; Copyright © 2019 Andreas Enge <andreas@enge.fr>
1fffba66 11;;; Copyright © 2019, 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr>
28264388 12;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
8b95f741 13;;; Copyright © 2020 Tom Zander <tomz@freedommail.ch>
a2c1dcea
JMSG
14;;;
15;;; This file is part of GNU Guix.
16;;;
17;;; GNU Guix is free software; you can redistribute it and/or modify it
18;;; under the terms of the GNU General Public License as published by
19;;; the Free Software Foundation; either version 3 of the License, or (at
20;;; your option) any later version.
21;;;
22;;; GNU Guix is distributed in the hope that it will be useful, but
23;;; WITHOUT ANY WARRANTY; without even the implied warranty of
24;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25;;; GNU General Public License for more details.
26;;;
27;;; You should have received a copy of the GNU General Public License
28;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
29
30(define-module (gnu packages text-editors)
31 #:use-module (guix packages)
32 #:use-module (guix download)
5613ea79 33 #:use-module (guix git-download)
a2c1dcea 34 #:use-module (guix utils)
28264388 35 #:use-module (guix build-system cmake)
a2c1dcea 36 #:use-module (guix build-system gnu)
2238211a 37 #:use-module (guix build-system cmake)
4f038621 38 #:use-module (guix build-system glib-or-gtk)
1fffba66 39 #:use-module (guix build-system python)
a2c1dcea
JMSG
40 #:use-module ((guix licenses) #:prefix license:)
41 #:use-module (gnu packages)
28264388 42 #:use-module (gnu packages aspell)
3312fda0 43 #:use-module (gnu packages assembly)
2363ed01 44 #:use-module (gnu packages autotools)
5613ea79 45 #:use-module (gnu packages boost)
ef64f9ca 46 #:use-module (gnu packages code)
5613ea79 47 #:use-module (gnu packages documentation)
75a137da 48 #:use-module (gnu packages fontutils)
eaf5df6b 49 #:use-module (gnu packages freedesktop)
5613ea79 50 #:use-module (gnu packages gcc)
2207d522 51 #:use-module (gnu packages gettext)
0bf11648
FS
52 #:use-module (gnu packages glib)
53 #:use-module (gnu packages gtk)
75a137da 54 #:use-module (gnu packages guile)
1fffba66 55 #:use-module (gnu packages haskell-xyz)
bcd757fd 56 #:use-module (gnu packages libbsd)
04918a00 57 #:use-module (gnu packages libreoffice)
28264388 58 #:use-module (gnu packages llvm)
a2c1dcea
JMSG
59 #:use-module (gnu packages lua)
60 #:use-module (gnu packages ncurses)
2238211a 61 #:use-module (gnu packages pcre)
75a137da 62 #:use-module (gnu packages perl)
0bf11648 63 #:use-module (gnu packages pkg-config)
75a137da 64 #:use-module (gnu packages python)
2363ed01 65 #:use-module (gnu packages python-xyz)
04918a00 66 #:use-module (gnu packages qt)
852ba10a 67 #:use-module (gnu packages regex)
5613ea79 68 #:use-module (gnu packages ruby)
264ccbb3 69 #:use-module (gnu packages terminals)
a78364e9 70 #:use-module (gnu packages texinfo)
28264388 71 #:use-module (gnu packages version-control)
fb85b967
NG
72 #:use-module (gnu packages xml)
73 #:use-module (gnu packages xorg))
a2c1dcea
JMSG
74
75(define-public vis
76 (package
77 (name "vis")
dadc8610 78 (version "0.5")
a2c1dcea
JMSG
79 (source (origin
80 (method url-fetch)
7ec38295
EF
81 (uri (string-append "https://github.com/martanne/vis/releases"
82 "/download/v" version
83 "/vis-v" version ".tar.gz"))
a2c1dcea 84 (sha256
852ba10a 85 (base32
7ec38295 86 "0aw35n8xk7ir84ckvczc6yshj9ynishrlz0qlv4yc1afbra1gxmn"))))
a2c1dcea
JMSG
87 (build-system gnu-build-system)
88 (arguments
852ba10a
TGR
89 `(#:test-target "test"
90 #:tests? #f ; no releases; snapshots are missing tests
a2c1dcea
JMSG
91 #:phases
92 (modify-phases %standard-phases
93 (add-after 'install 'wrap-binary
94 (lambda* (#:key inputs outputs #:allow-other-keys)
95 (let* ((out (assoc-ref outputs "out"))
96 (lpeg (assoc-ref inputs "lua-lpeg"))
97 (lua-version ,(version-major+minor (package-version lua)))
98 (LUA_PATH (string-append lpeg "/share/lua/"
99 lua-version "/?.lua"))
100 (LUA_CPATH (string-append lpeg "/lib/lua/"
101 lua-version "/?.so")))
102 (wrap-program (string-append out "/bin/vis")
103 `("LUA_PATH" ":" prefix (,LUA_PATH))
104 `("LUA_CPATH" ":" prefix (,LUA_CPATH)))
105 #t))))))
c695fb76
TGR
106 (inputs `(("lua" ,lua)
107 ("ncurses" ,ncurses)
108 ("libtermkey" ,libtermkey)
109 ("lua-lpeg" ,lua-lpeg)
852ba10a 110 ("tre" ,tre)))
a2c1dcea
JMSG
111 (synopsis "Vim-like text editor")
112 (description
113 "Vis aims to be a modern, legacy free, simple yet efficient vim-like text
114editor. It extends vim's modal editing with built-in support for multiple
115cursors/selections and combines it with sam's structural regular expression
116based command language.")
117 (home-page "https://github.com/martanne/vis")
118 (license (list license:isc ; Main distribution.
119 license:public-domain ; map.[ch]
120 license:expat)))) ; lexers and libutf.[ch]
5613ea79
CZ
121
122(define-public kakoune
fbe8ebec
TGR
123 (package
124 (name "kakoune")
3b33e0e4 125 (version "2020.01.16")
fbe8ebec
TGR
126 (source
127 (origin
128 (method url-fetch)
129 (uri (string-append "https://github.com/mawww/kakoune/"
130 "releases/download/v" version "/"
a1cb6928 131 "kakoune-" version ".tar.bz2"))
fbe8ebec 132 (sha256
3b33e0e4 133 (base32 "1bhd990gywdwdhxc5dn83wwj418c5cw1ndqycf7k0a02kxlg3550"))))
fbe8ebec
TGR
134 (build-system gnu-build-system)
135 (arguments
136 `(#:make-flags
137 (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
138 #:phases
139 (modify-phases %standard-phases
140 (add-after 'unpack 'patch-source
141 (lambda _
142 ;; kakoune uses confstr with _CS_PATH to find out where to find
143 ;; a posix shell, but this doesn't work in the build
144 ;; environment. This substitution just replaces that result
145 ;; with the "sh" path.
146 (substitute* "src/shell_manager.cc"
147 (("if \\(m_shell.empty\\(\\)\\)" line)
148 (string-append "m_shell = \"" (which "sh")
149 "\";\n " line)))
150 #t))
151 (delete 'configure) ; no configure script
152 ;; kakoune requires us to be in the src/ directory to build
153 (add-before 'build 'chdir
154 (lambda _ (chdir "src") #t)))))
155 (native-inputs
156 `(("asciidoc" ,asciidoc)
157 ("pkg-config" ,pkg-config)
158 ("ruby" ,ruby)))
159 (inputs
73eacca8 160 `(("ncurses" ,ncurses)))
fbe8ebec
TGR
161 (synopsis "Vim-inspired code editor")
162 (description
163 "Kakoune is a code editor heavily inspired by Vim, as such most of its
5613ea79
CZ
164commands are similar to Vi's ones, and it shares Vi's \"keystrokes as a text
165editing language\" model. Kakoune has a strong focus on interactivity, most
166commands provide immediate and incremental results, while still being
167competitive (as in keystroke count) with Vim.")
27405497 168 (home-page "https://kakoune.org/")
fbe8ebec 169 (license license:unlicense)))
f255a6db
EB
170
171(define-public joe
172 (package
173 (name "joe")
bc111d39 174 (version "4.6")
f255a6db
EB
175 (source
176 (origin
177 (method url-fetch)
178 (uri (string-append "https://sourceforge.net/projects/joe-editor/"
179 "files/JOE sources/joe-" version "/"
180 "joe-" version ".tar.gz"))
181 (sha256
182 (base32
bc111d39 183 "1pmr598xxxm9j9dl93kq4dv36zyw0q2dh6d7x07hf134y9hhlnj9"))))
f255a6db
EB
184 (build-system gnu-build-system)
185 (inputs `(("ncurses" ,ncurses)))
186 (home-page "http://joe-editor.sourceforge.net/")
187 (synopsis "Console screen editor")
188 (description
7904f18a
EB
189 "JOE is a powerful console screen editor with a \"mode-less\" user
190interface similar to many user-friendly editors. JOE has some of the key
191bindings and many of the powerful features of GNU Emacs.")
f255a6db 192 (license license:gpl3+)))
0bf11648 193
28264388
MB
194(define-public jucipp
195 (package
196 (name "jucipp")
ef64f9ca 197 (version "1.6.0")
28264388
MB
198 (home-page "https://gitlab.com/cppit/jucipp")
199 (source (origin
200 (method git-fetch)
201 (uri (git-reference (url home-page)
202 (commit (string-append "v" version))
203 ;; Two submodules are required which are
204 ;; developed alongside JuCi++ and difficult
205 ;; to package separately.
206 (recursive? #t)))
207 (file-name (git-file-name name version))
208 (sha256
ef64f9ca 209 (base32 "177myy6qvjlb6j3f3i3xmfml5r3p9in8xzpvm0n59dn56s81gpnr"))))
28264388
MB
210 (build-system cmake-build-system)
211 (arguments
212 `(#:configure-flags '("-DBUILD_TESTING=ON"
213
214 ;; These arguments are here to facilitate an "in-source"
215 ;; build using "./build" instead of the default "../build".
216 ;; The test suite expects that to be the case.
217 "..")
218 #:out-of-source? #f
219 #:phases (modify-phases %standard-phases
220 (add-before 'configure 'enter-build-directory
221 (lambda _
222 (mkdir "build")
223 (chdir "build")
224 #t))
225
28264388
MB
226 (add-after 'unpack 'patch-tiny-process-library
227 (lambda _
228 (with-directory-excursion "lib/tiny-process-library"
229 (substitute* '("process_unix.cpp"
230 "tests/io_test.cpp")
231 (("/bin/sh") (which "sh"))))
232 #t))
233 (add-after 'unpack 'disable-git-test
234 (lambda _
235 (substitute* "tests/CMakeLists.txt"
236 ;; Disable the git test, as it requires the full checkout.
237 (("add_test\\(git_test.*\\)") ""))
238 #t))
239 (add-before 'check 'pre-check
240 (lambda* (#:key inputs #:allow-other-keys)
241 ;; Tests do not expect HOME to be empty.
242 (setenv "HOME" "/etc")
243
244 ;; Most tests require an X server.
245 (let ((xorg-server (assoc-ref inputs "xorg-server"))
246 (display ":1"))
247 (setenv "DISPLAY" display)
248 (system (string-append xorg-server "/bin/Xvfb "
249 display " &")))
250 #t)))))
251 (native-inputs
252 `(("pkg-config" ,pkg-config)
253 ("xorg-server" ,xorg-server-for-tests)))
254 (inputs
255 `(("aspell" ,aspell)
256 ("boost" ,boost)
ef64f9ca 257 ("ctags" ,universal-ctags)
28264388
MB
258 ("gtkmm" ,gtkmm)
259 ("gtksourceviewmm" ,gtksourceviewmm)
dd61cd85 260 ("libclang" ,clang-10) ;XXX: must be the same version as Mesas LLVM
28264388
MB
261 ("libgit2" ,libgit2)))
262 (synopsis "Lightweight C++ IDE")
263 (description
264 "juCi++ is a small @dfn{IDE} (Integrated Development Environment)
265designed especially towards libclang with speed, stability, and ease of use
266in mind.
267
268It supports autocompletion, on-the-fly warnings and errors, syntax
269highlighting, and integrates with Git as well as the CMake and Meson build
270systems.")
271 (license license:expat)))
272
0bf11648
FS
273(define-public leafpad
274 (package
275 (name "leafpad")
276 (version "0.8.18.1")
277 (source (origin
278 (method url-fetch)
b7fd77ef 279 (uri (string-append "mirror://savannah/"
0bf11648
FS
280 "leafpad/leafpad-" version ".tar.gz"))
281 (sha256
282 (base32
283 "0b0az2wvqgvam7w0ns1j8xp2llslm1rx6h7zcsy06a7j0yp257cm"))))
4f038621 284 (build-system glib-or-gtk-build-system)
0bf11648
FS
285 (native-inputs
286 `(("intltool" ,intltool)
287 ("pkg-config" ,pkg-config)))
288 (inputs
289 `(("gtk+" ,gtk+-2)))
dde5831c 290 (home-page "http://tarot.freeshell.org/leafpad/")
0bf11648
FS
291 (synopsis "GTK+ based text editor")
292 (description "Leafpad is a GTK+ text editor that emphasizes simplicity. As
293development focuses on keeping weight down to a minimum, only the most essential
294features are implemented in the editor. Leafpad is simple to use, is easily
295compiled, requires few libraries, and starts up quickly. ")
296 (license license:gpl2+)))
3312fda0 297
298(define-public e3
299 (package
300 (name "e3")
301 (version "2.82")
302 (source (origin
303 (method url-fetch)
304 (uri (string-append "https://sites.google.com/site/e3editor/Home/"
305 "e3-" version ".tgz"))
306 (sha256
307 (base32
308 "0919kadkas020maqq37852isnzp053q2fnws2zh3mz81d1jiviak"))
309 (modules '((guix build utils)))
310
311 ;; Remove pre-built binaries.
6cbee49d
MW
312 (snippet '(begin
313 (delete-file-recursively "bin")
314 #t))))
3312fda0 315 (build-system gnu-build-system)
316 (arguments
317 `(#:tests? #f
318 #:make-flags (list (string-append "PREFIX="
319 (assoc-ref %outputs "out")))
320 #:phases (modify-phases %standard-phases
321 (delete 'configure))))
322 (native-inputs
323 `(("nasm" ,nasm)))
324 (home-page "https://sites.google.com/site/e3editor/")
325 (synopsis "Tiny text editor written in assembly")
326 (description
327 "e3 is a micro text editor with an executable code size between 3800 and
32835000 bytes. Except for ``syntax highlighting'', the e3 binary supports all
329of the basic functions one expects plus built in arithmetic calculations.
330UTF-8 coding of unicode characters is supported as well. e3 can use
331Wordstar-, EMACS-, Pico, Nedit or vi-like key bindings. e3 can be used on
33216, 32, and 64-bit CPUs.")
333 (supported-systems '("x86_64-linux" "i686-linux"))
334 (license license:gpl2+)))
bcd757fd
LC
335
336(define-public mg
337 (package
338 (name "mg")
77100119 339 (version "20180927")
bcd757fd 340 (source (origin
a4d8b386
TGR
341 (method git-fetch)
342 (uri (git-reference
343 (url "https://github.com/hboetes/mg")
344 (commit version)))
345 (file-name (git-file-name name version))
bcd757fd
LC
346 (sha256
347 (base32
77100119 348 "14vrm8lvwksf697sqks7xfd1xaqjlqjc9afjk33sksq5p27wr203"))
bcd757fd 349 (modules '((guix build utils)))
6cbee49d
MW
350 (snippet '(begin
351 (substitute* "GNUmakefile"
352 (("/usr/bin/") ""))
353 #t))))
bcd757fd
LC
354 (build-system gnu-build-system)
355 (native-inputs
356 `(("pkg-config" ,pkg-config)))
357 (inputs
358 `(("libbsd" ,libbsd)
359 ("ncurses" ,ncurses)))
360 (arguments
361 ;; No test suite available.
362 '(#:tests? #f
363 #:make-flags (list (string-append "prefix=" %output)
bcd757fd
LC
364 "CC=gcc")
365 #:phases (modify-phases %standard-phases
a4d8b386 366 (delete 'configure) ; no configure script
217ce570 367 (add-before 'build 'correct-location-of-difftool
368 (lambda _
369 (substitute* "buffer.c"
370 (("/usr/bin/diff")
371 (which "diff")))
372 #t))
bcd757fd
LC
373 (add-before 'install 'patch-tutorial-location
374 (lambda* (#:key outputs #:allow-other-keys)
375 (substitute* "mg.1"
376 (("/usr") (assoc-ref outputs "out")))
377 #t))
378 (add-after 'install 'install-tutorial
379 (lambda* (#:key outputs #:allow-other-keys)
380 (let* ((out (assoc-ref outputs "out"))
381 (doc (string-append out "/share/doc/mg")))
382 (install-file "tutorial" doc)
383 #t))))))
c3d82885 384 (home-page "https://homepage.boetes.org/software/mg/")
bcd757fd
LC
385 (synopsis "Microscopic GNU Emacs clone")
386 (description
16fcca64
TGR
387 "Mg (@command{mg}) is a GNU Emacs style editor, with which it is
388\"broadly\" compatible. This is a portable version of the mg maintained by the
389OpenBSD team.")
bcd757fd 390 (license license:public-domain)))
04918a00 391
3fad9a69
NG
392(define-public qemacs
393 (package
394 (name "qemacs")
395 (version "0.3.3")
396 (source
397 (origin
398 (method url-fetch)
399 (uri (string-append "https://bellard.org/qemacs/"
400 "qemacs-" version ".tar.gz"))
401 (sha256
402 (base32 "156z4wpj49i6j388yjird5qvrph7hz0grb4r44l4jf3q8imadyrg"))))
403 (build-system gnu-build-system)
404 (arguments
405 `(#:tests? #f ;no test
406 #:phases
407 (modify-phases %standard-phases
408 (add-before 'build 'build-qhtml
409 ;; Build fails without first creating qHTML library.
410 (lambda _ (invoke "make" "-C" "libqhtml")))
411 (add-before 'install 'fix-man-pages-directory
412 ;; Install in $out/share/man instead of $out/man.
413 (lambda _
414 (substitute* "Makefile"
415 (("/man/man1" all) (string-append "/share" all)))
416 #t))
417 (add-before 'install 'create-directories
418 ;; Ensure directories exist before installing files.
419 (lambda* (#:key outputs #:allow-other-keys)
420 (let ((out (assoc-ref outputs "out")))
421 (for-each (lambda (d) (mkdir-p (string-append out d)))
422 '("/bin" "/share/man/man1" "/share/qe"))
423 #t)))
424 (add-after 'install 'install-extra-documentation
425 ;; Install sample configuration file, Info, and HTML manual.
426 (lambda* (#:key outputs #:allow-other-keys)
427 (let* ((share (string-append (assoc-ref outputs "out") "/share"))
428 (doc (string-append share "/doc/" ,name "-" ,version))
429 (html (string-append share "/html"))
430 (info (string-append share "/info"))
431 (makeinfo (string-append (assoc-ref %build-inputs "texinfo")
432 "/bin/makeinfo")))
433 ;; First fix Texinfo documentation, create appropriate
434 ;; directories, then generate Info and HTML files there.
435 (substitute* "qe-doc.texi"
436 (("^M-([{}])" _ bracket) (string-append "M-@" bracket)))
437 (for-each (lambda (d) (mkdir-p d)) (list html info))
438 (invoke makeinfo "qe-doc.texi" "-o" info)
439 (invoke makeinfo "qe-doc.texi" "--html" "--no-split" "-o" html)
440 ;; Install sample configuration file.
441 (install-file "config.eg" doc)
442 #t))))))
443 (native-inputs
444 `(("texinfo" ,texinfo)))
445 (inputs
446 `(("libx11" ,libx11)
447 ("libxext" ,libxext)
448 ("libxv" ,libxv)))
449 (home-page "https://bellard.org/qemacs/")
450 (synopsis "Small but powerful text editor")
451 (description "QEmacs (for Quick Emacs) is a very small but
452powerful editor. It has features that even big editors lack:
453
454@itemize
455
456@item Full screen editor with an Emacs look and feel with all Emacs
457common features: multi-buffer, multi-window, command mode, universal
458argument, keyboard macros, config file with C-like syntax, minibuffer
459with completion and history.
460
461@item Can edit files of hundreds of Megabytes without being slow by
462using a highly optimized internal representation and by mmaping the
463file.
464
465@item Full Unicode support, including multi charset handling (8859-x,
466UTF8, SJIS, EUC-JP, ...) and bidirectional editing respecting the
467Unicode bidi algorithm. Arabic and Indic scripts handling (in
468progress).
469
470@item WYSIWYG HTML/XML/CSS2 mode graphical editing. Also supports
471Lynx like rendering on VT100 terminals.
472
473@item WYSIWYG DocBook mode based on XML/CSS2 renderer.
474
475@item C mode: coloring with immediate update. Emacs like auto-indent.
476
477@item Shell mode: colorized VT100 emulation so that your shell work
478exactly as you expect. Compile mode with next/prev error.
479
480@item Input methods for most languages, including Chinese (input
481methods come from the Yudit editor).
482
483@item Hexadecimal editing mode with insertion and block commands.
484Unicode hexa editing is also supported.
485
486@item Works on any VT100 terminals without termcap. UTF8 VT100
487support included with double width glyphs.
488
489@item X11 support. Support multiple proportional fonts at the same
490time (as XEmacs). X Input methods supported. Xft extension supported
491for anti aliased font display.
492
493@item Small! Full version (including HTML/XML/CSS2/DocBook rendering
494and all charsets): 200KB big. Basic version (without bidir/unicode
495scripts/input/X11/C/Shell/HTML/Dired): 49KB.
496@end itemize")
497 (license license:lgpl2.1+)))
498
04918a00
EB
499(define-public ghostwriter
500 (package
501 (name "ghostwriter")
d9240c70 502 (version "1.8.1")
04918a00
EB
503 (source (origin
504 (method git-fetch)
505 (uri (git-reference
b0e7b699 506 (url "https://github.com/wereturtle/ghostwriter")
04918a00
EB
507 (commit (string-append "v" version))))
508 (file-name (git-file-name name version))
509 (sha256
510 (base32
d9240c70 511 "0jc6szfh5sdnafhwsr1xv7cn1fznniq58bix41hb9wlbkvq7wzi6"))))
04918a00
EB
512 (build-system gnu-build-system)
513 (native-inputs
514 `(("pkg-config" ,pkg-config)
58ab7f29 515 ("qttools" ,qttools))) ; for lrelease
04918a00
EB
516 (inputs
517 `(("hunspell" ,hunspell)
518 ("qtbase" ,qtbase)
89d3869b 519 ("qtdeclarative" ,qtdeclarative)
04918a00 520 ("qtmultimedia" ,qtmultimedia)
89d3869b 521 ("qtquickcontrols" ,qtquickcontrols)
04918a00 522 ("qtsvg" ,qtsvg)
89d3869b
EB
523 ("qtwebchannel" ,qtwebchannel)))
524 (propagated-inputs ; To get native-search-path
525 `(("qtwebengine" ,qtwebengine)))
04918a00
EB
526 (arguments
527 `(#:phases
528 (modify-phases %standard-phases
529 (replace 'configure
530 (lambda* (#:key outputs #:allow-other-keys)
531 (let ((out (assoc-ref outputs "out")))
532 (invoke "qmake" (string-append "PREFIX=" out)))))
533 (add-after 'configure 'create-translations
534 (lambda _
535 ;; `lrelease` will not overwrite, so delete existing .qm files
536 (for-each delete-file (find-files "translations" ".*\\.qm"))
537 (apply invoke "lrelease" (find-files "translations" ".*\\.ts"))))
538 ;; Ensure that icons are found at runtime.
539 (add-after 'install 'wrap-executable
540 (lambda* (#:key inputs outputs #:allow-other-keys)
541 (let ((out (assoc-ref outputs "out")))
542 (wrap-program (string-append out "/bin/ghostwriter")
543 `("QT_PLUGIN_PATH" ":" prefix
544 ,(map (lambda (label)
545 (string-append (assoc-ref inputs label)
546 "/lib/qt5/plugins/"))
547 '("qtsvg" "qtmultimedia"))))))))))
548 (home-page "https://wereturtle.github.io/ghostwriter/")
549 (synopsis "Write without distractions")
550 (description
551 "@code{ghostwriter} provides a relaxing, distraction-free writing
552environment with Markdown markup.")
58ab7f29 553 (license license:gpl3+))) ; icons/* under CC-BY-SA3
2238211a 554
1fffba66
NG
555(define-public manuskript
556 (package
557 (name "manuskript")
d5a08205 558 (version "0.11.0")
1fffba66
NG
559 (source
560 (origin
561 (method git-fetch)
562 (uri (git-reference
b0e7b699 563 (url "https://github.com/olivierkes/manuskript")
1fffba66
NG
564 (commit version)))
565 (file-name (git-file-name name version))
566 (sha256
d5a08205 567 (base32 "1l6l9k6k69yv8xqpll0zv9cwdqqg4zvxy90l6sx5nv2yywh5crla"))))
1fffba66
NG
568 (build-system python-build-system)
569 (arguments
570 `(#:tests? #f ;no test
571 #:phases
572 (modify-phases %standard-phases
573 (delete 'configure)
574 (delete 'build)
575 (replace 'install
576 (lambda* (#:key outputs #:allow-other-keys)
577 (let* ((out (assoc-ref outputs "out"))
578 (share (string-append out "/share/manuskript")))
579 ;; Install data.
580 (mkdir-p share)
581 (for-each
582 (lambda (d)
583 (let ((destination (string-append share "/" d)))
584 (mkdir-p destination)
585 (copy-recursively d destination)))
586 '("bin" "i18n" "icons" "libs" "manuskript" "resources"))
587 ;; Install documentation.
588 (let ((doc (string-append out
589 "/doc/manuskript-" ,version
590 "/sample-projects")))
591 (mkdir-p doc)
592 (copy-recursively "sample-projects" doc))
593 ;; Wrap executable in "$out/share/manuskript/bin" and
594 ;; link to it from "$out/bin".
595 (let ((bin (string-append out "/bin"))
596 (executable (string-append share "/bin/manuskript")))
597 (wrap-program executable
598 (list "PYTHONPATH" 'prefix (list (getenv "PYTHONPATH"))))
599 (mkdir-p bin)
600 (with-directory-excursion bin
601 (symlink (string-append share "/bin/manuskript")
602 "manuskript")))
603 ;; Install icons and create .desktop file.
604 (let ((apps (string-append out "/share/applications"))
605 (icons-dir (string-append out "/share/pixmaps")))
606 (install-file "icons/Manuskript/manuskript.svg" icons-dir)
607 (mkdir-p apps)
608 (with-output-to-file (string-append apps "/manuskript.desktop")
609 (lambda _
610 (format #t
611 "[Desktop Entry]~@
612 Name=Manuskript~@
613 MimeType=application/x-manuskript-book;~@
614 Exec=~a/bin/manuskript %f~@
615 Comment=Tool for writers~@
616 Comment[es]=Herramienta para escritores/as~@
617 Keywords=manuskript;office;write;edit;novel;text;msk~@
618 Terminal=false~@
619 Type=Application~@
620 Icon=manuskript~@
621 Categories=Office;WordProcessor;~%"
622 out))))
623 #t))))))
624 (inputs
625 `(("ghc-pandoc" ,ghc-pandoc)
626 ("python-lxml" ,python-lxml)
627 ("python-markdown" ,python-markdown)
628 ("python-pyqt" ,python-pyqt)
629 ("qtsvg" ,qtsvg)))
630 (home-page "http://www.theologeek.ch/manuskript/")
631 (synopsis "Tool for writers")
632 (description "Manuskript provides a rich environment to help
633writers create their first draft and then further refine and edit
634their masterpiece. With Manuskript you can:
635
636@itemize
637@item Grow your premise from one sentence, to a paragraph, to a full
638summary,
639@item Create characters,
640@item Conceive plots,
641@item Construct outlines (Outline mode and/or Index cards),
642@item Write with focus (Distraction free mode),
643@item Build worlds,
644@item Track items,
645@item Edit and re-organize chapters and scenes,
646@item View Story line,
647@item Compose with fiction or non-fiction templates and writing modes,
648@item Import and export document formats such as HTML, ePub,
649OpenDocument, DocX, and more.
650@end itemize
651
652Additionally Manuskript can help in many more ways with a spell
653checker, markdown highlighter, frequency analyzer, and automatic save
654in plain text file format.")
655 (license license:gpl3+)))
656
2238211a
EF
657(define-public editorconfig-core-c
658 (package
659 (name "editorconfig-core-c")
660 (version "0.12.3")
661 (source
662 (origin
663 (method git-fetch)
664 (uri (git-reference
b0e7b699 665 (url "https://github.com/editorconfig/editorconfig-core-c")
2238211a
EF
666 (commit (string-append "v" version))))
667 (file-name (git-file-name name version))
668 (sha256
669 (base32
670 "0jkc69r4jwn4rih6h6cqvgljjc3ff49cxj8286mi515aczr48cm1"))))
671 (build-system cmake-build-system)
672 (arguments
673 '(#:phases
674 (modify-phases %standard-phases
675 (add-after 'unpack 'insert-tests
676 (lambda* (#:key inputs #:allow-other-keys)
677 (let ((tests (assoc-ref inputs "tests")))
678 (copy-recursively tests "tests"))
679 #t)))))
680 (native-inputs
681 `(("tests" ,(origin
682 (method git-fetch)
683 (uri (git-reference
684 (url "https://github.com/editorconfig/editorconfig-core-test")
685 (commit "6ea1d8ece62cac9cf72c79dce4879b046abe1fe7"))) ; matches version
686 (file-name (git-file-name "editorconfig-core-test" version))
687 (sha256
688 (base32
689 "1sf6910idnd4bgzbj8w8f9ldsbkaqa0lh6syymwy3hfqda63acj7"))))))
690 (inputs
691 `(("pcre2" ,pcre2)))
692 (home-page "https://editorconfig.org/")
693 (synopsis "EditorConfig core library written in C")
694 (description "EditorConfig makes it easy to maintain the correct coding
695style when switching between different text editors and between different
696projects. The EditorConfig project maintains a file format and plugins for
697various text editors which allow this file format to be read and used by those
698editors.")
699 (license license:bsd-2)))
75a137da
AE
700
701(define-public texmacs
702 (package
703 (name "texmacs")
eaf5df6b 704 (version "1.99.13")
75a137da
AE
705 (source
706 (origin
707 (method url-fetch)
708 (uri (string-append "https://www.texmacs.org/Download/ftp/tmftp/"
709 "source/TeXmacs-" version "-src.tar.gz"))
710 (sha256
eaf5df6b 711 (base32 "1d590yyanh2ar88pd0ns4mf616bq1lq4cwg93m863anhir5irb82"))))
75a137da
AE
712 (build-system gnu-build-system)
713 (native-inputs
eaf5df6b
NG
714 `(("pkg-config" ,pkg-config)
715 ("xdg-utils" ,xdg-utils))) ;for xdg-icon-resource
75a137da
AE
716 (inputs
717 `(("freetype" ,freetype)
718 ("guile" ,guile-1.8)
719 ("perl" ,perl)
720 ("python" ,python-wrapper)
eaf5df6b 721 ("qt" ,qtbase)))
75a137da 722 (arguments
ad9fd1ba 723 `(#:tests? #f ; no check target
75a137da
AE
724 #:phases
725 (modify-phases %standard-phases
eaf5df6b
NG
726 (add-after 'unpack 'fix-icon-directory
727 (lambda* (#:key outputs #:allow-other-keys)
728 (let ((out (assoc-ref outputs "out")))
729 (substitute* "packages/linux/icons.sh"
730 (("/usr/share")
731 (string-append out "/share")))
732 #t)))
75a137da
AE
733 (add-before 'configure 'gzip-flags
734 (lambda _
735 (substitute* "Makefile.in"
736 (("^GZIP = gzip -f") "GZIP = gzip -f -n")))))))
737 (synopsis "Editing platform with special features for scientists")
738 (description
739 "GNU TeXmacs is a text editing platform which is specialized for
eaf5df6b
NG
740scientists. It is ideal for editing structured documents with different types
741of content. It has robust support for mathematical formulas and plots. It
742can also act as an interface to external mathematical programs such as R and
743Octave. TeXmacs is completely extensible via Guile.")
75a137da
AE
744 (license license:gpl3+)
745 (home-page "https://www.texmacs.org/tmweb/home/welcome.en.html")))
c55cd98c
NG
746
747(define-public scintilla
748 (package
749 (name "scintilla")
ab4943a7 750 (version "4.4.4")
3e6cb583
NG
751 (source
752 (origin
753 (method url-fetch)
754 (uri (let ((v (apply string-append (string-split version #\.))))
755 (string-append "https://www.scintilla.org/scintilla" v ".tgz")))
756 (sha256
ab4943a7 757 (base32 "1zjsb6iiqi4cw9r9md3xv8qyy86ssz11p680xn7vmllrxshxvs8y"))))
c55cd98c
NG
758 (build-system gnu-build-system)
759 (arguments
760 `(#:make-flags (list "GTK3=1" "CC=gcc" "-Cgtk")
761 #:tests? #f ;require un-packaged Pyside
762 #:phases
763 (modify-phases %standard-phases
764 (delete 'configure) ;no configure script
c55cd98c 765 (replace 'install
b2dbc53e 766 ;; Upstream provides no install script.
c55cd98c
NG
767 (lambda* (#:key outputs #:allow-other-keys)
768 (let* ((out (assoc-ref outputs "out"))
769 (lib (string-append out "/lib"))
770 (include (string-append out "/include")))
b2dbc53e
NG
771 (for-each (lambda (f) (install-file f lib))
772 (find-files "bin/" "\\.so$"))
c55cd98c
NG
773 (for-each (lambda (f) (install-file f include))
774 (find-files "include/" "."))
775 #t))))))
776 (native-inputs
dee632a8
NG
777 `(("pkg-config" ,pkg-config)
778 ("python" ,python-wrapper)))
c55cd98c
NG
779 (inputs
780 `(("gtk+" ,gtk+)))
781 (home-page "https://www.scintilla.org/")
782 (synopsis "Code editor for GTK+")
783 (description "Scintilla is a source code editing component for
784GTK+. It has the usual features found in text editing components, as
785well as some that are especially useful for editing and debugging
786source code; these include support for syntax styling, error
787indicators, code completion and call tips. Styling choices are more
788open than with many editors: Scintilla lets you use proportional
789fonts, bold and italics, multiple foreground and background colours,
790and multiple fonts.")
791 (license license:hpnd)))
2363ed01
NG
792
793(define-public geany
794 (package
795 (name "geany")
40e513fe 796 (version "1.36")
9e03ddc5
NG
797 (source
798 (origin
799 (method url-fetch)
800 (uri (string-append "https://download.geany.org/"
801 "geany-" version ".tar.bz2"))
802 (sha256
803 (base32 "0gnm17cr4rf3pmkf0axz4a0fxwnvp55ji0q0lzy88yqbshyxv14i"))))
2363ed01
NG
804 (build-system gnu-build-system)
805 (native-inputs
806 `(("autoconf" ,autoconf)
807 ("automake" ,automake)
808 ("doxygen" ,doxygen)
809 ("glib" ,glib "bin")
810 ("intltool" ,intltool)
811 ("libtool" ,libtool)
812 ("pkg-config" ,pkg-config)
813 ("python-docutils" ,python-docutils))) ;for rst2html
814 (inputs
815 `(("gtk+" ,gtk+)
9e03ddc5
NG
816 ;; FIXME: Geany bundles a 3.X release of Scintilla. It is not
817 ;; currently possible to replace it with our Scintilla package.
818 ;; ("scintilla" ,scintilla)
819 ))
2363ed01 820 (arguments
f3ed5297
NG
821 `(#:imported-modules ((guix build glib-or-gtk-build-system)
822 ,@%gnu-build-system-modules)
823 #:modules (((guix build glib-or-gtk-build-system) #:prefix glib-or-gtk:)
824 (guix build gnu-build-system)
825 (guix build utils))
826 #:phases
2363ed01 827 (modify-phases %standard-phases
f3ed5297
NG
828 (add-after 'install 'glib-or-gtk-wrap
829 (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap)))))
2363ed01
NG
830 (home-page "https://www.geany.org")
831 (synopsis "Fast and lightweight IDE")
832 (description "Geany is a small and fast Integrated Development
833Environment (IDE) that only has a few dependencies on other packages and is as
834independent as possible from special desktop environments like KDE or GNOME.
835
836The basic features of Geany are:
837@itemize
838@item syntax highlighting
839@item code completion
840@item auto completion of often constructed constructs like if, for and while
841@item auto completion of XML and HTML tags
842@item call tips
843@item folding
844@item many supported filetypes like C, Java, PHP, HTML, Python, Perl, Pascal
845@item symbol lists
846@item embedded terminal emulation
847@item extensibility through plugins
848@end itemize")
849 (license license:gpl2+)))
2207d522
NG
850
851(define-public fe
852 (package
853 (name "fe")
854 ;; Stable release is 1.8. However, this development version
855 ;; introduces support for UTF-8.
856 (version "2.0")
857 (source (origin
858 (method url-fetch)
859 (uri (string-append "http://www.moria.de/~michael/fe/"
860 "fe-" version ".tar.gz"))
861 (sha256
862 (base32
863 "1hwws7si1752z6hp61zxznvgsb6846lp8zl1hn5ddhsbafwalwb9"))))
864 (build-system gnu-build-system)
865 (arguments
866 `(#:tests? #f ;no test
867 ;; Sendmail is only used to send a crash log. Disable the
868 ;; feature since it is (1) undocumented (2) not very useful.
869 #:configure-flags (list "--disable-sendmail")
870 #:phases
871 (modify-phases %standard-phases
872 (add-after 'install 'install-doc
873 (lambda* (#:key outputs #:allow-other-keys)
874 (let* ((out (assoc-ref outputs "out"))
875 (doc (string-append out "/share/doc/" ,name "-" ,version)))
876 (for-each (lambda (f) (install-file f doc))
877 '("fe.doc" "fe.html" "fe.ps" "feref.ps" "README"))
878 #t))))))
879 (native-inputs
880 `(("gettext" ,gettext-minimal)))
881 (inputs
882 `(("ncurses" ,ncurses)))
883 (home-page "http://www.moria.de/~michael/fe/")
884 (synopsis "Small folding editor")
eee98f96 885 (description "Fe is a small folding editor. It folds
2207d522
NG
886arbitrary text regions; it is not bound to syntactic units.
887
888Fe has no configuration or extension language and requires no setup.
99ce2055 889Its user interface is emacs-like and it has menus for the very most
2207d522
NG
890important functions to help beginners. Further there is a reference
891card. It offers:
892
893@itemize
894@item Regions and Emacs-like kill ring
895@item Incremental search
896@item Keyboard macros
897@item Editing binary files
898@item Multiple windows and views
899@item Compose function for Latin 1 characters
900@end itemize")
901 (license license:gpl2+)))
a78364e9
DM
902
903(define-public ne
904 (package
905 (name "ne")
906 (version "3.2.1")
907 (source (origin
908 (method git-fetch)
909 (uri (git-reference
b0e7b699 910 (url "https://github.com/vigna/ne")
a78364e9
DM
911 (commit version)))
912 (file-name (git-file-name name version))
913 (sha256
914 (base32
915 "0h6d08cnwrk96ss83i9bragwwanph6x54sm3ak1z81146dsqsiif"))))
916 (build-system gnu-build-system)
917 (native-inputs
918 `(("perl" ,perl)
919 ("texinfo" ,texinfo)))
920 (inputs
921 `(("ncurses" ,ncurses)))
922 (arguments
923 `(#:tests? #f
924 #:make-flags
925 (list "CC=gcc"
926 (string-append "PREFIX=" (assoc-ref %outputs "out"))
927 (string-append "LDFLAGS=-L" (assoc-ref %build-inputs "ncurses")
928 "/lib"))
929 #:phases
930 (modify-phases %standard-phases
931 (replace 'configure
932 (lambda _
933 (substitute* "src/makefile"
934 (("-lcurses") "-lncurses"))
935 #t)))))
936 (home-page "http://ne.di.unimi.it/")
937 (synopsis "Text editor with menu bar")
938 (description "This package provides a modeless text editor with menu bar.
939It supports syntax highlighting, regular expressions, configurable menus,
940keybindings, autocomplete and unlimited undo. It can pipe a marked block
941of text through any command line filter. It can also open very large binary
942files. It was originally developed on the Amiga 3000T.")
943 (license license:gpl3+)))
8b95f741
T
944
945(define-public hexer
946 (package
947 (name "hexer")
948 (version "1.0.6")
949 (source
950 (origin
951 (method url-fetch)
952 (uri (string-append "https://devel.ringlet.net/files/editors/hexer/"
953 "hexer-" version ".tar.xz"))
954 (sha256
955 (base32 "157z17z8qivdin2km2wp86x1bv1nx15frrwcz11mk0l3ab74mf76"))))
956 (build-system gnu-build-system)
957 (arguments
958 `(#:tests? #f ;no upstream tests
959 #:make-flags
960 (list "CC=gcc"
961 (string-append "PREFIX=" (assoc-ref %outputs "out"))
962 (string-append "LTERMCAP=-lncurses")
963 (string-append "LDFLAGS=-L" (assoc-ref %build-inputs "ncurses")
964 "/lib"))
965 #:phases
966 (modify-phases %standard-phases
967 (delete 'configure)))) ;no configure script
968 (inputs
969 `(("ncurses" ,ncurses)))
970 (home-page "https://devel.ringlet.net/editors/hexer/")
971 (synopsis "Multi buffer editor for binary files with vi-like interface")
972 (description "Hexer is a multi-buffer editor for binary files for Unix-like
973systems that displays its buffer(s) as a hex dump. The user interface is kept
974similar to vi/ex.")
975 (license license:bsd-3)))