aboutsummaryrefslogtreecommitdiffstats
path: root/.config/zsh/functions/0_terminal.zsh
diff options
context:
space:
mode:
authorDavid Runge <dave@sleepmap.de>2021-09-28 22:50:56 +0200
committerDavid Runge <dave@sleepmap.de>2021-09-28 22:50:56 +0200
commit3ac8e0f994839f3c972033bcb12421081ebeb683 (patch)
tree2a4f05cac56559686ea5d7aee8703e7511662c47 /.config/zsh/functions/0_terminal.zsh
parenta640bb766699706b4975416b85acd30191b79fa3 (diff)
downloaddotfiles-3ac8e0f994839f3c972033bcb12421081ebeb683.tar.gz
dotfiles-3ac8e0f994839f3c972033bcb12421081ebeb683.tar.bz2
dotfiles-3ac8e0f994839f3c972033bcb12421081ebeb683.tar.xz
dotfiles-3ac8e0f994839f3c972033bcb12421081ebeb683.zip
zsh: move includes to XDG compliant locations
.config/zsh/{functions,includes}/*: Move functions and includes to XDG compliant locations. .zshrc: Include functions and other includes from XDG compliant locations. Remove use of prepend-sudo function.
Diffstat (limited to '.config/zsh/functions/0_terminal.zsh')
-rw-r--r--.config/zsh/functions/0_terminal.zsh74
1 files changed, 74 insertions, 0 deletions
diff --git a/.config/zsh/functions/0_terminal.zsh b/.config/zsh/functions/0_terminal.zsh
new file mode 100644
index 0000000..85be89a
--- /dev/null
+++ b/.config/zsh/functions/0_terminal.zsh
@@ -0,0 +1,74 @@
+# Terminal functions
+#
+
+# Sets the terminal or terminal multiplexer window title.
+function set-window-title {
+ local title_format{,ted}
+ title_format='%s'
+ zformat -f title_formatted "$title_format" "s:$argv"
+
+ if [[ "$TERM" == screen* ]]; then
+ title_format="\ek%s\e\\"
+ else
+ title_format="\e]2;%s\a"
+ fi
+
+ printf "$title_format" "${(V%)title_formatted}"
+}
+
+# Sets the terminal tab title.
+function set-tab-title {
+ local title_format{,ted}
+ title_format='%s'
+ zformat -f title_formatted "$title_format" "s:$argv"
+
+ printf "\e]1;%s\a" ${(V%)title_formatted}
+}
+
+
+# Sets the tab and window titles with a given command.
+function _terminal-set-titles-with-command {
+ emulate -L zsh
+ setopt EXTENDED_GLOB
+
+ # Get the command name that is under job control.
+ if [[ "${2[(w)1]}" == (fg|%*)(\;|) ]]; then
+ # Get the job name, and, if missing, set it to the default %+.
+ local job_name="${${2[(wr)%*(\;|)]}:-%+}"
+
+ # Make a local copy for use in the subshell.
+ local -A jobtexts_from_parent_shell
+ jobtexts_from_parent_shell=(${(kv)jobtexts})
+
+ jobs "$job_name" 2>/dev/null > >(
+ read index discarded
+ # The index is already surrounded by brackets: [1].
+ _terminal-set-titles-with-command "${(e):-\$jobtexts_from_parent_shell$index}"
+ )
+ else
+ # Set the command name, or in the case of sudo or ssh, the next command.
+ local cmd="${${2[(wr)^(*=*|sudo|ssh|-*)]}:t}"
+ local truncated_cmd="${cmd/(#m)?(#c15,)/${MATCH[1,12]}...}"
+ unset MATCH
+
+ set-window-title "$cmd"
+ set-tab-title "$truncated_cmd"
+ fi
+}
+
+
+# Sets the tab and window titles with a given path.
+function _terminal-set-titles-with-path {
+ emulate -L zsh
+ setopt EXTENDED_GLOB
+
+ local absolute_path="${${1:a}:-$PWD}"
+ local abbreviated_path="${absolute_path/#$HOME/~}"
+ local truncated_path="${abbreviated_path/(#m)?(#c15,)/...${MATCH[-12,-1]}}"
+ unset MATCH
+
+ set-window-title "$abbreviated_path"
+ set-tab-title "$truncated_path"
+}
+
+