fix: apply aishell review findings
- fix vim-plug URL typo (juneguyen -> junegunn) in install.zsh - fix recent-dirs path to ~/.chpwd-recent-dirs in ais - remove dead plugins (cdselect, fileselect, histselect) superseded by ais - fix .gitignore to properly exclude target/ dirs
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -4,7 +4,7 @@
|
|||||||
Cargo.lock
|
Cargo.lock
|
||||||
node_modules
|
node_modules
|
||||||
package-lock.json
|
package-lock.json
|
||||||
/target
|
target/
|
||||||
/dist
|
/dist
|
||||||
/tmp
|
/tmp
|
||||||
*.swp
|
*.swp
|
||||||
|
|||||||
@@ -1,69 +0,0 @@
|
|||||||
autoload -Uz chpwd_recent_dirs cdr add-zsh-hook
|
|
||||||
add-zsh-hook chpwd chpwd_recent_dirs
|
|
||||||
zstyle ':chpwd:*' recent-dirs-max 50
|
|
||||||
|
|
||||||
cdselect() {
|
|
||||||
local dirs=("${(@f)$(cdr -l 2>/dev/null | sed 's/^[0-9]* *//')}")
|
|
||||||
[[ ${#dirs} -eq 0 ]] && return
|
|
||||||
local query="" cursor=1 selected=""
|
|
||||||
while true; do
|
|
||||||
local filtered=()
|
|
||||||
for d in "${dirs[@]}"; do
|
|
||||||
local match=1
|
|
||||||
for word in ${(s: :)query}; do
|
|
||||||
[[ "${d:l}" != *"${word:l}"* ]] && match=0 && break
|
|
||||||
done
|
|
||||||
[[ $match -eq 1 ]] && filtered+=("$d")
|
|
||||||
done
|
|
||||||
# sort by path length (shortest first)
|
|
||||||
local sorted=()
|
|
||||||
for f in "${filtered[@]}"; do sorted+=("${#f} $f"); done
|
|
||||||
sorted=(${(n)sorted})
|
|
||||||
filtered=()
|
|
||||||
for s in "${sorted[@]}"; do filtered+=("${s#* }"); done
|
|
||||||
[[ $cursor -gt ${#filtered} ]] && cursor=${#filtered}
|
|
||||||
[[ $cursor -lt 1 ]] && cursor=1
|
|
||||||
clear
|
|
||||||
echo "cd> $query"
|
|
||||||
local i=1
|
|
||||||
for d in "${filtered[@]}"; do
|
|
||||||
if [[ $i -eq $cursor ]]; then
|
|
||||||
printf "\e[7m %s\e[0m\n" "$d"
|
|
||||||
else
|
|
||||||
printf " %s\n" "$d"
|
|
||||||
fi
|
|
||||||
((i++))
|
|
||||||
[[ $i -gt 20 ]] && break
|
|
||||||
done
|
|
||||||
read -k1 key 2>/dev/null
|
|
||||||
if [[ "$key" == $'\x1b' ]]; then
|
|
||||||
read -k1 -t 0.1 k2 2>/dev/null
|
|
||||||
if [[ "$k2" == "[" ]]; then
|
|
||||||
read -k1 -t 0.1 k3 2>/dev/null
|
|
||||||
case "$k3" in
|
|
||||||
A) ((cursor--)) ;; # up
|
|
||||||
B) ((cursor++)) ;; # down
|
|
||||||
esac
|
|
||||||
continue
|
|
||||||
else
|
|
||||||
break # plain ESC
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
case "$key" in
|
|
||||||
$'\n'|$'\r') [[ ${#filtered} -gt 0 ]] && selected="${filtered[$cursor]}"; break ;;
|
|
||||||
$'\x0e') ((cursor++)) ;; # C-n
|
|
||||||
$'\x10') ((cursor--)) ;; # C-p
|
|
||||||
$'\x7f'|$'\b') query="${query%?}"; cursor=1 ;;
|
|
||||||
*) query+="$key"; cursor=1 ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
clear
|
|
||||||
if [[ -n "$selected" ]]; then
|
|
||||||
selected="${selected/#\~/$HOME}"
|
|
||||||
selected="${selected//\\ / }"
|
|
||||||
cd "$selected"
|
|
||||||
fi
|
|
||||||
zle reset-prompt
|
|
||||||
}
|
|
||||||
zle -N cdselect
|
|
||||||
bindkey '^j' cdselect
|
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
# file select - search files and insert into prompt
|
|
||||||
# C-f: open file selector
|
|
||||||
|
|
||||||
fileselect() {
|
|
||||||
local files=("${(@f)$(find . -maxdepth 3 -not -path '*/\.git/*' -type f 2>/dev/null | sed 's|^\./||' | sort)}")
|
|
||||||
[[ ${#files} -eq 0 ]] && return
|
|
||||||
local query="" cursor=1 selected=""
|
|
||||||
while true; do
|
|
||||||
local filtered=()
|
|
||||||
for f in "${files[@]}"; do
|
|
||||||
local match=1
|
|
||||||
for word in ${(s: :)query}; do
|
|
||||||
[[ "${f:l}" != *"${word:l}"* ]] && match=0 && break
|
|
||||||
done
|
|
||||||
[[ $match -eq 1 ]] && filtered+=("$f")
|
|
||||||
done
|
|
||||||
[[ $cursor -gt ${#filtered} ]] && cursor=${#filtered}
|
|
||||||
[[ $cursor -lt 1 ]] && cursor=1
|
|
||||||
clear
|
|
||||||
echo "file> $query (${#filtered})"
|
|
||||||
local i=1
|
|
||||||
for f in "${filtered[@]}"; do
|
|
||||||
if [[ $i -eq $cursor ]]; then
|
|
||||||
printf "\e[7m %s\e[0m\n" "$f"
|
|
||||||
else
|
|
||||||
printf " %s\n" "$f"
|
|
||||||
fi
|
|
||||||
((i++))
|
|
||||||
[[ $i -gt 20 ]] && break
|
|
||||||
done
|
|
||||||
read -k1 key 2>/dev/null
|
|
||||||
if [[ "$key" == $'\x1b' ]]; then
|
|
||||||
read -k1 -t 0.1 k2 2>/dev/null
|
|
||||||
if [[ "$k2" == "[" ]]; then
|
|
||||||
read -k1 -t 0.1 k3 2>/dev/null
|
|
||||||
case "$k3" in
|
|
||||||
A) ((cursor--)) ;;
|
|
||||||
B) ((cursor++)) ;;
|
|
||||||
esac
|
|
||||||
continue
|
|
||||||
else
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
case "$key" in
|
|
||||||
$'\n'|$'\r') [[ ${#filtered} -gt 0 ]] && selected="${filtered[$cursor]}"; break ;;
|
|
||||||
$'\x0e') ((cursor++)) ;; # C-n
|
|
||||||
$'\x10') ((cursor--)) ;; # C-p
|
|
||||||
$'\x7f'|$'\b') query="${query%?}"; cursor=1 ;;
|
|
||||||
*) query+="$key"; cursor=1 ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
clear
|
|
||||||
if [[ -n "$selected" ]]; then
|
|
||||||
BUFFER+="$selected"
|
|
||||||
CURSOR=${#BUFFER}
|
|
||||||
fi
|
|
||||||
zle reset-prompt
|
|
||||||
}
|
|
||||||
zle -N fileselect
|
|
||||||
bindkey '^f' fileselect
|
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
# history select - search history and insert into prompt
|
|
||||||
# C-r: open history selector, type to filter, C-n/C-p to move, Enter to insert
|
|
||||||
|
|
||||||
histselect() {
|
|
||||||
local lines=("${(@f)$(fc -l -n -r 1 | awk '!seen[$0]++')}")
|
|
||||||
[[ ${#lines} -eq 0 ]] && return
|
|
||||||
local query="" cursor=1 selected=""
|
|
||||||
while true; do
|
|
||||||
local filtered=()
|
|
||||||
for l in "${lines[@]}"; do
|
|
||||||
local match=1
|
|
||||||
for word in ${(s: :)query}; do
|
|
||||||
[[ "${l:l}" != *"${word:l}"* ]] && match=0 && break
|
|
||||||
done
|
|
||||||
[[ $match -eq 1 ]] && filtered+=("$l")
|
|
||||||
done
|
|
||||||
[[ $cursor -gt ${#filtered} ]] && cursor=${#filtered}
|
|
||||||
[[ $cursor -lt 1 ]] && cursor=1
|
|
||||||
clear
|
|
||||||
echo "hist> $query"
|
|
||||||
local i=1
|
|
||||||
for l in "${filtered[@]}"; do
|
|
||||||
if [[ $i -eq $cursor ]]; then
|
|
||||||
printf "\e[7m %s\e[0m\n" "$l"
|
|
||||||
else
|
|
||||||
printf " %s\n" "$l"
|
|
||||||
fi
|
|
||||||
((i++))
|
|
||||||
[[ $i -gt 20 ]] && break
|
|
||||||
done
|
|
||||||
read -k1 key 2>/dev/null
|
|
||||||
if [[ "$key" == $'\x1b' ]]; then
|
|
||||||
read -k1 -t 0.1 k2 2>/dev/null
|
|
||||||
if [[ "$k2" == "[" ]]; then
|
|
||||||
read -k1 -t 0.1 k3 2>/dev/null
|
|
||||||
case "$k3" in
|
|
||||||
A) ((cursor--)) ;;
|
|
||||||
B) ((cursor++)) ;;
|
|
||||||
esac
|
|
||||||
continue
|
|
||||||
else
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
case "$key" in
|
|
||||||
$'\n'|$'\r') [[ ${#filtered} -gt 0 ]] && selected="${filtered[$cursor]}"; break ;;
|
|
||||||
$'\x0e') ((cursor++)) ;; # C-n
|
|
||||||
$'\x10') ((cursor--)) ;; # C-p
|
|
||||||
$'\x7f'|$'\b') query="${query%?}"; cursor=1 ;;
|
|
||||||
*) query+="$key"; cursor=1 ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
clear
|
|
||||||
if [[ -n "$selected" ]]; then
|
|
||||||
BUFFER="$selected"
|
|
||||||
CURSOR=${#BUFFER}
|
|
||||||
fi
|
|
||||||
zle reset-prompt
|
|
||||||
}
|
|
||||||
zle -N histselect
|
|
||||||
bindkey '^r' histselect
|
|
||||||
@@ -41,7 +41,7 @@ mkdir -p "$HOME/.vim/undo"
|
|||||||
# install vim-plug
|
# install vim-plug
|
||||||
if [ ! -f "$HOME/.vim/autoload/plug.vim" ]; then
|
if [ ! -f "$HOME/.vim/autoload/plug.vim" ]; then
|
||||||
curl -fLo "$HOME/.vim/autoload/plug.vim" --create-dirs \
|
curl -fLo "$HOME/.vim/autoload/plug.vim" --create-dirs \
|
||||||
https://raw.githubusercontent.com/juneguyen/vim-plug/master/plug.vim
|
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
|
||||||
echo "vim-plug: installed"
|
echo "vim-plug: installed"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ fn get_dirs() -> Vec<String> {
|
|||||||
let mut dirs = vec![];
|
let mut dirs = vec![];
|
||||||
|
|
||||||
// try zsh recent-dirs
|
// try zsh recent-dirs
|
||||||
let chpwd = format!("{}/.local/share/zsh/recent-dirs", home);
|
let chpwd = format!("{}/.chpwd-recent-dirs", home);
|
||||||
if let Ok(content) = std::fs::read_to_string(&chpwd) {
|
if let Ok(content) = std::fs::read_to_string(&chpwd) {
|
||||||
for line in content.lines() {
|
for line in content.lines() {
|
||||||
let path = line.trim().replace("$'", "").replace('\'', "");
|
let path = line.trim().replace("$'", "").replace('\'', "");
|
||||||
|
|||||||
Reference in New Issue
Block a user