about summary refs log tree commit diff
diff options
context:
space:
mode:
authorWilliam Carroll <wpcarro@gmail.com>2019-04-03T16·19+0100
committerWilliam Carroll <wpcarro@gmail.com>2019-04-03T16·19+0100
commit4c1fbe01f64b18736e499c7600e6a0776c2c3436 (patch)
treea1fea80254ec65fec703b57c6bb6090af5a23688
parent10aef4e40d886473238e81d8f2e2866e3d99f4f4 (diff)
Fix $DISPLAY issues with Tmux
Ensure that DISPLAY is set correctly so that commands executed in Tmux
that require X windows don't disappear.
-rw-r--r--configs/shared/zsh/.zshrc6
-rw-r--r--configs/shared/zsh/functions.zsh15
2 files changed, 21 insertions, 0 deletions
diff --git a/configs/shared/zsh/.zshrc b/configs/shared/zsh/.zshrc
index db60e3841059..b4ccd66a16c6 100644
--- a/configs/shared/zsh/.zshrc
+++ b/configs/shared/zsh/.zshrc
@@ -47,3 +47,9 @@ source "$DOTFILES/configs/shared/zsh/variables.zsh"
 source "$DOTFILES/configs/shared/zsh/aliases.zsh"
 source "$DOTFILES/configs/shared/zsh/functions.zsh"
 source "$DOTFILES/configs/shared/zsh/zle.zsh"
+
+preexec() {
+  # `preexec` runs before every command is run.
+  update_x11_forwarding
+}
+
diff --git a/configs/shared/zsh/functions.zsh b/configs/shared/zsh/functions.zsh
index 645426cd9044..c0f6e21e4613 100644
--- a/configs/shared/zsh/functions.zsh
+++ b/configs/shared/zsh/functions.zsh
@@ -202,6 +202,21 @@ kush() {
 }
 
 # Misc
+update_x11_forwarding() {
+  # Sometime Tmux misbehaves with X11 applications (e.g. Emacs). This is because
+  # the DISPLAY variable is not set properly to `:0`. This function w
+  # Cache the DISPLAY when outside of Tmux. When inside of Tmux, use the cached
+  # value for DISPLAY.
+  #
+  # This cooperates with my `preexec` function, which runs before every command.
+  # Adapted from here: http://alexteichman.com/octo/blog/2014/01/01/x11-forwarding-and-terminal-multiplexers/
+  if [ -z "$TMUX" ]; then
+    echo $DISPLAY > ~/.display.txt
+  else
+    export DISPLAY=$(cat ~/.display.txt)
+  fi
+}
+
 monzo_balance() {
   # Return the balance of my Monzo bank account. Intended to be used in my i3
   # status bar.