LINUX.ORG.RU

решил тут написать тулзу для поиска окон. Зацените говнокод

 


0

1

Что можно улучшить? Что можно добавить? Есть ли аналоги, которыми можно пользоваться, выкинув этот самописный ужас?


#!/usr/bin/python

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk,Gdk
gi.require_version('Wnck', '3.0')
from gi.repository import Wnck


filter_str = ""

def filter_func(model, itr, data):
    return model[itr][1].find(filter_str) > -1

def refilter(self):
    global filter_str
    filter_str=self.get_text()
    filter_m.refilter()

def check_esc(self, event):
    if event.keyval == Gdk.KEY_Escape:
        Gtk.main_quit()


def bring_the_shit_up(self):
    time=Gtk.get_current_event_time()
    filter_m[0][0].get_workspace().activate(time)
    filter_m[0][0].activate(time)
    Gtk.main_quit()

def selected(selection):
    time=Gtk.get_current_event_time()
    model, itr = selection.get_selected()
    filter_m[itr][0].get_workspace().activate(time)    
    filter_m[itr][0].activate(time)
    Gtk.main_quit()

screen=Wnck.Screen.get_default()
screen.force_update()

window_list=screen.get_windows()
window_list=filter(lambda x: x.get_window_type()==Wnck.WindowType.NORMAL, window_list)
names=map(lambda x: [x, x.get_name()], window_list)

list_store=Gtk.ListStore(Wnck.Window, str)


map(lambda x: list_store.append(x), names)
renderer=Gtk.CellRendererText()
column = Gtk.TreeViewColumn("TTTT", renderer, text=1)
column.set_widget(Gtk.Label())


filter_m = list_store.filter_new()
filter_m.set_visible_func(filter_func)
combobox=Gtk.TreeView.new_with_model(filter_m)
combobox.append_column(column)

entry=Gtk.SearchEntry()
grid=Gtk.Grid()
grid.attach(entry, 0, 0, 8, 10)
grid.attach_next_to(combobox, entry, Gtk.PositionType.BOTTOM, 1, 1)

entry.connect("search-changed", refilter)
entry.connect("activate", bring_the_shit_up)
select_obj=combobox.get_selection()
select_obj.connect("changed", selected)

win = Gtk.Window()

win.add(grid)

win.connect("destroy", Gtk.main_quit)
win.connect("key-release-event", check_esc)
win.show_all()

Gtk.main()

★★☆☆☆
Ответ на: комментарий от micronekodesu

Я не знаю как сделать подобное на баше с этими программами. Ну чтобы с окном и поиском

dikiy ★★☆☆☆
() автор топика
Ответ на: комментарий от anonymous

Ну я просто не готов трахаться с сишечкой.

dikiy ★★☆☆☆
() автор топика

Ну т.е. мой комментарий про rofi ты проигнорировал? Так и скажи, чесались руки написать очередной велосипед.

aquadon ★★★★★
()
-window_list=filter(lambda x: x.get_window_type()==Wnck.WindowType.NORMAL, window_list)
+window_list = [x for x in window_list if x.get_window_type()==Wnck.WindowType.NORMAL]
hippi90 ★★★★★
()
Ответ на: комментарий от aquadon

Ну т.е. мой комментарий про rofi ты проигнорировал? Так и скажи, чесались руки написать очередной велосипед.

я с мабилы читал. Поленился сходить погуглить. Ща...

dikiy ★★☆☆☆
() автор топика
Ответ на: комментарий от hippi90

-window_list=filter(lambda x: x.get_window_type()==Wnck.WindowType.NORMAL, window_list)

+window_list = [x for x in window_list if x.get_window_type()==Wnck.WindowType.NORMAL]


А в чем разница? Мне кажется вторая конструкция непонятной.

dikiy ★★☆☆☆
() автор топика
Ответ на: комментарий от micronekodesu

Я, честно говоря, вообще не понял что ты делаешь. Можешь показать результат или хоть на словах объяснить?

У тебя допустим куча окон открыта (в моем случае куча pdf-ок в zathura) ну и всякие octave и т.д. И искать их на рабочих столах те еще нервы. Эта программка выдает список всех окон с полем ввода с инкрементальным поиском. И написав кусок нахвание заголовка окна можешь сразу отфильровать до нужного и нажав enter переключиться на него.

dikiy ★★☆☆☆
() автор топика
Ответ на: комментарий от aquadon

Ну т.е. мой комментарий про rofi ты проигнорировал? Так и скажи, чесались руки написать очередной велосипед.

Спасибо. rofi это то что доктор прописал. Ну что ж... Зато с Gtk поупражнялся... %)

dikiy ★★☆☆☆
() автор топика
Ответ на: комментарий от dikiy

Ну как-то так:

read title ; windows="$(wmctrl -l | grep $title)"; wmctrl -s ${windows:11:2}

Это все, конечно, на коленке, можно разобрать ситуации когда больше одного окна, сделать поиск в реалтайме, искать только по заголовкам окон а не по всей строке и так далее, но в целом вот так.

micronekodesu ★★★
()
Ответ на: комментарий от micronekodesu

я думаю что это в итоге по сложности превысило б адекватность скриптования в баше.

dikiy ★★☆☆☆
() автор топика
Ответ на: комментарий от deep-purple

Ну флешка сама скорее в качестве шок-контента, основной прикол там в скриптах, а они тоже не работают, хоть и заинлайнены на страницу — даже в Opera Classic :/ Надо восстановить, хороший прикол же был — отголосок веба, который мы потеряли.

Moondancer
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.