all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
blob d28d5efb88247ea6fd5a72e129ddca5c2fd58b02 3317 bytes (raw)
name: emacs/guix-location.el 	 # note: path name is non-authoritative(*)

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
 
;;; guix-location.el --- Package locations

;; Copyright © 2016 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 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 <http://www.gnu.org/locations/>.

;;; 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)))

\f
;;; Interactive commands

;;;###autoload
(defun guix-find-location (location &optional directory)
  "Go to LOCATION of a package.
LOCATION is a string of the form:

  \"FILE:LINE:COLUMN\"

If FILE is relative, it is considered to be relative to
DIRECTORY (`guix-directory' by default).

Interactively, prompt for LOCATION.  With prefix argument, prompt
for DIRECTORY as well."
  (interactive
   (list (guix-read-package-location)
         (guix-read-directory)))
  (cl-multiple-value-bind (file line column)
      (split-string location ":")
    (find-file (expand-file-name file (or directory guix-directory)))
    (when (and line column)
      (let ((line   (string-to-number line))
            (column (string-to-number column)))
        (goto-char (point-min))
        (forward-line (- line 1))
        (move-to-column column)
        (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

debug log:

solving d28d5ef ...
found d28d5ef in https://yhetil.org/guix/1459799266-7426-4-git-send-email-alezost@gmail.com/
found c6f9b86 in https://yhetil.org/guix/1459799266-7426-3-git-send-email-alezost@gmail.com/

applying [1/2] https://yhetil.org/guix/1459799266-7426-3-git-send-email-alezost@gmail.com/
diff --git a/emacs/guix-location.el b/emacs/guix-location.el
new file mode 100644
index 0000000..c6f9b86


applying [2/2] https://yhetil.org/guix/1459799266-7426-4-git-send-email-alezost@gmail.com/
diff --git a/emacs/guix-location.el b/emacs/guix-location.el
index c6f9b86..d28d5ef 100644

Checking patch emacs/guix-location.el...
Applied patch emacs/guix-location.el cleanly.
Checking patch emacs/guix-location.el...
Applied patch emacs/guix-location.el cleanly.

index at:
100644 d28d5efb88247ea6fd5a72e129ddca5c2fd58b02	emacs/guix-location.el

(*) Git path names are given by the tree(s) the blob belongs to.
    Blobs themselves have no identifier aside from the hash of its contents.^

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.