2017-11-16 8 views
0

I tmux Scheibe Titel wollen sofort zu aktualisieren, nachdem ich htop beginnen, so fügte ich hinzu Alias ​​in meiner config.fish:tmux aktualisieren Client Anruf von Fisch Shell alias

alias h "htop;tmux refresh-client -S" 

Aber es tut sich nichts. Ich habe auch mit Verzögerung versucht:

alias h "htop;sleep 0.1;tmux refresh-client -S" 

das auch nichts tat - tmux noch nur nach Standardintervall aktualisiert, das für mich zu lang ist, und man kann es nur auf 1 Sekunde verringern und nicht weniger.

Was habe ich falsch gemacht und ist es überhaupt möglich was ich machen möchte?

Antwort

1

Vielleicht ist dies ein wenig leichter zu sehen, wenn wir die alias aus der Gleichung entfernen:

echo banana; sleep 5s; echo sausage 

wird echo „Banane“, 5 Sekunden warten und erst dann drucken „Wurst“, so

htop; tmux refresh-client -S 

wird htop laufen, warten bis es fertig ist und dann run tmux refresh-client -S, an diesem Punkt Fisch wird wieder der Vordergrund Prozess sein.


Was stattdessen getan werden müsste ist die Schale mit tmux zu integrieren zu bekommen. Nun, offenbar hat tmux eine Escape-Sequenz für Names and titles, so

printf '\ekhtop\e\\' # \e is \033 - the escape character 

ändert den Fenstertitel auf "htop".

Fisch hat Ereignisse, die Funktionen gebunden werden können, so etwas wie

function tmux_name --on-event fish_preexec 
    printf '\ek%s\e\\' "$argv" # the argument for preexec is the commandline about to be executed 
end 

den tmux Fensternamen immer auf die Befehlszeile festgelegt. Dies wird nicht zurückgesetzt, wenn der Befehl beendet ist, so brauchen wir eine zweite Funktion

function tmux_reset_name --on-event fish_postexec 
    # $argv for postexec is also the commandline 
    # so we can't use it. Just hardcode "fish". 
    printf '\ek%s\e\\' fish 
end 

Nicht, dass dies perfekt oder so - es immer noch den Titel für sehr kurzen Lauf Befehle sogar eingestellt wird, ist es Ich benutze die volle Befehlszeile auch für lange Befehle (vielleicht wäre nur $ argv [1] besser).

Beachten Sie, dass diese Funktionen in config.fish oder einer Datei definiert werden müssen, die explizit von ihr stammt (oder ~/.config/fish/conf.d /), da Funktionsdateien automatisch geladen werden, also Fische nicht kenne die Veranstaltung.

+0

Genau das habe ich gesucht! Danke vielmals! Übrigens, vielleicht sollte das zu tmux Fischquellen als Standard hinzugefügt werden? – sandric

+0

Was tmux Fischquellen? Es gibt das tmux-Projekt, bei dem AFAIK nichts Fischspezifisches macht, und dann gibt es Fische, die tmux-as-a-terminal handhaben, aber nichts dergleichen, das das Standard-tmux-Verhalten durch sein eigenes ersetzt. – faho

Verwandte Themen