Son terminal penceresini bir kısayol tuşu ile nasıl açabilirim?


11

Hızlı komutlar yapmak için terminali çok sık kullanıyorum ve sonra arka planda bırakıyorum, böylece çalışırken 20'den fazla terminal oturumu açıyorum. Bunun nedeni, kısayol tuşunu kullanmak ve bir komut yazmak için çok hızlı olmasıdır.

Kısayol tuşunu, yeni bir pencere oluşturmak yerine son terminal penceremi açmamın bir yolu var mı?


1
bunun düzenlenmiş bir sürümü bir çözüm olabilir mi? Tek bir terminal penceresi için bunu yapmak ve tamamen kaybolmasını sağlamak çok daha basit olacaktır. askubuntu.com/a/595244/72216 bana bildirin, cevabı easliy dönüştürebilirim. Terminal pencerenizin (pencere) adı nedir?
Jacob Vlijm

2
Deneyin bu
AB

Kullandığım pencere adı sadece "Terminal". Ancak terminaldeki sekmeleri kullanırsam, orada bulunan komut dosyası yöntemi yine de çalışır mı? (örn. ctrl + shift + T) Hangi bilgisayarı sshed ettiğimi tanımlamak için onları da yeniden adlandırıyorum.
Klik

"Terminal" dizgisi olduğu sürece orada olur. Dava mı?
Jacob Vlijm

@JacobVlijm Durum böyle değil. Sık sık yaptığım şeye bağlı olarak adı "ssh" veya "Local" olarak değiştiriyorum. Yine de benzersiz bir önek eklemek için başlık değiştirme komutumu değiştirebilir. Yani '%.%' Veya bunun gibi bir şey.
Klik

Yanıtlar:


13

Konum 10'da Unity başlatıcı kenar çubuğuma sabitlenmiş bir terminalim var. Bu şekilde en son terminal penceresini en üste getiren başlatıcı simgesini "tıklamak" için Super+ tuşuna basabilirim 0.

resim açıklamasını buraya girin

Başlatıcıda olması sizin için uygunsa (ilk 10 konumdan biri, aksi takdirde bir kısayol alamaz!), Bu işe yarayacaktır.


Oh, bu harika bir fikir! Bu yanıtı beğendim, ancak diğer insanların ne bulduğunu görmek için bekleyeceğim. Terminali bulmak ve öne getirmek için xdotool kullanarak bir senaryo yapmayı düşünüyordum.
Klik

Bence bu çözüm en kolay uygulanabilir ve tam da aradığım amaca hizmet ediyor. Bu nedenle bunu cevap olarak işaretleyeceğim.
Klik

10

Kullandığım guake ve onunla çok mutluyum. F12 tuşuna basın, bir terminal penceresi görünür, F12 tuşuna tekrar basın, kaybolur ancak arka planda çalışmaya devam eder. Ayrıca: gerçekten harika görünüyor.


Burada guake için başka bir oy. Birden fazla (farklı boyutta) monitör kullanıyorsanız, bazı sürümlerin düzgün çalışmasını sağlamak için bir düzeltmeye ihtiyacı olduğunu belirtmek gerekir - yine de buna değer.
Holloway

O kadar bağımlı hale geldi ki xmonad'a geçtiğimde bunu taklit ettim. Olmalı!
Tony Martin

6

Komut dosyasını aşağıdaki tuş kombinasyonuna koyabilirsiniz. Tuş kombinasyonuna basarsanız, terminal pencereleri kaybolur (tamamen). Tekrar basın, tıpkı sizin durumunuzda olduğu gibi tekrar açılırlar.

Yapmanız gereken tek şey (bir kez), terminalinizin pencere adına tanımlayıcı dizeyi eklemektir (çoğu durumda terminal penceresi aynı ada sahiptir)

Kullanmak için

Her ikisini de yükleyin xdotoolve wmctrl:

sudo apt-get install xdotool
sudo apt-get install wmctrl
  1. Komut dosyasını boş bir dosyaya kopyalayın, hide_terminal.py
  2. Baş bölümünde, terminal penceresinin adının tanımlayıcı dizesini ayarlayın
  3. Bir tuş kombinasyonu altında çalıştırın:

    python3 /path/to/hide_terminal.py
    

Senaryo

#!/usr/bin/env python3
import subprocess
import os

home = os.environ["HOME"]
hidden_windowid = home+"/.window_id.txt"

get = lambda cmd: subprocess.check_output(cmd).decode("utf-8")
# --- set the identifying string in the terminal window's name below (you mentioned "Terminal"
window_idstring = "Special_window"
# ---
def execute(cmd):
    subprocess.check_call(cmd)

w_id = [l.split()[0] for l in get(["wmctrl", "-l"]).splitlines() if window_idstring in l]
if len(w_id) !=0:
    for w in w_id:
        execute(["xdotool", "windowunmap", w])
        with open(hidden_windowid, "a") as out:
            out.write(w+"\n")
else:
    try:
        with open(hidden_windowid) as read:
            for w in [w.strip() for w in read.readlines()]:
                try:
                    execute(["xdotool", "windowmap", w])
                except subprocess.CalledProcessError:
                    pass
        with open(hidden_windowid, "wt") as clear:
            clear.write("")
    except FileNotFoundError:
        pass

1
Her şey için senaryonuz var değil mi? ; D
Byte Komutanı

