-
Notifications
You must be signed in to change notification settings - Fork 1
/
mmdv
executable file
·160 lines (127 loc) · 4.58 KB
/
mmdv
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#!/bin/bash
active_shell=$(ps -o command | grep -v -e "\<ps\>" -e grep -e tail | tail -3)
if [[ $active_shell == *"fish"* ]]; then
active_shell="fish"
else
active_shell="bash"
fi
if [[ $active_shell == "fish" ]]; then
HISTFILE=~/.local/share/fish/fish_history
else
HISTFILE=~/.bash_history
fi
HISTCONTROL=ignoreboth:erasedups
set -o history
BASE_URL=https://mem.dev/
if [[ -f /tmp/memdev.txt ]]; then
read MEMDEV_TOKEN < /tmp/memdev.txt
fi
IFS=$'\n'
RED="\033[0;31m"
NC="\033[0m"
BLUE="\033[0;34m"
GREEN="\033[0;32m"
retry="y"
function select_option {
ESC=$( printf "\033")
cursor_blink_on() { printf "$ESC[?25h"; }
cursor_blink_off() { printf "$ESC[?25l"; }
cursor_to() { printf "$ESC[$1;${2:-1}H"; }
print_option() { printf " $1 "; }
print_selected() { printf " $ESC[7m $1 $ESC[27m"; }
get_cursor_row() { IFS=';' read -sdR -p $'\E[6n' ROW COL; echo ${ROW#*[}; }
key_input() { read -s -n3 key 2>/dev/null >&2
if [[ $key = $ESC[A ]]; then echo up; fi
if [[ $key = $ESC[B ]]; then echo down; fi
if [[ $key = "" ]]; then echo enter; fi; }
# initially print empty new lines (scroll down if at bottom of screen)
for opt; do printf "\n"; done
# determine current screen position for overwriting the options
local lastrow=`get_cursor_row`
local startrow=$(($lastrow - $#))
# ensure cursor and input echoing back on upon a ctrl+c during read -s
trap "cursor_blink_on; stty echo; printf '\n'; exit" 2
cursor_blink_off
local selected=0
while true; do
# print options by overwriting the last lines
local idx=0
for opt; do
cursor_to $(($startrow + $idx))
if [ $idx -eq $selected ]; then
print_selected "$opt"
else
print_option "$opt"
fi
((idx++))
done
# user key control
case `key_input` in
enter) break;;
up) ((selected--));
if [ $selected -lt 0 ]; then selected=$(($# - 1)); fi;;
down) ((selected++));
if [ $selected -ge $# ]; then selected=0; fi;;
esac
done
# cursor position back to normal
cursor_to $lastrow
printf "\n"
cursor_blink_on
return $selected
}
function start_selection {
while [ $retry = "y" ]; do
if [[ $active_shell == "fish" ]]; then
prev_cmds=`history 25 | cut -c 8- | grep "cmd" | sed -e 's/- cmd: //g' | awk '!x[$0]++'`
else
prev_cmds=`history 10 | cut -c 8- | awk '!x[$0]++'`
fi
echo -e "Mem.dev: Choose which command would you like to save:\n"
options=($prev_cmds)
select_option "${options[@]}"
choice=$?
selected_cmd="${options[$choice]}"
# Allow user to manually update `$selected_cmd` or press [Enter] to accept `default` value.
read -p "Command: [default=\"$selected_cmd\"]: " final_cmd
: ${final_cmd:=$selected_cmd}
while [ -z $title ]; do
read -p "What did this command do: " -e title
done
if [ -z $MEMDEV_TOKEN ]; then
echo -e "\n"
echo -e "${RED}You're not logged in. Please enter your auth token...${NC}"
echo -e "(You can get get your auth token at ${BLUE}${BASE_URL}auth_token/?s=extension)${NC}"
while [ -z $extension_code ]; do
read -p "Enter auth token: " -e extension_code
done
MEMDEV_TOKEN=`curl -sX POST -H "Content-Type: application/json" -d '{"id":"'"$extension_code"'"}' "${BASE_URL}api/v2/authorize/ext_auth" | awk -F'[:}]' '{print $(NF-1)}'`
MEMDEV_TOKEN=${MEMDEV_TOKEN#\"}
echo $MEMDEV_TOKEN > /tmp/memdev.txt
fi
SNIPPET_RESPONSE=`curl -sX POST \
-H "Content-Type: application/json" \
-H "Authorization: $MEMDEV_TOKEN" \
-d "{\"content\":\"${final_cmd#\"}\", \"title\":\"${title#\"}\", \"topic\":\"Bash\", \"syntax\":\"bash\"}" \
"${BASE_URL}api/v2/snippets"`
echo -e "${GREEN}Command has been uploaded!${NC}\n"
read -p "Upload another command?(y/N)" -e retry
if [[ "$retry" == "y" ]]; then
title=""
fi
if [ -z "$retry" ]; then
retry="N"
fi
echo -e "\n"
done
}
function off {
rm /tmp/memdev.txt
echo "Logged out successfully!"
}
case $1 in
"off") off;;
*) start_selection;;
esac
exit
0