summaryrefslogtreecommitdiff
path: root/emacs
diff options
context:
space:
mode:
authorAlex Kost <alezost@gmail.com>2016-04-02 21:07:09 +0300
committerAlex Kost <alezost@gmail.com>2016-04-15 11:32:36 +0300
commit6ea80938aedd3ec4d7f5d7fd80b7da9b1993c577 (patch)
tree5e78f9b05f177f8d660b8b4a4e87e71a2e0f77c4 /emacs
parentde946028beb4e90495c77bd08b86f75765095b42 (diff)
emacs: Factorize code for buffer names.
* emacs/guix-ui.el (guix-ui-buffer-name-default): Extract the code to compose buffer name and move to... * emacs/guix-utils.el (guix-compose-buffer-name): ... here. New procedure.
Diffstat (limited to 'emacs')
-rw-r--r--emacs/guix-ui.el22
-rw-r--r--emacs/guix-utils.el28
2 files changed, 30 insertions, 20 deletions
diff --git a/emacs/guix-ui.el b/emacs/guix-ui.el
index 9a88efc286..47773de91f 100644
--- a/emacs/guix-ui.el
+++ b/emacs/guix-ui.el
@@ -1,6 +1,6 @@
;;; guix-ui.el --- Common code for Guix package management interface -*- lexical-binding: t -*-
-;; Copyright © 2014, 2015 Alex Kost <alezost@gmail.com>
+;; Copyright © 2014, 2015, 2016 Alex Kost <alezost@gmail.com>
;; This file is part of GNU Guix.
@@ -117,26 +117,10 @@ The function is called with 2 arguments: BASE-NAME and PROFILE."
"Return BASE-NAME."
base-name)
-;; TODO separate '*...*' logic from the real profile appending. Also add
-;; another function to return '*Guix ...: /full/path/to/profile*' name.
(defun guix-ui-buffer-name-default (base-name profile)
"Return buffer name by appending BASE-NAME and PROFILE's base file name."
- (let ((profile-name (file-name-base (directory-file-name profile)))
- (re (rx string-start
- (group (? "*"))
- (group (*? any))
- (group (? "*"))
- string-end)))
- (or (string-match re base-name)
- (error "Unexpected error in defining guix buffer name"))
- (let ((first* (match-string 1 base-name))
- (name-body (match-string 2 base-name))
- (last* (match-string 3 base-name)))
- ;; Handle the case when buffer name is wrapped by '*'.
- (if (and (string= "*" first*)
- (string= "*" last*))
- (concat "*" name-body ": " profile-name "*")
- (concat base-name ": " profile-name)))))
+ (guix-compose-buffer-name base-name
+ (file-name-base (directory-file-name profile))))
(defun guix-ui-buffer-name (base-name profile)
"Return Guix buffer name based on BASE-NAME and profile.
diff --git a/emacs/guix-utils.el b/emacs/guix-utils.el
index 8c1a5b42de..ea9933f5c3 100644
--- a/emacs/guix-utils.el
+++ b/emacs/guix-utils.el
@@ -1,6 +1,6 @@
;;; guix-utils.el --- General utility functions -*- lexical-binding: t -*-
-;; Copyright © 2014, 2015 Alex Kost <alezost@gmail.com>
+;; Copyright © 2014, 2015, 2016 Alex Kost <alezost@gmail.com>
;; This file is part of GNU Guix.
@@ -223,6 +223,32 @@ If NO-MESSAGE? is non-nil, do not display a message about it."
See also `guix-copy-as-kill'."
(guix-copy-as-kill (guix-command-string args) no-message?))
+(defun guix-compose-buffer-name (base-name postfix)
+ "Return buffer name by appending BASE-NAME and POSTFIX.
+
+In a simple case the result is:
+
+ BASE-NAME: POSTFIX
+
+If BASE-NAME is wrapped by '*', then the result is:
+
+ *BASE-NAME: POSTFIX*"
+ (let ((re (rx string-start
+ (group (? "*"))
+ (group (*? any))
+ (group (? "*"))
+ string-end)))
+ (or (string-match re base-name)
+ (error "Unexpected error in defining buffer name"))
+ (let ((first* (match-string 1 base-name))
+ (name-body (match-string 2 base-name))
+ (last* (match-string 3 base-name)))
+ ;; Handle the case when buffer name is wrapped by '*'.
+ (if (and (string= "*" first*)
+ (string= "*" last*))
+ (concat "*" name-body ": " postfix "*")
+ (concat base-name ": " postfix)))))
+
(defun guix-completing-read (prompt table &optional predicate
require-match initial-input
hist def inherit-input-method)