python script to minimize all but one window kills panel

С GNU awk это выполняет свою работу в моих тестах:

awk 'BEGIN{RS="LOCATION [0-9] X [0-9]"}NR==FNR{f1[RT]=$0;next} \
RT in f1{printf("%s%s%s", f1[RT],gensub("\n","",1,$0),RT)}' file1 file2

Тестирование:

$ cat file1
LOCATION 0 X 0
VALUE 1a 2 3
VALUE 1b 2 3
VALUE 1c 2 3
LOCATION 1 X 0
VALUE 1d 2 3
VALUE 1e 2 3
VALUE 1f 2 3
LOCATION 2 X 0
VALUE 1g 2 3
VALUE 1h 2 3
VALUE 1i 2 3

$ cat file2
LOCATION 0 X 0
VALUE 4a 5 6
VALUE 4b 5 6
VALUE 4c 5 6
VALUE 4d 5 6
LOCATION 1 X 0
VALUE 4e 5 6
VALUE 4f 5 6
VALUE 4g 5 6
VALUE 4h 5 6
LOCATION 2 X 0
VALUE 4i 5 6
VALUE 4j 5 6
VALUE 4k 5 6
VALUE 4l 5 6

$ awk 'BEGIN{RS="LOCATION [0-9] X [0-9]"}NR==FNR{f1[RT]=$0;next}RT in f1{printf("%s%s%s", f1[RT],gensub("\n","",1,$0),RT)}' file1 file2
LOCATION 0 X 0
VALUE 1a 2 3
VALUE 1b 2 3
VALUE 1c 2 3
VALUE 4a 5 6
VALUE 4b 5 6
VALUE 4c 5 6
VALUE 4d 5 6
LOCATION 1 X 0
VALUE 1d 2 3
VALUE 1e 2 3
VALUE 1f 2 3
VALUE 4e 5 6
VALUE 4f 5 6
VALUE 4g 5 6
VALUE 4h 5 6
LOCATION 2 X 0
VALUE 1g 2 3
VALUE 1h 2 3
VALUE 1i 2 3
VALUE 4i 5 6
VALUE 4j 5 6
VALUE 4k 5 6
VALUE 4l 5 6
1
14.08.2017, 04:11
2 ответа

Вы не используете 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()
1
27.01.2020, 23:45

Возможно, это не тот ответ, который вы ищете, но не будет ли проще использовать ярлыки диспетчера окон, чтобы скрыть все Ctrl + Alt + d, а затем открыть последний активный вид с помощью Alt + Tab? или даже изменить их, чтобы создать команду, которая выполняет оба?

Может быть, этот поможет с этим.

Если ваш вопрос о синтаксисе... Я думаю, что функциональность, которую вы ищете, - это функция из второго скрипта из вашего руководства

#!/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()
0
27.01.2020, 23:45

Теги

Похожие вопросы