[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
04/10: gnu: Add emacs-constants.
From: |
Federico Beffa |
Subject: |
04/10: gnu: Add emacs-constants. |
Date: |
Wed, 03 Feb 2016 09:50:35 +0000 |
beffa pushed a commit to branch master
in repository guix.
commit e5045f303a0214c2e436c128ce3d6c59cf276f2a
Author: Federico Beffa <address@hidden>
Date: Sat Dec 26 11:02:01 2015 +0100
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.
---
gnu-system.am | 1 +
gnu/packages/emacs.scm | 41 ++++++++++
.../patches/emacs-constants-lisp-like.patch | 81 ++++++++++++++++++++
3 files changed, 123 insertions(+), 0 deletions(-)
diff --git a/gnu-system.am b/gnu-system.am
index 7b22138..d282be3 100644
--- a/gnu-system.am
+++ b/gnu-system.am
@@ -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 \
diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm
index 852945c..50419c0 100644
--- a/gnu/packages/emacs.scm
+++ b/gnu/packages/emacs.scm
@@ -26,6 +26,9 @@
#: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 @@ to a key in your preferred mode.")
"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+)))
diff --git a/gnu/packages/patches/emacs-constants-lisp-like.patch
b/gnu/packages/patches/emacs-constants-lisp-like.patch
new file mode 100644
index 0000000..5ec37f3
--- /dev/null
+++ b/gnu/packages/patches/emacs-constants-lisp-like.patch
@@ -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.
- branch master updated (fd9a5b0 -> 3a6a0f6), Federico Beffa, 2016/02/03
- 02/10: gnu: scmutils: Generate 'scmutils-autoloads.el' file., Federico Beffa, 2016/02/03
- 01/10: gnu: Add emacs-scheme-complete., Federico Beffa, 2016/02/03
- 03/10: gnu: Add emacs-mit-scheme-doc., Federico Beffa, 2016/02/03
- 05/10: gnu: mit-scheme: Convert to the 'modify-phases' syntax., Federico Beffa, 2016/02/03
- 06/10: gnu: mit-scheme: Generate and install documentation., Federico Beffa, 2016/02/03
- 04/10: gnu: Add emacs-constants.,
Federico Beffa <=
- 07/10: gnu: Add emacs-slime., Federico Beffa, 2016/02/03
- 10/10: gnu: Add Italian Aspell dictionary., Federico Beffa, 2016/02/03
- 08/10: gnu: sbcl: Convert to the 'modify-phases' syntax., Federico Beffa, 2016/02/03
- 09/10: gnu: sbcl: Generate and install documentation., Federico Beffa, 2016/02/03