2009-06-30 7 views
11

Quelqu'un peut-il me fournir un exemple de bonjour pour un mode majeur dans emacs? Je suppose que c'est une question pour débutant, mais j'aime vraiment écrire un mode majeur, à la fois pour apprendre emacs et elisp, pour pouvoir utiliser la personnalisation au maximum.Un exemple de 'hello world' pour un mode majeur dans Emacs?

Ce que je l'ai fait jusqu'à présent (et travaille):

  • a écrit un exemple de fichier-mode.el et le mettre dans un zézaiement dir
  • appelé à emacs (require 'sample-mode)
  • a écrit quelques Defuns en elle, et à condition à la fin (provide 'sample-mode)

Mais encore il ne semble pas être activé , je ne peux pas l'appeler avec M-échantillon-mode.

Alors, comment faire? Et quelqu'un peut-il me fournir un très simple Hello World comme échantillon de travail?

Répondre

10

Ok, après un peu plus googler je suis au moins une étape furhter:

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

puisque la fourniture ne définit pas le mode que je pensais d'abord .. Ce que je trouve sur:

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

Un très très beau site pour les amateurs d'emacs. Avec l'aide de cela: j'ai moi-même fait un exemple HelloWorld maintenant: c'est un mode Csharp (le plus petit possible). J'ai utilisé Euler1 comme exemple plutôt que HelloWorld. Les fichiers que vous devez savoir sur sont:

  • le fichier mode sera appliqué sur Euler1.cs
  • les .emacs
  • et bien sûr le mode de se

Depuis un pic vaut , au moins un groupe de mots: tous les fichiers sur 1 écran:

alt text

Mais puisque cette belle photo semble disparaître la moitié du temps (n'importe qui une idée? Ouvrir dans un nouvel onglet apporte toujours sur, et l'URL est ok) quelques mots trop :-):

  1. Le mode: 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. Le .emacs, qui fait le.cs fichiers ouverts en mode droite:

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

Et c'est tout: le cs-code lui-même ne sert à rien d'elle, parce que ce ne sera pas montrer l'effet de coloration des mots-clés. Pour voir que voir la photo, ou ouvrir la photo dans un autre onglet/fenêtre.

Cheers, ph

+0

+1 pour très beau site – dfa

+1

@jrockway: pas d'accord ici, j'ai beaucoup appris de lui, y compris l'écriture des modes majeurs Bien qu'il puisse lui-même ne pas avoir de temps libre, y compris ses propres idées, vous avez un point là – Peter

+1

@jrockaway: c'est la deuxième fois que je te vois critiquer Xah ... pourquoi le hais-tu autant? – Vivi

5

il y a plusieurs exemples dans le Web like this. Je peux également vous recommander plusieurs livres Emacs:

  • Learning GNU Emacs (le meilleur IMHO)
  • écriture GNU Emacs Extensions
  • GNU officielles Emacs Lisp référence/manuel
+1

+1 et merci pour le lien, mais dans toute la scène emacs, parfois un manque d'exemples simples me dérange un peu. Une exception notable le lien fourni plus tôt: xahlee.org – Peter

+1

vérifier aussi emacswiki – dfa

5

Eh bien, Commençons par this answer, qui utilise define-generic-mode.

chair dehors avec quelques caractères de commentaire comme: /* */, certains mots-clés: hellohi etc., réutilisez le visage de la réponse initiale, une extension de fichier .hello, et un appel de fonction pour faire une personnalisation plus poussée.

Il y a la ligne supplémentaire pour que le chargement automatique fonctionne, mais vous devez le fichier generate the loaddefs.el. C'est plus avancé que bonjour le monde.

Et, vous vous retrouvez avec ceci:

(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

Le manuel présente Elisp principaux modes assez bien, et il comprend un noeud qui présente « bonjour monde » examples. Au moins, c'est l'intention, je pense.

Ces exemples peuvent ne pas couvrir tout ce que vous recherchez. Dans ce cas, pensez à demander ce que vous pensez qui manque pour aider les utilisateurs. Pour ce faire, utilisez M-x report-emacs-bug (c'est aussi pour les demandes d'amélioration).

Questions connexes