Как удалить элемент из auto-mode-alist (Emacs) - PullRequest
0 голосов
/ 30 июня 2018

Я думал, что это будет просто, когда я попытался это сделать, однако я застрял.

Когда я добавляю режим октавы к моим ~ / .emacs таким образом:

(add-to-list 'auto-mode-alist ("\\.m$" . octave-mode))

Открывая файл Octave, .m, я вместо этого оказываюсь в основном режиме OBJC ... это потому, что auto-mode-alist содержит:

(\.m\' . objc-mode)

, который стоит первым в списке А.

Я пробовал:

(setq auto-mode-alist (delete '( \.m\' . objc-mode) auto-mode-alist))

и я даже попробовал:

(setq ama '())
(setq objc '(\.m\' . objc-mode))
   (dolist (item auto-mode-alist)
      (if (not (eq (cdr (last objc)) (cdr (last item))))
          (setq ama (list ama item))))
 (setq auto-mode-alist ama)

Любые предложения по удалению objc-mode из alist или по обеспечению того, что octave-mode заменяет его, было бы замечательно.

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Здесь есть три препятствия:

  1. Одновременное цитирование и синтаксис регулярных выражений
  2. assq-delete-all (очевидный выбор) использует eq для сравнения ключей, который только успешно (и, следовательно, удаляет) находит тот же объект - он не преуспеет, если видит только идентичная строка
  3. assq-delete-all не гарантирует изменения списка, поэтому необходим еще один setq

Решение ясно: найдите объект car в списке. Как:

(setq auto-mode-alist (assq-delete-all (car (rassoc 'objc-mode auto-mode-alist)) auto-mode-alist))

После этого Вы можете

(setq auto-mode-alist (добавить в список 'auto-mode-alist' ("\ .m \ '". Octave-mode)))

0 голосов
/ 30 июня 2018

Здесь, по сути, два вопроса. Один из них - как удалить элемент из списка. Другой способ, как автоматически открывать *.m файлы в октавном режиме. Вам не нужно удалять элемент, чтобы переопределить его. Предоставленная форма

(add-to-list 'auto-mode-alist ("\\.m$" . octave-mode))

вызывает ошибку. Вместо этого вы должны использовать

(add-to-list 'auto-mode-alist '("\\.m$" . octave-mode))

или еще лучше:

(add-to-list 'auto-mode-alist '("\\.m\\'" . octave-mode))

Эти две формы добавят элемент в начало списка ассоциаций, что означает, что имена файлов будут сначала проверяться по нему, никогда не переходя к элементу objc-mode внизу списка.

Если вы действительно хотите удалить элемент из списка, вот несколько способов.

Один способ, который удаляет только точную ячейку минусов '("\\.m\\'" . objc-mode):

(setq auto-mode-alist (delete '("\\.m\\'" . objc-mode) auto-mode-alist))

Другой способ удалить что-либо из списка ассоциаций, связанного с "\\.m\\'":

(require 'cl-lib)
(cl-remove "\\.m\\'" auto-mode-alist :test 'equal :key 'car)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...