summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/test.yml6
-rw-r--r--Makefile2
-rw-r--r--NEWS4
-rw-r--r--README7
-rw-r--r--snakemake-mode.el2
-rw-r--r--snakemake.el90
6 files changed, 64 insertions, 47 deletions
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 6772f36..a6d0ef2 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -19,11 +19,11 @@ jobs:
with:
repository: magnars/dash.el
path: dash.el
- - name: Check out magit-popup
+ - name: Check out transient
uses: actions/checkout@v2
with:
- repository: magit/magit-popup
- path: magit-popup
+ repository: magit/transient
+ path: transient
- name: Check out snakemake-mode
uses: actions/checkout@v2
with:
diff --git a/Makefile b/Makefile
index d93192a..8dd1437 100644
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,5 @@
-LOAD_PATH = -L ../magit-popup -L ../dash.el -L .
+LOAD_PATH = -L ../transient/lisp -L ../dash.el -L .
EMACS = emacs
BATCH = $(EMACS) -Q --batch $(LOAD_PATH)
CURL := curl --silent
diff --git a/NEWS b/NEWS
index 2674114..73e2e20 100644
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,10 @@ NEWS -- history of user-visible changes -*- mode: org; -*-
* master (unreleased)
+- The Magit Popup command ~snakemake-popup~ has been rewritten as a
+ transient, ~snakemake~. snakemake.el now depends on Transient
+ rather than Magit Popup.
+
- The 'name' keyword (new in Snakemake v5.31.0) is now recognized.
* v1.8.0
diff --git a/README b/README
index 56b368d..556bdc2 100644
--- a/README
+++ b/README
@@ -7,7 +7,7 @@ This repo contains two Emacs libraries for Snakemake [^1].
* snakemake-mode.el provides a major mode for editing Snakemake
files.
- * snakemake.el defines a popup interface for calling Snakemake.
+ * snakemake.el defines a transient [^2] for calling Snakemake.
See the header of each file for more information.
@@ -16,6 +16,7 @@ Both of these are available on MELPA under the snakemake-mode package:
https://melpa.org/#/snakemake-mode
[^1]: https://snakemake.readthedocs.io/en/stable/
+[^2]: https://magit.vc/manual/transient/
Contributing
@@ -27,8 +28,8 @@ Please send a plain-text email to
snakemake-mode@inbox.kyleam.com
Messages that include this address are public and available as
-public-inbox [^2] archives at
+public-inbox [^3] archives at
https://inbox.kyleam.com/snakemake-mode/
-[^2]: https://public-inbox.org/README
+[^3]: https://public-inbox.org/README
diff --git a/snakemake-mode.el b/snakemake-mode.el
index 5e4118b..dcf2bf0 100644
--- a/snakemake-mode.el
+++ b/snakemake-mode.el
@@ -6,7 +6,7 @@
;; URL: https://git.kyleam.com/snakemake-mode/about
;; Keywords: tools
;; Version: 1.8.0
-;; Package-Requires: ((emacs "24.5") (cl-lib "0.5") (magit-popup "2.4.0"))
+;; Package-Requires: ((emacs "24.5") (cl-lib "0.5") (transient "0.3.0"))
;; This program is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
diff --git a/snakemake.el b/snakemake.el
index e533def..61f6cbb 100644
--- a/snakemake.el
+++ b/snakemake.el
@@ -20,14 +20,13 @@
;;; Commentary:
-;; This package provides a popup interface, built on Magit's popup
-;; library [1], for calling Snakemake [2]. The main entry point is
-;; `snakemake-popup', which you should consider giving a global key
-;; binding.
+;; This package provides a Transient interface [1] for calling
+;; Snakemake [2]. The main entry point is the `snakemake' command,
+;; which you should consider giving a global key binding.
;;
-;; The popup currently includes four actions, all which lead to a
-;; Snakemake call. What's different between the actions is how
-;; targets are selected.
+;; The `snakemake' transient currently includes four actions, all
+;; which lead to a Snakemake call. What's different between the
+;; actions is how targets are selected.
;;
;; snakemake-build-targets-at-point
;;
@@ -78,13 +77,13 @@
;; terminal can be created with `snakemake-term-start', in which case
;; commands are sent there instead.
;;
-;; In addition to the popup commands, there are commands for showing
-;; and saving the dependency graph of a target. The command
-;; `snakemake-graph' displays the graph in a buffer. From this
-;; buffer, `snakemake-graph-save' can be called to save the graph to
-;; an output file.
+;; In addition to the commands in the transient, there are commands
+;; for showing and saving the dependency graph of a target. The
+;; command `snakemake-graph' displays the graph in a buffer. From
+;; this buffer, `snakemake-graph-save' can be called to save the graph
+;; to an output file.
;;
-;; [1] https://magit.vc/manual/magit-popup.html
+;; [1] https://magit.vc/manual/transient/
;; [2] https://snakemake.github.io/
;;; Code:
@@ -92,7 +91,7 @@
(require 'cl-lib)
(require 'compile)
(require 'term)
-(require 'magit-popup)
+(require 'transient)
(require 'snakemake-mode)
@@ -672,7 +671,7 @@ send the command there. Otherwise, run the command with
"Build target(s) at point without any prompts.
$ snakemake [ARGS] -- <targets>"
- (interactive (list (snakemake-arguments)))
+ (interactive (list (transient-args 'snakemake)))
(snakemake-build-targets
(or (snakemake-file-targets-at-point 'check)
(snakemake-rule-at-point 'target)
@@ -684,7 +683,7 @@ $ snakemake [ARGS] -- <targets>"
"Build target file.
$ snakemake [ARGS] -- <file>"
- (interactive (list (snakemake-arguments)))
+ (interactive (list (transient-args 'snakemake)))
(snakemake-build-targets
(list (snakemake-read-file-target))
args))
@@ -694,7 +693,7 @@ $ snakemake [ARGS] -- <file>"
"Build target rule, prompting with known rules.
$ snakemake [ARGS] -- <rule>"
- (interactive (list (snakemake-arguments)))
+ (interactive (list (transient-args 'snakemake)))
(snakemake-build-targets
(list (snakemake-read-rule 'targets))
args))
@@ -711,7 +710,7 @@ To start a terminal for the current Snakefile directory, run
`\\[snakemake-term-start]'.
$ snakemake [ARGS] -- <targets>"
- (interactive (list (snakemake-arguments)))
+ (interactive (list (transient-args 'snakemake)))
(let ((cmd (snakemake--make-command
(or (snakemake-file-targets-at-point)
(snakemake-rule-at-point)
@@ -727,27 +726,40 @@ $ snakemake [ARGS] -- <targets>"
(define-obsolete-function-alias 'snakemake-compile 'snakemake-build "1.2.0")
-;;;###autoload (autoload 'snakemake-popup "snakemake" nil t)
-(magit-define-popup snakemake-popup
- "Popup console for running Snakemake."
- :switches
- '((?c "Use conda" "--use-conda")
- (?f "Force" "--force")
- (?i "Ignore temp()" "--notemp")
- (?n "Dry run" "--dryrun")
- (?p "Print shell commands" "-p")
- (?r "Print reason" "--reason")
- (?t "Touch files" "--touch"))
- :options
- '((?a "Allowed rules" "--allowed-rules " snakemake-read-rules)
- (?j "Number of jobs" "-j"))
- :actions
- '((?c "Edit and run command" snakemake-build) nil nil
- (?p "Build target at point" snakemake-build-targets-at-point)
- (?f "Build file" snakemake-build-file-target)
- (?r "Build rule" snakemake-build-rule-target))
- :default-action 'snakemake-compile
- :max-action-columns 3)
+(transient-define-argument snakemake:--allowed-rules ()
+ :description "Allowed rules"
+ :class 'transient-option
+ :key "-a"
+ :argument "--allowed-rules="
+ :reader 'snakemake-read-rules)
+
+(transient-define-argument snakemake:--jobs ()
+ :description "Number of jobs"
+ :class 'transient-option
+ :key "-j"
+ :argument "--jobs=")
+
+;;;###autoload (autoload 'snakemake "snakemake" nil t)
+(transient-define-prefix snakemake
+ "Transient for running Snakemake."
+ ["Arguments"
+ ("-c" "Use conda" "--use-conda")
+ ("-f" "Force" "--force")
+ ("-i" "Ignore temp()" "--notemp")
+ ("-n" "Dry run" "--dryrun")
+ ("-p" "Print shell commands" "-p")
+ ("-r" "Print reason" "--reason")
+ ("-t" "Touch files" "--touch")
+ (snakemake:--allowed-rules)
+ (snakemake:--jobs)]
+ ["Actions"
+ [("c" "Edit and run command" snakemake-build)]
+ [("p" "Build target at point" snakemake-build-targets-at-point)
+ ("f" "Build file" snakemake-build-file-target)
+ ("r" "Build rule" snakemake-build-rule-target)]])
+
+;;;###autoload
+(define-obsolete-function-alias 'snakemake-popup 'snakemake "2.0.0")
(provide 'snakemake)
;;; snakemake.el ends here