1つのキルパネルを除くすべてのウィンドウを最小化するPythonスクリプト

1つのキルパネルを除くすべてのウィンドウを最小化するPythonスクリプト

ツアーガイドと一緒に行きましたここ 次のPythonスクリプトを使用して、現在のウィンドウ以外のすべてのウィンドウを最小化するキーボードショートカットを作成します。

#!/usr/bin/env python
import wnck
import gtk

screen = wnck.screen_get_default()

while gtk.events_pending():
    gtk.main_iteration()

windows = screen.get_windows()
active = screen.get_active_window()

for w in windows:
    if not w == active:
            w.minimize()

うまくいきますが、パネルを殺してデスクトップをほとんど使用できなくします。

パネルを終了せずに動作するようにスクリプトを変更するにはどうすればよいですか?

私はUbuntu 16.04.3、Xfceバージョン4.12を使用しています。

答え1

Gtkエントリを使用しません。破片を取り除きましょう。

#!/usr/bin/env python
import wnck
screen = wnck.screen_get_default()
windows = screen.get_windows()
active = screen.get_active_window()

for w in windows:
    if not w == active:
            w.minimize()

w == active除外期間外で条件を使用できます。ドキュメントを確認するpydoc wnckか(残念ながら自動生成されたメソッドのリストにすぎません)、インタラクティブなナビゲーションを実行してWindowsで利用可能なメソッドを確認します。

$ python
Python 2.7.9 (default, Jun 29 2016, 13:08:31) 
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import wnck
>>> screen = wnck.screen_get_default()
>>> active = screen.get_active_window()
>>> dir(active)
['__class__', '__copy__', '__deepcopy__', '__delattr__', '__dict__', '__doc__', '__eq__', '__format__', '__gdoc__', '__ge__', '__getattribute__', '__gobject_init__', '__grefcount__', '__gt__', '__gtype__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'activate', 'activate_transient', 'chain', 'close', 'connect', 'connect_after', 'connect_object', 'connect_object_after', 'disconnect', 'disconnect_by_func', 'emit', 'emit_stop_by_name', 'freeze_notify', 'get_actions', 'get_application', 'get_class_group', 'get_client_window_geometry', 'get_data', 'get_geometry', 'get_group_leader', 'get_icon', 'get_icon_is_fallback', 'get_icon_name', 'get_mini_icon', 'get_name', 'get_pid', 'get_properties', 'get_property', 'get_screen', 'get_session_id', 'get_session_id_utf8', 'get_sort_order', 'get_state', 'get_transient', 'get_window_type', 'get_workspace', 'get_xid', 'handler_block', 'handler_block_by_func', 'handler_disconnect', 'handler_is_connected', 'handler_unblock', 'handler_unblock_by_func', 'has_icon_name', 'has_name', 'is_above', 'is_active', 'is_below', 'is_fullscreen', 'is_in_viewport', 'is_maximized', 'is_maximized_horizontally', 'is_maximized_vertically', 'is_minimized', 'is_most_recently_activated', 'is_on_workspace', 'is_pinned', 'is_shaded', 'is_skip_pager', 'is_skip_tasklist', 'is_sticky', 'is_visible_on_workspace', 'keyboard_move', 'keyboard_size', 'make_above', 'make_below', 'maximize', 'maximize_horizontally', 'maximize_vertically', 'minimize', 'move_to_workspace', 'needs_attention', 'notify', 'or_transient_needs_attention', 'pin', 'props', 'set_data', 'set_fullscreen', 'set_geometry', 'set_icon_geometry', 'set_properties', 'set_property', 'set_skip_pager', 'set_skip_tasklist', 'set_sort_order', 'set_window_type', 'shade', 'stick', 'stop_emission', 'thaw_notify', 'transient_is_most_recently_activated', 'unmake_above', 'unmake_below', 'unmaximize', 'unmaximize_horizontally', 'unmaximize_vertically', 'unminimize', 'unpin', 'unshade', 'unstick', 'weak_ref']
>>> active.get_name()
'pts/16:  ~   python'
>>> active.is_sticky()
False

すべてのデスクトップには固定ウィンドウがあります。これは通常、常に画面に表示する必要があるデスクトップ環境ウィジェットであるため、最小化しないでください。十分でない場合は、名前または他の属性で一致を試すことができます。

#!/usr/bin/env python
import wnck
screen = wnck.screen_get_default()
windows = screen.get_windows()
active = screen.get_active_window()

for w in windows:
    if not (w == active or w.is_sticky()):
            w.minimize()

答え2

Ctrl + Alt + d希望する回答ではないかもしれませんが、ウィンドウマネージャのショートカットを使用してすべてを非表示にしてから、を使用して最後のアクティブなビューをAlt + Tab開くのは簡単ではありませんか?それとも、両方を実行するコマンドを作成するために変更しますか?

おそらくこれ助けることができる

あなたの質問が構文に関するものであれば...あなたが探している機能は、ガイドの2番目のスクリプトの機能のようです。

#!/usr/bin/env python
import wnck
import gtk

screen = wnck.screen_get_default()

while gtk.events_pending():
    gtk.main_iteration()

windows = screen.get_windows()
active_app = screen.get_active_window().get_application()

for w in windows:
    if not w.get_application() == active_app:
        w.minimize()

関連情報