मैं चाहता हूं कि htop शुरू करने के तुरंत बाद tmux फलक शीर्षक ताज़ा हो जाए, इसलिए मैंने अपने config.fish में उपनाम जोड़ा:

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

लेकिन यह कुछ नहीं करता है। मैंने भी देरी से कोशिश की:

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

उसने भी कुछ नहीं किया - tmux अभी भी केवल डिफ़ॉल्ट अंतराल के बाद ताज़ा होता है, जो मेरे लिए बहुत लंबा है, और आप इसे केवल 1 सेकंड तक कम कर सकते हैं और कम नहीं।

मैंने क्या गलत किया और क्या यह संभव है कि मैं क्या करना चाहता हूं?

0
sandric 16 नवम्बर 2017, 06:45

1 उत्तर

सबसे बढ़िया उत्तर

जब हम समीकरण से alias को हटाते हैं तो शायद यह देखना थोड़ा आसान हो जाता है:

echo banana; sleep 5s; echo sausage

"केला" प्रतिध्वनित होगा, 5 सेकंड तक प्रतीक्षा करें और उसके बाद ही "सॉसेज" प्रिंट करें, इसलिए

htop; tmux refresh-client -S

Htop चलाएगा, इसके समाप्त होने तक प्रतीक्षा करें और फिर tmux refresh-client -S चलाएं, जिस बिंदु पर मछली फिर से अग्रभूमि प्रक्रिया होगी।


इसके बजाय शेल को tmux के साथ एकीकृत करने के लिए क्या करना होगा। अब, जाहिरा तौर पर tmux में नाम और शीर्षक के लिए एस्केप सीक्वेंस है। , इसलिए

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

विंडो शीर्षक को "htop" में बदल देता है।

मछली में ऐसी घटनाएँ होती हैं जिनसे कार्यों को बाध्य किया जा सकता है, इसलिए कुछ इस तरह

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

Tmux विंडो का नाम हमेशा कमांड लाइन पर सेट करेगा। कमांड समाप्त होने पर यह इसे रीसेट नहीं करेगा, इसलिए हमें दूसरे फ़ंक्शन की आवश्यकता है

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

ऐसा नहीं है कि यह सही है या कुछ भी - यह अभी भी बहुत कम चलने वाले आदेशों के लिए भी शीर्षक सेट करेगा, यह लंबी कमांड के लिए भी पूर्ण कमांडलाइन का उपयोग करेगा (शायद केवल $argv[1] का उपयोग करना बेहतर होगा)।

ध्यान दें कि इन कार्यों को config.fish या इसके द्वारा स्पष्ट रूप से सोर्स की गई फ़ाइल (या ~/.config/fish/conf.d/) में परिभाषित करना होगा, क्योंकि फ़ंक्शन फ़ाइलें स्वतः लोड हो जाती हैं, इसलिए मछली को ईवेंट के बारे में पता नहीं चलेगा .

1
faho 16 नवम्बर 2017, 16:40