Начнем с того, что картинок на рабочем столе у меня лет десять, как нет. Зачем, если их не видно? Иконок тем более. Зачем, если есть кнопки на клавиатуре? Но место-то есть, а значит, хочется придать ему какой-то смысл. Когда-то мне казалось, что различные live desktops, начиная с приснопамятного Active Desktop и заканчивая разнообразными karamba, dashboard и прочими plasma'ми, -- довольно интересная идея. Только вместо малополезной информации, предлагаемой, скажем, Opera widget'ами хотелось иметь возможность работать с этим активным рабочим столом -- задавать ему вопросы и получать ответы.
Ну, вот я и попробовал. Не так давно заядлый лисповод Билл Клементсон опубликовал в блоге статью Emacs GeekTool (http://bc.tech.coop/blog/070322.html), где пишет о том, как он уложил Emacs на рабочий стол. А в качестве источника вдохновения он использовал статью Штефана Кампхаузена Emacs as Desktop Background (http://www.emacswiki.org/cgi-bin/wiki/EmacsAsDesktopBackground). То, что сделал Кампхаузен, не соответствует, строго говоря, названию статьи, поскольку его Emacs не запускается в root window. Тем не менее, это вполне работоспособная имитация, причем ее несложно воспроизвести в большинстве других WM. Запускается xterm, которому дается определенное имя, а в Sawfish указывается, что окно с таким именем должно располагаться в таком-то месте, не иметь заголовка и не должно появляться в списках открытых окон. А в этом xterm уже запускается emacs с заранее заданной конфигурацией.
Словом, я воспроизвел его решение, благо я уже давным-давно не вылезаю из Sawfish. Сначала я тоже запускал emacs -nw в xterm, а потом переделал все под нормальный X-овый Emacs. В .sawfishrc прописываем:
(system "emacs -T 'hidden' -g 125x65 -f root-portal &")
Функцию root-portal можно взять из статьи Кампхаузена и подогнать под себя.
В .sawfish/custom задаем свойства для окна с именем hidden:
(custom-set-typed-variable
(quote match-window-profile)
(quote ((((WM_NAME . "^hidden$"))
(position 0 . 23)
(depth . -16)
(focus-mode . click)
(frame-type . none)
(ignored . #t)
(sticky . #t)
(sticky-viewport . #t)
(cycle-skip . #t)
(window-list-skip . #t)
(task-list-skip . #t)
(ignore-stacking-requests . #t))))
(quote match-window)
(quote sawfish.wm.ext.match-window))
Результат вы видите.
С впечатлениями я еще не разобрался. Как и в случае с аналогичными live desktops, проблема в том, что до этого окна еще нужно добраться. С одной стороны, это можно сделать, повесив на некоторый hotkey функцию show-desktop, а с другой -- с таким же успехом можно просто запустить нужную программу или показать имеющееся окно. А с третьей стороны, в конце концов, что такое десктоп, если не такое же равноправное окно? Так почему бы и не пользоваться им для запуска той программы, которая нужна постоянно? С четвертой стороны, я недавно попробовал наконец-то ion и, возможно, поменяю на него Sawfish. С пятой стороны, а может, плюнуть на все и уехать в деревню?
>>> Просмотр (1280x1024, 163 Kb)