diff options
| author | Michele Bini <michele.bini@gmail.com> | 2022-07-02 23:30:59 (GMT) |
|---|---|---|
| committer | Michele Bini <michele.bini@gmail.com> | 2023-11-27 22:37:18 (GMT) |
| commit | 9586d66735d881256e85e70f1b77fef4adbb0fc0 (patch) | |
| tree | 210629b5dcc465f73141a16811b659564ddd6d18 | |
.bashrc .bashrc.d
| -rw-r--r-- | .bashrc | 256 | ||||
| -rw-r--r-- | .bashrc.d/hist-smenu | 9 |
2 files changed, 265 insertions, 0 deletions
@@ -0,0 +1,256 @@ +# ~/.bashrc: executed by bash(1) for non-login shells. +# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc) +# for examples + +# If not running interactively, don't do anything +case $- in + *i*) ;; + *) return;; +esac + +# don't put duplicate lines or lines starting with space in the history. +# See bash(1) for more options +HISTCONTROL=ignoreboth + +# append to the history file, don't overwrite it +shopt -s histappend + +# for setting history length see HISTSIZE and HISTFILESIZE in bash(1) +HISTSIZE=1000 +HISTFILESIZE=2000 + +# check the window size after each command and, if necessary, +# update the values of LINES and COLUMNS. +shopt -s checkwinsize + +# If set, the pattern "**" used in a pathname expansion context will +# match all files and zero or more directories and subdirectories. +#shopt -s globstar + +# make less more friendly for non-text input files, see lesspipe(1) +[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)" + +# set variable identifying the chroot you work in (used in the prompt below) +if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then + debian_chroot=$(cat /etc/debian_chroot) +fi + +# set a fancy prompt (non-color, unless we know we "want" color) +case "$TERM" in + xterm-color|*-256color) color_prompt=yes;; +esac + +# uncomment for a colored prompt, if the terminal has the capability; turned +# off by default to not distract the user: the focus in a terminal window +# should be on the output of commands, not on the prompt +#force_color_prompt=yes + +if [ -n "$force_color_prompt" ]; then + if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then + # We have color support; assume it's compliant with Ecma-48 + # (ISO/IEC-6429). (Lack of such support is extremely rare, and such + # a case would tend to support setf rather than setaf.) + color_prompt=yes + else + color_prompt= + fi +fi + +if [ "$color_prompt" = yes ]; then + PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' +else + PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' +fi +unset color_prompt force_color_prompt + +# If this is an xterm set the title to user@host:dir +case "$TERM" in +xterm*|rxvt*) + PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1" + ;; +*) + ;; +esac + +# enable color support of ls and also add handy aliases +if [ -x /usr/bin/dircolors ]; then + test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)" + alias ls='ls --color=auto' + #alias dir='dir --color=auto' + #alias vdir='vdir --color=auto' + + alias grep='grep --color=auto' + alias fgrep='fgrep --color=auto' + alias egrep='egrep --color=auto' +fi + +# colored GCC warnings and errors +#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01' + +# some more ls aliases +alias ll='ls -alF' +alias la='ls -A' +alias l='ls -CF' + +# Add an "alert" alias for long running commands. Use like so: +# sleep 10; alert +alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"' + +# Alias definitions. +# You may want to put all your additions into a separate file like +# ~/.bash_aliases, instead of adding them here directly. +# See /usr/share/doc/bash-doc/examples in the bash-doc package. + +if [ -f ~/.bash_aliases ]; then + . ~/.bash_aliases +fi + +# enable programmable completion features (you don't need to enable +# this, if it's already enabled in /etc/bash.bashrc and /etc/profile +# sources /etc/bash.bashrc). +if ! shopt -oq posix; then + if [ -f /usr/share/bash-completion/bash_completion ]; then + . /usr/share/bash-completion/bash_completion + elif [ -f /etc/bash_completion ]; then + . /etc/bash_completion + fi +fi + +historycmds() { + history|sed -En "s/ +[0-9]+ +//p" +} +# source "$HOME/.cargo/env" + +SAGE_BROWSER=brave-browser + +BASH_VULNERABILITY="() { :; }; echo VULNERABLE" +export BASH_VULNERABILITY + +# alias mydate="date \"+%a %b %e %H:%M:%S.%3N %Z %Y, unix %s.%06N\"" +# alias nohistory="unset HISTFILE; echo Commands not logged" + +shopt -s histverify + +HISTCONTROL=ignoreboth +HISTFILESIZE=250000 +HISTSIZE=5000 +# HISTTIMEFORMAT="%e %H:%M:%S " + +bashrc_testsethist() { + ( echo -n >>"$1" ) >/dev/null 2>&1 && HISTFILE="$1" +} + +bashrc_histfile_ref() { + local d="$HOME/log/bash-history" + # echo "=== [$d]" + case "$1" in + "$HOME"/*) + d="$d${1/#"$HOME"/}" + ;; + /) + d="$d"-root + ;; + /*) + d="$d"-root"$1" + ;; + *) + echo "bashrc_histfile_ref: Unrecognized pwd: $1" + ;; + esac + # local b="$(basename "$d")" + # local d="$(dirname "$d")" + # echo "=== [$d] $b $d .bash_history" 2>&1 + # false + mkdir -p "$(dirname "$d")" + HISTFILE="$d.bash_history" +} + +bashrc_histfile_rel() { + bashrc_testsethist "$1"/.bash_history || bashrc_histfile_ref +} + +bashrc_gray_text="$( echo -e '\033[0;37m' )" +bashrc_nc_text="$( echo -e '\033[0m' )" + +bashrc_histfile_reldir="" + +bashrc_histfile_setup() { + local p="$(pwd)" + case "$HISTFILE" in + "$HOME"/.bash_history) + case "$p" in + "$HOME") bashrc_histfile_rel "$p" && bashrc_histfile_reldir="$p" ;; + "$HOME"/*) bashrc_histfile_rel "$p" && bashrc_histfile_reldir="$p" ;; + *) bashrc_histfile_ref "$p" && bashrc_histfile_reldir="$p" ;; + esac ;; + # /*) : ;; + *) : ;; + esac +} + +bashrc_histfile_setup + +bashrc_precmd() { + case "$bashrc_at_prompt" in + 2|"") return ;; + esac + history -a + bashrc_precmd_time="$( date +%s%06N )" + bashrc_at_prompt=2 +} + +trap bashrc_precmd DEBUG + +if [ -n "$HISTFILE" ]; then + echo "$bashrc_gray_text""Commands logged to: $HISTFILE""$bashrc_nc_text" >&2 +fi + +bashrc_histfile_ext='' + +bashrc_timediff() { + local d="$(( $1 - $2 ))" + local us="$(( $d % 1000 ))" + local d="$(( $d / 1000 ))" + local ms="$(( $d % 1000 ))" + local d="$(( $d / 1000 ))" + local secs="$(( $d % 60 ))" + local d="$(( $d / 60 ))" + local minutes="$(( $d % 60 ))" + local d="$(( $d / 60 ))" + local hours="$(( $d % 24 ))" + local d="$(( $d / 24 ))" + local days="$(( $d % 24 ))" + if (( $days > 0 )); then + printf "$days days" + fi + printf "%02d:%02d:%02d.%03d'%03d" "$hours" "$minutes" "$secs" "$ms" "$us" +} + +bashrc_postcmd() { + # echo == >&2 + case "$bashrc_at_prompt" in + 2) + # could use tput for horizontal position + bashrc_postcmd_time="$( date +%s%06N )" + bashrc_last_command_time="$(bashrc_timediff "$bashrc_postcmd_time" "$bashrc_precmd_time")" + echo "$bashrc_gray_text$bashrc_last_command_time$bashrc_nc_text" >&2 + ;; + esac + if [ -n "$bashrc_histfile_reldir" ]; then + local d="$(pwd)" + if [ _"$bashrc_histfile_reldir" != _"$d" ] && [ -z "$bashrc_histfile_ext" ]; then + echo "$bashrc_gray""Commands still logged to: $HISTFILE" >&2 + bashrc_histfile_ext="$bashrc_gray_text([H]""$bashrc_histfile_reldir"")$bashrc_nc_text"' +' + elif [ -n "($bashrc_histfile_ext" ] && [ _"$bashrc_histfile_reldir" = _"$d" ]; then + bashrc_histfile_ext='' + fi + fi + bashrc_at_prompt=1 +} + +PROMPT_COMMAND=bashrc_postcmd + +PS1='$bashrc_histfile_ext'"$PS1" + +[ -f ~/.bashrc.d/hist-smenu ] && . ~/.bashrc.d/hist-smenu diff --git a/.bashrc.d/hist-smenu b/.bashrc.d/hist-smenu new file mode 100644 index 0000000..786d1d2 --- /dev/null +++ b/.bashrc.d/hist-smenu @@ -0,0 +1,9 @@ +histmenu() { + READLINE_LINE="$( + + HISTTIMEFORMAT="" history|tail -n1000|tac|sed "s/^ *[0-9][0-9]* *//; s/[\"\']/\\\\\0/g"| smenu -r -W $'\n' -n"$(( "$LINES" / 3 ))" -t1 -d -s "$READLINE_LINE" + +)" + READLINE_POINT=0 +} +bind -x '"\C-t":histmenu' |
