воскресенье, 1 февраля 2009 г.

Linux like Mac: keyboard ...

Как-то недавно заметил, что скриншоты Windows, хотя ОС и сторонний софт дает возможность кастомайзить интерфейс как тебе захочется, не просто похожи один на другой, но еще и какие-то совсем неинтересные, чтобы не сказать безвкусные. Стандартная тема, или классическая тема, на рабочем столе склад иконок, а вместо валлпейпера машина или голая девка. Я, конечно немного утрирую, но вобщем-то не далеко от истины - могу сказать точно, что на редкий виндовый рабочий стол приятно смотреть, если видел что-то другое. Возможно виндузятники чувствует что-то похожее по отношению к маководам и линуксоидам, не знаю. На Маке возможности настройки внешнего вида существенно ограничены(я про Leopard): можно сменить картинку на рабочем столе, повертеть доком, если сильно захотеть - немного настроить внешний вид дока, да и все... но поскольку изначальный внешний вид вполне пристойный - смотреть скриншоты с Мака одно удовольствие, сугубое IMHO конечно. Линуксовые десктопы на редкость разнообразны, впрочем, при обилии DE, и WM'ов на все случаи жизни ожидать чего-нибудь другого и не приходится.

Правда, к сожалению, или к счастью, линуксоиды не всегда оригинальны и любят копировать внешний вид с других систем. Сам грешен: моя любимая цветовая схема уже несколько лет - это вариации на тему того что в KDE3 называлось Solaris - я так понимаю эти цвета должны напоминать пользователям олдскульный CDE.

Но все же любимой забавой линуксоидов являются закосы под Мак. Не проходит и месяца, чтобы на сайтах где я смотрю скриншоты, кто-нить не запостил очередной закос под интерфейс OS X. Иногда, совсем похоже, но чаще - это просто вариация на тему "вот так мне кажется в Маке все и есть". Объяснять, что наличие эмулятора дока и круглых кнопок - это еще не все не очень интересно, да и не каждый поверит. Но в конце-концов есть же еще:
- строка меню приложения расположенная вверху экрана. Ее можно было относительно просто включить в КДЕ 3, но только для КДЕ-приложений, что не очень интересно. В GTK-софте, насколько я знаю, прямого способа нет, а патчить ГТК - перебор. Повторюсь наверное, - общее меню - это не просто прикольно, потому что не как у всех - это еще и очень удобно: всегда, в одном месте, ты видишь меню активного окна - для того чтобы выбрать какой-то пункт меню нужно всего лишь дернуть мышей вверх, и там уже выбирать, в отличии от виндо-линукс-приложений, когда надо еще точно выбрать нужную высоту :)
- док, не не тот док, который скорее похож на кнопки быстрого запуска. Док, тот который трей, совмещенный с кнопками быстрого запуска.
- горячие клавиши. это то что не покажешь на скриншоте:), но одновременно, это то, без чего никакая эмуляция ОС Х не будет полной. Большая часть приложений имеет одинаковые клавиатурные сокращения - это означает, что "настройки", - это всегда Cmd+, (их еще и всегда в одном и том же месте в меню можно найти), а создать таб - Cmd+t, ну и так далее. Выучив похожие по-смыслу действия в одном приложении, ты сможешь ими воспользоваться во всех остальных. Тем, кто пытается "сохранить и выйти" с помощью :wq, или удалить слово с помощью Ctrl+w(что срабатывает чаще чем :wq :-)) полезность такой однообразности просто таки очевидна.

Можно обойтись без общей на всех строки меню, некоторые приложения, которыми я пользуюсь, ее совсем не имеют, в других - не так часто приходится туда лезть. Без дока и expose, обойтись сложнее, - я например рефлекторно двигаю мышкой в левый верхний угол желая увидеть превьюшки рабочих столов :), но тоже можно. А вот с хоткеями совсем беда - с одной стороны, уж очень упрощают жизнь, с другой - работая чаще всего на Маке, но иногда таки на Линуксе, когда в Линуксе нажимаешь привычное Cmd+t (то есть в переводе на PC-шную клавиатуру - Alt+t), и не получаешь открытого таба - очень расстраиваешься :) Посему, особенно после покупки EeePC, стала посещать меня мысль привести хоткеи в своем линуксовом окружении к тому, к чему я (ну очень быстро) привык, и активно использую, в Маке. На самом деле, не так уж и много этих хоткеев, которые активно используются.