1
@ByteCommander Direnemem, benden daha güçlü :)
Jacob Vlijm

Kullanmıyorsanız, son satırdaki terminalin adını da değiştirmeniz gerektiğini unutmayın gnome-terminal. Ayrıca, birden fazla açık terminaliniz varsa kırılır. Sistemimde, 1. çalıştırma etkin olanı gizler, 2. çalıştırma ikinci olanı gizler ve 3. çalıştırma yalnızca 2. terminali döndürür. 1'inci sonsuza dek kayboldu.
terdon

@terdon Arrgh, Haklısın! Düzeltecek ve tüm terminal pencerelerini gizleyecek / gösterecektir.
Jacob Vlijm

Daha da önemlisi, bunu neden sadece bash'da yapmıyorsunuz? Python ile yaptığınız tek şey sistem çağrıları başlatıyorsa neden python'u getirdiniz?
terdon

5

Bu Jacob Vlijm'in yanıtı, bash ile yazılmış bir şeyle aynı şey:

#!/usr/bin/env bash

## window_name will be the first argument passed or, if no
## argument was given, "Terminal"
window_name=${1:-"Terminal"}

## Get the list of open terminals
terms=( $(wmctrl -l | grep "$window_name" | cut -d ' ' -f 1) )

## If all terminals are hidden
if [ -z "${terms[0]}" ]
then
    ## Read the IDs of hidden windows from .hidden_window_id
    while read termid
    do
        xdotool windowmap "$termid"
    done < ~/.hidden_window_id
## If there are visible terminals
else
    ## Clear the .hidden_window_id file
    > ~/.hidden_window_id
    ## For each open terminal
    for i in "${terms[@]}"
    do
        ## Save the current ID into the file
        printf "%s\n" "$i" >> ~/.hidden_window_id
        ## Hide the window
        xdotool windowunmap "$i"
    done
fi

Olarak ~/bin/show_hide.shkaydederseniz, gizlemek istediğiniz herhangi bir pencerenin tanımlayıcı dizesini vererek çalıştırabilirsiniz. Herhangi bir dize verilmezse, üzerinde çalışır Terminal:

show_hide.sh Terminal

1

Ben kullanıyorum gnome-shellvarsayılan kısayol olduğunu, 'Açılır Terminali' uzantılı TABancak kolayca değişti.


1

Bu basit wmctrl komutu, başlıkta belirli bir dize içeren bir pencere oluşturur veya dizeyi içeren bir pencere yoksa, bir komut çalıştırın.

wmctrl -a <str> || <command to launch application>

örneğin gedit için kullanabilirim

wmctrl -a gedit || gedit

Uygulama pencereniz için uygun bir dize bulmak için uygulamanızı açın ve çalıştırın

wmctrl -l

0

Aşağıdaki yaklaşım benim için çalıştı:

#!/usr/bin/env bash

# Written by Eric Zhiqiang Ma (http://www.ericzma.com)
# Last update: Jul. 9, 2014

# Read the tutorials at
# http://www.systutorials.com/5475/turning-gnome-terminal-to-a-pop-up-terminal/

# Required tools: xdotool

terminal="gnome-terminal"
stat_file="/dev/shm/actiavte-termianl.term.$USER"
termtype="Terminal"
wait_sec=1
max_wait_cnt=4

# parse options first
if [ "$1" != "" ]; then
    terminal="$1"
fi


term_exists () {
    allterms=`xdotool search --class "$termtype"`
    for e in $allterms; do [[ "$e" == "$1" ]] && return 0; done
    return 1
}

create_terminal () {
    echo "Create new terminal"
    $terminal --maximize &

    exists=1
    wait_cnt=0
    until [ "$exists" == "0" ]; do
        # sleep a while
        sleep $wait_sec

        # Note that the focus window may be from a terminal that
        # already exists; the makes create_terminal choose the existing terminal
        # Making the wait_sec large enough so that the terminal can be created and
        # displayed can make the false choosing more unlikely.

        term=$(xdotool getwindowfocus)
        term_exists "$term"
        exists=$?
        # avoid infinite wait
        let wait_cnt=wait_cnt+1
        if [ $wait_cnt -gt $max_wait_cnt ]; then
            echo "Wait for too long. Give up."
            term=""
            exists=0
        fi
    done

    echo "Created terminal window $term"
    # save the state
    echo "$term" >$stat_file
}

# read the state
if [ -f $stat_file ]; then
    term=$(cat $stat_file)
fi

# check whether it exists
term_exists "$term"
exists=$?
if [[ "$exists" != "0" ]]; then
    create_terminal
    exit 0
fi

# check whether it is already activated
curwin=$(xdotool getwindowfocus)

if [ "$term" == "$curwin" ]; then
    # deactivate (minimize) the terminal if it is currently activated
    xdotool windowminimize $curwin
else
    # activate the terminal if it is not currently activated
    xdotool windowactivate $term
fi

exit 0

sonra sadece yürütme izinleri verin ve komut dosyasını ayarlarda bir anahtara bağlayın.

kaynak:

http://www.systutorials.com/5475/turning-gnome-terminal-to-a-pop-up-terminal/


1
Bağlantının kopması veya değişmesi durumunda bu bağlantıdan bazı önemli parçalar ekleyin.
George Udosen
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.