aboutsummaryrefslogtreecommitdiffstats
path: root/.config/init/funcs/srcopen
diff options
context:
space:
mode:
authorkatherine <ageha@airen-no-jikken.icu>2021-08-04 00:06:44 -0700
committerkatherine <ageha@airen-no-jikken.icu>2021-08-04 00:06:44 -0700
commit819a54de34713096c9a25d6fc61bc4c28bfe91f0 (patch)
tree341afe6a4b290ef7b2bd9edbfd141015ac680e1c /.config/init/funcs/srcopen
parent312b67eb994c8decfa0606b6a54e9ec9226cafa3 (diff)
downloaddotfiles-819a54de34713096c9a25d6fc61bc4c28bfe91f0.tar.gz
add srcopen
Diffstat (limited to '.config/init/funcs/srcopen')
-rwxr-xr-x.config/init/funcs/srcopen115
1 files changed, 115 insertions, 0 deletions
diff --git a/.config/init/funcs/srcopen b/.config/init/funcs/srcopen
new file mode 100755
index 0000000..d910fee
--- /dev/null
+++ b/.config/init/funcs/srcopen
@@ -0,0 +1,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