mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-12-25 05:48:07 -05:00
gnu: Add emacs-constants.
* gnu/packages/emacs.scm (emacs-constants): New variable. * gnu/packages/patches/emacs-constants-lisp-like.patch: New patch. * gnu-system.am (dist_patch_DATA): Add it.
This commit is contained in:
parent
58a7dc1340
commit
e5045f303a
3 changed files with 123 additions and 0 deletions
|
@ -452,6 +452,7 @@ dist_patch_DATA = \
|
|||
gnu/packages/patches/duplicity-piped-password.patch \
|
||||
gnu/packages/patches/duplicity-test_selection-tmp.patch \
|
||||
gnu/packages/patches/elfutils-tests-ptrace.patch \
|
||||
gnu/packages/patches/emacs-constants-lisp-like.patch \
|
||||
gnu/packages/patches/emacs-exec-path.patch \
|
||||
gnu/packages/patches/emacs-scheme-complete-scheme-r5rs-info.patch \
|
||||
gnu/packages/patches/emacs-source-date-epoch.patch \
|
||||
|
|
|
@ -26,6 +26,9 @@ (define-module (gnu packages emacs)
|
|||
#:use-module (guix packages)
|
||||
#:use-module (guix download)
|
||||
#:use-module (guix git-download)
|
||||
#:use-module (guix gexp)
|
||||
#:use-module (guix monads)
|
||||
#:use-module (guix store)
|
||||
#:use-module (guix build-system gnu)
|
||||
#:use-module (guix build-system emacs)
|
||||
#:use-module (guix build-system glib-or-gtk)
|
||||
|
@ -1297,3 +1300,41 @@ (define-public emacs-mit-scheme-doc
|
|||
"This package provides a set of Emacs functions to search definitions of
|
||||
identifiers in the MIT-Scheme documentation.")
|
||||
(license license:gpl2+)))
|
||||
|
||||
;;; XXX: move this procedure to an utility module
|
||||
(define* (uncompressed-file-fetch url hash-algo hash
|
||||
#:optional name
|
||||
#:key (system (%current-system))
|
||||
(guile (default-guile)))
|
||||
(mlet %store-monad ((drv (url-fetch url hash-algo hash name
|
||||
#:system system
|
||||
#:guile guile)))
|
||||
(gexp->derivation (or name (basename url))
|
||||
#~(begin
|
||||
(mkdir #$output)
|
||||
(setenv "PATH"
|
||||
(string-append #$gzip "/bin"))
|
||||
(chdir #$output)
|
||||
(copy-file #$drv (basename #$url))))))
|
||||
|
||||
(define-public emacs-constants
|
||||
(package
|
||||
(name "emacs-constants")
|
||||
(version "2.2")
|
||||
(source
|
||||
(origin
|
||||
(file-name (string-append name "-" version ".el"))
|
||||
(method uncompressed-file-fetch)
|
||||
(uri "https://staff.fnwi.uva.nl/c.dominik/Tools/constants/constants.el")
|
||||
(patches
|
||||
(list (search-patch "emacs-constants-lisp-like.patch")))
|
||||
(sha256
|
||||
(base32
|
||||
"14q094aphsjhq8gklv7i5a7byl0ygz63cv3n6b5p8ji2jy0mnnw3"))))
|
||||
(build-system emacs-build-system)
|
||||
(home-page "https://staff.fnwi.uva.nl/c.dominik/Tools/constants")
|
||||
(synopsis "Enter definition of constants into an Emacs buffer")
|
||||
(description
|
||||
"This package provides functions for inserting the definition of natural
|
||||
constants and units into an Emacs buffer.")
|
||||
(license license:gpl2+)))
|
||||
|
|
81
gnu/packages/patches/emacs-constants-lisp-like.patch
Normal file
81
gnu/packages/patches/emacs-constants-lisp-like.patch
Normal file
|
@ -0,0 +1,81 @@
|
|||
Add Scheme support
|
||||
|
||||
--- constants/constants.el.orig 2015-12-26 17:44:31.734520833 +0100
|
||||
+++ constants/constants.el 2015-12-30 17:41:28.402871263 +0100
|
||||
@@ -684,6 +684,33 @@
|
||||
|
||||
(eval-when-compile (defvar ctable))
|
||||
|
||||
+(defun constants-is-lisp-like (mode)
|
||||
+ (save-match-data
|
||||
+ (string-match "\\(lisp\\|scheme\\)" (symbol-name mode))))
|
||||
+
|
||||
+(defun constants-is-set-like ()
|
||||
+ (save-excursion
|
||||
+ (condition-case nil
|
||||
+ (save-match-data
|
||||
+ (progn (up-list -1)
|
||||
+ (or (looking-at "(set[qf!]?\\>") (looking-at "(define\\>"))))
|
||||
+ (error nil)))) ; return value nil means use default
|
||||
+
|
||||
+;;;###autoload
|
||||
+(defun constants-lisp-like-function ()
|
||||
+ "Check context for constants insertion."
|
||||
+ (if (constants-is-set-like)
|
||||
+ '(emacs-lisp-mode "%n %v%t; %d %u" "e" "(* %p %v)")
|
||||
+ '(emacs-lisp-mode "(%n %v)%t; %d %u" "e" "(* %p %v)")))
|
||||
+
|
||||
+;;;###autoload
|
||||
+(mapc (lambda (mode-hook)
|
||||
+ (add-hook mode-hook
|
||||
+ (lambda ()
|
||||
+ (setq constants-language-function
|
||||
+ 'constants-lisp-like-function))))
|
||||
+ '(scheme-mode-hook emacs-lisp-mode-hook lisp-mode-hook))
|
||||
+
|
||||
;;;###autoload
|
||||
(defun constants-insert (&optional unit-system names)
|
||||
"Insert one or more natural constant definitions in source code.
|
||||
@@ -826,8 +853,9 @@
|
||||
(funcall process-func ins))
|
||||
;; Here comes the insertion stuff for source code editing modes.
|
||||
;; First make sure we start a new line
|
||||
- (if (string-match
|
||||
- "\\S-" (buffer-substring (point-at-bol) (point-at-eol)))
|
||||
+ (if (and (string-match
|
||||
+ "\\S-" (buffer-substring (point-at-bol) (point-at-eol)))
|
||||
+ (not (constants-is-lisp-like mode)))
|
||||
;; non-empty line, insert after this line
|
||||
(progn
|
||||
(end-of-line 1)
|
||||
@@ -841,13 +869,24 @@
|
||||
(if (string-match "\\(.*\\)%t\\(.*\\)" line)
|
||||
(let ((comment-column 42))
|
||||
(insert (match-string 1 line))
|
||||
- (indent-to comment-column)
|
||||
- (insert (match-string 2 line)))
|
||||
+ (if (and (constants-is-lisp-like mode)
|
||||
+ (or (constants-is-set-like)
|
||||
+ (null clist)))
|
||||
+ (save-excursion
|
||||
+ (progn
|
||||
+ (move-to-column comment-column t)
|
||||
+ (insert (match-string 2 line))
|
||||
+ ;; insert a newline such that paredit's M-) can mode
|
||||
+ ;; the closing parentheses to the next line.
|
||||
+ (newline-and-indent)))
|
||||
+ (progn
|
||||
+ (indent-to comment-column)
|
||||
+ (insert (match-string 2 line)))))
|
||||
(insert line)))
|
||||
- (if constants-indent-code
|
||||
- (newline-and-indent)
|
||||
- (newline))))))
|
||||
-
|
||||
+ (unless (and (constants-is-lisp-like mode) (null clist))
|
||||
+ (if constants-indent-code
|
||||
+ (newline-and-indent)
|
||||
+ (newline)))))))
|
||||
;;;###autoload
|
||||
(defun constants-get (&optional const message)
|
||||
"Return the value of CONST as defined in the constants package.
|
Loading…
Reference in a new issue