2009-06-30 12 views
11

Emacs'ta büyük bir mod için herkes bana merhaba dünya örneği verebilir mi? Sanırım bu yeni başlayan bir soru, yine de büyük bir mod yazmayı seviyorum, hem emacs hem de elisp'i öğrenmek için, özelleştirme tam olarak kullanabilmek için. Şimdiye kadar yapmış (ve çalışıyor) NeEmacs'de büyük bir mod için 'merhaba dünya' örneği?

:

  • bir dosya örneği-mode.el yazıp (require 'sample-mode)
  • bazı yazmış .emacs denilen bir lisp dir
  • koymak içinde defuns ve sonunda (provide 'sample-mode)

adresten temin Ama yine de ben bunu diyemezsin, aktive olmasını görünmüyor M-numune-mod.

Peki bu nasıl yapılır? Ve herkes bana çalışma örneği gibi çok basit bir Merhaba Dünya sağlayabilir mi?

cevap

10

Ok, biraz daha googling sonra en az bir adım furhter duyuyorum:

: Ben üzerinde bulunan bu .. ben ilk düşündüğümüz gibi modunu tanımlayan değil sağlayarak beri

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

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

Emacs-severler için çok güzel bir site.

Bunun yardımıyla: Şimdi bir HelloWorld örneği hazırladım: Bu (mümkün olduğunca küçük) Csharp modu. HelloWorld'den ziyade Euler1'u kullandım. Bilmen gereken dosyalar şunlardır:

  • modu Euler1.cs
  • .emacs
  • ve tabii modu kendini

uygulanacak dosya pic değer yana kelimelerin en az bir demet: 1 ekrandaki tüm dosyaları:

alt text

Ama bu güzel resim, zamanın yarısı yok gibi görünüyor (herkes bir ipucu? çok :-)) bazı kelimeler yeni sekmede aç her zaman çocuklarına getiriyor ve url Tamam:

  1. modu: 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, bu yapar.cs dosyaları sağ modunda açılmak:

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

Ve hepsi bu: Bu anahtar kelimeler boyama etkisini göstermeyecektir neden cs-code kendisi onu işe yaramaz. Bunu görmek için resme bakın veya fotoğrafı başka bir sekmede/pencerede açın.

Alkış, ph

+0

+1 çok güzel bir web sitesi için – dfa

+1

@jrockway: burada kabul etmiyorum, ondan çok şey öğrendim, büyük modları yazmak da dahil olmak üzere, Kendi kaleme alsa da, kendi fikirlerini içermesi gerekse de, orada bir nokta var. – Peter

+1

@jrockaway: bu yüzden mi bu kadar ondan nefret ediyorsun ... seni XAH eleştirirken bakın ikinci kez? – Vivi

5

Web like this etrafında çeşitli örnekler vardır. ,

  • Öğrenme GNU Emacs (en iyi IMHO)
  • resmi GNU Emacs
  • referans peltek
  • Yazma GNU Emacs Uzantıları/
+1

1 ve bağlantı için teşekkürler, ama bütün emacs sahnede, bazen basit örnekler eksikliği beni biraz rahatsız ediyor. Önemli bir istisna daha önce sağlanan bağlantı: xahlee.org – Peter

+1

ayrıca emacswiki – dfa

5

Eh manuel: Ben de size birkaç Emacs kitabı tavsiye edebilir define-generic-mode kullanan this answer ile başlayalım. gibi bazı açıklama karakterleri ile

Et dışarı: /* */, bazı anahtar kelimeler: hellohi vb yeniden kullanmak orijinal cevap, bir dosya uzantısı .hello ve ayrıca özelleştirme yapmak bir işlev çağrısından yüz.

Orada çalışma hakklı almak için ek satır, ama generate the loaddefs.el dosyaya var. Bu merhaba dünyadan daha gelişmiş.

(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

elisp manuel oldukça iyi majör modları tanıtır ve "Merhaba-dünya" examples sunan bir düğüm içerir:

Ve, bu ile bitirmek. En azından niyet bu, bence.

Bu örnekler Aradığınız herşeyi örtmeyebilir. Bu durumda, kullanıcılara daha fazla yardımcı olacak herhangi bir şey eksik olduğunu düşündüğünüzü düşünün. Bunu yapmak için, (bu da geliştirme istekleri içindir) M-x report-emacs-bug kullanın.