จะเปิดหน้าต่างเทอร์มินัลล่าสุดด้วยคีย์ลัดได้อย่างไร


11

ฉันใช้เทอร์มินัลบ่อยครั้งสำหรับการทำคำสั่งอย่างรวดเร็วและจากนั้นฉันก็ปล่อยไว้ในพื้นหลังเพื่อให้ฉันเปิดเทอร์มินัลเซสชันมากกว่า 20+ ขณะที่ฉันทำงาน นี่เป็นเพราะมันรวดเร็วมากเพียงแค่ใช้ปุ่มทางลัดและพิมพ์คำสั่ง

มีวิธีการตั้งค่าปุ่มทางลัดหรือไม่ดังนั้นฉันจะเปิดหน้าต่างเทอร์มินัลล่าสุดแทนการสร้างใหม่


1
รุ่นที่แก้ไขของอันนี้จะเป็นทางออกหรือไม่? มันเป็นเรื่องง่ายมากที่จะทำเพื่อหน้าต่างเทอร์มินัลเดียวและทำให้มันหายไปอย่างสมบูรณ์ askubuntu.com/a/595244/72216แจ้งให้เราทราบฉันสามารถแปลงคำตอบได้อย่างง่ายดาย ชื่อ (หน้าต่าง) ของหน้าต่างเทอร์มินัลของคุณคืออะไร?
Jacob Vlijm


ชื่อหน้าต่างที่ฉันใช้คือ "Terminal" แต่วิธีสคริปต์ที่คุณมียังคงใช้งานได้หรือไม่ถ้าฉันใช้แท็บในเทอร์มินัล (เช่น ctrl + shift + T) ฉันเปลี่ยนชื่อพวกมันเช่นกันเพื่อช่วยระบุคอมพิวเตอร์ที่ฉันถูกส่งไป
คลิกที่

ตราบใดที่สตริง "terminal" อยู่ตรงนั้น เป็นกรณีที่?
Jacob Vlijm

@JacobVlijm ไม่ใช่กรณีนี้ ฉันมักจะเปลี่ยนชื่อเป็น "ssh" หรือ "Local" ขึ้นอยู่กับว่าฉันทำอะไรอยู่ ฉันสามารถแก้ไขสคริปต์การเปลี่ยนชื่อเพื่อรวมคำนำหน้าเฉพาะได้ นั่นคือ '%.%' หรืออะไรทำนองนั้น
คลิกที่

คำตอบ:


13

ฉันได้เทอร์มินัลไปที่แถบด้านข้าง Unity launcher ของฉันที่ตำแหน่ง 10 ด้วยวิธีนี้ฉันสามารถกดSuper+ 0เพื่อ "คลิก" ไอคอนตัวเรียกใช้งานซึ่งนำหน้าต่างเทอร์มินัลล่าสุดไปด้านบน

ป้อนคำอธิบายรูปภาพที่นี่

หากมีในตัวเรียกใช้งานก็โอเคสำหรับคุณ (หนึ่งใน 10 ตำแหน่งแรกมิฉะนั้นจะไม่ได้รับทางลัด!) สิ่งนี้จะใช้ได้


โอ้นั่นเป็นความคิดที่ยอดเยี่ยม! ฉันชอบคำตอบนี้ แต่ฉันจะรอเพื่อดูว่าคนอื่น ๆ มาด้วย ฉันกำลังคิดที่จะสร้างสคริปต์โดยใช้ xdotool เพื่อค้นหาเทอร์มินัลและนำมาไว้ด้านหน้า
Klik

ฉันคิดว่าโซลูชันนี้สามารถนำไปใช้งานได้ง่ายที่สุดและตรงตามวัตถุประสงค์ที่ฉันต้องการ ด้วยเหตุนี้ฉันจะทำเครื่องหมายสิ่งนี้เป็นคำตอบ
คลิกที่

10

ฉันใช้guakeและฉันมีความสุขมากกับมัน กด F12 หน้าต่างเทอร์มินัลจะปรากฏขึ้นกด F12 อีกครั้งมันหายไป แต่ยังคงทำงานในพื้นหลัง ยัง: ดูดีจริงๆ


โหวตอีกครั้งสำหรับ guake ที่นี่ น่าสังเกตว่าถ้าคุณใช้จอภาพหลายขนาด (ขนาดแตกต่างกัน) บางรุ่นต้องมีการแก้ไขเพื่อให้ทำงานได้อย่างถูกต้อง - ยังคงคุ้มค่า
Holloway

กลายเป็นเช่นนั้นขึ้นอยู่กับการเดาว่าเมื่อฉันเปลี่ยนเป็น xmonad ฉันเลียนแบบมันในที่ จำเป็นต้องมี!
Tony Martin

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
ผู้บัญชาการ Byte

1
@ByteCommander ฉันไม่สามารถต้านทานก็แข็งแกร่งกว่าฉัน :)
จาค็อบ Vlijm

gnome-terminalโปรดทราบว่าคุณยังจำเป็นต้องเปลี่ยนชื่อสถานีในบรรทัดสุดท้ายถ้าคุณไม่ได้ใช้ นอกจากนี้ยังแบ่งหากคุณมีมากกว่าหนึ่งสถานีเปิด ในระบบของฉันการเรียกใช้ครั้งที่หนึ่งจะซ่อนแอคทีฟที่หนึ่งการรันครั้งที่ 2 จะเป็นการซ่อนอันดับที่สองและที่ 3 เท่านั้นที่ส่งคืนเทอร์มินัลที่ 2 ที่ 1 จะสูญหายไปตลอดกาล
terdon

@terdon Arrgh คุณพูดถูก! จะแก้ไขและทำให้ซ่อน / แสดงหน้าต่างเทอร์มินัลทั้งหมด
Jacob Vlijm

อีกประเด็นทำไมไม่ทำเช่นนี้ในการทุบตี? ทำไมคุณถึงนำไพ ธ อนมาใช้หากสิ่งที่คุณทำกับไพ ธ อนเริ่มต้นการโทรของระบบ
terdon

5

นี่คือสิ่งเดียวกับคำตอบของ Jacob Vlijm เขียนใน 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

หากคุณบันทึกเป็น~/bin/show_hide.shคุณสามารถเรียกใช้งานโดยระบุสตริงของหน้าต่างที่คุณต้องการซ่อน หากไม่มีการกำหนดสตริงมันจะทำงานบนTerminal:

show_hide.sh Terminal

1

ฉันใช้gnome-shellกับส่วนขยาย 'Drop Down Terminal' ทางลัดเริ่มต้นคือ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
เพิ่มบางส่วนที่สำคัญจากลิงค์นั้นในกรณีที่ลิงค์แตกหรือเปลี่ยนแปลง
George Udosen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.