From: Ian Kelling Date: Fri, 10 Jun 2022 17:24:40 +0000 (-0400) Subject: mostly replace wcd with self made script X-Git-Url: https://iankelling.org/git/?a=commitdiff_plain;h=75e62ecbdabb055ef8d556e2e3aad7117557eb92;p=distro-setup mostly replace wcd with self made script --- diff --git a/.bashrc b/.bashrc index 35db9ac..2c14100 100644 --- a/.bashrc +++ b/.bashrc @@ -29,7 +29,7 @@ HISTCONTROL=ignoredups # This works in addition to HISTCONTROL to do more flexible things # it could also do the same things as HISTCONTROL and thus replace it, # but meh. dunno why, but just " *" does glob expansion, so use [ ] to avoid it. -HISTIGNORE='pass *:[ ]*:otp *:oathtool *:histrm *' +HISTIGNORE='pass *:[ ]*:otp *:oathtool *:histrm *:k *:ks *:ksu *' #### begin section that works with sl() function to return from diff --git a/brc b/brc index 2a770ae..b0f8846 100644 --- a/brc +++ b/brc @@ -259,11 +259,6 @@ if [[ $SOE ]]; then fi fi -# based on readme.debian. dunno if this will break on other distros. -if [[ -s /usr/share/wcd/wcd-include.sh ]]; then - source /usr/share/wcd/wcd-include.sh -fi - mysrc() { local path dir file @@ -391,11 +386,6 @@ for num in {1..9}; do done -b() { - # backwards - c - -} - hexipv4() { printf '%d.%d.%d.%d\n' $(echo $1 | sed 's/../0x& /g') } @@ -425,21 +415,222 @@ utcl() { # utc 24 hour time to local hour 24 hour time echo "print( ($1 $(date +%z | sed -r 's/..$//;s/^(-?)0*/\1/')) % 24)"|python3 } -# c. better cd -if ! type -t c &>/dev/null; then - if type -p wcd &>/dev/null; then - if [[ $LC_INSIDE_EMACS ]]; then - c() { wcd -c -z 50 -o "$@"; } - else - # lets see what the fancy terminal does from time to time - c() { wcd -c -z 50 "$@"; } +declare -a _iankdirf _iankdirb + + +# ## old wcd, to be deleted +# b() { +# # backwards +# c - +# } +# # shellcheck disable=SC2032 +# f() { +# # cd forward +# c + +# } +# cl() { +# # choose recent directory. cl = cd list +# c = +# } +# # c. better cd +# if ! type -t c &>/dev/null; then +# if type -p wcd &>/dev/null; then +# if [[ $LC_INSIDE_EMACS ]]; then +# c() { wcd -c -z 50 -o "$@"; } +# else +# # lets see what the fancy terminal does from time to time +# c() { wcd -c -z 50 "$@"; } +# fi +# else +# c() { cd "$@"; } +# fi +# fi + +# c. better cd. +# keep 2 stacks, forward and back. the top of the back is $PWD +# as long as the last directory change was due to c,b,or cl. +c() { + # normally, the top of dirb is our current dir. if it isn't, + # put it on there, except we don't want to do that when we + # just launched a shell + if [[ $OLDPWD ]]; then + if (( ${#_iankdirb[@]} == 0 )) || [[ ${_iankdirb[-1]} != "$PWD" ]]; then + _iankdirb+=("$PWD") fi - else - c() { cd "$@"; } fi -fi + cd "$@" + if (( ${#_iankdirb[@]} == 0 )) || [[ ${_iankdirb[-1]} != "$PWD" ]]; then + _iankdirb+=("$PWD") + fi + echo "$PWD" >> ~/.iankdirs +} ccomp cd c +b() { + local topb + if (( ${#_iankdirb[@]} == 0 )); then + echo "nothing left to go back to" >&2 + return 0 + fi + topb="${_iankdirb[-1]}" + + if [[ $topb == "$PWD" ]] && (( ${#_iankdirb[@]} == 1 )); then + echo "already on last back entry" >&2 + return 0 + fi + + + if [[ $topb == "$PWD" ]]; then + # add to dirf if not already there + if (( ${#_iankdirf[@]} == 0 )) || [[ ${_iankdirf[-1]} != "$topb" ]]; then + _iankdirf+=("$topb") + fi + unset "_iankdirb[-1]" + cd "${_iankdirb[-1]}" + else + if (( ${#_iankdirf[@]} == 0 )) || [[ ${_iankdirf[-1]} != "$PWD" ]]; then + _iankdirf+=("$PWD") + fi + cd "$topb" + fi + + # give us a peek at what is next in the list + # if (( ${#_iankdirb[@]} >= 2 )); then + # printf "%s\n" "${_iankdirb[-2]}" + # fi +} + +f() { + local topf + if (( ${#_iankdirf[@]} == 0 )); then + echo "no forward dir left" >&2 + return 0 + fi + topf="${_iankdirf[-1]}" + unset "_iankdirf[-1]" + c "$topf" + + # give us a peek at what is next in the list + # if (( ${#_iankdirf[@]} )); then + # printf "%s\n" "${_iankdirf[-1]}" + # fi +} + +# a b c (d) +## back +# a b (c) +# d +#back +#a (b) +#d c +#back +#(a) +#d c b +#forward +#a (b) +#d c +# +# a b c +## back +# a b +# (c) +## forward + +cl() { + local i line input start tmpfile + local -A buttondirs alines + local -a buttons dirs lines + buttons=( {a..z} {2..9} ) + if [[ ! -s ~/.iankdirs ]]; then + echo nothing in ~/.iankdirs + return 0 + fi + + i=0 + + # note, alternate approach like this, made the following read fail + # done < <(tac ~/.iankdirs | awk '!seen[$0]++') + # bash: read: read error: 0: Input/output error + # which went away by adding a sleep 1 after it. + + mapfile -t lines <~/.iankdirs + start=$(( ${#lines[@]} - 1 )) + + # we have ~33 buttons as of this writing, so lets + # prune down the history every once in a while. + if (( start > 500 )); then + tmpfile=$(mktemp) + tac ~/.iankdirs | awk '!seen[$0]++' | head -n 200 >$tmpfile + cat $tmpfile > ~/.iankdirs + fi + + for (( j=$start; j >= 0; j-- )); do + line="${lines[$j]}" + if [[ ! $line || ${alines[$line]} || ! -d "$line" || $line == "$PWD" || line == "$HOME" ]]; then + continue + fi + alines[$line]=t + buttondirs[${buttons[i]}]="$line" + printf "%s %s\n" ${buttons[i]} "$line" + if (( i == ${#buttons[@]} - 1 )); then + break + fi + i=$(( i + 1 )) + done + + if (( i == 0 )); then + echo "no dirs in ~/.iankdirs" + return 0 + fi + read -r -N 1 input + if [[ $input != $'\n' ]]; then + c ${buttondirs[$input]} + fi +} +bl() { + local start i j max + max=10 + start=$(( ${#_iankdirb[@]} - 1 )) + + # cleanup possible repeating of pwd + if (( start >= 0 )) && [[ ${_iankdirb[$start]} == "$PWD" ]]; then + start=$(( start - 1 )) + fi + j=1 + if (( start >= 0 )); then + for (( i=$start; i >= 0 ; i-- )); do + printf "%s %s\n" $j ${_iankdirb[i]} + j=$(( j + 1 )) + if (( j >= max )); then + break + fi + done + fi + + max=10 + + start=$(( ${#_iankdirf[@]} - 1 )) + + # cleanup possible repeating of pwd + if (( start >= 0 )) && [[ ${_iankdirf[$start]} == "$PWD" ]]; then + start=$(( start - 1 )) + fi + if (( start < 0 )); then + return 0 + fi + echo -- + j=1 + for (( i=$start; i >= 0 ; i-- )); do + printf "%s %s\n" $j ${_iankdirf[i]} + j=$(( j + 1 )) + if (( j >= max )); then + break + fi + done +} + + + c4() { c /var/log/exim4; } caa() { git commit --amend --no-edit -a; } @@ -544,8 +735,8 @@ cdiff() { cat-new-files() { local start=$SECONDS local dir="$1" - inotifywait -m "$dir" -e create -e moved_to | - # shellcheck disable=SC2030 + # shellcheck disable=SC2030 + inotifywait -m "$dir" -e create -e moved_to | \ while read -r filedir _ file; do cat "$filedir$file" hr @@ -571,10 +762,6 @@ cim() { git commit -m "$*" } -cl() { - # choose recent directory. cl = cd list - c = -} d() { builtin bg "$@"; } ccomp bg d @@ -757,11 +944,6 @@ econfdev() { -# shellcheck disable=SC2032 -f() { - # cd forward - c + -} fa() { # find array. make an array of file names found by find into $x @@ -778,18 +960,6 @@ faf() { # find all files. use -L to follow symlinks -o -name .undo-tree-history -prune \) -type f 2>/dev/null } -# todo: id like to do maybe a daily or hourly cronjob to -# check that my history file size is increasing. Ive had it -# inexplicably truncated in the past. -histrm() { - history -n - history | awk -v IGNORECASE=1 '{ a=$1; sub(/^( *[^ ]+){4} */, "") }; /'"$*"'/' - read -p "press anything but contrl-c to delete" - for entry in $(history | awk -v IGNORECASE=1 '{ a=$1; sub(/^( *[^ ]+){4} */, "") }; /'"$*"'/ { print a }' | tac); do - history -d $entry - done - history -w -} # mail related frozen() { @@ -1144,10 +1314,28 @@ lower() { # make first letter of filenames lowercase. k() { # history search grep -iP --binary-files=text "$@" ${HISTFILE:-~/.bash_history} | tail -n 80 || [[ $? == 1 ]]; } -ks() { # history search +ks() { # history search with context + # args are an extended regex used by sed + history | sed -nr "h;s/^\s*(\S+\s+){4}//;/$*/{g;p}" | tail -n 80 || [[ $? == 1 ]]; +} +ksu() { # history search unique grep -P --binary-files=text "$@" ${HISTFILE:-~/.bash_history} | uniq || [[ $? == 1 ]]; } -ccomp grep k ks + +# todo: id like to do maybe a daily or hourly cronjob to +# check that my history file size is increasing. Ive had it +# inexplicably truncated in the past. +histrm() { + history -n + HISTTIMEFORMAT= history | awk -v IGNORECASE=1 '{ a=$1; sub(/^ *[^ ]+ */, "") }; /'"$*"'/' + read -p "press anything but contrl-c to delete" + for entry in $(HISTTIMEFORMAT= history | awk -v IGNORECASE=1 '{ a=$1; sub(/^ *[^ ]+ */, "") }; /'"$*"'/ { print a }' | tac); do + history -d $entry + done + history -w +} + +ccomp grep k ks ksu histrm make-targets() { diff --git a/brc2 b/brc2 index 7d94df1..336d938 100644 --- a/brc2 +++ b/brc2 @@ -1155,12 +1155,19 @@ mns() { # mount namespace m sudo -E /usr/bin/nsenter --mount=/root/mount_namespaces/$ns "$@" } +mnsr() { # mns run + local ns=$1 + shift + mns $ns sudo -u iank -E env "PATH=$PATH" "$@" +} + mnsnonet() { ns=$1 if ! s ip netns list | grep -Fx nonet &>/dev/null; then s ip netns add nonet fi mns $ns --net=/var/run/netns/nonet sudo -E -u iank /bin/bash + lomh } @@ -1185,6 +1192,7 @@ lom() { m sudo mkdir -p /mnt/$base m mns $base mount /dev/mapper/$base /mnt/$base m mns $base chown $USER:$USER /mnt/$base + lomh else base=$1 if mns $base mountpoint /mnt/$base &>/dev/null; then @@ -1835,11 +1843,6 @@ vpncmd() { m sudo -E env "PATH=$PATH" nsenter -t $(pgrep -f "/usr/sbin/openvpn .* --config /etc/openvpn/.*client.conf") -n "$@" } -vpn2f() { - sudo -v - vpncmd sudo -u iank env "PATH=$PATH" abrowser -no-remote -P vpn2 & r -} - vpni() { vpncmd sudo -u iank env "PATH=$PATH" "$@" } @@ -2062,6 +2065,7 @@ if [[ "$SUDOD" ]]; then unset SUDOD elif [[ -d /a ]] && [[ $PWD == "$HOME" ]] && [[ $- == *i* ]]; then cd /a + OLDPWD= fi diff --git a/conflink b/conflink index b045711..1cefd0b 100755 --- a/conflink +++ b/conflink @@ -18,10 +18,10 @@ EOF } +s() { sudo "$@"; } m() { "$@" } -s() { sudo "$@"; } v() { echo "$*" "$@" @@ -117,7 +117,7 @@ common-file-setup() { --exclude='/etc/exim4/passwd*' --exclude='/etc/exim4/*.pem' $fs/ / ) - m "${cmd[@]@Q}" + echo "${cmd[@]@Q}" while read -r line; do file="${line:12}" case $file in @@ -219,7 +219,7 @@ case $user in m s chgrp -R bind $f m s chmod g+w $f fi - sudo bash -c 'shopt -s nullglob; for f in /etc/bind/*.key /etc/bind/*.private /etc/bind/key.*; do chgrp bind $f; done' + s bash -c 'shopt -s nullglob; for f in /etc/bind/*.key /etc/bind/*.private /etc/bind/key.*; do chgrp bind $f; done' if [[ -e /etc/caldav-htpasswd ]] && getent group www-data &>/dev/null; then s chgrp www-data /etc/caldav-htpasswd fi @@ -245,7 +245,7 @@ case $user in ##### end special extra stuff ##### if ! $fast; then - m sudo -H -u user2 "${BASH_SOURCE[0]}" + m s -H -u user2 "${BASH_SOURCE[0]}" fi f=/a/bin/distro-setup/system-status diff --git a/filesystem/usr/local/bin/abrowser b/filesystem/usr/local/bin/abrowser index cd33b6b..365911c 100755 --- a/filesystem/usr/local/bin/abrowser +++ b/filesystem/usr/local/bin/abrowser @@ -17,7 +17,7 @@ PATH=$tmp # new tab # prefer abrowser -if type -P firefox &>/dev/null; then +if type -P abrowser &>/dev/null; then abrowser "$@" else firefox "$@" diff --git a/i3-sway/common.conf b/i3-sway/common.conf index 0963109..6c79c29 100644 --- a/i3-sway/common.conf +++ b/i3-sway/common.conf @@ -7,7 +7,7 @@ set $mod Mod4 bindsym $mod+2 exec "pavucontrol" -bindsym $mod+3 exec "abrowser" +bindsym $mod+3 exec "abroswer" #bindsym $mod+3 exec "abrowser -no-remote -P sfw" bindsym $mod+4 exec "abrowser -no-remote -P firefox-main-profile" bindsym $mod+5 exec "/usr/local/bin/start-tor-browser" diff --git a/mail-setup b/mail-setup index 9872346..f85bb87 100755 --- a/mail-setup +++ b/mail-setup @@ -1004,10 +1004,8 @@ awk 'BEGIN { FS = ":" } ; $6 ~ /^\/home/ && $7 !~ /\/nologin$/ { print $1 }' /et esac done -if ! grep -q "^ncsoft:" /etc/aliases; then - echo "ncsoft: graceq2323@gmail.com" |m tee -a /etc/aliases -fi +. /a/bin/bash_unpublished/priv-mail-setup m gpasswd -a iank adm #needed for reading logs diff --git a/pkgs b/pkgs index 59a2369..8fe4b86 100644 --- a/pkgs +++ b/pkgs @@ -34,7 +34,6 @@ p2=( tree uptimed vim - wcd wget )