Как настроить эту функцию elisp, чтобы различать Cd и DEL?
Вот моя текущая функция (слепо скопированная с сайта)
(defun tweakemacs-delete-one-line ()
"Delete current line."
(interactive)
(beginning-of-line)
(kill-line)
(kill-line))
(global-set-key (kbd "C-d") 'tweakemacs-delete-one-line)
Здесь есть две причуды, от которых я хочу избавиться. 1) Это фактически связывает DEL с той же функцией. Я хочу, чтобы мой DEL оставался "удалить один символ". 2) Должно быть условие, при котором он не будет убивать дважды, если строка является только символом новой строки.
2 ответа
Чтобы различать эти два, используйте предпочтительный векторный синтаксис для ключей:
(global-set-key [delete] 'foo)
(global-set-key [(control d)] 'bar)
Что касается второго, это звучит так, как будто вы хотите
(setq kill-whole-line t)
или просто хотите использовать функцию kill-entire-line
вместо.
Я прочитал часть руководства по сочетаниям клавиш, и там сказано, что C-d
а также <DEL>
как и другие специальные ключи, связаны. Чтобы открепить их, вы должны явно установить их обоих.
В конечном итоге я использовал это решение:
(global-set-key (kbd "<delete>") 'delete-char)
(global-set-key ([control d]) 'kill-whole-word)