Як підключити останнє вікно терміналу за допомогою клавіші швидкого доступу?


11

Я часто використовую термінал для швидких команд, а потім залишаю його у фоновому режимі, щоб в кінцевому підсумку відкрити 20+ сеансів терміналу під час роботи. Це тому, що дуже швидко просто скористатися клавішею швидкого доступу та ввести команду.

Чи є спосіб встановити клавішу швидкого доступу, щоб я підніс останнє вікно терміналу замість створення нового?


1
чи буде відредагована версія цього варіанту рішенням? Це було б різко спрощено зробити це для одного вікна терміналу і змусити його повністю зникнути. askubuntu.com/a/595244/72216 Повідомте мене, я можу конвертувати відповідь easliy. Як називається (вікно) вашого термінального вікна?
Яків Влійм

2
Спробуйте це
AB

Назва вікна, яку я використовую, просто "Термінал". Але чи все ще працює метод скрипту, якщо я використовую вкладки в терміналі? (тобто ctrl + shift + T) Я також перейменую їх, щоб допомогти визначити, на який комп’ютер я перебуваю.
Клік

Поки рядок "термінал" є, це було б. Це справа?
Яків Влійм

@JacobVlijm Це не так. Я часто змінюю ім'я на "ssh" або "Local", залежно від того, що я роблю. Я можу змінити сценарій зміни заголовка, щоб він містив унікальний префікс. Тобто '%.%' Або щось подібне.
Клік

Відповіді:


13

У мене на боковій панелі запуску Unity у позиції 10. зафіксований термінал на позиції 10. Таким чином я можу натиснути Super+, 0щоб "натиснути" піктограму запуску, яка приносить останнє вікно терміналу вгору.

введіть тут опис зображення

Якщо мати його в пусковому режимі для вас нормально (одна з перших 10 позицій, інакше це не отримає ярлик!), Це спрацює.


О, це чудова ідея! Мені подобається ця відповідь, але я чекаю, щоб побачити, що придумують інші люди. Я думав зробити сценарій за допомогою xdotool, щоб знайти термінал і вивести його на фронт.
Клік

Я думаю, що це рішення є найбільш легко реалізованим і відповідає саме тій меті, яку я шукаю. З цієї причини я позначу це як відповідь.
Клік

10

Я використовую guake і дуже задоволений цим. Натисніть F12, з'явиться вікно терміналу, знову натисніть F12, воно зникає, але продовжує працювати у фоновому режимі. Також: виглядає дійсно круто.


Чергове голосування за гуаке тут. Варто зазначити, що якщо ви використовуєте кілька моніторів (різного розміру), для деяких версій потрібен виправлення, щоб він працював належним чином - все-таки варто.
Холлоуей

Став настільки залежним від guake, що коли я перейшов на xmonad, я емулював це в цьому. Повинен мати!
Тоні Мартін

6

Сценарій нижче можна поставити під комбінацію клавіш. Якщо натиснути комбінацію клавіш, вікно (термінали) термінала зникнуть (повністю). Натисніть його ще раз, вони знову з’являться саме в тому стані, як у вас це було.

Єдине, що вам потрібно зробити (раз) - це додати ідентифікаційний рядок до імені вікна вашого термінала (у більшості випадків вікно терміналу має те саме ім'я)

Щоб його використовувати

Встановіть xdotoolі wmctrl:

sudo apt-get install xdotool
sudo apt-get install wmctrl
  1. Скопіюйте скрипт у порожній файл, збережіть його як hide_terminal.py
  2. У головному розділі встановіть ідентифікаційний рядок імені вікна терміналу
  3. Запустити його під комбінацією клавіш:

    python3 /path/to/hide_terminal.py
    

Сценарій

#!/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
У вас є сценарій для всього, чи не так? ; D
Байт-командир

1
@ByteCommander Я не можу чинити опір, він сильніший за мене :)
Яків Влійм,

Зауважте, що вам також потрібно змінити ім'я терміналу в останньому рядку, якщо ви його не використовуєте gnome-terminal. Крім того, він зламається, якщо у вас є більше одного відкритого терміналу. У моїй системі 1-й запуск приховує активний, другий запуск приховує другий, а 3-й запуск повертає лише другий термінал. 1-я втрачена назавжди.
тердон

@terdon Arrgh, ти маєш рацію! Виправить це і змусить приховати / показати всі вікна терміналу.
Яків Влійм

Більш суттєво, чому б просто не зробити це в басі? Навіщо вводити python в нього, якщо все, що ви робите з python, це запуск системних викликів?
тердон

5

Це те саме, що відповідь Якова Влійма, щойно написана башем:

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

Якщо ви збережете його як ~/bin/show_hide.sh, ви можете запустити його, надавши ідентифікаційний рядок будь-якого вікна, яке ви хочете приховати. Якщо жодна рядок не задана, вона працюватиме Terminal:

show_hide.sh Terminal

1

Я використовую gnome-shellрозширення "Випадаючий термінал", ярлик за замовчуванням є, TABале це легко змінюється.


1

Ця проста команда wmctrl підніме вікно із заданою рядком у заголовку або, якщо немає вікна, що містить рядок, запустіть команду.

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

наприклад, для gedit я можу використовувати

wmctrl -a gedit || gedit

Щоб знайти відповідний рядок для вікна програми, відкрийте програму та запустіть

wmctrl -l

0

наступний підхід працював для мене:

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

тоді просто дайте йому виконувати дозволи та прив’язати скрипт до ключа в налаштуваннях.

джерело:

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


1
Додайте кілька важливих частин із цього посилання на випадок, коли посилання розривається або змінюється.
Джордж Удосен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.