Skip to content

Latest commit

History

History
85 lines (63 loc) 路 3.2 KB

README.md

File metadata and controls

85 lines (63 loc) 路 3.2 KB

饟啔 Hydra

a C implementation of Emacs Hydra package to be used in terminal.

asciicast

What is 饟啔 Hydra?

  • 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.

Other usages

  • 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 and dmenu.
  • 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.

Install

  • 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 bind hydra to Space key in your keyboard and will invoke hydra 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 file

  • 饟啔 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 key g
  • and defines a command named Status under key s inside g that will execute the command git status

Running

  • 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

Tests

To run tests execute

make run-test