hoard
hoard copied to clipboard
GUI new command from history
based on the used shell, let users add new commands from the shell history
That would be a great feature. I was wondering if I could already implement this on my own when using the fzf command for the shell history. For me the perfect workflow would look like this:
- hit
Ctrl+R
to start the fzf command histroy - do a fuzzy search and select the correct entry
- hit a (configurable) shortcut like
Ctrl+H
- command is automatically sent to hoard and the hoard asks for additional stuff (like description and so on)
- done
Would be a nice way to have a fast integration with fzf or similar shell history explorer!
We could add a section in the readme here, how to create a binding like this.
The result of that can be used with hoard new --name $RESULT
to start the process of adding a new command.
Potentially, a more long term feature to target would be an integrated shell history explorer inside of hoard
I found some time on the weekend to play around with fzf and the history widget.
To enable the feature as described above one can add the following part to the default fzf-history-widget()
function in the zsh config:
--bind=\"ctrl-h:execute@cmd=\$(echo {} | cut -c 8-) && hoard new --command \${cmd} @+abort\"
This runs the command hoard new --command
with the result that was selected by fzf.
However I'm not happy with the echo {} | cut
part yet, as this seems a little hacky to me. It is used to cut off the number of the history output (see screenshot below)
The entire new fzf-history-widget()
function (which comes by default if you're installing fzf and the zsh completitions) looks like this:
fzf-history-widget() {
local selected num
setopt localoptions noglobsubst noposixbuiltins pipefail no_aliases 2> /dev/null
selected=( $(fc -rl 1 | awk '{ cmd=$0; sub(/^[ \t]*[0-9]+\**[ \t]+/, "", cmd); if (!seen[cmd]++) print $0 }' |
FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} ${FZF_DEFAULT_OPTS-} -n2..,.. --scheme=history --bind=ctrl-r:toggle-sort,ctrl-z:ignore --bind=\"ctrl-h:execute@cmd=\$(echo {} | cut -c 8-) && hoard new --command \${cmd} @+abort\" ${FZF_CTRL_R_OPTS-} --query=${(qqq)LBUFFER} +m" $(__fzfcmd)) )
local ret=$?
if [ -n "$selected" ]; then
num=$selected[1]
if [ -n "$num" ]; then
zle vi-fetch-history -n $num
fi
fi
zle reset-prompt
return $ret
}