edit: Extract 'spawn-editor' procedure.

* guix/scripts/edit.scm (spawn-editor): New procedure, with code from...
(guix-edit): ... here.  Use it.
This commit is contained in:
Ludovic Courtès 2022-06-01 16:08:20 +02:00
parent 104b4e25ab
commit f9fb00ff08
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5

View file

@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU ;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2015, 2016, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2015-2016, 2019-2022 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2015 Mathieu Lirzin <mthl@gnu.org> ;;; Copyright © 2015 Mathieu Lirzin <mthl@gnu.org>
;;; Copyright © 2020, 2021 Simon Tournier <zimon.toutoune@gmail.com> ;;; Copyright © 2020, 2021 Simon Tournier <zimon.toutoune@gmail.com>
;;; ;;;
@ -27,6 +27,7 @@ (define-module (guix scripts edit)
#:use-module (srfi srfi-1) #:use-module (srfi srfi-1)
#:use-module (srfi srfi-37) #:use-module (srfi srfi-37)
#:export (%editor #:export (%editor
spawn-editor
guix-edit)) guix-edit))
(define %options (define %options
@ -77,6 +78,21 @@ (define (location->location-specification location)
(location-line location))) (location-line location)))
(search-path* %load-path (location-file location)))) (search-path* %load-path (location-file location))))
(define (spawn-editor locations)
"Spawn (%editor) to edit the code at LOCATIONS, a list of <location>
records, and exit."
(catch 'system-error
(lambda ()
(let ((file-names (append-map location->location-specification
locations)))
;; Use `system' instead of `exec' in order to sanely handle
;; possible command line arguments in %EDITOR.
(exit (system (string-join (cons (%editor) file-names))))))
(lambda args
(let ((errno (system-error-errno args)))
(leave (G_ "failed to launch '~a': ~a~%")
(%editor) (strerror errno))))))
(define-command (guix-edit . args) (define-command (guix-edit . args)
(category packaging) (category packaging)
@ -94,14 +110,4 @@ (define (parse-arguments)
(when (null? specs) (when (null? specs)
(leave (G_ "no packages specified, nothing to edit~%"))) (leave (G_ "no packages specified, nothing to edit~%")))
(catch 'system-error (spawn-editor locations))))
(lambda ()
(let ((file-names (append-map location->location-specification
locations)))
;; Use `system' instead of `exec' in order to sanely handle
;; possible command line arguments in %EDITOR.
(exit (system (string-join (cons (%editor) file-names))))))
(lambda args
(let ((errno (system-error-errno args)))
(leave (G_ "failed to launch '~a': ~a~%")
(%editor) (strerror errno))))))))