Bagaimana cara membuka jendela terminal terakhir dengan tombol pintas?

11

Saya sering menggunakan terminal untuk membuat perintah cepat dan kemudian saya membiarkannya di latar belakang sehingga saya akhirnya mendapatkan 20+ sesi terminal terbuka saat saya sedang bekerja. Ini karena sangat cepat menggunakan tombol pintas dan mengetik perintah.

Apakah ada cara untuk mengatur kunci pintas jadi saya membawa jendela terminal terakhir saya daripada membuat yang baru?

Klik
sumber
1
akankah versi yang diedit dari ini menjadi solusi? Akan sangat mudah untuk melakukannya untuk jendela terminal tunggal dan membuatnya menghilang sepenuhnya. askubuntu.com/a/595244/72216 beri tahu saya, saya dapat mengonversi jawaban dengan mudah. Apa nama (jendela) dari jendela terminal Anda?
Jacob Vlijm
2
Coba ini
AB
Nama jendela yang saya gunakan hanyalah "Terminal". Tetapi apakah metode skrip yang Anda miliki masih berfungsi jika saya menggunakan tab di terminal? (yaitu ctrl + shift + T) Saya juga mengubah nama mereka untuk membantu mengidentifikasi komputer yang saya sshed.
Klik
Selama string "terminal" ada di sana itu akan. Apakah ini masalahnya?
Jacob Vlijm
@ JacobVlijm Bukan itu masalahnya. Saya sering mengubah nama menjadi "ssh" atau "Lokal" tergantung mana yang saya lakukan. Saya bisa memodifikasi skrip perubahan judul untuk memasukkan awalan unik. Yaitu '%.%' Atau sesuatu seperti itu.
Klik

Jawaban:

13

Saya memiliki terminal yang disematkan di bilah sisi peluncur Unity saya di posisi 10. Dengan cara ini saya dapat menekan Super+ 0untuk "mengklik" ikon peluncur yang membawa jendela terminal terbaru ke atas.

masukkan deskripsi gambar di sini

Jika memilikinya di peluncur tidak masalah untuk Anda (salah satu dari 10 posisi pertama, jika tidak, tidak akan mendapatkan jalan pintas!), Ini akan berhasil.

Komandan Byte
sumber
Oh, itu ide bagus! Saya suka jawaban ini, tetapi saya akan menunggu untuk melihat apa yang orang lain buat. Saya sedang berpikir untuk membuat skrip menggunakan xdotool untuk menemukan terminal dan membawanya ke depan.
Klik
Saya pikir solusi ini adalah yang paling mudah diimplementasikan dan melayani persis tujuan yang saya cari. Karena itu saya akan menandai ini sebagai jawabannya.
Klik
10

Saya menggunakan guake dan saya sangat senang dengannya. Tekan F12, jendela terminal muncul, tekan F12 lagi, menghilang tetapi terus berjalan di latar belakang. Juga: terlihat sangat keren.

Jos
sumber
Voting lain untuk tipuan di sini. Patut dicatat bahwa jika Anda menggunakan beberapa monitor (ukuran berbeda), beberapa versi memerlukan perbaikan untuk membuatnya berfungsi dengan baik - masih layak.
Holloway
Menjadi sangat tergantung pada guake sehingga ketika saya beralih ke xmonad saya meniru itu. Harus punya!
Tony Martin
6

Anda dapat meletakkan skrip di bawah ini di bawah kombinasi tombol. Jika Anda menekan kombinasi tombol, jendela terminal akan hilang (sepenuhnya). Tekan lagi, mereka akan muncul kembali persis di negara seperti yang Anda miliki.

Satu-satunya hal yang Anda perlu (sekali) adalah menambahkan string pengenal dalam nama jendela terminal Anda (jendela terminal memiliki nama yang sama dalam banyak kasus)

Untuk menggunakannya

Pasang keduanya xdotooldan wmctrl:

sudo apt-get install xdotool
sudo apt-get install wmctrl
  1. Salin skrip ke file kosong, simpan sebagai hide_terminal.py
  2. Di bagian kepala, setel string pengenal nama jendela terminal
  3. Jalankan di bawah kombinasi tombol:

    python3 /path/to/hide_terminal.py
    

Naskah

#!/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
Yakub Vlijm
sumber
1
Anda memiliki skrip untuk semuanya, bukan? ; D
Byte Commander
1
@ByteCommander Saya tidak bisa menahan diri, itu lebih kuat dari saya :)
Jacob Vlijm
Perhatikan bahwa Anda juga perlu mengubah nama terminal di baris terakhir jika Anda tidak menggunakan gnome-terminal. Selain itu, rusak jika Anda memiliki lebih dari satu terminal terbuka. Pada sistem saya, run pertama menyembunyikan yang aktif, run kedua menyembunyikan yang kedua dan run ketiga hanya mengembalikan terminal ke-2. Yang ke-1 hilang untuk selamanya.
terdon
@terdon Arrgh, Anda benar! Akan memperbaikinya dan membuatnya menyembunyikan / menampilkan semua jendela terminal.
Jacob Vlijm
Lebih tepatnya, mengapa tidak hanya melakukan ini di bash? Mengapa Anda membawa python ke dalamnya jika semua yang Anda lakukan dengan python meluncurkan panggilan sistem?
terdon
5

Ini adalah hal yang sama dengan jawaban Jacob Vlijm, yang baru saja ditulis dalam bash:

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

Jika Anda menyimpannya sebagai ~/bin/show_hide.sh, Anda dapat menjalankannya dengan memberikan string pengenal dari setiap jendela yang ingin Anda sembunyikan. Jika tidak ada string yang diberikan, itu akan bekerja pada Terminal:

show_hide.sh Terminal
terdon
sumber
1

Saya menggunakan gnome-shellekstensi 'Drop Down Terminal', pintasan defaultnya TABtetapi mudah diubah.

perdigueiro
sumber
1

Perintah wmctrl sederhana ini akan memunculkan jendela dengan string yang diberikan dalam judul atau jika tidak ada jendela yang berisi string, jalankan perintah.

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

misal untuk gedit yang bisa saya gunakan

wmctrl -a gedit || gedit

Untuk menemukan string yang cocok untuk jendela aplikasi Anda, buka aplikasi Anda dan jalankan

wmctrl -l
Glen
sumber
0

pendekatan berikut ini berhasil untuk saya:

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

lalu cukup berikan izin eksekusi dan ikat skrip ke kunci dalam pengaturan.

sumber:

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

DmitrySemenov
sumber
1
Tambahkan beberapa bagian penting dari tautan tersebut jika tautan rusak atau berubah.
George Udosen