Làm thế nào để hiển thị cửa sổ đầu cuối cuối cùng với một phím tắt?


11

Tôi thường sử dụng thiết bị đầu cuối để thực hiện các lệnh nhanh và sau đó tôi để nó ở chế độ nền để cuối cùng tôi mở hơn 20 phiên thiết bị đầu cuối trong khi tôi đang làm việc. Điều này là do rất nhanh chóng chỉ cần sử dụng phím tắt và nhập lệnh.

Có cách nào để thiết lập phím tắt để tôi đưa cửa sổ đầu cuối cuối cùng lên thay vì tạo một phím mới không?


1
một phiên bản chỉnh sửa của cái này sẽ là một giải pháp? Nó sẽ được simpeler mạnh mẽ để làm điều đó cho một cửa sổ thiết bị đầu cuối duy nhất và làm cho nó biến mất hoàn toàn. Askubfox.com/a/595244/72216 cho tôi biết, tôi có thể chuyển đổi câu trả lời Easliy. Tên (cửa sổ) của cửa sổ đầu cuối của bạn là gì?
Jacob Vlijm

2
Hãy thử điều này
AB

Tên cửa sổ tôi sử dụng chỉ đơn giản là "Terminal". Nhưng phương thức script mà bạn có ở đó có còn hoạt động không nếu tôi sử dụng các tab trong terminal? (tức là ctrl + shift + T) Tôi cũng đổi tên chúng để giúp xác định máy tính nào tôi được đưa vào.
Klik

Miễn là chuỗi "terminal" ở đó. Là thjat trường hợp?
Jacob Vlijm

@JacobVlijm Không phải vậy. Tôi thường thay đổi tên thành "ssh" hoặc "Local" tùy theo việc tôi đang làm. Tôi có thể sửa đổi tập lệnh thay đổi tiêu đề của mình để bao gồm một tiền tố duy nhất. Tức là '%.%' Hoặc đại loại như thế.
Klik

Câu trả lời:


13

Tôi có một thiết bị đầu cuối được ghim vào thanh bên của trình khởi chạy Unity của tôi ở vị trí 10. Bằng cách này tôi có thể nhấn Super+ 0để "nhấp" vào biểu tượng trình khởi chạy đưa cửa sổ thiết bị đầu cuối mới nhất lên trên cùng.

nhập mô tả hình ảnh ở đây

Nếu có nó trong launcher là ổn đối với bạn (một trong 10 vị trí đầu tiên, nếu không nó sẽ không có phím tắt!), Điều này sẽ hoạt động.


Oh đó là một ý tưởng tuyệt vời! Tôi thích câu trả lời này, nhưng tôi sẽ chờ xem những gì người khác nghĩ ra. Tôi đã nghĩ đến việc tạo ra một kịch bản sử dụng xdotool để tìm thiết bị đầu cuối và đưa nó ra phía trước.
Klik

Tôi nghĩ rằng giải pháp này là dễ thực hiện nhất và phục vụ chính xác mục đích tôi đang tìm kiếm. Vì lý do đó tôi sẽ đánh dấu đây là câu trả lời.
Klik

10

Tôi sử dụng guake và tôi rất hài lòng với nó. Nhấn F12, một cửa sổ đầu cuối xuất hiện, nhấn F12 lần nữa, nó biến mất nhưng tiếp tục chạy trong nền. Ngoài ra: trông thực sự mát mẻ.


Một phiếu bầu cho guake ở đây. Đáng lưu ý rằng nếu bạn sử dụng nhiều màn hình (kích thước khác nhau), một số phiên bản cần sửa chữa để làm cho nó hoạt động chính xác - mặc dù vậy vẫn có giá trị.
Holloway

Trở nên quá phụ thuộc vào guake mà khi tôi chuyển sang xmonad, tôi đã mô phỏng nó trong đó. Phải có!
Tony Martin

6

