Kann ich die Ausgabe einer benutzerdefinierten ZSH-Funktion in der Statusleiste von Tmux verwenden?

7

Ich habe eine Funktion in ~ / .zshrc definiert:

foo() { print "FOO" }

Ich möchte es in meiner Tmux-Statusleiste ausgeben. Ich habe dies zu ~ / .tmux.conf hinzugefügt:

set -g status-right "foo: #(foo)"

Aber ich sehe nur den statischen Teil davon; Die Funktionsausgabe fehlt. (Während meine eigentliche Funktion komplizierter ist, gilt dies auch für das obige triviale Beispiel.)

Es funktioniert gut, wenn ich ein Skript anstelle einer Funktion aufrufe. Was ist der Unterschied? Ist es möglich, dort eine Funktion zu verwenden?

Josh French
quelle

Antworten:

7

In der tmuxManpage wird die setOption angegeben:

#(shell-command) Erste Zeile der Befehlsausgabe

Aber ich bin mir ziemlich sicher, dass dies keine Shell- Funktionen bedeutet , da tmuxdie shell-commandin der aktuellen Shell-Sitzung nicht ausgeführt werden , sondern eine neue Instanz gestartet wird, die als nicht interaktiv startet , daher Ihre ~/.zshrcKonfiguration nicht als Quelle enthält und daher nicht weiß über darin definierte Funktionen.

Um dies zu umgehen, können Sie ein Shell- Skript mit dem Namen erstellenfoo

#!/bin/zsh -f

source ~/.zshrc   # or just the desired function to save parsing time
# use some functions defined in ~/.zshrc

print "FOO"
mpy
quelle
"Neue, nicht interaktive Shell" war die Information, nach der ich gesucht habe. Vielen Dank!
Josh French