EmacsでPerl開発する上で必須な設定 #3 - perldoc-m
PODを読んでもよくわからない、あるいは、そもそもPODがちゃんと書かれていないモジュールの挙動を知りたい場合、perldoc -mを使いまくることがよくあると思います。単にperldocを読みたい場合は、id:IMAKADOさんによる素晴しいperl-completion.el(これも当然必須です)が非常に便利なのですが、perldoc -mの表示をバッファを作って表示させたい場合、以下のような設定を書いておくと、これはこれで便利だと思います。というか使いまくってます。
- ポイントがある位置のモジュール名、あるいはなんにもなければプロンプトでモジュール名を指定して、ウィンドウをポップアップしてperldoc -mを表示
- perldoc-mコマンドを実行したバッファが、既にperldoc-mコマンドで開いたバッファなら、その場で表示
多分これ、どこかからもらってきたのを改造したのだと思うけど、それがどこなのかわからない。
;; perldoc -m を開く ;; モジュールソースバッファの場合はその場で、 ;; その他のバッファの場合は別ウィンドウに開く。 (put 'perl-module-thing 'end-op (lambda () (re-search-forward "\\=[a-zA-Z][a-zA-Z0-9_:]*" nil t))) (put 'perl-module-thing 'beginning-op (lambda () (if (re-search-backward "[^a-zA-Z0-9_:]" nil t) (forward-char) (goto-char (point-min))))) (defun perldoc-m () (interactive) (let ((module (thing-at-point 'perl-module-thing)) (pop-up-windows t) (cperl-mode-hook nil)) (when (string= module "") (setq module (read-string "Module Name: "))) (let ((result (substring (shell-command-to-string (concat "perldoc -m " module)) 0 -1)) (buffer (get-buffer-create (concat "*Perl " module "*"))) (pop-or-set-flag (string-match "*Perl " (buffer-name)))) (if (string-match "No module found for" result) (message "%s" result) (progn (with-current-buffer buffer (toggle-read-only -1) (erase-buffer) (insert result) (goto-char (point-min)) (cperl-mode) (toggle-read-only 1) ) (if pop-or-set-flag (switch-to-buffer buffer) (display-buffer buffer)))))))