use_color=true
fi
- if [[ $KONSOLE_PROFILE_NAME ]]; then
- TERM=xterm-256color
- fi
-
# todo: not sure this works in sakura
#stty werase undef
#bind "\C-w": kill-region
if [[ -s $bashrc_dir/path-add-function ]]; then
source $bashrc_dir/path-add-function
if [[ $SSH_CLIENT ]]; then
- if grep -qF /home/iank/.iank/e/e /etc/exports &>/dev/null; then
- export EMACSDIR=/home/iank/.iank/e/e
- fi
path-add $bashrc_dir
fi
fi
done
}
caf() {
+
local file
find -L "$@" -type f -not \( -name .svn -prune -o -name .git -prune \
-o -name .hg -prune -o -name .editor-backups -prune \
| awk -F '\0' '{print $3}' 2>/dev/null | while read -r file; do
hr "$file"
v "$file"
+ # if the file is nonempty and the last char is nonempty, it is not
+ # newline terminated.
+ if [[ -s "$file" && "$(tail -c 1 "$file")" ]]; then
+ echo
+ fi
done
}
ccomp cat cf caf
tail -F /var/log/exim4/mainlog -n 200 "$@"
}
etail2() {
- tail -F /var/log/exim4/mymain -n 200 "$@"
+ tail -F /var/log/exim4/nondmain -n 200 "$@"
}
-ccomp tail etail etail2
+# shortcut for tail -F
+ta() {
+ tail -F "$@"
+}
+ccomp tail etail etail2 ta
# ran into this online, trying it out
detach() {
echo "${p%%/.git}"
}
-g() {
-
- local args gdb=false
-
- if [[ $EMACSDIR ]]; then
- path-add "$EMACSDIR/lib-src" "$EMACSDIR/src"
- fi
-
- if [[ $DISPLAY ]]; then
- args=-n
- fi
-
- if (( $# == 0 )); then
- args+=" -c"
- fi
- # duplicate -c, but oh well
- if ! pgrep -u $EUID emacsclient; then
- if (( $# == 0 )) && type -p gdb &>/dev/null; then
- gdb=true
- else
- args+=" -c"
- fi
- fi
- if [[ $EMACSDIR ]]; then
-
- # todo: we don't have to alter HOME since emacs 29+, we can set
- # user-emacs-directory with the flag --init-directory
-
- # Alter the path here, otherwise the nfs mount gets triggered on the
- # first path lookup when emacs is not being used.
- # shellcheck disable=SC2098 disable=SC2097 # false positive
- PATH="$EMACSDIR/lib-src:$EMACSDIR/src:$PATH" EHOME=$HOME HOME=$EMACSDIR m emacsclient -a "" $args "$@"
- else
- if $gdb; then
- # due to a bug, we cant debug from the start unless we get a new gdb
- # https://sourceware.org/bugzilla/show_bug.cgi?id=24454
- # m gdb -ex="set follow-fork-mode child" -ex=r -ex=quit --args emacs --daemon
- m emacsclient -a "" $args "$@"
- sleep 1
- cd "/a/opt/emacs-$(distro-name)$(distro-num)"
- s gdb -p "$(pgrep -f 'emacs --daemon')" -ex c
- cd -
- else
- m emacsclient -a "" $args "$@"
- fi
- fi
-}
# g pipe. like: cmd | emacs. save cmd output to tmp file, then edit.
gp() {
# Don't return 1 on nonmatch because this is meant to be
# interactive, not in a conditional.
if [[ ${#@} == 1 ]]; then
- grep --exclude-dir='*.emacs.d' --exclude-dir='*.git' -riIP --color=auto "$@" . || [[ $? == 1 ]]
+ grep --exclude-dir='*.emacs.d' --exclude-dir='*.git' -rniIP --color=auto "$@" . || [[ $? == 1 ]]
else
- grep --exclude-dir='*.emacs.d' --exclude-dir='*.git' -riIP --color=auto "$@" || [[ $? == 1 ]]
+ grep --exclude-dir='*.emacs.d' --exclude-dir='*.git' -rniIP --color=auto "$@" || [[ $? == 1 ]]
fi
}
ccomp grep gr grr
# however, DEBUG is not inherited, so we need to run it outside a function.
# And we want to run set -x afterwards to avoid spam, so we cram everything
# in here, and then it will run after this function is done.
- # # set as array to satisfy shellcheck, but it is equivalent to setting it as non-array
- PROMPT_COMMAND=('trap DEBUG; unset PROMPT_COMMAND; PS1="\w \$ "')
+ # shellcheck disable=SC2178 # intentional
+ PROMPT_COMMAND='trap DEBUG; unset PROMPT_COMMAND; PS1=" \w \$ "'
}
+
+pskde() {
+ # shellcheck disable=SC2178 # intentional
+ PROMPT_COMMAND='trap DEBUG; unset PROMPT_COMMAND'
+ PS1='\[\e]133;L\a\]\[\e]133;D;$?\]\[\e]133;A\a\]\w \$ \[\e]133;B\a\]' ;
+ PS2='\[\e]133;A\a\]'$PS2'\[\e]133;B\a\]' ;
+ PS0='\[\e]133;C\a\]'
+
+}
+
pson() {
PROMPT_COMMAND=(prompt-command)
if [[ $TERM == *(screen*|xterm*|rxvt*) ]]; then
prompt-command() {
local return=$? # this MUST COME FIRST
+
# all usable colors:
# black
# green nonzero exit (pri 1)
fi
PS1="${PS1%"${PS1#*[wW]}"} $jobs_char$psudo\[$ps_color\]$ps_char\[$term_nocolor\] "
+
+
# copy of what is automatically added by guix.
# adds [env] to PS1 if GUIX_ENVIRONMENT is set and PS1 contains '$';
if [ -n "$GUIX_ENVIRONMENT" ]; then
# set titlebar. instead, using more advanced
# titelbar below
#echo -ne "$_title_escape $HOSTNAME ${PWD/#$HOME/~} \007"
+
+ if [[ $KONSOLE_VERSION ]]; then
+ # from konsole, output via ctrl-alt-]
+ if [[ ! $PS1 =~ 133 ]] ; then
+ PS1='\[\e]133;L\a\]\[\e]133;D;$?\]\[\e]133;A\a\]'$PS1'\[\e]133;B\a\]' ;
+ PS2='\[\e]133;A\a\]'$PS2'\[\e]133;B\a\]' ;
+ PS0='\[\e]133;C\a\]' ; fi
+ fi
+
}
PROMPT_COMMAND=(prompt-command)
fi
}
+# Combine files $@ into a single file with comments between them which
+# allow splitting them back with fsplit.
+#
+# Assumes file names do not have newlines in them.
+fcomb() {
+ local f comment out
+ # generated with cat /dev/urandom | tr -dc 'a-zA-Z0-9' | head -c8
+ comment='# jvvuyUsq '
+ out=~/fcomb
+ rm -f $out
+ for f; do
+ echo "$comment$f" >>$out
+ cat "$f" >>$out
+ done
+}
+fsplit() {
+ local f fin line fin_lines
+ fin=~/fcomb
+ line=1
+ fin_lines=$(wc -l "$fin" | awk '{print $1}')
+ comment='# jvvuyUsq '
+ while (( line <= fin_lines )); do
+ f=$(sed -n "${line}s/^$comment//p" "$fin")
+ sed -n "$line,/^$comment/{/^$comment/d;p}" "$fin" >"$f"
+ line=$(( line + 1 + $(wc -l "$f" | awk '{print $1}') ))
+ done
+}
+
# * stuff that makes sense to be at the end