Personalize o modo Emacs Ruby para configuração do PuppetLabs

1

Eu uso predominantemente o emacs para editar meus arquivos de configuração do Puppet . Eu uso as seguintes configurações no meu .emacs para carregar o modo Ruby e usá-lo para arquivos de configuração do Puppet ( *.pp ):

(autoload 'ruby-mode "ruby-mode" "Major mode for editing ruby scripts." t)
(setq auto-mode-alist  (cons '(".rb$" . ruby-mode) auto-mode-alist))
(setq auto-mode-alist  (cons '(".pp$" . ruby-mode) auto-mode-alist))

Isso funciona bem, exceto pelo recuo da diretiva 'assegurar' em meus arquivos fantoches. Como ensure é uma palavra reservada em Ruby, ela é melhor:

cron { logrotate:
  command => "/usr/sbin/logrotate",
  user => root,
  hour => 2,
ensure => present
  minute => 0,
}

Como eu digo ao Emacs para não tratar ensure especialmente em arquivos Puppet?

    
por Tim Brigham 27.04.2012 / 22:34

1 resposta

1

Acho que a maneira mais simples de lidar com isso é copiando o ruby-mode.el para fantoche-mode.el e arrancar todos os lugares que você vê manipulação ensure especialmente. No meu ruby-mode.el , isso parece acontecer apenas em dois lugares:

  1. Onde as palavras do bloco são definidas

    (defconst ruby-block-mid-keywords
      '("then" "else" "elsif" "when" "rescue" "ensure")
      "Keywords where the indentation gets shallower in middle of block statements.")
    
  2. Onde palavras reservadas são definidas:

    (defconst ruby-font-lock-keywords
    ...
                 "ensure"
    

Apostei a exclusão de ensure desses dois lugares, salvando como puppet-mode.el e, em seguida, alterando seu .emacs para isso:

(autoload 'puppet-mode "puppet-mode" "Major mode for editing Puppet config" t)
(setq auto-mode-alist  (cons '(".pp$" . puppet-mode) auto-mode-alist))
    
por 28.04.2012 / 06:35