Clone this repository:
git clone https://github.com/johncoder/cantrip
Then, add this to your emacs configuration:
(load-file "~/path/to/cantrip/cantrip.el")
By default, it binds to C-x a r
, and looks for package.json
or scripts.json
in the dominating directory that contains a .git
folder.
A scripts file looks something like this:
{
"scripts": {
"two": "pwd",
"foo": "ls -la",
"foo:bar": "git status",
"foo:baz": "date",
"foo:bar:qaz": "cat scripts.json | grep \"git\""
}
}
Cantrip uses a :
delimited convention for chaining transient prefixes. It will automatically select an alias for segments using the unique letters of the label, or overflow to another option when necessary. When you execute one of the scripts, it uses compile
to run the respective script as a compilation command within the git repository.
Cantrip now keeps a list of the most recent commands you've run in the current git repository. C-u C-x a r
or M-x cantrip-rerun
will prompt you to choose from the recent commands.
You can use cantrip-define-prefix
to build a prefix manually so that you can make one globally available. Example:
(global-set-key (kbd "C-x a g")
(cantrip-define-prefix "~/.cantrip.json"
"my-cantrip"))
You can change how cantrip dispatches commands! For example, you can change it to send commands directly to your open *ansi-term*
buffer.
(setq cantrip-dispatch-command
#'(lambda (command)
(switch-to-buffer-other-window "*ansi-term*")
(comint-send-string "*ansi-term*" (concat command "\n"))))
You can alter a command before it is dispatched. For example, if you'd like to run the command using npm
or yarn
:
(setq cantrip-transform-command
#'(lambda (key command args)
(if (eq default-directory (locate-dominating-file default-directory "yarn.lock"))
(format "yarn run %s %s" key args)
(concat command " " args))))