Bạn có thể đặt tập lệnh bên dưới dưới một tổ hợp phím. Nếu bạn nhấn tổ hợp phím, (các) cửa sổ đầu cuối sẽ biến mất (hoàn toàn). Nhấn lại lần nữa, chúng sẽ bật lên chính xác trong trạng thái như bạn đã có.

Điều duy nhất bạn cần (một lần) là thêm chuỗi nhận dạng vào tên cửa sổ của thiết bị đầu cuối (cửa sổ đầu cuối có cùng tên trong hầu hết các trường hợp)

Để dùng nó

Cài đặt cả hai xdotoolwmctrl:

sudo apt-get install xdotool
sudo apt-get install wmctrl
  1. Sao chép tập lệnh vào một tập tin trống, lưu nó dưới dạng hide_terminal.py
  2. Trong phần đầu, đặt chuỗi xác định tên của cửa sổ đầu cuối
  3. Chạy nó dưới một tổ hợp phím:

    python3 /path/to/hide_terminal.py
    

Kịch bản

#!/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
Bạn có một kịch bản cho tất cả mọi thứ, phải không? ; D
Chỉ huy Byte

1
@ByteCommander Tôi không thể cưỡng lại, nó mạnh hơn tôi :)
Jacob Vlijm 19/03/2015

Lưu ý rằng bạn cũng cần thay đổi tên của thiết bị đầu cuối ở dòng cuối cùng nếu bạn không sử dụng gnome-terminal. Ngoài ra, nó bị hỏng nếu bạn có nhiều hơn một thiết bị đầu cuối mở. Trên hệ thống của tôi, lần chạy thứ nhất ẩn lần chạy thứ nhất, lần chạy thứ 2 ẩn lần chạy thứ hai và lần chạy thứ 3 chỉ trả về thiết bị đầu cuối thứ hai. Cái thứ nhất bị mất mãi mãi.
terdon

@terdon Arrgh, bạn nói đúng! Sẽ sửa chữa nó và làm cho nó ẩn / hiển thị tất cả các cửa sổ đầu cuối.
Jacob Vlijm

Hơn nữa, tại sao không làm điều này trong bash? Tại sao bạn lại mang python vào đó nếu tất cả những gì bạn đang làm với python đang khởi chạy các cuộc gọi hệ thống?
terdon

5

Đây là điều tương tự như câu trả lời của Jacob Vlijm, chỉ được viết bằng 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

Nếu bạn lưu nó dưới dạng ~/bin/show_hide.sh, bạn có thể chạy nó bằng cách đưa ra chuỗi nhận dạng của bất kỳ cửa sổ nào bạn muốn ẩn. Nếu không có chuỗi nào được đưa ra, nó sẽ hoạt động trên Terminal:

show_hide.sh Terminal

1

Tôi đang sử dụng gnome-shellvới tiện ích mở rộng 'Drop Down Terminal', lối tắt mặc định TABnhưng nó dễ dàng thay đổi.


1

Lệnh wmctrl đơn giản này sẽ nâng một cửa sổ với một chuỗi đã cho trong tiêu đề hoặc nếu không có cửa sổ nào tồn tại chứa chuỗi, hãy chạy lệnh.

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

ví dụ cho gedit tôi có thể sử dụng

wmctrl -a gedit || gedit

Để tìm một chuỗi phù hợp cho cửa sổ ứng dụng của bạn, hãy mở ứng dụng của bạn và chạy

wmctrl -l

0

Cách tiếp cận sau đây có hiệu quả với tôi:

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

sau đó chỉ cần cấp cho nó quyền thực thi và liên kết tập lệnh với khóa trong cài đặt.

nguồn:

http://www.systutorials.com/5485/turn-gnome-terminal-to-a-pop-up-terminal/


1
Thêm một số phần quan trọng từ liên kết đó trong trường hợp liên kết bị hỏng hoặc thay đổi.
George Udosen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.