टर्मिनल कमांड के लिए कीबोर्ड शॉर्टकट कैसे बनाएं


16

मैं अक्सर कमांड के लिए कीबोर्ड शॉर्टकट सेट करने की क्षमता के लिए गिट और प्यार iTerm2 के साथ काम करता हूं। उदाहरण के लिए, मैंने CTRL+ ENTERपर सेट किया git status

क्या यह सूक्ति-टर्मिनल के साथ संभव है या क्या आप इसे प्राप्त करने के लिए किसी अन्य विकल्प की सिफारिश कर सकते हैं?

जवाबों:


17

आप bind -xबैश में शॉर्टकट के लिए कमांड को बाँधने के लिए उपयोग कर सकते हैं । उदाहरण के लिए, git statusकमांड को Crtl+ pशॉर्टकट से बाँधने के लिए जिसका आप उपयोग कर सकते हैं:

 bind -x '"\C-p":git status'

इसे ~/.bashrcयाद रखने के लिए फाइल में डालें । मैन पेज से:

-x कीसेक: शेल-कमांड

जब भी कीसेक दर्ज किया जाता है, तो शेल-कमांड निष्पादित किया जाता है। जब शेल-कमांड निष्पादित होता है, तो शेल रीडलाइन लाइन बफर की सामग्री के लिए READLINE_LINE चर और प्रविष्टि बिंदु के वर्तमान स्थान पर READLINE_POINT चर सेट करता है। यदि निष्पादित कमांड READLINE_LINE या READLINE_POINT का मान बदलता है, तो वे नए मान संपादन स्थिति में दिखाई देंगे।


बहुत बढ़िया। मैं zsh उपयोग कर रहा हूँ लेकिन यह है कि एक बराबर कहा जाता है bindkey । इसलिए मैं जो चाहता हूं उसे हासिल करने के लिए: bindkey -s '^[^M' 'git status\n'जो ALT + ENTER से बांधता है।
मैनीस

1
bind -x '"\C-k":firefox'मैं इस का उपयोग लेकिन काम करता है नहीं है
alhelal

1
यह शेल में काम करता है, लेकिन मैं हर समय चाहता हूं।
अल्हलाल

1
इसे ~/.bashrcफ़ाइल के अंत में रखें । अगर यह अभी भी काम नहीं करता है, तो इसे
Nyakakin

उपयोग करने के बारे में अधिक जानकारी bindयहां पाई जा सकती है: stackoverflow.com/a/4201274/712334
जोश हबडास

2

1. स्वचालित रूप से एक नया टर्मिनल विंडो खोलें, जो आपकी कमांड का आउटपुट दिखाता है

चूंकि कमांड चलाने के बाद आपको टर्मिनल को खुला रखने की आवश्यकता होती है, इसलिए:

gnome-terminal -e 'bash -c "git status; read line"'

एक शॉर्टकट कुंजी संयोजन के तहत, काम करेंगे। यह एक नई gnome-terminal विंडो खोलेगा और उसके अंदर कमांड रन करेगा।

इसे शॉर्टकट में जोड़ें

चुनें: सिस्टम सेटिंग्स> "कीबोर्ड"> "शॉर्टकट"> "कस्टम शॉर्टकट"। "+" पर क्लिक करें और कमांड जोड़ें:

gnome-terminal -e 'bash -c "git status; read line"'

से Ctrl+ तकEnter

ध्यान दें

यद्यपि आपके सुझाए गए शॉर्टकट काम करते हैं, आप तब एक और कुंजी संयोजन चुन सकते हैं Ctrl+ Enter, क्योंकि यह कम से कमLibreOffice शॉर्टकट के साथ एक नए पृष्ठ पर जाने के लिए टकराता है।

व्याख्या

gnome-terminalकमांड लाइन से एक नई विंडो खोली है, और इसमें एक कमांड चलाने के लिए, आप इसका उपयोग कर सकते हैं:

gnome-terminal -e 'bash -c <command>'

हालाँकि, हालांकि कमांड सफलतापूर्वक चलेगा, टर्मिनल विंडो तुरंत बंद हो जाएगी इससे पहले कि आप आउटपुट पढ़ सकें।

अनुभाग:

read line

तब टर्मिनल को खुला रखने के लिए (जब तक आप हिट नहीं करते Enter) कमांड चलने के बाद।

अन्य आदेश

इस तरह, आप टर्मिनल में किसी भी (जटिल) कमांड को चला सकते हैं, उसे तुरंत बंद किए बिना:

$ gnome-terminal -e 'bash -c "wmctrl -d; read line"'

उत्पादन होगा (यदि wmctrlस्थापित है):

यहाँ छवि विवरण दर्ज करें

दबाने Enterके बाद टर्मिनल बंद हो जाएगा।

2. वर्तमान में सक्रिय सूक्ति-टर्मिनल विंडो में एक कमांड चलाना

