Irixの4Dwmでは、ウィンドウをボックスに最小化する機能がありました(現代のウィンドウマネージャーが使用するタスクバーとは異なります)。これは古いHPUXでも見ました。
リンクされた画像の「コンソール」スクエアを参照してください。
プラグインを使用するか、Unity以外のウィンドウマネージャーを使用してUbuntuで実行することは可能ですか?
Irixの4Dwmでは、ウィンドウをボックスに最小化する機能がありました(現代のウィンドウマネージャーが使用するタスクバーとは異なります)。これは古いHPUXでも見ました。
リンクされた画像の「コンソール」スクエアを参照してください。
プラグインを使用するか、Unity以外のウィンドウマネージャーを使用してUbuntuで実行することは可能ですか?
回答:
驚いたことに、デスクトップ上に他のものがあまり多くない限り、非常にうまく機能します。
私はしばらくそれを使って作業しましたが、奇妙なことですが、奇妙なことに、頻繁にワークスペースを切り替えるのに十分な代替手段です。そのシンプルさのためにリフレッシュ。
解決策は、実際にあなたが説明するものとほぼ同じです。
キーの組み合わせを押すと、デスクトップ上のウィンドウがウィンドウから「ボックス化」されます。
アプリケーションの外観を持つアイコンに:
アイコンをダブルクリックすると、ウィンドウが再表示され、アイコンが消えます。
短い話(説明):
ショートカットキーを押すと、スクリプトは引数で呼び出されますbox
:
windowbox box
スクリプトは次のとおりです。
.desktop
ファイルで対応するアイコンを検索します/usr/share/applications
引数を指定してスクリプトを(ダブルクリックした場合に)呼び出す行を.desktop
使用して、一意の名前のファイルを作成Exec=
しますshow
。
windowbox show
.desktop
ファイルには、ウィンドウIDなどの追加の引数引数の数、の([ファイル] - )の名前を追加します.desktop
ファイルを。
その後:
.desktop
このファイルは、それダブルクリック可能なオブジェクトにするために、実行されています。
場合は.desktop
、ファイルをダブルクリックすると、ウィンドウがある(再)マッピングされ、.desktop
ファイルがデスクトップから削除されます。
あなたは窓の周りプレイしたい時に実質的にいつものように、スクリプトは両方を必要wmctrl
とxdotool
:
sudo apt-get install xdotool wmctrl
~/bin
(~
ホームディレクトリを表します)以下のスクリプトを空のファイルにコピーし、windowbox
(拡張子なし)として保存し~/bin
ます。
#!/usr/bin/env python3
import subprocess
import sys
import os
# --- On Unity, there is a (y-wise) deviation in window placement
# set to zero for other window managers
deviation = 28
# ---
args = sys.argv[1:]
get = lambda cmd: subprocess.check_output(cmd).decode("utf-8").strip()
def find_dtop():
# get the localized path to the Desktop folder
home = os.environ["HOME"]
dr_file = home+"/.config/user-dirs.dirs"
return [home+"/"+ l.split("/")[-1].strip() \
for l in open(dr_file).readlines() \
if l.startswith("XDG_DESKTOP_DIR=")][0].replace('"', "")
def check_windowtype(w_id):
# check the type of window; only unmap "NORMAL" windows
return "_NET_WM_WINDOW_TYPE_NORMAL" in get(["xprop", "-id", w_id])
def get_process(w_id):
# get the name of the process, owning the window and window x/y position
w_list = get(["wmctrl", "-lpG"]).splitlines()
pid = [l for l in w_list if w_id in l][0].split()
proc = get(["ps", "-p", pid[2], "-o", "comm="])
xy = (" ").join(pid[3:5])
return (proc, xy)
def read_f(f, string, proc):
# search for a possible match in a targeted .desktop file
try:
with open(f) as read:
for l in read:
if all([l.startswith(string), proc in l]):
in_f = True
break
else:
in_f = False
except:
in_f = False
return in_f
def get_icon(proc, w_name):
# search appropriate icon in /usr/share/applications
exceptions = [item for item in [
["soffice", "libreoffice-main"],
["gnome-terminal", "utilities-terminal"],
["nautilus", "folder"],
] if item[0] in proc]
if exceptions:
if exceptions == [["soffice", "libreoffice-main"]]:
loffice = [
["Calc", "libreoffice-calc"],
["Writer", "libreoffice-writer"],
["Base", "libreoffice-base"],
["Draw", "libreoffice-draw"],
["Impress", "libreoffice-impress"],
]
match = [m[1] for m in loffice if m[0] in w_name]
if match:
return match[0]
else:
return exceptions[0][1]
else:
return exceptions[0][1]
else:
default = "/usr/share/applications"
dtfiles = [default+"/"+f for f in os.listdir(default)]
for f in dtfiles:
if read_f(f, "Exec=", proc) == True:
for l in open(f).readlines():
if l.startswith("Icon="):
icon = l.replace("Icon=", "").strip()
print(f)
break
break
return icon
def create_name():
# create unique (file-) name for boxed window
n = 1
while True:
name = dtop+"/"+"boxed_"+str(n)+".desktop"
if os.path.exists(name):
n += 1
else:
break
return name
def convert_wid(w_id):
# convert window- id, xdotool format, into wmctrl format
w_id = hex(int(w_id))
return w_id[:2]+(10-len(w_id))*"0"+w_id[2:]
def create_icon(w_id, w_name, icon, pos):
# create the launcher, representing the boxed window
boxedwindow = create_name()
f_content =[
"[Desktop Entry]",
"Name=[WINDOW] "+w_name,
"Exec=windowbox show "+w_id+" '"+boxedwindow+"' "+pos,
"Icon="+icon,
"Type=Application",
]
if icon == "generic":
f_content.pop(3)
with open(boxedwindow, "wt") as boxed:
for l in f_content:
boxed.write(l+"\n")
command = "chmod +x "+"'"+boxedwindow+"'"
subprocess.call(["/bin/bash", "-c", command])
if args[0] == "box":
dtop = find_dtop()
w_id = convert_wid(get(["xdotool", "getactivewindow"]))
w_name = get(["xdotool", "getwindowname", w_id])
if check_windowtype(w_id) == True:
procdata = get_process(w_id)
procname = procdata[0]
icon = get_icon(procname, w_name); icon = icon if icon != None else "generic"
create_icon(w_id, w_name, icon, procdata[1])
subprocess.call(["xdotool", "windowunmap", w_id])
elif args[0] == "show":
w_id = args[1]
subprocess.call(["xdotool", "windowmap", w_id])
subprocess.call(["xdotool", "windowmove", "--sync", w_id, args[3], str(int(args[4])-deviation)])
os.remove(args[2])
スクリプトを実行可能にする
$PATH
、ログアウト/ログインするか、source ~/.profile
(ターミナルウィンドウから)実行します次のコマンドにより、ターミナルウィンドウからスクリプトをテスト実行します。
windowbox box
ウィンドウが消え、「ボックス化された」ウィンドウがデスクトップに表示されます。
すべてが正常に機能する場合は、次のコマンドをショートカットキーに追加します。画面の右上にある歯車アイコンを選択します。
行きますSystem Settings→ Keyboard→ Shortcuts→ Custom Shortcuts。をクリックして+、コマンドを追加します。
windowbox box
それはそれを行う必要があります。
スクリプトの使用xdotool
のwindowunmap
ウィンドウを非表示にします。デスクトップに作成された「ボックス」(アイコン)は、非表示ウィンドウへの唯一の「ゲート」です。つまり、デスクトップファイルを手動で削除しないでください。そうすると、ウィンドウは永久に失われます。
スクリプトはまだいくつかの改良を使用できます。
get_process(w_id)
ただし、この関数はいくつかの改善を使用できます。でコマンドとしてプロセスが見つからない場合、/usr/share/applications
ファイルには一般的なアイコンがあります。スクリプト名作成した.desktop
ファイルは常に boxed_1.desktop
、boxed_2.desktop
など、創造の瞬間に「利用可能」の名前に応じて(ファイル名ではなく、表示される名前)。
(一般的に)ファイルのサイズを変更するには、右クリック>アイコンサイズを選択します。良いニュースは、ファイルを削除して再作成すると、サイズが記憶されることです。再起動後にファイルを再度作成しても。あなたがあればことを意味し、これまで箱入りの窓(例えば)1-5をリサイズ、彼らはなります常にあなた(スクリプト)が再びそれらを作成するときに、同じ大きさを持っています!
dtop = "/home/jacob/Bureaublad"
をデスクトップへのパスに置き換えました(dtop = "/home/" + user + "/Desktop"
)2.ダブルクリックによる復元が機能しませんでした。source ~/.profile
これをテストするために、すぐにログイン/ログアウトするだけでは不十分だと思う。3.団結して、アイコンのサイズを手動で変更できます(右クリック->アイコンのサイズ変更)f_content
。アイコンのサイズを設定するパラメーターを追加することは可能ですか?
これを実現するには、fvwmを使用できます。
fvwmをインストールします。
sudo apt-get update
sudo apt-get install fvwm
アイコン化機能を使用するそれらを見つけてください-ここにいくつかあります:http ://www.jmcunx.com/fvwm_theme.html いくつかはあなたが示すスクリーンショットのように見えます。
テーマのテキストをコピーし、~/.fvwm/
(隠しファイルを最初に表示)に移動してからファイルを作成します.fvwm2rc
そのファイルをテキストエディター(geditなど)で開き、テーマテキストを貼り付けます。
コンピューターを再起動し、fvwmを選択してログインします。