私はこのPythonスクリプトを作成しました:
from gi.repository import Gtk, Gdk, GdkX11, Wnck
from subprocess import PIPE, Popen
class WindowError(Exception):
pass
def undecorate(aWindow):
gdkdis = GdkX11.X11Display.get_default()
gdkwin = GdkX11.X11Window.foreign_new_for_display(gdkdis, aWindow.get_xid())
gdkwin.set_decorations(Gdk.WMDecoration.BORDER)
def dropdown(aTitle):
Gtk.main_iteration()
screen = Wnck.Screen.get_default()
screen.force_update()
for window in screen.get_windows():
if window.get_name() == aTitle:
timestamp = Gtk.get_current_event_time()
undecorate(window)
window.set_skip_pager(True)
window.set_skip_tasklist(True)
window.stick()
window.pin()
window.maximize_horizontally()
window.set_geometry(Wnck.WindowGravity.STATIC,
Wnck.WindowMoveResizeMask.Y,
0, 0, -1, -1)
window.activate(timestamp)
window.unminimize(timestamp)
break
else:
raise WindowError('Window with title "{}" not found'.format(aTitle))
def getActive():
Gtk.main_iteration()
screen = Wnck.Screen.get_default()
screen.force_update()
return screen.get_active_window()
def main():
active = getActive()
if active.get_name() == 'Dropdown Terminal':
if active.is_minimized():
dropdown('Dropdown Terminal')
else:
active.minimize()
return
else:
try:
dropdown('Dropdown Terminal')
except WindowError:
Popen(['roxterm', '--profile=Dropdown'], stdout=PIPE, stderr=PIPE)
dropdown('Dropdown Terminal')
if __name__ == "__main__":
main()
それがすることは、roxtermをGuakeのように振る舞わせることです。私が抱えている唯一の問題は、新しいroxtermインスタンスを開いて、直後にウィンドウを(0,0)に移動したとき、ウィンドウの最後のy位置が数ピクセル下にあることです。これを行うには、wnckライブラリのset_geometry関数を使用しました。それを修正する方法について何かアイデアはありますか?ありがとう。