commit fc4fea27210bc0d85b74f40866e12890e3788134 Author: Jorge Morante Date: Sun Apr 24 01:36:09 2016 +0200 first commit, proof of concepting diff --git a/scripts/fingers.sh b/scripts/fingers.sh new file mode 100755 index 0000000..b7cbea4 --- /dev/null +++ b/scripts/fingers.sh @@ -0,0 +1,72 @@ +#!/bin/bash + +ALPHABET=asdfqwertjkluiop +ALPHABET_SIZE=${#ALPHABET} +HINTS=(aa as ad af aq aw ae ar at aj ak al au ai ao ap sa ss sd sf sq sw se sr st sj sk sl su si so sp da ds dd df dq dw de dr dt dj dk dl du di do dp fa fs fd ff fq fw fe fr ft fj fk fl fu fi fo fp qa qs qd qf qq qw qe qr qt qj qk ql qu qi qo qp wa ws wd wf wq ww we wr wt wj e r t j k l u i o p) + +function ceiling() { + local digits=$1 + + if [[ ! $digits =~ ^[1-9]\.0+$ ]]; then + digits=`echo "$digits + 1" | bc` + fi + + echo $digits | grep -o ^[0-9] +} + +function digits_needed() { + ceiling `echo "l($1) / l(16)" | bc -l` +} + +function translate() { + echo $1 | tr -s 0123456789abcdef $ALPHABET +} + +function to_hex() { + echo "obase=16; $1" | bc | tr A-F a-f +} + +function get_hint() { + echo ${HINTS[$1]} +} + +function fancy() { + printf "\033[1;33m$1\033[0m" +} + +lines='' +while read -r line +do + lines+="$line\n" +done < "${1:-/dev/stdin}" + +matches=`echo -e $lines | (grep -oniE "([0-9a-f]{7,40})" 2> /dev/null) | sort -u` +match_count=`echo "$matches" | wc -l` + +output="$lines" +i=0 + +match_lookup='' +for match in $matches ; do + hint=`get_hint $i` + linenumber=`echo $match | cut -f1 -d:` + text=`echo $match | cut -f2 -d:` + output=`echo -e "$output" | sed -e "${linenumber}s/$text/$(fancy $text) $(fancy "[$hint]")/g"` + match_lookup="$match_lookup\n$hint:$text" + i=$(($i+1)) +done + +echo -e "$output" + +input='' +while read -n 1 char +do + input="$input$char" + result=`echo -e $match_lookup | grep "^$input:" | cut -f2 -d:` + + if [[ ! -z $result ]]; then + echo $result | xclip -selection c + exit 0 + fi +done < /dev/tty > /dev/null + diff --git a/scripts/tmux-fingers.sh b/scripts/tmux-fingers.sh new file mode 100755 index 0000000..332a091 --- /dev/null +++ b/scripts/tmux-fingers.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +function pane_exec() { + local pane_id=$1 + local pane_command=$2 + + tmux send-keys -t $pane_id "$pane_command" + tmux send-keys -t $pane_id Enter +} + +function init_fingers_pane() { + local pane_id=`tmux new-window -P -d -n tmux-fingers | cut -d: -f2` + + echo $pane_id +} + +function prompt_fingers_for_pane() { + local current_pane_id=$1 + local fingers_pane_id=`init_fingers_pane` + local tmp_path=`mktemp --suffix "tmux-fingers"` + + tmux capture-pane -p -t $current_pane_id > $tmp_path + pane_exec $fingers_pane_id "cat $tmp_path | $CURRENT_DIR/fingers.sh" + + tmux swap-pane -s $current_pane_id -t $fingers_pane_id +} + +current_pane_id=`tmux list-panes | grep active | grep -oE ^[[:digit:]]+` +prompt_fingers_for_pane $current_pane_id diff --git a/tmux-fingers.tmux b/tmux-fingers.tmux new file mode 100755 index 0000000..d9212a7 --- /dev/null +++ b/tmux-fingers.tmux @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +tmux bind-key F run-shell "tmux capture-pane -p | $CURRENT_DIR/scripts/tmux-fingers.sh"