From 2ba539f3685d95e8535dbd3a7d389c69739f1061 Mon Sep 17 00:00:00 2001 From: SoniEx2 Date: Sat, 15 Jan 2022 16:00:39 -0300 Subject: Initial commit --- session.bash | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 session.bash (limited to 'session.bash') diff --git a/session.bash b/session.bash new file mode 100644 index 0000000..caa35de --- /dev/null +++ b/session.bash @@ -0,0 +1,56 @@ +# Copyright (C) 2021, 2022 Soni L. +# SPDX-License-Identifier: AGPL-3.0-or-later + +# note: consider adding the following to your PS1: +PS1='{$([[ "${HISTFILE#~/.bash_history.}" != "$HISTFILE" ]] && printf "@ " || printf "/ ")${HISTFILE#~/.bash_history.}} '"$PS1" + +if [[ "$HISTFILE" = ~/.bash_history ]]; then + HISTFILE="$HISTFILE".default +fi + +# simple interface to history/"session" management +# usage: session +# switches HISTFILE to ~/.bash_history. +session() { + if [[ "$1" =~ ^[a-z][a-z0-9]*$ ]]; then + # remove session switch from history + history -d -1 + # write/append history + if shopt -q histappend; then history -a; else history -w; fi + # clear history + history -c + # set HISTFILE + HISTFILE=~/.bash_history."$1" + # load new session's history + history -r + # see setsessioncwd() + eval "$(grep -s '# '"$1"'$' ~/.bash_session_cwd | tail -n 1)" + else + echo "invalid session" + false + fi +} + +# sets the current cwd as the default cwd for the session +setsessioncwd() { + local session + # guard against relative HISTFILE + if [[ "${HISTFILE#~/.bash_history.}" != "$HISTFILE" ]]; then + session="${HISTFILE#~/.bash_history.}" + if [[ "$session" =~ ^[a-z][a-z0-9]*$ ]]; then + printf 'cd %q # %s\n' "$PWD" "$session" >>~/.bash_session_cwd + else + echo "invalid session" + false + fi + else + echo "invalid session" + false + fi +} + +# saves the current working directory into the current history. +# does NOT save to the history *file*. +savecwd() { + history -s "$(printf 'cd %q' "$PWD")" +} -- cgit 1.4.1