ショートカットキーで最後のターミナルウィンドウを表示する方法


11

クイックコマンドを作成するために頻繁にターミナルを使用し、バックグラウンドのままにしておくと、作業中に20以上のターミナルセッションを開くことになります。これは、ショートカットキーを使用してコマンドを入力するだけで非常に迅速だからです。

ショートカットキーを設定して、新しいターミナルウィンドウを作成する代わりに、最後のターミナルウィンドウを表示する方法はありますか?


1
これの編集されたバージョンは解決策でしょうか?単一の端末ウィンドウに対してこれを実行し、完全に非表示にすることは、非常に簡単です。askubuntu.com/a/595244/72216教えてください、答えを簡単に変換できます。端末ウィンドウの(ウィンドウ)名は何ですか?
ジェイコブVlijm

2
試しにこれを
AB

私が使用するウィンドウ名は、単に「ターミナル」です。しかし、ターミナルでタブを使用すると、そこにあるスクリプトメソッドはまだ機能しますか?(つまり、ctrl + shift + T)sshedされているコンピューターを識別するために、それらの名前も変更します。
Klik

文字列「terminal」が存在する限り、そうなります。これは本当ですか?
ジェイコブVlijm

@JacobVlijmそうではありません。私はよく、名前を「ssh」または「Local」に変更します。ただし、タイトル変更スクリプトを変更して、一意のプレフィックスを含めることができます。すなわち、「%。%」またはそのようなものです。
Klik

回答:


13

位置10のUnityランチャーサイドバーに固定されたターミナルがあります。この方法で、Super+ 0を押してランチャーアイコンを「クリック」すると、最新のターミナルウィンドウが上部に表示されます。

ここに画像の説明を入力してください

ランチャーでそれを使用しても問題ない場合(最初の10ポジションのうちの1つ、それ以外の場合はショートカットを取得できません!)、これは機能します。


それは素晴らしいアイデアです!私はこの答えが好きですが、私は他の人が何を思い付くかを見るのを待つつもりです。xdotoolを使用して端末を見つけて前面に表示するスクリプトを作成することを考えていました。
Klik

このソリューションは最も簡単に実装でき、私が探している目的にぴったり合っていると思います。そのため、これを答えとしてマークします。
Klik

10

私はグアケを使用していますが、とても満足しています。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私は抵抗することはできません、それは私より強いです:)
ジェイコブVlijm

を使用していない場合は、最終行の端末名も変更する必要があることに注意してくださいgnome-terminal。また、開いているターミナルが複数ある場合は壊れます。私のシステムでは、1回目の実行でアクティブな実行が非表示になり、2回目の実行で2番目の実行が非表示になり、3回目の実行で2番目の端末のみが返されます。第1は永遠に失われます。
テルドン

@terdon Arrgh、あなたは正しい!それを修正し、すべてのターミナルウィンドウを非表示/表示にします。
ジェイコブVlijm

さらに重要なのは、これをbashで実行するだけではどうですか?pythonでやっているのがシステムコールを起動するだけなら、なぜpythonをそこに入れるのですか
テルドン

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デフォルトのショートカットは、「ドロップダウンターミナル」の拡張子を持つ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
リンクが破損または変更された場合に備えて、そのリンクからいくつかの重要な部分を追加します。
ジョージウドセン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.