Виконати команду під час відкриття файлу певного типу файлів


14

Я намагаюся отримати скрипт lisp для запуску деяких команд для мене, коли я відкриваю файл певного типу файлів. Я знаю, що я працюю у правильному файлі init, тому що якщо я видаляю з нього тему, у Emacs немає теми, коли я її запускаю.

Це сценарій, який я використовую, який не працює (жодних помилок чи нічого):

(defun my-project-hook (filename)
  (when (string= (file-name-extension filename) "ts")
    ((typescript-mode)
     (tss-setup-current-buffer))
  ) 
)

(add-hook 'after-load-functions 'my-project-hook)

У цьому контексті "load" означає "завантажувати як lisp-код". Я думаю, що ви хочете знайти find-файл-гачок (зверніть увагу, що вони не викликаються аргументом! Замість цього використовуйте buffer-file-name). Ви також можете скористатися автоматичним режимом і визначити власний основний режим.
ЯнгФрог

3
Насправді, схоже, ви хочете зачепити режим.
День

Ви ще не потрапили в цю проблему, оскільки ваша функція не працює, але коли ви знаєте, що вищезгадане не є дійсним піском. Корпус вашого whenдзвінка неправильно сформований. Два виклики функції не можуть бути оточені круглими дужками, як вони є. Зверніть увагу на різницю між вашим кодом та @ sds's
Джордон Біондо

Відповіді:


16

У термінології Emacs це два різні етапи:

  • Пов’язати файли з .tsрозширенням з основним режимом typescript-mode .
  • Запустіть функцію, tss-setup-current-bufferколи запуститься режим Typescript.

Щоб вибрати, який основний режим використовувати для певних імен файлів, додайте запис до змінної auto-mode-alist. Помістіть наступний рядок у свій файл init:

(add-to-list 'auto-mode-alist '("\\.ts\\'" . typescript-mode))

\.ts\' - це регулярний вираз, який відповідає іменам файлів і .ts розширенням.

Щоб запускати функцію tss-setup-current-bufferщоразу, коли запускається режим Typescript (я припускаю, що ви хочете запустити її навіть для файлів режиму Typescript, у яких немає .tsрозширення), додайте її до гачка запуску режиму Typescript .

(add-hook 'typescript-mode-hook 'tss-setup-current-buffer)

Залежно від способу встановлення typescript.elта tss.el, можливо, вам також доведеться заявити, що функції typescript-modeта tss-setup-current-bufferїх потрібно завантажувати з цих файлів. Це дозволяє уникнути завантаження typescript.elі tss.elяк тільки Emacs запуститься: вони завантажуватимуться на вимогу, коли ви вперше відкриєте .tsфайл або запустите typescript-modeявно.

(autoload 'typescript-mode "Major mode for typescript files" t)
(autoload 'tss-setup-current-buffer "Set up the current file for TSS" t)

9

Що ви шукаєте find-file-hook:

(add-hook 'find-file-hook 'my-project-hook)
(defun my-project-hook ()
  (when (string= (file-name-extension buffer-file-name) "ts")
    (typescript-mode)
    (tss-setup-current-buffer)))

4
Хоча це спрацює, слід зазначити, що це не правильний спосіб запуску основних режимів при пошуку файлу або налаштування налаштувань для основного режиму. Це auto-mode-alistслід використовувати для визначення часу запуску typecript-режиму, а typescript-mode-hookслід використовувати для запуску tss-setup-current-buffer.
Джордон Біондо

Використання (add-to-list 'auto-mode-alist '("\\.ts\\'" . typescript-mode))і (add-hook 'typescript-mode-hook 'tss-setup-current-buffer)було б нормальним способом це зробити.
Джордон Біондо
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.