Тег «Linux»

Emacs: переключаем раскладку одинаково с ОС

Наверное, первое, что неприятно поражает новичка в Emacs — невозможность использовать системные средства для переключения языка ввода. Не в том смысле, что оно не работает. А в том, что переключение на любой отличный от английского язык средствами ОС превращает Emacs в Notepad. Перестают работать все клавиатурные комбинации! Паника!

К счастью, Emacs, как и всякая уважающая себя ОС, имеет собственный механизм переключения языков, кодировок и прочего. И все это даже работает. Одна беда — нельзя повесить переключение и в системе, и в Emacs на одну и ту же клавишу, потому что система в таком случае тоже будет переключаться. А пользоваться разными сочетаниями в Emacs и вне него… Что ж, я долгое время так и поступал. Неудобно.

Итак, задача:

  1. Хотим переключаться везде по одной и той же клавише. Причем, чтобы если мы нажимаем эту клавишу в Emacs, использовался его внутренний механизм, в остальных случаях пусть этим занимается ОС.
  2. Хотим, чтобы п. 1 работал и в Windows, и в Linux. И желательно чтобы сценарий загрузки был общим.

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

  • убедить ОС не переключаться, пока активен Emacs;
  • после одновременного переключения и в ОС, и в Emacs, переключить ОС обратно.

Оказывается, первый вариант реализуем в Linux, а второй в Windows. Дальнейшее изложение предполагает, что в качестве универсальной клавиши переключения выбран Caps Lock.

Для Linux палочкой-выручалочкой оказывается сочетание SCIM/iBus и xmodmap. С помощью xmodmap можно переназначить Caps Lock на какое-нибудь неиспользуемое действие, например, F13. Для этого в файл ~/.Xmodmap вписываем строку:

keycode 66 = F13

Число 66 — это код соответствующей клавиши. Скорее всего, у вас будет такой же, но лучше в этом убедиться с помощью утилиты xev.

Дальше убиваем системную переключалку раскладок (без особых зверств), и настраиваем SCIM/iBus на переключение по F13, а затем отключаем переключение для Emacs, вписывая в ~/.Xdefaults строку:

Emacs*useXIM:false

Теперь остается только подправить стартовый сценарий Emacs (.emacs или init.el), вставив туда:

