Terminal komutu için klavye kısayolu nasıl oluşturulur


16

Komutlar için klavye kısayolları ayarlama yeteneği için genellikle git ve sevilen iTerm2 ile çalışırım. Örneğin, CTRL+ ENTERolarak ayarladım git status.

GNOME terminali ile bu mümkün mü yoksa bunu başarmak için başka bir seçenek önerebilir misiniz?

Yanıtlar:


17

bind -xBir komutu Bash'teki bir kısayola bağlamak için kullanabilirsiniz . Örneğin, git statuskomutu Crtl+ pkısayoluna bağlamak için şunları kullanabilirsiniz:

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

~/.bashrcHatırlamak için dosyaya koyun . Man sayfasından:

-x keyseq: kabuk komutu

Keyseq her girildiğinde yürütülecek shell-komutuna neden olur. Kabuk komutu yürütüldüğünde, kabuk READLINE_LINE değişkenini Readline satır arabelleğinin içeriğine ve READLINE_POINT değişkenini ekleme noktasının geçerli konumuna ayarlar. Yürütülen komut READLINE_LINE veya READLINE_POINT değerini değiştirirse, bu yeni değerler düzenleme durumuna yansıtılır.


Muhteşem. Zsh kullanıyorum ama bindkey denen bir eşdeğeri var . Yani istediğimi elde etmek için bunu yaptım: bindkey -s '^[^M' 'git status\n'hangi ALT + ENTER bağlanır.
— Mniess

1
bind -x '"\C-k":firefox'Bunu kullanıyorum ama çalışmıyor
— alhelal

1
Bu kabukta çalışıyor, ama her zaman istiyorum.
— alhelal

1
~/.bashrcDosyanın sonuna koy . Hala işe yaramazsa, kontrol bu
— Nykakin

Kullanmayla ilgili daha fazla bilgiyi bindburada bulabilirsiniz: stackoverflow.com/a/4201274/712334
— Josh Habdas

2

1. Otomatik olarak komutunuzun çıktısını gösteren yeni bir terminal penceresi açın

Komut çalıştırıldıktan sonra terminali açık tutmanız gerektiğinden, şunu yazın:

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

kısayol tuşu kombinasyonu altında, işi yapacak. Bu bir açılacak yeni gnome-terminal pencere ve içindeki komutunu çalıştırın.

Kısayola ekle

Seçin: Sistem Ayarları> "Klavye"> "Kısayollar"> "Özel Kısayollar". "+" İşaretini tıklayın ve şu komutu ekleyin:

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

için Ctrl+Enter

Not

Önerilen kısayolunuz çalışıyor olsa da , en azından yeni bir sayfaya atlamak için kısayolla çakıştığından Ctrl+ 'dan sonra başka bir tuş kombinasyonu seçebilirsiniz .EnterLibreOffice

açıklama

gnome-terminalKomut satırından yeni bir pencere açmak ve içinde bir komut çalıştırmak için aşağıdakileri kullanabilirsiniz:

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

Bununla birlikte, komut başarıyla çalışsa da, çıktıyı okuyabilmeniz için terminal penceresi hemen kapanacaktır.

Bölüm:

read line

Enterkomut çalıştıktan sonra terminali (vuruncaya kadar ) açık tutmaktır .

Diğer komutlar

Bu şekilde, terminalde herhangi bir (karmaşık) komutu hemen kapatmadan çalıştırabilirsiniz:

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

( wmctrlkurulu ise) çıktı verir :

resim açıklamasını buraya girin

Basıldıktan Entersonra terminal kapanacaktır.

2. O anda etkin olan gnome terminali penceresinde bir komut çalıştırma

Tabii ki olabilir bir kısayol tuşu (eğer varsayarak altında basit tek astar koyun xdotoolyüklü):

xdotool type "<command>"

Ancak bu , herhangi bir uygulamada komutu körü körüne yazacaktır ve komutu yazmak en temiz seçenek değildir.

Bu nedenle aşağıdaki küçük komut dosyası:

  • etkin pencerenin bir gnome-terminalpencere olup olmadığını gösterir (pidine göre)
  • öyleyse, komutu etkin pencereye yapıştırırgnome-terminal , tuşuna basar Return.
    Değilse, komut dosyası hiçbir şey yapmaz , Yani diğer uygulamalara yapışmaz.

Komut dosyası, hedeflenen komutu bağımsız değişken olarak aldığından, birden çok kısayolun altına birden çok komut koyabilirsiniz.

Senaryo

#!/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)

Nasıl kullanılır

  1. Betiğin ihtiyacı var xdotool

    sudo uygun-get install xdotool

  2. Henüz ~/binyoksa bir dizin oluşturun, oturumu kapatın / oturum açın veya çalıştırınsource ~/.profile

  3. Yukarıdaki komut dosyasını boş bir dosyaya kopyalayın, gterm_keys(uzantı yok) olarak kaydedin ~/bin, yürütülebilir yapın

Şimdi komutu ekleyerek en ön pencerede bir kısayol tuşundan herhangi bir komutu çalıştırabilirsiniz gnome-terminal:

gterm_keys <command>

bölümünde açıklandığı gibi bir kısayol tuşuna [1]


Merhaba Jacob, cevabın için teşekkürler. Bununla birlikte, bind (ve bindkey) çözümleri kabuk yerleşikleri oldukları için daha iyi olduğunu düşünüyorum. Bu şekilde yanlışlıkla Libreoffice'e "git status" yazmayacağım. ;)
— mniess

Mniess Cevabın iyi olduğunu kabul ediyorum, ancak kayıt için, cevabımı dikkatlice okursanız, LibreOffice'de yazdırıyorsanız, bu olamaz . ama sadece indirdin mi ?? Bu çok komik.
— Jacob Vlijm

Biliyorum, script çalışan uygulamayı kontrol eder. Ben inmedim. Bu kadar ayrıntılı bir cevap yazmaya zaman ayırdığınız için teşekkür etmek için yorumu yazdım.
— mniess

mniess Ah, sonuçlara atladığım için üzgünüm! İkisi mükemmel senkronize oldu. Senin olmadığına sevindim. "Sadece" umursamıyorum bir aşağılık oy.
— Jacob Vlijm

2

Durumda zsh olarak, yerine Bash aşağıdaki satırı kullanılan ~/.zshrcbağlar git statusiçin ALT+ ENTER.

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

Bash'de ALT+ almak ENTERiçin bu satırı kullanıyorum:

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

Kişi diğer anahtarların bağlantılarını nasıl belirleyebilir?
— Josh Habdas

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.