blob: d910fee0488485aea2ef2a9242a4e47e563f964b (
plain)
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
|
#!/usr/bin/env zsh
# edit all source files of type under a directory
local search_strs
typeset -A search_strs
local k
local koff
local i
typeset -i i
local char
local input
local file_list
typeset -a file_list
search_strs=(
"c" ".*\.(c|h)"
"crystal" ".*\.(cr|h)"
"css" ".*\.(css|scss)"
"elixir" ".*\.(ex|exs)"
"go" ".*\.go"
"html" ".*\.(html|xhtml)"
"markdown" ".*\.md"
"ocaml" ".*\.(ml|mli)"
"js" ".*\.js"
"tex" ".*\.tex"
"vim" ".*\.vim"
)
[[ $#@ -eq 0 ]] && return
[[ $EDITOR == "" ]] && return
zmodload zsh/curses || return
zcurses init
function draw_main() {
zcurses clear stdscr
width=$COLUMNS
zcurses attr stdscr +bold
if [[ $width -ge 16 ]]; then
zcurses move stdscr 0 $(($width / 2 - 8))
zcurses string stdscr "select a filetype"
else
zcurses move stdscr 0 0
zcurses string stdscr "sel"
fi
zcurses attr stdscr -bold
i=0
for k in ${(@k)search_strs}; do
zcurses move stdscr $((i + 2)) 0
zcurses string stdscr $k
i=$((i + 1))
done
}
trap 'draw_main' WINCH
draw_main
input=""
while true; do
zcurses move stdscr $(($#search_strs + 3)) 0
zcurses clear stdscr bot
zcurses string stdscr "-: $input"
zcurses refresh stdscr
char=""
sleep 0
zcurses timeout stdscr 100
zcurses input stdscr char
# clear
[[ $char == "" || $char == "" ]] && input="" && continue
# backspace
[[ $char == "" && $input != "" ]] && input=${input:0:-1} && continue
# tab complete
if [[ $char == $'\t' ]]; then
seen="false"
for k in ${(@k)search_strs}; do
[[ $k =~ "^${input}.*$" ]] || continue
[[ $seen == "true" ]] && seen="false" && break
seen="true"
koff=$k
done
[[ $seen == "true" ]] && input=$koff
continue
fi
# select
[[ $char == $'\n' || $char == "" ]] && break
# add single alphanum
[[ $char =~ "^[a-zA-Z0-9]$" ]] || continue
input="$input$char"
done
zcurses end
[[ $input == "" ]] && return
file_list=( $(find $@ -regextype posix-extended -regex $search_strs[$input]) )
[[ $#file_list -ne 0 ]] && $EDITOR -- $file_list
|