2010-02-02 9 views
8

मुझे पता है कि मैं अपने zsh प्रॉम्प्ट में date कमांड निष्पादित कर सकता हूं। हालांकि, यह पुराना समय दिखाता है; वर्तमान समय को देखने के लिए, मुझे <return> पर हिट करना होगा और वर्तमान समय के साथ एक नया संकेत प्राप्त करना होगा।zsh प्रॉम्प्ट में निरंतर अद्यतन घड़ी?

क्या हर दूसरे को लगातार अपडेट करने के लिए zsh प्रॉम्प्ट को कॉन्फ़िगर करने का कोई तरीका है?

उत्तर

8

यह एक मानक zsh प्रॉम्प्ट (या बैश, या अन्य गोले) में अप्रिय होगा ....

मेरा सुझाव है कि आप जीएनयू स्क्रीन का उपयोग करना बेहतर होगा।

स्क्रीन में एक स्थिति रेखा हो सकती है जो समय दिखा सकती है। Here's an example screenrc नमूना देखने के लिए "रेड हैट मैगज़ीन जीएनयू स्क्रीन के लिए एक गाइड" तक स्क्रॉल करें (मैं इसे यहां पुन: पेश करूंगा), जब स्क्रीन चलती है, टर्मिनल के निचले दाएं कोने में वर्तमान समय दिखाएं:

~/.screenrc

 
hardstatus alwayslastline 
hardstatus string '%{= kG}[ %{G}%H %{g}][%= %{=kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B}%Y-%m-%d %{W}%c %{g}]' 

# Default screens 
screen -t shell1  0 
screen -t shell2  1 

http://www.gnu.org/software/screen/

5

मेरे लिए एक सुखद अनुरोध की तरह लगता है। यदि कुछ भी संकेत प्रदर्शित होने पर समय दिखाने से ज्यादा समझ में आता है।

सौभाग्य से Peter Stephenson posted a technique। .zshrc में कुछ इस तरह का प्रयास करें:

PROMPT="[%T] %[email protected]%M %~ %# " 

schedprompt() { 
    emulate -L zsh 
    zmodload -i zsh/sched 

    # Remove existing event, so that multiple calls to 
    # "schedprompt" work OK. (You could put one in precmd to push 
    # the timer 30 seconds into the future, for example.) 
    integer i=${"${(@)zsh_scheduled_events#*:*:}"[(I)schedprompt]} 
    ((i)) && sched -$i 

    # Test that zle is running before calling the widget (recommended 
    # to avoid error messages). 
    # Otherwise it updates on entry to zle, so there's no loss. 
    zle && zle reset-prompt 

    # This ensures we're not too far off the start of the minute 
    sched +30 schedprompt 
} 

schedprompt 
+0

बस पोस्ट अद्यतन हर दूसरे के लिए कहा देखा। मैंने कोशिश नहीं की है, लेकिन मुझे लगता है कि शेडप्रोम्प्ट() के अंत में "शेड +1 शेडप्रोम्प्ट" का अनुमान लगाया जाएगा। –

+0

रीसेट-प्रॉम्प्ट पर कॉल को चालू करता है टर्म विंडो में किसी भी स्क्रॉलिंग को पूर्ववत करता है। पीछे की ओर स्क्रॉल करना और किसी भी समय के लिए वहां रहना मुश्किल बनाता है। –

+0

यह कमाल है! न केवल यह वर्तमान समय दिखाता है बल्कि यह टाइमस्टैम्प निष्पादित आदेश भी दिखाता है। स्क्रॉलिंग समस्या के बारे में - आपको बस अपनी पसंद के टर्मिनल की 'आउटपुट पर स्क्रॉल' सुविधा बंद करने की आवश्यकता है। – defhlt

34

नोट: मैं a similar question के लिए इस सवाल का जवाब लिखा था, लेकिन देखकर कैसे इस सवाल का अधिक दृश्य दिखाई देते हैं मैं अपने जवाब यहाँ reposting लगता है कि उपयोगी होगा।

यह वास्तव में अजीब हैक का उपयोग किए बिना संभव है। मैं अपने .zshrc

RPROMPT='[%D{%L:%M:%S %p}]' 

TMOUT=1 

TRAPALRM() { 
    zle reset-prompt 
} 

में यह मिल गया है TRAPALRM समारोह हर TMOUT सेकंड (इस मामले 1 में) कहा जाता हो जाता है, और यहाँ यह एक त्वरित ताज़ा करता है, और जब तक कोई आदेश निष्पादन शुरू होता है ऐसा नहीं करता है (और यह प्रवेश करने से पहले प्रॉम्प्ट पर टाइप की गई किसी भी चीज में हस्तक्षेप नहीं करता है)।

स्रोत: http://www.zsh.org/mla/users/2007/msg00944.html (! यह 2007 से है)

+0

मैं पुष्टि कर सकता हूं कि यह वास्तव में काम करता है, यह कितना आसान लगता है। आपको वास्तव में 'टीएमओयूटी = है; TRAPALRM() {zle reset-prompt} 'आपके' $ HOME/.zshrc' फ़ाइल में हिस्सा है और आप जाने के लिए अच्छे हैं। –

+3

यह स्वीकार्य उत्तर होना चाहिए। मैं 1 सेकंड से अधिक समय समाप्ति की भी सिफारिश करता हूं। मैंने 'TMOUT = 30' का उपयोग किया। मैंने देखा कि मेरा खोल लटक रहा था जब यह हर सेकेंड था। – brock

+1

इसके अलावा, ध्यान दें कि इससे प्रतिलिपि बनाने में अधिक परेशानी हो सकती है। – d33tah

संबंधित मुद्दे