a C implementation of Emacs Hydra package to be used in terminal.
- An implementation of Emacs 饟啔 Hydra functionality to be used in the terminal
- a terminal program that groups your commands and bind them to common key on your keyboard.
- Commands can also be grouped in a tree like structure each node in the tree has a name and key bound to it.
- It reads CSV files of
key,name,command
lines then shows Terminal UI similar to Emacs 饟啔 Hydra and prints the command to stdout.
Spacemacs for example is an emacs configuration centered around 饟啔 Hydra commands, with all user commands grouped as trees bound in a mnemonic way. for example:
- opening a file is bound to
space f f
- deleting current file is bound to
space f D
- Git status
space g s
Binding 饟啔 Hydra to space
key in your terminal means pressing space
will make your terminal behave similar to spacemacs if you executed the output with eval
. this repo has a bash script hydra-completion.bash
which achieve this binding.
hydra
doesn't execute the command by default.- The program prints the choosen command to standard output.
- What to do with this output is up to you. you can for example append it to a file. or open the browser with the output or whatever. just like
fzf
anddmenu
. - Which means you can use 饟啔 Hydra as part of your scripts to allow the user to navigate a tree of choices and get the final choice piped to another program, GNU coreutils style.
- Clone it from github to your machine
git clone git@github.com:emad-elsaid/hydra.git
cd hydra
- Build
make
- Install
sudo make install
- Export
HYDRA
variable to your.bashrc
. it should have a list of hydras files. 饟啔 Hydra example files are installed under/usr/share/hydra/hydras
. - Loading
/usr/share/hydra-completion.bash
will bindhydra
toSpace
key in your keyboard and will invokehydra
when the line is empty. - For example to use the
git
饟啔 Hydra:
export HYDRA="/usr/share/hydra/hydras/git"
source /usr/share/hydra/hydra-completion.bash
- 饟啔 Hydra files are simple CSV files that define the commands 饟啔 hydra can load.
- The file has 3 columns without header. an example is under
hydras
directory in this repo.
a simple example can be as follow
g,Git,
gs,Status,git status
- It defines
Git
command that doesn't execute a command under the keyg
- and defines a command named
Status
under keys
insideg
that will execute the commandgit status
- You can run
hydra
binary with a list of 饟啔 hydra files - 饟啔 Hydra will load the files in the order passed.
- it will display the list of top level commands
- When the program reaches a choosen command that doesn't have children it will print the command to standard output
hydra hydras/git hydras/systemd hydras/github
To run tests execute
make run-test