~ruther/guix-local

c74cd6cc12b495a8f4142bffbfe5634090f050f4 — Alex Kost 10 years ago ee1c4cb
emacs: Move guile related code to "guix-guile.el".

* emacs/guix-backend.el (guix-make-guile-expression): Move to...
* emacs/guix-guile.el: ... here.  New file.
* emacs/guix-base.el: Use it.
* emacs/guix-command.el: Use it.
* emacs.am (ELFILES): Add it.
5 files changed, 50 insertions(+), 18 deletions(-)

M emacs.am
M emacs/guix-backend.el
M emacs/guix-base.el
M emacs/guix-command.el
A emacs/guix-guile.el
M emacs.am => emacs.am +1 -0
@@ 25,6 25,7 @@ ELFILES =					\
  emacs/guix-command.el				\
  emacs/guix-emacs.el				\
  emacs/guix-external.el			\
  emacs/guix-guile.el				\
  emacs/guix-help-vars.el			\
  emacs/guix-history.el				\
  emacs/guix-info.el				\

M emacs/guix-backend.el => emacs/guix-backend.el +0 -18
@@ 305,24 305,6 @@ additional internal REPL if it exists."
(defvar guix-operation-buffer nil
  "Buffer from which the latest Guix operation was performed.")

(defun guix-make-guile-expression (fun &rest args)
  "Return string containing a guile expression for calling FUN with ARGS."
  (format "(%S %s)" fun
          (mapconcat
           (lambda (arg)
             (cond
              ((null arg) "'()")
              ((or (eq arg t)
                   ;; An ugly hack to separate 'false' from nil
                   (equal arg 'f)
                   (keywordp arg))
               (concat "#" (prin1-to-string arg t)))
              ((or (symbolp arg) (listp arg))
               (concat "'" (prin1-to-string arg)))
              (t (prin1-to-string arg))))
           args
           " ")))

(defun guix-eval (str &optional wrap)
  "Evaluate guile expression STR.
If WRAP is non-nil, wrap STR into (begin ...) form.

M emacs/guix-base.el => emacs/guix-base.el +1 -0
@@ 30,6 30,7 @@
(require 'cl-lib)
(require 'guix-profiles)
(require 'guix-backend)
(require 'guix-guile)
(require 'guix-utils)
(require 'guix-history)
(require 'guix-messages)

M emacs/guix-command.el => emacs/guix-command.el +1 -0
@@ 65,6 65,7 @@
(require 'guix-help-vars)
(require 'guix-read)
(require 'guix-base)
(require 'guix-guile)
(require 'guix-external)

(defgroup guix-commands nil

A emacs/guix-guile.el => emacs/guix-guile.el +47 -0
@@ 0,0 1,47 @@
;;; guix-guile.el --- Auxiliary tools for working with guile code   -*- lexical-binding: t -*-

;; Copyright © 2015 Alex Kost <alezost@gmail.com>

;; This file is part of GNU Guix.

;; GNU Guix is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.

;; GNU Guix is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;; GNU General Public License for more details.

;; You should have received a copy of the GNU General Public License
;; along with this program.  If not, see <http://www.gnu.org/licenses/>.

;;; Commentary:

;; This file provides functions for parsing guile code, making guile
;; expressions, etc.

;;; Code:

(defun guix-make-guile-expression (fun &rest args)
  "Return string containing a guile expression for calling FUN with ARGS."
  (format "(%S %s)" fun
          (mapconcat
           (lambda (arg)
             (cond
              ((null arg) "'()")
              ((or (eq arg t)
                   ;; An ugly hack to separate 'false' from nil.
                   (equal arg 'f)
                   (keywordp arg))
               (concat "#" (prin1-to-string arg t)))
              ((or (symbolp arg) (listp arg))
               (concat "'" (prin1-to-string arg)))
              (t (prin1-to-string arg))))
           args
           " ")))

(provide 'guix-guile)

;;; guix-guile.el ends here