Um exemplo 'Olá mundo' para um modo importante no Emacs?
-
21-08-2019 - |
Pergunta
Alguém pode me fornecer um exemplo Olá mundo para um modo importante no emacs? Eu acho que é uma questão novato, ainda que eu realmente gosto de escrever um modo importante, tanto para aprender emacs e elisp, a ponto de ser capaz de usar a personalização ao máximo.
O que tenho feito até agora (e está trabalhando):
- escreveu um arquivo de amostra-mode.el e colocá-lo em um lisp dir
- chamado .emacs
(require 'sample-mode)
- escreveu algumas defuns nele, e desde que no
(provide 'sample-mode)
final
Mas ainda não parece ser ativados , não posso chamá-lo com amostra do modo-M.
Então, como fazer isso? E alguém pode me fornecer uma muito, muito simples Olá mundo como exemplo de trabalho?
Solução
Ok, depois de mais alguns googling eu sou pelo menos um passo furhter:
(define-derived-mode sample-mode ...)
desde o fornecimento não está definindo o modo como eu pensava .. O que eu achei em:
http://xahlee.org/emacs/elisp_syntax_coloring.html
Um muito bom local para o Emacs-amantes.
Com a ajuda de que: I fez um exemplo HelloWorld-me agora: É um (tão pequeno quanto possível) Modo Csharp. Eu tenho usado Euler1 como exemplo, em vez de HelloWorld. Os arquivos que você precisa saber sobre são:
- o arquivo do modo será aplicado sobre
Euler1.cs
- as .emacs
- e, claro, o modo em si
Uma vez que um pic vale a pena, pelo menos, um monte de palavras: todos os arquivos em 1 tela:
Mas desde que este nice pic parece desaparecer metade do tempo (? Qualquer uma pista Abrir em uma nova aba sempre traz-lo, eo url é ok): algumas palavras também :-):
-
O modo: 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)
-
Os .emacs, que faz com que os .cs arquivos abertos no modo certo:
;; cs (require 'cs-mode) (add-to-list 'auto-mode-alist '("\\.cs\\'" . cs-mode))
E isso é tudo: o próprio cs-code
é inútil ela, porque ele não vai mostrar o efeito da coloração as palavras-chave. Para ver que vêem o pic, ou abrir o pic em outra aba / janela.
Cheers, ph
Outras dicas
há vários exemplos em todo o Web como este . Também posso recomendar-lhe várias livro Emacs:
- Aprendizagem GNU Emacs (o melhor IMHO)
- Writing GNU Emacs Extensions
- referência oficial GNU Emacs lisp / manual
Bem, vamos começar com esta resposta , que usa define-generic-mode
.
Flesh-lo com alguns personagens comentário como: /* */
, algumas palavras-chave:. hello
hi
etc., re-utilizar a face da resposta original, um .hello
extensão de arquivo, e uma função chamada para fazer uma maior personalização
Há a linha adicional para obter auotocarregáveis ??de trabalho, mas você tem que gerar o arquivo loaddefs.el . Isso é mais avançado do que Olá mundo.
E, você acabar com esta:
(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."))
Os elisp manual apresenta os principais modos muito bem, e inclui um nó que apresenta "Olá mundo" exemplos . Pelo menos essa é a intenção, eu acho.
Esses exemplos não pode cobrir tudo o que você está procurando. Nesse caso, considerar a solicitação de tudo o que você acha que está faltando que iria ajudar os usuários mais. Para fazer isso, use M-x report-emacs-bug
(que é para solicitações de melhoria também).