クイックコマンドを作成するために頻繁にターミナルを使用し、バックグラウンドのままにしておくと、作業中に20以上のターミナルセッションを開くことになります。これは、ショートカットキーを使用してコマンドを入力するだけで非常に迅速だからです。
ショートカットキーを設定して、新しいターミナルウィンドウを作成する代わりに、最後のターミナルウィンドウを表示する方法はありますか?
クイックコマンドを作成するために頻繁にターミナルを使用し、バックグラウンドのままにしておくと、作業中に20以上のターミナルセッションを開くことになります。これは、ショートカットキーを使用してコマンドを入力するだけで非常に迅速だからです。
ショートカットキーを設定して、新しいターミナルウィンドウを作成する代わりに、最後のターミナルウィンドウを表示する方法はありますか?
回答:
位置10のUnityランチャーサイドバーに固定されたターミナルがあります。この方法で、Super+ 0を押してランチャーアイコンを「クリック」すると、最新のターミナルウィンドウが上部に表示されます。
ランチャーでそれを使用しても問題ない場合(最初の10ポジションのうちの1つ、それ以外の場合はショートカットを取得できません!)、これは機能します。
以下のスクリプトをキーの組み合わせの下に配置できます。キーの組み合わせを押すと、ターミナルウィンドウが(完全に)消えます。もう一度押すと、元の状態に戻ります。
(一度)する必要があるのは、端末のウィンドウ名に識別文字列を追加することだけです(ほとんどの場合、端末ウィンドウは同じ名前です)。
両方xdotool
をインストールしますwmctrl
:
sudo apt-get install xdotool
sudo apt-get install wmctrl
hide_terminal.py
キーの組み合わせで実行します:
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
gnome-terminal
。また、開いているターミナルが複数ある場合は壊れます。私のシステムでは、1回目の実行でアクティブな実行が非表示になり、2回目の実行で2番目の実行が非表示になり、3回目の実行で2番目の端末のみが返されます。第1は永遠に失われます。
これは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
次のアプローチは私のために働いた:
#!/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/