PerlとEmacsと私

今回は筆者のEmacs(と言ってもMeadow2なんですが)のPerlに関する設定を一部抜粋してみようと思います。

(autoload 'cperl-mode "cperl-mode" nil t) ;; cperl-modeを使ってます。
(add-to-list 'interpreter-mode-alist '("perl" . cperl-mode)) ;; shebang(#!…)に"perl"があったらcperl-mode
(add-to-list 'auto-mode-alist '("\\.\\(p[lm]\\|f?cgi\\|t\\)$" . cperl-mode)) ;; こういう拡張子もcperl-mode
(defalias 'perl-mode 'cperl-mode) ;; perl-modeもcperl-mode

;; 色が気に入らないので直してみたり
(set-face-italic-p 'cperl-hash-face nil)
(set-face-background 'cperl-hash-face nil)
(set-face-background 'cperl-array-face nil)
(setq cperl-array-face 'font-lock-variable-name-face)
(setq cperl-hash-face 'font-variable-name-face)

;; キーバインドが気に入らないので直してみたり
(define-key cperl-mode-map "\C-c\C-c"  'cperl-comment-region) ;; C-c C-cでコメントアウト
(define-key cperl-mode-map "\C-u\C-c\C-c"  'uncomment-region) ;; cperl-uncomment-region is buggy

PodからコードをコピペしたときについてしまうインデントをEmacsでどうやって消すか - ヒルズで働く@robarioの技ログでもちょこっと紹介したperltidy-region
もっと interactive を使おう - odz bufferの設定の方が簡単でキレイです。

;; 指定領域をperltidy
(defun perltidy-region ()
  "Run the perltidy parser on the current region."
  (interactive)
  (let ((start (mark))
        (end (point))
        (shell-command-default-error-buffer "perltidy-errors")
        (command "perltidy"))
    (shell-command-on-region
     start
     end
     command
     t t
     shell-command-default-error-buffer)))

;; 上記のbuffer全体版
(defun perltidy-buffer ()
  "Run the perltidy parser on the current buffer."
  (interactive)
  (save-excursion
    (mark-whole-buffer)
    (perltidy-region)))

ffap-cperl-mode - Perlモジュールのソースをその場で開くelisp - ヒルズで働く@robarioの技ログで紹介したもの。

(defun ffap-cperl-mode (file)
  (let ((real-file (shell-command-to-string (concat "perldoc -ml " file))))
    (unless (string-match "No module found for " real-file)
      (substring real-file 0 -1)
    )))

(add-to-list 'ffap-alist '(cperl-mode . ffap-cperl-mode))

;; ソースよりPODドキュメントを良く見る人は
;; (add-to-list 'ffap-alist '(cperl-mode . cperl-perldoc-at-point))
;; としても良いと思います。


他にはauto-insertで.plや.pmを新規作成した時にテンプレートが挿入されたりとかしてます。その辺は長くなるので割愛。

id:odzさんにトラックバック頂きました
うおー、これは知らなかったあ。→Programming in Emacs Lisp: Writing Defuns
「これは」というか、EmacsLisp自体ほとんど知らないんです。perltidy-regionもどっかのをコピペしただけなのです。(´ρ`)

id:odzさん、ありがとうございました!