2009-06-30 7 views
11

Kann mir jemand ein Hallo-Welt-Beispiel für einen Hauptmodus in Emacs geben? Ich denke, es ist eine Anfängerfrage, immer noch mag ich es wirklich, einen Hauptmodus zu schreiben, sowohl Emacs als auch Elisp zu lernen, um die Anpassung in vollen Zügen zu nutzen.Ein Hallo Welt-Beispiel für einen Hauptmodus in Emacs?

Was ich bisher getan haben (und arbeitet):

  • schrieb eine Beispieldatei-mode.el und steckte es in eine Lisp dir
  • in .emacs genannt (require 'sample-mode)
  • einige schrieb Defuns darin, und, sofern sie am Ende (provide 'sample-mode)

Aber immer noch scheint es nicht aktiviert zu sein, kann ich es nicht nennen mit M-Sample-Modus.

Also, wie geht das? Und kann mir jemand eine sehr, sehr einfache Hallo Welt wie Arbeitsstichprobe zur Verfügung stellen?

Antwort

10

Ok, nachdem ich einige mehr googeln bin mindestens einen Schritt furhter:

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

, da die Bereitstellung ist nicht definiert, um den Modus, wie ich zuerst dachte .. Dieses ich gefunden:

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

Eine sehr sehr schöne Seite für Emacs-Liebhaber.

Mit der Hilfe: Ich habe jetzt selbst ein HelloWorld-Beispiel gemacht: Es ist ein (so klein wie möglich) Csharp-Modus. Ich habe Euler1 als Beispiel anstelle von HelloWorld verwendet. Die Dateien, die Sie wissen müssen über sind:

  • die Datei der Modus auf Euler1.cs
  • die .emacs
  • und natürlich die Mode selbst

angewendet werden Da ein Bild wert , zumindest ein paar Worte: alle Dateien auf 1 Bildschirm:

alt text

Aber da scheint dieses schöne Bild die halbe Zeit zu verschwinden (jemand ein Hinweis? In neuer Registerkarte öffnen bringt es immer auf und die URL ist ok) ein paar Worte zu :-):

  1. Der Modus: 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. Die .emacs, das macht das.cs-Dateien öffnen in der rechten Modus:

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

Und das ist alles: die cs-code selbst nutzlos ist sie, weil es nicht die Wirkung der Färbung der Schlüssel-Wörter zeigen. Um zu sehen, dass das Bild zu sehen, oder öffnen Sie das Bild in einem anderen Tab/Fenster.

Cheers, ph

+0

+1 für sehr nette Website – dfa

+1

@jrockway: hier nicht zustimmen, lernte ich viel von ihm, einschließlich Schreiben von Hauptmodi Obwohl er selbst keine Freizeit übrig haben könnte seine eigenen Ideen enthalten, haben Sie einen Punkt dort – Peter

+1

@jrockaway: Das ist das zweite Mal, dass ich sehe, wie du Xah kritisierst ... warum hasst du ihn so sehr? – Vivi

5

gibt es mehrere Beispiele rund um die Web like this. Ich kann empfehlen Ihnen auch mehrere Emacs Buch:

  • Learning GNU Emacs (die beste imho)
  • Writing GNU Emacs Extensions
  • den offiziellen GNU Emacs Lisp Referenz/manual
+1

+1 und danke für den Link, aber in der ganzen Emacs-Szene stört mich manchmal ein Mangel an einfachen Beispielen ein wenig. Eine bemerkenswerte Ausnahme der Link zuvor: xahlee.org – Peter

+1

überprüfen Sie auch Emacswiki – dfa

5

Nun, Beginnen wir mit this answer, die define-generic-mode verwendet.

Flesh es mit einigen Kommentarzeichen aus wie: /* */, einige Stichworte: hellohi usw., wiederverwenden, das Gesicht von der ursprünglichen Antwort, eine Dateierweiterung .hello und ein Funktionsaufruf weitere Anpassung zu tun.

Es gibt die zusätzliche Zeile, um Autoloading arbeiten zu lassen, aber Sie müssen generate the loaddefs.el Datei. Das ist fortgeschrittener als Hallo Welt.

Und am Ende mit auf den Punkt:

(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.")) 
0

Das Elisp Handbuch ziemlich gut Hauptmodi einführt, und es enthält einen Knoten, der „Hallo-Welt“ examples präsentiert. Zumindest ist das die Absicht, denke ich.

Diese Beispiele decken möglicherweise nicht alles ab, was Sie suchen. Ziehen Sie in diesem Fall in Betracht, was Sie auch immer vermissen, was den Benutzern mehr helfen würde. Verwenden Sie dazu M-x report-emacs-bug (auch für Erweiterungsanforderungen).