13

任何人都可以为我提供emacs中主要模式的hello world示例吗?我猜这是一个初学者的问题,我还是很喜欢写一个major模式,既可以学习emacs,也可以学习elisp,以便能够充分利用自定义。

到目前为止我所做的(并且正在工作):

  • 写了一个文件 sample-mode.el 并把它放在一个 lisp 目录中
  • 在 .emacs 中调用(require 'sample-mode)
  • 在里面写了一些defuns,并在最后提供(provide 'sample-mode)

但它似乎仍然没有被激活,我不能用 M-sample-mode 调用它。

那么该怎么做呢?任何人都可以为我提供一个非常简单的 Hello World 之类的工作示例吗?

4

4 回答 4

11

好的,经过一番谷歌搜索后,我至少更进一步:

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

因为提供并没有像我首先想到的那样定义模式。我在以下位置找到了这个:

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

一个非常适合 emacs 爱好者的网站。

借助它:我现在自己制作了一个 HelloWorld 示例:这是一个(尽可能小)Csharp 模式。我以Euler1为例,而不是 HelloWorld。您需要了解的文件是:

  • 将应用模式的文件 Euler1.cs
  • .emacs
  • 当然还有模式本身

因为一张照片是值得的,至少有一堆词:一个屏幕上的所有文件:

替代文字

但是由于这张漂亮的照片似乎有一半时间消失了(有人知道吗?在新标签中打开总是会打开它,而且网址也可以)有些话也:-):

  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她本身没有用,因为它不会显示为关键字着色的效果。要查看图片,或在另一个选项卡/窗口中打开图片。

干杯,ph

于 2009-06-30T11:36:19.127 回答
6

网上有几个这样的例子。我还可以向你推荐几本 Emacs 书籍:

  • 学习 GNU Emacs(最好的恕我直言)
  • 编写 GNU Emacs 扩展
  • 官方 GNU Emacs lisp 参考/手册
于 2009-06-30T11:39:00.993 回答
6

好吧,让我们从这个答案开始,它使用define-generic-mode.

用一些注释字符来充实它:/* */,一些关键字:hello hi等,重新使用原始答案中的面孔,文件扩展名.hello和函数调用来进行进一步的定制。

有额外的行可以让自动加载工作,但你必须生成 loaddefs.el文件。这比 hello world 更先进。

而且,你最终会得到这个:

(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."))
于 2009-07-08T18:05:59.330 回答
2

Elisp 手册很好地介绍了主要模式,它包括一个展示“hello-world”示例的节点。我认为,至少这是意图。

这些示例可能无法涵盖您正在寻找的所有内容。在这种情况下,请考虑请求您认为缺少的任何内容,以帮助用户更多。为此,请使用M-x report-emacs-bug(也用于增强请求)。

于 2015-03-07T15:35:20.650 回答