hoard icon indicating copy to clipboard operation
hoard copied to clipboard

GUI new command from history

Open Hyde46 opened this issue 2 years ago • 3 comments

based on the used shell, let users add new commands from the shell history

Hyde46 avatar Oct 22 '22 21:10 Hyde46

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

tuxflo avatar Jan 03 '23 20:01 tuxflo

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

Hyde46 avatar Jan 05 '23 11:01 Hyde46

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) image

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
}

tuxflo avatar Jan 08 '23 17:01 tuxflo