Как настроить эту функцию 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)
Другие вопросы по тегам