diff options
author | Ludovic Courtès <ludo@gnu.org> | 2016-06-07 11:54:03 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2016-06-07 11:54:03 +0200 |
commit | aeafff536f933b07836b14d089dfc52b0e432ec9 (patch) | |
tree | 4ede554999f98cf9e19c04098c934db52efae795 /emacs/guix-utils.el | |
parent | 9dee9e8ffe4650949bd3ad2edf559cf4a33e9e6e (diff) | |
parent | f82c58539e1f7b9b864e68ea2ab0c6a17c15fbb5 (diff) | |
download | guix-aeafff536f933b07836b14d089dfc52b0e432ec9.tar guix-aeafff536f933b07836b14d089dfc52b0e432ec9.tar.gz |
Merge branch 'master' into core-updates
Diffstat (limited to 'emacs/guix-utils.el')
-rw-r--r-- | emacs/guix-utils.el | 33 |
1 files changed, 25 insertions, 8 deletions
diff --git a/emacs/guix-utils.el b/emacs/guix-utils.el index ea9933f5c3..3e4ecc36ab 100644 --- a/emacs/guix-utils.el +++ b/emacs/guix-utils.el @@ -84,16 +84,33 @@ If FORMAT is non-nil, format VAL with FORMAT." (format format str) str)))) -(defun guix-mapinsert (function sequence separator) +(cl-defun guix-mapinsert (function sequence separator &key indent column) "Like `mapconcat' but for inserting text. Apply FUNCTION to each element of SEQUENCE, and insert SEPARATOR -at point between each FUNCTION call." - (when sequence - (funcall function (car sequence)) - (mapc (lambda (obj) - (insert separator) - (funcall function obj)) - (cdr sequence)))) +at point between each FUNCTION call. + +If INDENT is non-nil, it should be a number of spaces used to +indent each line of the inserted text. + +If COLUMN is non-nil, it should be a column number which +shouldn't be exceeded by the inserted text." + (pcase sequence + (`(,first . ,rest) + (let* ((indent (or indent 0)) + (max-column (and column (- column indent)))) + (guix-with-indent indent + (funcall function first) + (dolist (element rest) + (let ((before-sep-pos (and column (point)))) + (insert separator) + (let ((after-sep-pos (and column (point)))) + (funcall function element) + (when (and column + (> (current-column) max-column)) + (save-excursion + (delete-region before-sep-pos after-sep-pos) + (goto-char before-sep-pos) + (insert "\n"))))))))))) (defun guix-insert-button (label &optional type &rest properties) "Make button of TYPE with LABEL and insert it at point. |