PuppetLabs用のカスタムEmacs Rubyモードの設定

PuppetLabs用のカスタムEmacs Rubyモードの設定

私は主にemacsを使って編集します。パペット構成ファイル。 RubyモードをロードしてPuppet設定ファイル(*.pp)で使用するには、.emacsで次の設定を使用しています。

(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))

私の人形ファイルに「ensure」ディレクティブをインデントした以外はすべて大丈夫です。ensureこれはRubyの予約語なので、インデントがより目立つようになります。

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

ensureEmacsにPuppetファイルを特別に処理しないように指示する方法は?

答え1

私の考えでは、この問題を処理する最も簡単な方法は、ruby-mode.elをpuppet-mode.elにコピーし、特に処理されているすべての ensure場所を削除することです。私の場合は、ruby-mode.el次の2つの場所でのみこれが発生しているようです。

  1. ブロックワード定義の場所

    (defconst ruby-block-mid-keywords
      '("then" "else" "elsif" "when" "rescue" "ensure")
      "Keywords where the indentation gets shallower in middle of block statements.")
    
  2. 予約語は次のように定義されます。

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

ensure両方の場所から削除して別の名前で保存し、puppet-mode.elそれを変更すると.emacs問題が解決します。

(autoload 'puppet-mode "puppet-mode" "Major mode for editing Puppet config" t)
(setq auto-mode-alist  (cons '(".pp$" . puppet-mode) auto-mode-alist))

関連情報