[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/eat 792a98810e: Implement Zsh integration
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/eat 792a98810e: Implement Zsh integration |
Date: |
Thu, 30 Mar 2023 15:00:27 -0400 (EDT) |
branch: elpa/eat
commit 792a98810e4e43596cc720d546bf5447c2582632
Author: Akib Azmain Turja <akib@disroot.org>
Commit: Akib Azmain Turja <akib@disroot.org>
Implement Zsh integration
* integration/zsh: New file.
* eat.texi (Shell Integration): Add instructions for Zsh.
* integration/bash: Always return zero on succuss.
---
eat.texi | 9 ++++++-
integration/bash | 13 ++++++---
integration/zsh | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 99 insertions(+), 5 deletions(-)
diff --git a/eat.texi b/eat.texi
index 83e753a54f..7ee67bda30 100644
--- a/eat.texi
+++ b/eat.texi
@@ -374,7 +374,7 @@ Eat. When shell integration is enabled and the script is
loaded in
your shell, it'll take care of everything and provide many useful
features.
-Currently only GNU Bash is supported.
+Currently only GNU Bash and Zsh are supported.
If you use GNU Bash, put the following in your @samp{.bashrc} file:
@@ -383,6 +383,13 @@ If you use GNU Bash, put the following in your
@samp{.bashrc} file:
source "$EAT_SHELL_INTEGRATION_DIR/bash"
@end example
+If you use Zsh, put the following in your @samp{.zshrc} file:
+
+@example
+[ -n "$EAT_SHELL_INTEGRATION_DIR" ] && \
+ source "$EAT_SHELL_INTEGRATION_DIR/zsh"
+@end example
+
@cindex directory tracking
@cindex tracking directory
@cindex working directory tracking
diff --git a/integration/bash b/integration/bash
index 56a4129cbd..bfe18edae2 100644
--- a/integration/bash
+++ b/integration/bash
@@ -43,8 +43,8 @@ __eat_preexec () {
"$(printf "%s" "$__eat_current_command" | base64)"
# Send pre-exec sequence.
printf '\e]51;e;G\e\\'
- # Update title to including the command running.
- # "${PWD/$HOME/'~'}" converts "/home/akib/org/" to "~/org/".
+ # Update title to include the command running.
+ # "${PWD/$HOME/'~'}" converts "/home/akib/foo/" to "~/foo/".
# The next one is substituted with '$', or '#' if we're "root".
printf '\e]2;%s@%s:%s%s %s\e\\' "$USER" "$HOSTNAME" \
"${PWD/$HOME/'~'}" \
@@ -105,10 +105,15 @@ __eat_enable_integration ()
}
# Enable.
-test -z "$__eat_integration_enabled" && \
- test "${TERM:0:4}" = "eat-" && \
+if test -z "$__eat_integration_enabled" && \
+ test "${TERM:0:4}" = "eat-"
+then
__eat_enable_integration
+else
+ true
+fi
# Local Variables:
# mode: sh
+# sh-shell: bash
# End:
diff --git a/integration/zsh b/integration/zsh
new file mode 100644
index 0000000000..64e106e1d6
--- /dev/null
+++ b/integration/zsh
@@ -0,0 +1,82 @@
+# integration/bash --- Bash integration
+
+# Copyright (C) 2022 Akib Azmain Turja.
+
+# This file is not part of GNU Emacs.
+
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# For a full copy of the GNU General Public License
+# see <https://www.gnu.org/licenses/>.
+
+__eat_precmd () {
+ __eat_exit_status="$?"
+ # Send exit status.
+ if test -n "$__eat_current_command"
+ then
+ printf '\e]51;e;H;%i\e\\' "$__eat_exit_status"
+ fi
+ __eat_current_command=""
+ # Send the current working directory, for directory tracking.
+ printf '\e]51;e;A;%s;%s\e\\' "$(printf "%s" "$HOSTNAME" | base64)" \
+ "$(printf "%s" "$PWD" | base64)"
+ # Update title.
+ # "${PWD/$HOME/'~'}" converts "/home/akib/org/" to "~/org/".
+ # The next one is substituted with '$', or '#' if we're "root".
+ printf '\e]2;%s@%s:%s%s\e\\' "$USER" "$HOST" "${PWD/$HOME/~}" \
+ "$(test $UID -eq 0 && echo '#' || echo '%')"
+}
+
+__eat_preexec () {
+ __eat_current_command="$1"
+ # Send current command.
+ printf '\e]51;e;F;%s\e\\' \
+ "$(printf "%s" "$__eat_current_command" | base64)"
+ # Send pre-exec sequence.
+ printf '\e]51;e;G\e\\'
+ # Update title to include the command running.
+ # "${PWD/$HOME/~}" converts "/home/akib/foo/" to "~/foo/".
+ # The next one is substituted with '%', or '#' if we're "root".
+ printf '\e]2;%s@%s:%s%s %s\e\\' "$USER" "$HOST" "${PWD/$HOME/~}" \
+ "$(test $UID -eq 0 && echo '#' || echo '%')" \
+ "$__eat_current_command"
+}
+
+__eat_enable_integration ()
+{
+ __eat_integration_enabled=yes
+ __eat_current_command=""
+ __eat_exit_status=0
+ local __eat_prompt_start="$(printf '\e]51;e;B\e\\')"
+ local __eat_prompt_end="$(printf '\e]51;e;C\e\\')"
+ local __eat_continuation_start="$(printf '\e]51;e;D\e\\')"
+ local __eat_continuation_end="$(printf '\e]51;e;E\e\\')"
+ PS1="%{$__eat_prompt_start%}$PS1%{$__eat_prompt_end%}"
+ PS2="%{$__eat_continuation_start%}$PS2%{$__eat_continuation_end%}"
+ # TODO: What to do about RPS1 and friends?
+ autoload -Uz add-zsh-hook
+ add-zsh-hook precmd __eat_precmd
+ add-zsh-hook preexec __eat_preexec
+}
+
+# Enable.
+if test -z "$__eat_integration_enabled" && \
+ test "${TERM:0:4}" = "eat-"
+then
+ __eat_enable_integration
+else
+ true
+fi
+
+# Local Variables:
+# mode: sh
+# sh-shell: zsh
+# End:
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [nongnu] elpa/eat 792a98810e: Implement Zsh integration,
ELPA Syncer <=