LINUX.ORG.RU

[тред радости] нашёл тайловый менеджер на питоне: qtile


0

1

Сбылась мечта: заменить awesome с его lua на что-нить питонячее.

Pytyle сразу отбросил потому что pytyle1 deprecated а в репозиторий pytyle2 ни одного коммита с весны не было. Кроме того у него конфиг в ini-стиле, нафиг надо.

В общем, встречайте qtile! Постараюсь в ближайшее время скооперироваться с автором и допилить самые болезненные косяки. Уже пару коммитов подготовил. Только бы терпения хватило...

Единственно что смущает это куча тривиальных багов которые не только открыты но и висят без комментов.

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

http://qtile.org/

Если кто заинтересуется то могу выслать свой текущий конфиг. А вообще эта штука предполагает ковыряние в сырцах, документация крайне куцая.

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

Скриншот сделать не могу(впрочем, там всё страшно) потому что нет с собой ноута.

Конфиг такой:

from libqtile.manager import Key, Drag, Click, Screen, Group
from libqtile.command import lazy
from libqtile import layout, bar, widget, hook

BROWSER = "chromium-browser"
TERMINAL = "urxvtcd -rv -fade 50 -fn 12X24 -fb 12x24"
MOD = "mod4"
LOCK_CMD  = "gnome-screensaver-command -l"
SLEEP_CMD = LOCK_CMD + ';' + "sync; echo mem | sudo tee /sys/power/state"


###########
# HOTKEYS #
###########
keys = [
    #navigation TODO: doesn't work for floating windows
    Key([MOD],    "Tab", lazy.layout.down()),
    #Key([MOD],    "Tab", lazy.layout.next_window()),
    Key(["mod1"], "Tab", lazy.layout.up()),

    #switch layouts
    Key([MOD], "j", lazy.nextlayout()),
    Key([MOD], "k", lazy.prevlayout()),

    Key([MOD, "control"], "k", lazy.layout.shuffle_down()),
    Key([MOD, "control"], "j", lazy.layout.shuffle_up()),
    Key([MOD], "space", lazy.layout.next()),
    Key([MOD, "shift"], "space", lazy.layout.rotate()),
    Key([MOD, "shift"], "Return", lazy.layout.toggle_split()),

    Key([MOD], "h",      lazy.to_screen(1)),
    Key([MOD], "l",      lazy.to_screen(0)),

    #volume
    Key([], "XF86AudioRaiseVolume", lazy.spawn("amixer set Master 10%+")),
    Key([], "XF86AudioLowerVolume", lazy.spawn("amixer set Master 10%-")),

    #toggle floating
    Key([MOD], "f", lazy.window.toggle_floating()),

    #kill the window
    Key([MOD], "w",      lazy.window.kill()),


    #launch hotkeys
    Key([MOD], "x", lazy.spawn(TERMINAL)),
    Key([MOD], "b", lazy.spawn(BROWSER)),
    Key([MOD], "l", lazy.spawn(LOCK_CMD)),

    #run cmd
    Key([MOD], "r", lazy.spawncmd()),

    #qtile hotkeys
    Key([MOD, "control"], "q", lazy.spawn("killall qtile")),

    #put the laptop into sleep
    Key([MOD, "control"], "s", lazy.spawn(SLEEP_CMD)),
]


##############
# WORKPLACES #
##############
groups = [ Group(name) for name in ['a', 's', 'd'] ]
for i in groups:
    #switch to the desktop
    keys.append( Key([MOD], i.name, lazy.group[i.name].toscreen()))
    #move window to the other desktop
    keys.append( Key([MOD, "shift"], i.name, lazy.window.togroup(i.name)))


###########
# LAYOUTS #
###########
layouts = [
    layout.Max(),
    layout.Stack(stacks=3),
    layout.Floating(),
]


#########
# MOUSE #
#########
mouse = [

    Drag([MOD], "Button1", lazy.window.set_position_floating(),
        start=lazy.window.get_position()),
    Drag([MOD], "Button3", lazy.window.set_size_floating(),
        start=lazy.window.get_size()),
    Click([MOD], "Button2", lazy.window.bring_to_front())
]


####################
# PHYSICAL SCREENS #
####################
screens = [
    Screen( top = bar.Bar(
        [
        widget.GroupBox(),
        widget.Prompt(),
        widget.Sep(),
        widget.WindowName(),
        widget.Sep(),
        widget.Battery(font='Consolas', fontsize=18, margin_x=6),
        widget.Sep(),
        #widget.Volume(),
        widget.Systray(),
        widget.Sep(),
        widget.Clock('%H:%M %d/%m/%y', fontsize=18, padding=6),
        ],
        40)
    ),
]


###########
# TUNNING #
#######@###
@hook.subscribe.client_new
def dialogs(window):
    if(window.window.get_wm_type() == 'dialog'
        or window.window.get_wm_transient_for()):
        window.floating = True

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

Спасибо за конфиг. А у вас дистр, случайно, не Arch? Пытаюсь установить qtile-git из AUR'а, но там конфликт с удовлетворением зависимостей: pycairo-xcb-git и python2-cairo конфликтуют, при этом pygtk, требуемая qtile, зависит от python2-cairo.

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

не, убунта. Я из сырцов поставил xpyb, остальное в дистре нашлось.

Странно что пакеты конфликтуют, они же делают разные вещи. Я думаю можно подправить описание пакета чтобы оба воткнулись в систему(с арчем дела не имел, поэтому тонкостей не знаю).

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

У меня всё летает без каких-либо намёков на тормоза. Я даже порадовался что такой быстрый wm сделали, разницы с awesome не нашёл вообще.

Но он сыр, да. Но меня добили две вещи: низкая девелоперская активность и то что floating-окна исключаются из группы. Соответственно как на них фокус с клавиатуры переключить я не понял. Я вернулся на awesome :(

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

итог.

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

true_admin ★★★★★
() автор топика
7 декабря 2011 г.

Давненько подруживал с pytyle да как то дело не доходило. Тут решил опять взяться но уже за новый pytyle2 и того http://ompldr.org/vYm1oOA Так что правильно что не выбрали :)

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