This package provides a set of extensions to transient and interactive menus to common UNIX tools and applications.
transient-extras
provides a set of extensions to transient to make
writing the provided menus easier. It includes the following extensions
This provides a pre-defined argument usable in a transient. It
contains either the current buffer, the filename for the current
buffer, or the names of the files currently marked in dired
.
This class allows the definition of command line switches with options
to be quickly cycled through. This is similar to the default
transient-switches
, but allows value/label pairs to be used instead,
for example:
(transient-define-argument transient-extras-lp--orientation ()
:description "Print Orientation"
:class 'transient-extras-exclusive-switch
:key "o"
:argument-format "-oorientation-requested=%s"
:argument-regexp "\\(-oorientation-requested=\\(4\\|5\\|6\\)\\)"
:choices '(("4" . "90°(landscape)")
("5" . "-90°")
("6" . "180°")))
This class allows the values of an option to be determined dynamically
through the use of a choices-function
. This is useful for programs
for which option arguments are configurable externally to Emacs. For
example:
(transient-define-argument transient-extras-a2ps-printer ()
:class 'transient-extras-option-dynamic-choices
:description "Printer"
:key "P"
:argument "-P"
:choices-function (transient-extras-make-command-filter-function
"a2ps" '("--list=printers")
(lambda (line)
(when (and (string-match-p "^-" line)
(not (string-match-p "Default" line))
(not (string-match-p "Unknown" line)))
(substring line 2))))
:prompt "Printer? ")
This function is used to make a function which filters the output of a command. It takes three arguments: the program name, the arguments to the command, and a function to filter each line of output. An example of use is shown above.
transient-extras-lp
provides a menu based on transient to call the CUPS
printing program lp
on the current buffer or a selected file.
transient-extras-lp
can be enabled for dired
and pdf-tools buffers as follows
(make sure that transient-extras.el
is in load-path
)
(require 'transient-extras-lp)
(with-eval-after-load 'dired
(define-key
dired-mode-map
(kbd "C-c C-p") #'transient-extras-lp-menu))
(with-eval-after-load 'pdf-tools
(define-key
pdf-misc-minor-mode-map
(kbd "C-c C-p") #'transient-extras-lp-menu))
Or simply call transient-extras-lp-menu
to print the current buffer or the selected
files in dired
. If a buffer has an associated file, the file is printed,
otherwise the buffer content is sent to lp
.
By pressing d
, you can input the name of the printer. The command lpstat
-a
is used to get a list of installed and network printers. If you have
async-completing-read, you may want to define the following advice to run the
command asynchronously.
(define-advice transient-extras-lp--read-printer
(:override (prompt initial-input history)
my/transient-extras-lp--read-printer)
(let ((preprocess-lines-fun
(lambda (x)
(mapcar
(lambda (y)
(let ((ind (string-match "[[:space:]]" y)))
(if ind
(substring y nil ind)
y)))
x))))
(async-completing-read
prompt
(apply #'acr-preprocess-lines-from-process
'lines-from-process ;; cateogry
preprocess-lines-fun
transient-extras-lp-get-printers-cmd)
nil nil initial-input history)))
transient-extras-a2ps
provides a menu to call the a2ps printing
program on the current buffer or selected file.
transient-extras-a2ps
may be enabled for dired or other buffers
using the following code (assuming transient-extras.el
is in the
load-path
):
(require 'transient-extras-a2ps)
(global-set-key (kbd "C-c C-p") #'transient-extras-a2ps)
Note that this binding will be shadowed in places where it is specifically bound in a local map.
All additional configuration and description of options may be found in the a2ps info manual.