From 819a54de34713096c9a25d6fc61bc4c28bfe91f0 Mon Sep 17 00:00:00 2001 From: katherine Date: Wed, 4 Aug 2021 00:06:44 -0700 Subject: add srcopen --- .config/init/funcreqs/srcopen | 2 + .config/init/funcs/srcopen | 115 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 117 insertions(+) create mode 100644 .config/init/funcreqs/srcopen create mode 100755 .config/init/funcs/srcopen (limited to '.config/init') diff --git a/.config/init/funcreqs/srcopen b/.config/init/funcreqs/srcopen new file mode 100644 index 0000000..4891a58 --- /dev/null +++ b/.config/init/funcreqs/srcopen @@ -0,0 +1,2 @@ +func_init_prereqs=($EDITOR) +func_init_checks=() 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 -- cgit v1.2.3