#!/usr/bin/env bash # vim:ts=4:sts=4:sw=4:et # # Author: Hari Sekhon # Date: circa 2006 - 2012 (forked from .bashrc) # # https://github.com/harisekhon/bash-tools # # License: see accompanying Hari Sekhon LICENSE file # # If you're using my code you're welcome to connect with me on LinkedIn and optionally send me feedback to help steer this or other code I publish # # https://www.linkedin.com/in/harisekhon # # ============================================================================ # # T i t l e M a g i c # ============================================================================ # # Sets the Screen and Terminal titles alias ti="title" # static title - turn dynamic prompt escape codes off, while optionally setting new title alias sti="dpoff >/dev/null; ti" termtitle(){ # in tmux sets the secondary title at bottom right, duplicating info if ! istmux; then printf '\033]0;%s\007' "${*:- }" fi } isscreen(){ # $STY is only set in screen it seems so this determines if we're in screen [ -n "${STY:-}" ] } screentitle(){ if isscreen; then printf '\033k%s\033\\' "${*:- }" # or # screen -X title "$*" fi } istmux(){ [ -n "${TMUX:-}" ] } tmuxtitle(){ if istmux; then # window name appears in bottom left as a secondary name #printf "\033]2;%s\033\\" "${*:-}" # this is actually what we want to act like screen tmux rename-window "${*:-}" fi } title(){ export LAST_TITLE="$TITLE" #if [ $# -eq 0 ]; then # return # various commands will reset the title after their commands so skip those calls if NO_SCREEN_UPDATES is set if [ -z "$*" ] && [ "$NO_SCREEN_UPDATES" = "1" ]; then return fi export TITLE="$*" termtitle "$TITLE" screentitle "$TITLE" tmuxtitle "$TITLE" } # .bashrc reload causes title loss if enabling this #title # so instead just reset the termtitle which we don't see anyway and get rid of that annoying Unnamed in the title bar termtitle " " # ============================================================================ # # toggle dynamic prompt on / off dpstatus(){ if grep -q '^\\\[\\ek\\e\\\\\\]' <<< "$PS1"; then echo "enabled" return 0 else echo "disabled" return 1 fi } # dynamic prompt escape codes off dpoff(){ if dpstatus >/dev/null; then title " " PS1="${PS1#\\[\\ek\\e\\\\\\\]}" export PS1 export NO_SCREEN_UPDATES=1 echo "disabled" fi } # dynamic prompt escape codes on dpon(){ if ! dpstatus >/dev/null; then PS1="${SCREEN_ESCAPE}${PS1}" export PS1 export NO_SCREEN_UPDATES=0 echo "enabled" fi } # toggle dynamic prompt on/off dp(){ if dpstatus; then printf '\b\renabled => ' dpoff else printf '\b\rdisabled => ' dpon fi title } # ============================================================================ # man(){ title "man $1" command man "$@" title "$LAST_TITLE" } sudo(){ title "sudo $1" command sudo "$@" title "$LAST_TITLE" } vim(){ local title="" #until [ -z "$1" ]; do for x in "$@"; do case "$x" in -*) : ;; +*) : ;; *) #title="$title$x " title="$x" break ;; esac #shift done local num=10 if [[ "${TITLE_SHORT:-}" =~ ^[0-9]+$ ]]; then num=$TITLE_SHORT fi if [ "$num" -lt 3 ]; then num=3 fi title="${title//.txt/}" if dpstatus >/dev/null; then if echo "$title" | grep -q docs/; then title="$(basename "$title")" title "d${title:0:$num}" else title="$(basename "$title")" title "${title:0:$num}" fi fi command vim "$@" #if dpstatus >/dev/null; then title; fi }