Архив рубрики: emacs

Emacs: M-j многострочный комментарий.

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

// main is a function which starts our application ❶
function() main {

И наш курсор находится в позиции . Теперь если мы нажмем С-j или RET мы получим:

// main is a function which starts our application function() main {

И все бы ничего, если бы мы не хотели продолжить писать комментарий. Но есть решение: достаточно нажать M-j и мы получим:

// main is a function which starts our application 
// ❶
function() main {

Ну и напоследок.

/* main is a function which starts our application ❶
function() main {

Превращается в:

/* main is a function which starts our application 
 * ❶
 */
function() main {

Меняем ctrl и alt местами

$ cat my.xkb
 
xkb_keymap {
    xkb_keycodes  { include "evdev+aliases(qwerty)"	};
    xkb_types     { include "complete"	};
    xkb_compat    { include "complete+ledcaps(group_lock)"	};
    xkb_geometry  { include "pc(pc105)"	};
    xkb_symbols "my" {
        include "pc+us+ru:2+inet(evdev)+group(toggle)+group(lctrl_toggle)+group(lctrl_rctrl_switch)+compose(rwin)"
        replace key <CAPS> {[ Alt_L, Meta_L]};
        replace key <LALT> {[Control_L]};
    };
};
 
$ xkbcomp my.xkb $DISPLAY

Emacs: раскладка на meta-space

Извечная проблема пользователей емакса (и вима) с переключением раскладки и мне изрядно попортила жизнь.

Долгое время выходом из положения, если это так можно назвать, для меня было банальное переключение системной раскладки для ввода небольшого количества русского текста и последующее переключение раскладки обратно. А для случаев когда нужно вводить много кириллических символов вполне подходит встроенный в емакс механизм input-method. Но иметь одну комбинацию для переключения системной раскладки, а другую для переключения раскладки в редакторе (ctrl-\) ну ни как не способсвует психическому спокойствию.

Перепробывав миллион методов, я пришел к следующему решению. Для начала, чтобы кисти рук не выгибались я перенес ctrl на место caps'a. С переключением раскладки все интересней. На данный момент все устроено так: переключение на правом alt'e и на meta-space. Плюс за неимением лучших вариантов и для того чтобы не было соблазна пользоваться старыми хоткеями, левый ctrl включает латинскую раскладку, а правый кириллическую.

(для ubuntu: правим файлик /etc/default/keyboad

XKBOPTIONS="grp_led:scroll,compose:rwin,grp:toggle,grp:alt_space_toggle,grp:lctrl_rctrl_switch,caps:none,ctrl:nocaps"

Основной хоткей для переключения раскладки — meta-space. Теперь для того чтобы пользоваться им же в емаксе добавляем в ~/.emacs следующий код:

;; for this to work kbdd must be installed
(global-set-key (kbd "M-SPC")
		(lambda ()
		  "Toggle input method"
		  (interactive)
		  (toggle-input-method)
		  (start-process "dbus-send"
				 nil
				 "dbus-send"
				 "--dest=ru.gentoo.KbddService"
				 "/ru/gentoo/KbddService"
				 "ru.gentoo.kbdd.set_layout"
				 "uint32:1")))

Решение требует того, чтобы был услановлен kbdd.

sudo aptitude install kbdd

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

В результате: системная раскладка переключается по meta-space, зажигая при этом лампочку scroll lock'a при включении кириллической раскладки.
В емаксе input-method включается точно так же. При этом, правда, системная раскладка остается английской, и поэтому scroll lock не загорается. Что вполне приемлемо на фоне остальных решений этого вопроса.