Пример "Привет, мир" для основного режима в Emacs? - PullRequest
12 голосов
/ 30 июня 2009

Может ли кто-нибудь предоставить мне пример "Привет, мир" для основного режима в emacs? Думаю, это вопрос новичка, но мне действительно нравится писать основной режим, как для изучения emacs, так и для elisp, чтобы иметь возможность использовать настройку в полной мере.

Что я уже сделал (и работаю):

  • написал файл sample-mode.el и поместил его в каталог lisp
  • вызывается в .emacs (require 'sample-mode)
  • написал в нем некоторые определения и предоставил их в конце (provide 'sample-mode)

Но, похоже, он не активирован , я не могу вызвать его в режиме M-sample-mode.

Так как это сделать? И может ли кто-нибудь предоставить мне очень очень простой Hello World, как рабочий образец?

Ответы [ 4 ]

11 голосов
/ 30 июня 2009

Хорошо, после еще одного поиска в Google, я, по крайней мере, на шаг вперед:

(define-derived-mode sample-mode ...) 

, поскольку режим не определяет режим, как я думал сначала ... Это я нашел на:

http://xahlee.org/emacs/elisp_syntax_coloring.html

Очень хороший сайт для любителей emacs.

С помощью этого: я сам сейчас сделал пример HelloWorld: это (как можно меньше) режим Csharp. Я использовал Euler1 в качестве примера, а не HelloWorld. Файлы, о которых вам нужно знать:

  • файл, к которому будет применяться режим Euler1.cs
  • .emacs
  • и, конечно, сам режим

Поскольку картинка стоит, по крайней мере, несколько слов: все файлы на 1 экране:

alt text

Но так как эта милая картинка, кажется, исчезает наполовину (кто-нибудь подсказка? Открыть в новой вкладке всегда вызывает его, и URL-адрес в порядке) некоторые слова тоже :-):

  1. Режим: cs-mode.el

    (setq myKeywords 
     '(("WriteLine" . font-lock-function-name-face)
       ("public\\|static\\|void\\|int\\|for\\|if\\|class"
    . font-lock-constant-face)))
    
    (define-derived-mode cs-mode fundamental-mode
      (setq font-lock-defaults '(myKeywords)))
    
    (provide 'cs-mode)
    
  2. .emacs, открывающий файлы .cs в правильном режиме:

;; cs
(require 'cs-mode)
(add-to-list 'auto-mode-alist '("\\.cs\\'" . cs-mode))

И это все: сама cs-code бесполезна для нее, потому что это не покажет эффект раскраски ключевых слов. Чтобы увидеть это, посмотрите картинку или откройте ее в другой вкладке / окне.

Приветствия, тел.

6 голосов
/ 30 июня 2009

В Интернете есть несколько примеров , подобных этому . Я также могу порекомендовать вам несколько книг по Emacs:

  • Изучение GNU Emacs (лучшее imho)
  • Написание расширений GNU Emacs
  • Официальный справочник / руководство по GNU Emacs lisp
5 голосов
/ 08 июля 2009

Хорошо, давайте начнем с этого ответа , который использует define-generic-mode.

Дополните его некоторыми символами комментария, такими как: /* */, некоторыми ключевыми словами: hello hi и т. Д., Повторно используйте грань из исходного ответа, расширение файла .hello и вызов функции сделать дальнейшую настройку.

Есть дополнительная строка для работы автозагрузки, но вам нужно сгенерировать файл loaddefs.el . Это более продвинуто, чем привет.

И в итоге вы получите:

(make-face 'my-date-face)
(set-face-attribute 'my-date-face nil :underline t)
(set-face-attribute 'my-date-face nil :family "times")
(set-face-attribute 'my-date-face nil :slant 'normal)
(set-face-attribute 'my-date-face nil :height '340)

;;;###autoload
(define-generic-mode hello-world
  '(("/*" . "*/"))                           ; comment characters
  '("hello" "hi" "howdy" "greetings" "hola") ; keywords
  '(("\\([0-9]+/[0-9]+/[0-9]+\\)"
     (1 'my-date-face)))                ; font lock
  '("\\.hello$")                        ; auto-mode-alist  
  '(hello-world-special-setup)          ; function-list
  "An example major mode.
We have comments, keywords, a special face for dates, and recognize .hello files.")

(defun hello-world-special-setup ()
  "Some custom setup stuff done here by mode writer."
  (message "You've just enabled the most amazing mode ever."))
2 голосов
/ 07 марта 2015

Руководство Elisp довольно хорошо знакомит с основными режимами и включает в себя узел, который представляет "hello-world" примеров . По крайней мере, я так думаю.

Эти примеры могут не охватывать все, что вы ищете. В этом случае рассмотрите возможность запроса всего, что, по вашему мнению, отсутствует, что могло бы помочь пользователям больше. Для этого используйте M-x report-emacs-bug (то есть также для запросов на расширение).

...