summaryrefslogtreecommitdiff
path: root/bin/dmenu/dmenu_type
blob: f9d034651856959311774bce03fae74c4e4fd52d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#!/usr/bin/env bash

[ -d "$XDG_CACHE_HOME/dmenu_type" ] || mkdir -p "$XDG_CACHE_HOME/dmenu_type"
[ -f "$XDG_CACHE_HOME/dmenu_type/output" ] || echo xdot > "$XDG_CACHE_HOME/dmenu_type/output"
[ -f "$XDG_CACHE_HOME/dmenu_type/lang" ] || echo jap_full > "$XDG_CACHE_HOME/dmenu_type/lang"

output="$(cat "$XDG_CACHE_HOME/dmenu_type/output")"
lang="$(cat "$XDG_CACHE_HOME/dmenu_type/lang")"
LINES=15

while getopts b:o:l: OPTION
do
    case $OPTION in
        b)
            buffer="$OPTARG"
            ;;
        o)
            output="$OPTARG"
            ;;
        l)
            lang="$OPTARG"
            ;;
        *)
            exit 1
            ;;
    esac
done
shift $((OPTIND - 1))

[ "$1" = "set" ] && case "$(printf "lang\nout" | dmenu -p "Choose setting to set:")" in
    lang)
        lang="$(printf "emoji\narabic\njap_full\n" | dmenu -p "Set language:")"
        [ -n "$lang" ] && printf "%s\n" "$lang" > "$XDG_CACHE_HOME/dmenu_type/lang"
        exit
        ;;
    out)
        output="$(printf "xdot\nclip\nxdotbuff\n" | dmenu -p "Set dmenu_type output:")"
        [ -n "$output" ] && printf "%s\n" "$output" > "$XDG_CACHE_HOME/dmenu_type/output"
        exit
        ;;
    *)
        exit 1
esac

DIC_DIR="$HOME/bin/experimentation/generated/dic_dir"

case "$lang" in
    jap_full)
        rows="$(awk '!a[$0]++' "$DIC_DIR"/{hiragana,katakana,kanji,jp_special,double_eng})"
        get_text () {
            printf "%s" "$rows" | dmenu -p "$buffer" -l $LINES | cut -f2- -d ' '
        }
        ;;
    emoji)
        get_text () {
            awk -F '# ' '/^[^#].*; fully-qualified *#/ {print $2}' "$DIC_DIR/emoji-test.txt" | dmenu -l $LINES | awk '{print $1}'
        }
        ;;
    *)
        exit
        ;;
esac

while text="$(get_text)"; [ -n "$text" ]
do
    [ "$output" = "xdot" ] && xdotool type "$text"
    [ "$output" = "clip" ] || [ "$output" = "xdotbuff" ] && buffer="$buffer$text"
done
[ "$output" = "xdotbuff" ] && xdotool type --delay 200 "$buffer"
[ "$output" = "clip" ] && printf %s "$buffer" | xclip -sel clip