(global-set-key [f13] 'toggle-input-method)

Выходим из сеанса, входим обратно, тратим еще пару часов на доработку напильником, и все заработает. Для Linux это все. Я намеренно опустил некоторые подробности про настройку SCIM/iBus, поскольку времена меняются, и старые инструкции становятся устаревшими. А тут я как бы не причем: «настройте iBus на переключение по F13» еще долго не устареет. В конце концов, гугл никто не отменял. Идея использовать SCIM и его аналоги не новая, об этом много где можно прочитать.

В Windows такой фокус не пройдет, но зато один вдумчивый камрад предложил очень изящное решение (ссылка не работает?..), которое упомянуто выше: после переключения вернуть системную раскладку обратно. (Для установки Caps Lock в качестве клавиши переключения системной раскладкой нужно воспользоваться чем-то вроде lswitch или лезть в реестр.)

Теперь остается только вооружиться переменной system-type, и получим сценарий, который кроссплатформенно решает нашу задачу:

(if (eq system-type 'windows-nt)
    ((defvar safe-language-change-flag nil)
     (defun safe-language-change ()
       (interactive)
       (setq safe-language-change-flag (not safe-language-change-flag))
       (when safe-language-change-flag
         (toggle-input-method)
         (w32-toggle-lock-key 'capslock)))
     (global-set-key (kbd "<language-change>") 'safe-language-change))
  (global-set-key [f13] 'toggle-input-method))

Правда, в случае запуска в натуральной консоли проблема все еще остается.

УжасноПлохоНормальноХорошоОтлично (1 голосов, средний: 5.00 из 5)
Loading ... Loading ...

OpenOffice Impress во всей красе

Вчера весь день работал над своей SITOPовской презентацией в OO Impress 3.1.1 под Fedora 11. Работал — и получал от этого реальное удовольствие, настолько удобная программа. И что особенно приятно, думал я, не тормозит, радость моя, даже на моем стареньком рабочем P4. Ну просто счастье.

Сегодня прихожу на работу, открываю ту же презентацию, и… Иду пить чай. Отклика от интерфейса нет вообще. Смотрю в top — за звание самого прожорливого процесса борются simpress.bin и convert. Последний, очевидно, что-то делал со встроенными в презентацию картинками в формате EPS. Наверное, преобразовывал в какой-то свой внутренний формат. Ладно, минуты 4 попреобразовывал и перестал.

Но вот процесс simpress.bin после этого решил, что он теперь тут главный и ему все можно. Минут через пять интерфейс, наконец, начал неторопливо отвечать на мои действия. Все это время загрузка процессора одним этим процессом держалась на уровне 95%. Еще минут через пять тормоза почти окончательно пропали. Но стоит только просто поелозить колесиком мышки, как Impress тут же начинает жрать 20–40%. И основательно тормозит при любом редактировании. Xorg тоже хорош — глядя на Impress, выдает до 40% при прокрутке слайдов. Они что думают, я их за ушком чешу?.. Откуда такая гипервозбудимость?

Нет, правда, может кто-то знает? Уж очень не хочется для подготовки презентаций загружать винду.

День рождения Linux

Версия 0.01 вышла 17 сентября 1991 года. Сегодня совершеннолетие!

Всем срочно sudo drink !

Четкие шрифты в Linux

Не знаю, как всех, но лично меня страшно раздражают сглаженные шрифты. Ну поаккуратнее они, ну покрасивее. Ну и что? Читаются же ужасно! К тому же, поверьте очкарику со стажем, нечеткие буквы — прямой путь к перенапряжению глаз. Мозг считает, что плохо сфокусировал глаза, и поэтому весь день только и занимается тем, что пытается их перефокусировать. Да что там, для меня даже несглаженный шрифт на подключенном через аналоговый выход мониторе чересчур нечеткий.

В Windows шрифтовым стандаSharp Fontsртом де-факто является True Type. В Linux за отображение шрифтов отвечает пакет freetype, который поддерживает кучу стандартов шрифтов, но вот нормальное отображение True Type в нем обычно отключено по юридическим соображениям. Поэтому, если просто отключить антиалиасинг, то шрифты будут четкими, но фантастически уродливыми (даже если взять виндовые).

Чтобы таки получить шрифты «как в Windows», мне достаточно было выполнить нехитрые действия:

  1. Отключить штатное сглаживание и поставить экранное разрешение 96 dpi.
  2. Перекомпилировать freetype, взяв его с http://www.freetype.org/ (желательно версию, которая сейчас установлена). При этом прочитать docs/TRUETYPE, в котором описаны необходимые действия, которые нужны для корректной обработки True Type (нужно раскомментировать одну строку в одном заголовочнике). Не забыть указать префикс (у меня /usr) при вызове ./configure.
  3. Перезагрузить иксы.
  4. Enjoy!

Минус только один: при обновлении freetype придется проделать действия заново.

Подробнее об этом процессе можно почитать здесь. Шрифты True Type можно взять тут.

УжасноПлохоНормальноХорошоОтлично (Еще не оценили)
Loading ... Loading ...

Проблемы с microtype и шрифтами

Я уже писал про одну из возможностей пакета microtypeвисячую пунктуацию (кстати, это частный случай margin kerning — кернинга крайних символов в строке для визуального выравнивания границ текста). Так вот, этот пакет позволяет делать еще множество всяких микротипографских трюков (см. инструкцию). Один из основных — автоматическое растягивание шрифта (font expansion) для выравнивания пробелов между словами.

Не сказать чтобы мне это самое растягивание позарез как нужно, но после очередного обновления (у меня Fedora 11) моя статья перестала собираться, мотивируя это примерно так:

ERROR: pdfTeX error (font expansion): auto expansion is only possible with scalable fonts

Это загнало меня в тупик на несколько часов. Конечно, Гугль знает о такой проблеме. И в инструкции к microtype все подробно написано. Ответ очевиден: использовать масштабируемый шрифт. Проблема только в том, что используемый по умолчанию шрифт cmr из пакета cm-super очень даже масштабируемый. Лог сборки по этому поводу тоже не особенно внятен.

Решение нашлось практически случайно. Некая загадочная редиска закомментировала в файле updmap.cfg строки, содержащие «cm-super». Мне достаточно было раскомментировать строку (я использую кодировку T2A):

MixedMap cm-super-t2a.map

и выполнить

sudo updmap

Все заработало. За помощь в поимке редиски объявлено вознаграждение.

УжасноПлохоНормальноХорошоОтлично (Еще не оценили)
Loading ... Loading ...

Logitech MX Revolution и Linux: как достичь счастья

Беспроводную красавицу мне подарили на день рождения. Она была приятна на ощупь, обладала потрясающей функциональностью и комфортом, долго держала заряд. Но, как это нередко случается с красавицами, обладала скверным характером, и до ее сердца достучаться было непросто.

Тогда основной моей осью была Windows 2003 Server. Удобная и надежная система, под которую драйверы и серьезные программы отказывались ставиться буквально через одного. Мол, у вас серверная ОС, мы вас боимся. Вдруг к нам придет ваш бородатый админ и будет ругаться? И вообще, купите лучше серверную версию нашего продукта втрое дороже. Или поставьте XP. Или пойдите еще куда-нибудь. Запуск установщика в режиме эмуляции XP иногда помогал, но чаще — нет. Это несколько напрягало, но обычно нужным программам находились альтернативы. С драйверами сложнее.

Вот и когда я распаковал шедевр коробочного искусства и извлек оттуда пресловутый космический девайс, со всей остротой встал вопрос — как заставить работать все эти 11 кнопок и 1 колесико? Фирменный SetPoint, увидев серверную винду, прикинулся шлангом, и припарки не помогли. Альтернатив этому поделию не предусмотрено. Впрочем, со временем я эту проблему решил (если кому будет интересно, расскажу как).

Затем я перешел на Linux. Собственно, я и не ожидал, что моя MX Revo будет нормально там работать. Две кнопки и колесико — что еще нужно настоящему программисту? Но Fedora 10 далеко превзошла мои ожидания, автоматически и правильно опознав 8 кнопок из 11. Единственное, что меня расстраивало — невозможность использовать вместо нажатия на центральное колесико нажатие на боковое псевдо-колесико (нажатие на центральное колесико у меня меняет режим вращения). Удобно, знаете ли, ссылки в Firefox открывать и вкладки закрывать.

Итак, я хотел, чтобы нажатие на боковое колесико имело тот же эффект, что и нажатие на вторую кнопку мыши (основное колесико у большинства смертных). После вознесения правильной молитвы Гуглу, нашлось решение. Подробно описывать не буду — там и так все понятно. Решение прекрасное, но у него есть один недостаток — оно не работает. Точнее, в моем случае не работает.

С помощью xbindkeys, действительно, можно сопоставить команде оболочки некоторые нажатия мышиных и клавиатурных кнопок. Осталась самая малость — соответствующей командой оболочки сэмулировать нажатие второй кнопки мыши. Если верить документации на xvkbd, то это можно сделать так:

#~/.xbindkeysrc
"/usr/bin/xvkbd -xsendevent -text "\m2""
b:17

Проблема в том, что xvkbd не желает эмулировать мышиные клики. Что ж, незаменимых у нас нет. После непродолжительных поисков нахожу xdotool. Проверяю вручную, набрав в консоли:

xdotool click 2

Действительно, нажатие второй кнопки происходит. Теперь меняем ~/.xbindkeysrc:

#~/.xbindkeysrc
"~/bin/xdotool click 2"
b:17

Запустив xbindkeys в режиме отладки (ключ -v), вижу, что при нажатии на 17-ю кнопку (то самое псевдоколесико) действительно происходит эмуляция нажатия на 2-ю. Но видимого эффекта почему-то нет. Мистика. Подумав немного, решаю, что xdotool конфликтует c xbindkeys. Решение очевидно: разнести их по времени.

#~/.xbindkeysrc
"sleep 0.15; ~/bin/xdotool click 2"
b:17

Работает! Величина задержки подбирается экспериментально. У меня при 0.1 все еще есть конфликт, а при 0.15 — работает. Такая маленькая задержка практически не заметна, и неудобств не доставляет.

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

УжасноПлохоНормальноХорошоОтлично (1 голосов, средний: 5.00 из 5)
Loading ... Loading ...