Одно из важнейших отличий Маковских хоткеев, кроется в особенностях маковской клавиатуры: в ней наличествует клавиша Command, расположенная там, где на PC-клавиатурах Alt, и именно она активно используется, вместо PC'шного Ctrl(хотя и он тоже имеется в наличии). То есть, например, копирование/вставка - это Cmd+C/Cmd+V, создание нового таба - Cmd+T и так далее. Сначала это достаточно необычно и непривычно, но через некоторое время оказывается что это чрезвычайно удобно, и возвращаться на традиционный Ctrl не очень то и хочется. Да и не особо нужно: в принципе, для большинства случаев, нужно переназначить Ctrl на "ту клавишу, которая рядом с пробелом", а Alt перенести в какой-нить другое место. Делается это достаточно просто: в файле /usr/share/X11/xkb/keycodes/xfree86 находим что-то типа:

<LALT> = 37;
<LCTL> = 64;
<SPCE> = 65;
<RCTL> = 109;
<RALT> = 113;
// Microsoft keyboard extra keys
<LWIN> = 115;
<RWIN> = 116;
<MENU> = 117;

устанавливаем циферки как нам хочется, и радуемся жизни. Правда, надо еще подумать на тему что делать с терминалом и vim'ом, в которых такая замена совсем не нужна.

Еще всплывает вопрос о настройке переключалки клавиатуры, чтобы было "везде одинаково". В Линуксе мне нравилось, когда английский язык включался тыцаньем на Caps Lock, а русский - на Shift+Caps Lock. К сожалению, как сделать такое в Маке я так и не узнал, и немного попривык к тамошнему странному Cmd+Space - для двух языков не так уж оно и не неудобно :) Памятуя замену: LALT - LCTL, задача стоит как "Cделать переключение языков по Ctrl+Space".

Про кастомнизауию переключения раскладки я уже несколько раз писал, в этот раз, заглянув за инструкцией в свой последний пост, к своему разочарованию, увидел что инструкция собственно не работает в Debian Lenny, который у меня на EeePC:


diesel@xenocefal:~$ /usr/bin/X11/xkbcomp $HOME/.xkb.my $DISPLAY
Error: Can't find file ".xkbgroup.my" for symbols include
Exiting
Abandoning symbols file "raq104"

Решение, фактически, нашел методом тыка, как-то ничего разумного гугл по сему странному поводу не выдал. Решение следующее: создаем директорию $HOME/.xkb/symbols/, в нее кладем модифицированный соответствующим образом /usr/share/X11/xkb/symbols/group, и xkbcomp стартуем как:
/usr/bin/X11/xkbcomp -I$HOME/.xkb/ $HOME/.xkb/.xkb.my $DISPLAY

Вот тогда все отрабатывает как надо. Собственно для того чтобы был Ctrl+Space, нужно дописать что-то типа:

partial modifier_keys
xkb_symbols "ctrl_space_keys" {
key <spce> {
type[Group1]="PC_CONTROL_LEVEL2",
symbols[Group1]= [ space, ISO_Next_Group ]
};
};

ну и соответствующим образом изменить .xkb.my, если считать что модифицированный group это .xkbgoup:


diesel@xenocefal:~$ cat .xkb/.xkb.my
xkb_keymap "raq104" {
xkb_keycodes { include "xfree86" };
xkb_types { include "complete" };
xkb_compatibility { include "complete" };
xkb_symbols {
include "pc(pc105)"
include "us"
include "ru(winkeys):2"
include ".xkbgroup.my(ctrl_space_keys)"

};
xkb_geometry { include "pc(pc105)"};
};



