Пример "привет мир" для основного режима в Emacs?

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

То, что я сделал до сих пор (и работает):

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

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

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

Ответ 1

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

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

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

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

Очень приятный сайт для любителей emacs.

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

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

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

alt text

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

  • Режим: 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)
    
  • .macs, который делает файлы .cs открытыми в правильном режиме:

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

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

Приветствия, ph

Ответ 2

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

  • Изучение GNU Emacs (лучший имхо)
  • Написание расширений GNU Emacs
  • официальный справочник GNU Emacs lisp справочник

Ответ 3

Хорошо, давайте начнем с этого ответа, в котором используется 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."))

Ответ 4

В руководстве Elisp очень хорошо представлены основные режимы и включает node, который представляет "привет-мир" examples. По крайней мере, это намерение, я думаю.

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