From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex Kost Subject: [PATCH 2/6] emacs: Separate package location code. Date: Mon, 4 Apr 2016 22:47:42 +0300 Message-ID: <1459799266-7426-3-git-send-email-alezost@gmail.com> References: <1459799266-7426-1-git-send-email-alezost@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:51032) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1anATr-00039U-Tj for guix-devel@gnu.org; Mon, 04 Apr 2016 15:48:13 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1anATq-0000Kz-9R for guix-devel@gnu.org; Mon, 04 Apr 2016 15:48:11 -0400 Received: from mail-lb0-x241.google.com ([2a00:1450:4010:c04::241]:35850) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1anATp-0000Kn-Tx for guix-devel@gnu.org; Mon, 04 Apr 2016 15:48:10 -0400 Received: by mail-lb0-x241.google.com with SMTP id q4so24548866lbq.3 for ; Mon, 04 Apr 2016 12:48:09 -0700 (PDT) Received: from localhost.localdomain ([217.107.192.146]) by smtp.gmail.com with ESMTPSA id e141sm5130223lfe.18.2016.04.04.12.48.08 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 04 Apr 2016 12:48:08 -0700 (PDT) In-Reply-To: <1459799266-7426-1-git-send-email-alezost@gmail.com> List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org Sender: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org To: guix-devel@gnu.org * emacs/guix-base.el (guix-directory, guix-read-directory) (guix-set-directory, guix-find-location, guix-package-location) (guix-edit): Move to... * emacs/guix-location.el: ... here. New file. * emacs/guix-ui-package.el: Use it. * emacs.am (ELFILES): Add it. --- emacs.am | 1 + emacs/guix-base.el | 62 +------------------------------- emacs/guix-location.el | 94 ++++++++++++++++++++++++++++++++++++++++++++++++ emacs/guix-ui-package.el | 1 + 4 files changed, 97 insertions(+), 61 deletions(-) create mode 100644 emacs/guix-location.el diff --git a/emacs.am b/emacs.am index 1897e2e..c0d294d 100644 --- a/emacs.am +++ b/emacs.am @@ -40,6 +40,7 @@ ELFILES = \ emacs/guix-init.el \ emacs/guix-license.el \ emacs/guix-list.el \ + emacs/guix-location.el \ emacs/guix-messages.el \ emacs/guix-pcomplete.el \ emacs/guix-popup.el \ diff --git a/emacs/guix-base.el b/emacs/guix-base.el index 75d19cb..8888364 100644 --- a/emacs/guix-base.el +++ b/emacs/guix-base.el @@ -48,53 +48,7 @@ (when output (concat ":" output)))) -;;; Location of packages, profiles and manifests - -(defvar guix-directory nil - "Default Guix directory. -If it is not set by a user, it is set after starting Guile REPL. -This directory is used to define location of the packages.") - -(defun guix-read-directory () - "Return `guix-directory' or prompt for it. -This function is intended for using in `interactive' forms." - (if current-prefix-arg - (read-directory-name "Directory with Guix modules: " - guix-directory) - guix-directory)) - -(defun guix-set-directory () - "Set `guix-directory' if needed." - (or guix-directory - (setq guix-directory - (guix-eval-read "%guix-dir")))) - -(add-hook 'guix-after-start-repl-hook 'guix-set-directory) - -(defun guix-find-location (location &optional directory) - "Go to LOCATION of a package. -LOCATION is a string of the form: - - \"PATH:LINE:COLUMN\" - -If PATH is relative, it is considered to be relative to -DIRECTORY (`guix-directory' by default)." - (cl-multiple-value-bind (path line col) - (split-string location ":") - (let ((file (expand-file-name path (or directory guix-directory))) - (line (string-to-number line)) - (col (string-to-number col))) - (find-file file) - (goto-char (point-min)) - (forward-line (- line 1)) - (move-to-column col) - (recenter 1)))) - -(defun guix-package-location (id-or-name) - "Return location of a package with ID-OR-NAME. -For the meaning of location, see `guix-find-location'." - (guix-eval-read (guix-make-guile-expression - 'package-location-string id-or-name))) +;;; Location of profiles and manifests (defun guix-generation-file (profile generation) "Return the file name of a PROFILE's GENERATION." @@ -120,20 +74,6 @@ See `guix-packages-profile'." (expand-file-name "manifest" (guix-packages-profile profile generation system?))) -;;;###autoload -(defun guix-edit (id-or-name &optional directory) - "Edit (go to location of) package with ID-OR-NAME. -See `guix-find-location' for the meaning of package location and -DIRECTORY. -Interactively, with prefix argument, prompt for DIRECTORY." - (interactive - (list (guix-read-package-name) - (guix-read-directory))) - (let ((loc (guix-package-location id-or-name))) - (if loc - (guix-find-location loc directory) - (message "Couldn't find package location.")))) - ;;; Actions on packages and generations diff --git a/emacs/guix-location.el b/emacs/guix-location.el new file mode 100644 index 0000000..c6f9b86 --- /dev/null +++ b/emacs/guix-location.el @@ -0,0 +1,94 @@ +;;; guix-location.el --- Package locations + +;; Copyright © 2016 Alex Kost + +;; 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 Location as published by +;; the Free Software Foundation, either version 3 of the Location, 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 Location for more details. + +;; You should have received a copy of the GNU General Public Location +;; along with this program. If not, see . + +;;; Commentary: + +;; This file provides the code to work with locations of Guix packages. + +;;; Code: + +(require 'guix-backend) +(require 'guix-read) +(require 'guix-guile) + +(defvar guix-directory nil + "Default Guix directory. +If it is not set by a user, it is set after starting Guile REPL. +This directory is used to define location of the packages.") + +(defun guix-read-directory () + "Return `guix-directory' or prompt for it. +This function is intended for using in `interactive' forms." + (if current-prefix-arg + (read-directory-name "Directory with Guix modules: " + guix-directory) + guix-directory)) + +;;;###autoload +(defun guix-set-directory () + "Set `guix-directory' if needed." + (or guix-directory + (setq guix-directory + (guix-eval-read "%guix-dir")))) + +;;;###autoload +(add-hook 'guix-after-start-repl-hook 'guix-set-directory) + +(defun guix-package-location (id-or-name) + "Return location of a package with ID-OR-NAME. +For the meaning of location, see `guix-find-location'." + (guix-eval-read (guix-make-guile-expression + 'package-location-string id-or-name))) + +(defun guix-find-location (location &optional directory) + "Go to LOCATION of a package. +LOCATION is a string of the form: + + \"PATH:LINE:COLUMN\" + +If PATH is relative, it is considered to be relative to +DIRECTORY (`guix-directory' by default)." + (cl-multiple-value-bind (path line col) + (split-string location ":") + (let ((file (expand-file-name path (or directory guix-directory))) + (line (string-to-number line)) + (col (string-to-number col))) + (find-file file) + (goto-char (point-min)) + (forward-line (- line 1)) + (move-to-column col) + (recenter 1)))) + +;;;###autoload +(defun guix-edit (id-or-name &optional directory) + "Edit (go to location of) package with ID-OR-NAME. +See `guix-find-location' for the meaning of package location and +DIRECTORY. +Interactively, with prefix argument, prompt for DIRECTORY." + (interactive + (list (guix-read-package-name) + (guix-read-directory))) + (let ((loc (guix-package-location id-or-name))) + (if loc + (guix-find-location loc directory) + (message "Couldn't find package location.")))) + +(provide 'guix-location) + +;;; guix-location.el ends here diff --git a/emacs/guix-ui-package.el b/emacs/guix-ui-package.el index ecabae1..aba30ab 100644 --- a/emacs/guix-ui-package.el +++ b/emacs/guix-ui-package.el @@ -38,6 +38,7 @@ (require 'guix-hydra-build) (require 'guix-read) (require 'guix-license) +(require 'guix-location) (require 'guix-profiles) (guix-ui-define-entry-type package) -- 2.7.3