Ну и завершая на сегодня тему хоткеев, околохоткейный hint. Одной из "фишек", которая, обычно нравится вновь прибывающим на linux является наличие двух буферов обмена - "мышиного"(тот который "выделяем что-нибудь, и вставляем средней кнопкой"), и "клавиатурного"(тот который почти везде работает по Ctrl+C/Ctrl+V). Так уже сложилось, что моим любимым эмулятором терминала c давних времен является xterm. Хотя он не умеет табы, не становится прозрачным, и скорее всего еще много всяких странных вещей не умеет, мне его всегда хватало, и не очень сильно своим привычкам хочется изменять. Проблема в том, что в Xterm'е "буффер клавиатуры" никак не задействован, то есть по-умолчанию скопировать в него чего-нить из терминала нельзя. А жаль, поскольку за отсутствием средней кнопки мыши, да и вообще мыши, когда есть только странный EeePC'шный тачпад, нажать "среднюю кнопку" весьма сложно, а Shift+Insert вставляет из мышиного буфера не везде. Оказывается, есть выход - заставить xterm вместо буфера мыши, копировать в буфер клавиатуры, и тогда можно с легкостью использовать привычный нам Ctrl+V для вставки чего-нить в тот же firefox. Делается это вот такой вот строчкой в ~/.Xresources:

*xterm*VT100.selectToClipboard: true

В xterm'е, правда, вставлять все-равно через Shift+Insert надо. Если кто знает как побороть - расскажите :)

PS: хех, с привычным расположением клавиш писать на EeePC гораздо приятнее :-).

9 комментариев:

Sergey комментирует...

Для общего меню приложений GTK патчить давно уже не надо. Идут работы также над интеграцией с Qt.

Лично я предпочитаю "лучшие части лучших автомобилей" когда речь заходит о кастомизации :)

http://code.google.com/p/gnome2-globalmenu

Juev комментирует...

У меня как раз клавиатура Apple aluminum... Но даже мысли о том, чтобы назначить на Cmd клавишу Ctrl не возникало, просто потому, что Ctrl существует сама по себе, а Cmd играет роль клавиши Win на обычных клавах. Переключение языка на Cmd+Space это уже изврат, имхо конечно же, но не удобно просто жуть... Как я понял - Вы уже ощутили это на себе...

diesel комментирует...

Про http://code.google.com/p/gnome2-globalmenu не знал, спасибо, надо будет посмотреть.

> Лично я предпочитаю "лучшие части лучших автомобилей" когда речь заходит о кастомизации.

В данном случае мне хочется сделать во всех автомобилях одинаково. Привычки - страшная штука :)

> Но даже мысли о том, чтобы назначить на Cmd клавишу Ctrl не возникало

Ну, у меня не только клавиатура:)

> Переключение языка на Cmd+Space это уже изврат, имхо конечно же, но не удобно просто жуть

это кстати удобней чем Ctrl+Shift, просто Caps Lock, Alt+Shift - попадать быстрее и легче на самом деле.

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

Juev комментирует...

Капс удобнее на порядок, при слепом методе печати проблем не возникает... ;)
Хотя сам уже давненько использую комбинацию из Emacs - Ctrl+ \

diesel комментирует...

> Хотя сам уже давненько использую комбинацию из Emacs - Ctrl+ \

которая тоже сама по себе из разряда "к ней надо привыкнуть" :) На макбуковой клавиатуре, кстати, Ctrl+\ надо нажимать двумя руками, так как правого контрола нет

Juev комментирует...

Так данная комбинация и должна нажиматься двумя руками, если следовать правилам слепого набора... А макбук - ну что могу сказать... Та еще штучка... ;)

diesel комментирует...

> Так данная комбинация и должна нажиматься двумя руками, если следовать правилам слепого набора...

хотя я и набираю можно сказать вслепую, правда школой слепого набора для меня была ни какая нибудь методика, а в основном IRC, но к столь экстремальным переключалкам я явно не готов :)

sash-kan комментирует...

> Если кто знает как побороть - расскажите :)
т.е., хочется ctrl+v для вставки того же буфера, что и ctrl+insert?
что-то типа:
*xterm*VT100*translations: #override Ctrl #Key>V: insert-selection(SELECT, CUT_BUFFER0)
(«#» перед «Key» замени на знак «меньше» — не пропускает blogger.com)
(man xterm)
ctrl+v, между прочим, используется readline-ом (man readline -> "c-v").

diesel комментирует...

sash-kan спасибо большое, вчера пытался осилить override, но не получилось с первой попытки.