#!/bin/bash case "$TERM" in eterm*) SELECTED_EDITOR='emacsclient' EDITOR=$SELECTED_EDITOR VISUAL=$SELECTED_EDITOR export SELECTED_EDITOR EDITOR VISUAL # The following uses the variable _EMACS_BUFFER to store some state _emacs_quote() { local str="$*" str="${str//\\/\\\\}" str="${str//\"/\\\"}" str="\"${str}\"" printf '%s' "$str" } _emacs_rename_terminal() { local name="$(_emacs_quote "$(_emacs_get_desired_buffer_name)")" if [[ -n $_EMACS_BUFFER ]]; then local buffer="(get-buffer $_EMACS_BUFFER)" else local buffer='(window-buffer (selected-window))' fi _EMACS_BUFFER="$(emacsclient -e "(with-current-buffer ${buffer} (rename-buffer ${name} t)))" 2>/dev/null)" } _emacs_get_short_cwd() { local base=$1 local suffix='' if [[ $base =~ (/(src|pkg|doc|pkg-libre|src-libre|trunk|tags|branches))*$ ]]; then suffix=$BASH_REMATCH base=${base%$suffix} fi base=${base##*/} echo ${base}${suffix} } _emacs_get_desired_buffer_name() { echo "*ansi-term*<$(_emacs_get_short_cwd "$PWD")>" } PROMPT_COMMAND='_emacs_rename_terminal "$(_emacs_get_desired_buffer_name)"' :;; esac