#!/usr/bin/env bash
# Send a key into mpv. Parses the mpv input.conf to do so
# Sends to pipe named /tmp/mpvfifo unless otherwise specified
#
# Args:
#  1: Key to send
#  2: [Optional] fifo
shopt -s lastpipe

declare -r KEY="$1"
declare -r FIFO="${2:-/tmp/mpvfifo}"
declare CMD=""

awk -v k="$KEY " '
BEGIN { split(k, key, "") }

{
  is_key = 1
  split($0, a, "");

  for (i = 1; i <= length(k); i++)
    is_key = is_key && (a[i] == key[i]);

  if (is_key) {
    if (match($0, /#/))
      print substr($0, length(k)+1, RSTART - length(k) - 1);
    else
      print substr($0, length(k)+1);
  }
}' ~/.config/mpv/input.conf | read -r CMD

echo "$CMD" | socat "$FIFO" -