बेशक आप एक शॉर्टकट कुंजी के तहत एक साधारण एक-लाइनर रख सकते हैं (यह मानते हुए कि आपने xdotoolइंस्टॉल किया है):

xdotool type "<command>"

हालांकि यह किसी भी एप्लिकेशन में आंखें बंद करके टाइप करेगा , और कमांड टाइप करना सबसे साफ विकल्प नहीं है।

नीचे छोटी स्क्रिप्ट इसलिए:

  • लगता है कि सक्रिय विंडो एक gnome-terminalविंडो है (इसके पीआईडी ​​द्वारा)
  • यदि ऐसा है, तो यह सक्रिय विंडो में कमांड को पेस्ट करता है gnome-terminal, दबाता है Return
    यदि नहीं, तो स्क्रिप्ट कुछ भी नहीं करता है , इसलिए यह अन्य अनुप्रयोगों में पेस्ट नहीं करेगा।

चूंकि स्क्रिप्ट लक्षित कमांड को तर्क के रूप में लेती है, आप कई शॉर्टकट के तहत कई कमांड रख सकते हैं।

लिपी

#!/usr/bin/env python3
import subprocess
import sys
import time

app = "gnome-terminal"
s = (" ").join(sys.argv[1:])

def get(cmd):
    return subprocess.check_output(cmd).decode("utf-8").strip()

def front(app):
    try:
        # see if gnome-terminal is running at all (raising error if not)
        app = get(["pgrep", app]) 
    except subprocess.CalledProcessError:
        app = False
    if app:
        # if so, see if the active window belongs to gnome-terminal comparing pids)
        active = get(["xdotool", "getwindowpid", get(["xdotool", "getactivewindow"])])
        return True if app == active else False

if front(app):
    # copy command to clipboard
    cm1 = ["/bin/bash", "-c", 'printf "'+s+'" | xclip -selection clipboard']
    # paste in terminal window
    cm2 = ["xdotool", "key", "Control_L+Shift_L+v"]
    # press return
    cm3 = ["xdotool", "key", "Return"]
    for cm in [cm1, cm2, cm3]:
        subprocess.call(cm)

कैसे इस्तेमाल करे

  1. स्क्रिप्ट की जरूरत है xdotool

    sudo apt-get install xdotool

  2. ~/binयदि यह अभी तक मौजूद नहीं है, तो एक निर्देशिका बनाएँ , या तो लॉग आउट करें या अंदर चलाएंsource ~/.profile

  3. एक खाली फ़ाइल में ऊपर की स्क्रिप्ट को कॉपी करें, इसे gterm_keys(कोई एक्सटेंशन नहीं) के रूप में सहेजें ~/bin, इसे निष्पादन योग्य बनाएं

अब आप कमांड जोड़कर किसी भी कमांड को शॉर्टकट की से, सबसे फ्रंट gnome-terminalविंडो में चला सकते हैं :

gterm_keys <command>

में वर्णित के रूप में एक शॉर्टकट कुंजी के लिए [1]


हाय जैकब, आपके उत्तर के लिए धन्यवाद। मुझे लगता है, हालांकि, बाँध (और बाइंडकी) समाधान बेहतर हैं क्योंकि वे शेल-बिलिन हैं। इस तरह मैं गलती से लिबरऑफिस में "गिट स्टेटस" नहीं लिखूंगा। ;)
मेन्नेस

@ जवाब मैं मानता हूं कि उत्तर एक अच्छा है, लेकिन रिकॉर्ड के लिए, यदि आप मेरे उत्तर को ध्यान से पढ़ते हैं, तो लिब्रे ऑफिस में छपाई होती है, ऐसा नहीं हो सकता । लेकिन क्या आपने सिर्फ अपमान किया है ?? यह प्रफुल्लित करने वाला है।
जैकब व्लिजम

मुझे पता है, स्क्रिप्ट रनिंग ऐप की जांच करती है। मैं नीचे नहीं था। इस तरह के एक विस्तृत जवाब लिखने के लिए समय निकालने के लिए धन्यवाद करने के लिए मैंने टिप्पणी लिखी।
मनिसे

@ एम्नेस डे, निष्कर्ष पर कूदने के लिए खेद है! दोनों पूरी तरह से समन्वयित हुए। मुझे खुशी है कि यह आप नहीं थे। "बस मैं एक बुरा सोचता हूँ मुझे कोई आपत्ति नहीं है।
याकूब व्लिजम

2

बाश के बजाए मामले में zsh का उपयोग किया जाता है, निम्न पंक्ति ~/.zshrcबांधने के git statusलिए ALT+ ENTER

bindkey -s '^[^M' 'git status\n'

बैश में ALT+ पाने के लिए ENTER, मैं इस लाइन का उपयोग करता हूं:

bind -x '"\e\C-m":git status'

अन्य कुंजियों के लिए बाइंडिंग की पहचान करने के बारे में कैसे जाना जाएगा?
जोश हबदास

1
@JoshHabdas इधर देखो unix.stackexchange.com/questions/76566/...
mniess
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.