2017-01-19 3 views
0

У меня возникла проблема с выполнением личного макроса в другом сеансе в Emacs. Мне удалось создать макрос и выполнить его, но после того, как я хочу сохранить его для выполнения в другое время.Сохранить и выполнить макрос клавиатуры Emacs

Для этого я пишу этот код в ~/.emacs

(fset 'psTest 
    (lambda (&optional arg) "Keyboard macro." 
     (interactive "p") 
     (kmacro-exec-ring-item (quote ("^X2^X2^X2^X2" 0 "%d")) arg))) 

но когда я называю макрос в другом файле [ M- x psTest ], Emacs не исполнения моих макросов, но пишет key в моем файле

^X2^X2^X2^X2 

все мои команды:
В терминале:
[email protected] $ emacs ~/.emacs
В emacs:
C-x ( C-x 2 C-x) C-x C-k n psTest M-x insert-kbd-macro [ENTER] psTest [ENTER] C-x C-c

В терминале:
[email protected] $ cat ~/.emacs : (fset 'psTest (lambda (&optional arg) "Keyboard macro." (interactive "p") (kmacro-exec-ring-item (quote ("^X2" 0 "%d")) arg)))
[email protected] $ emacs ~/test

В Emacs:
M- psTest Теперь мой макрос [M- psTest] запись^X2 в моем файле вместо выполнения [^ X2], который разделить экран.

Где моя ошибка? Thanks

+0

Я могу видеть, что вы правильно использовали 'insert-kbd-macro' для генерации кода. Я не понимаю, как вам удалось получить неправильную версию этого кода в файле инициализации. Конечно, если вы использовали команды emacs для копирования этого кода и вытащили его в ваш файл инициализации, проблем не было. Вы использовали какую-либо другую технику для копирования и вставки? Вы, конечно, не вводили его вручную? – phils

+0

Да, мне это тоже интересно! –

ответ

1

Проблема заключается в последовательности "^X2" в вашем определении макроса. Он содержит два символа ^ и X, а не один символ 0x18 в кодировке ascii (ASCII (ISO646 IRV)), который используется emacs для ссылки на C-x, но отображается одинаково, хотя, возможно, в другом цвете. Если вы замените прежнюю двухбуквенную последовательность на последний символ и снова оцените определение, она должна работать.

Вы можете вставить символ с C-хRET#x18RET.

PS: Для отображения информации о конкретном характере в точке вы можете использовать M-хdesribe-char или what-cursor-position, который связан с C-х= по умолчанию.

1

Я согласен с Simon Fromme.

Чтобы вставить C-x символ, вы можете опустить префикс #x от его ответа и введите:

CxRET RET

Но вы может также просто набрать CqC-x в случае, если вы не знаете шестнадцатеричного значения кода ascii этого или любого другого персонажа!

Тем не менее, в вашем случае я предпочел бы поиск функции, связанной с последовательностью C-x 2. Вы легко найдете это split-window-below с использованием:

  • C-h k C-x 2 RET
  • или M-x edit-last-kbd-macro RET

Затем вы можете написать код проще копировать/вставить/сохранить как:

(fset 'psTest #'split-window-below) 

или

(defun psTest() 
    (interactive) 
    (split-window-below)) 

Это может быть хороший способ начать изучение emacs-lisp!

Смежные вопросы