Kansai.pm 第10回ミーティングで発表してきたお
Kansai.pmの第10会ミーティングで、「EmacsでPerlプログラミングする上で必須な設定」というタイトルでお話してきました。初トーク!!1しかし結果は……という感じでしたが、ともあれ楽しかった。参加されたみなさま、どうもありがとうございました & お疲れさまでした!!1また次回もよろしくお願いします!!1
以下、発表資料です。
自己紹介
Perler活動
- http://search.cpan.org/~kentaro/
- Acme::MorningMusume
- WWW::HatenaDiary
- WebService::Hatena::Graph
- WebService::Hatena::Fotolife
- あとなんかいろいろ適当に
Emacser(えまくさ)活動
elispはそんなに書けませんが……。
- simple-hatena-mode
- auto-save-buffers-enhanced
- emacs-ditz
- taskpaper
- .emacs
- http://planet.emacsen.org/
- 購読対象にされて迷惑してます
Emacsの設定
- Emacsを使うこと自体において必須な設定ってのはたくさんあるけど……
- anything.el
- minibuf-isearch
- migemo
- etc.
- キリがないので、Perlプログラミングをする上で必須、というものに絞って紹介
Ack
Ackデモ
- 適当に検索してみるよ
AckをEmacsから使う
(defun ack () (interactive) (let ((grep-find-command "ack --nocolor --nogroup ")) (call-interactively 'grep-find)))
color-moccur
moccur-editのデモ
- MoCoをPoCoに変更したい!!1
color-moccur/moccur-editの設定
- なんかいろいろオプションあるけど、これだけしか設定してない。
(require 'color-moccur) (require 'moccur-edit) ;; ~, .svnを無視 (setq dmoccur-exclusion-mask (append '("\\~$" "\\.svn\\/\*") dmoccur-exclusion-mask))
flymakeデモ
- なんか適当に書いてみるよ
flymakeの設定
- プロジェクトのlibディレクトリをPERL5LIBに追加する必要がある
- set-perl5libを使えばいい
- 設定長い。後でブログに張っておくのでそちらで。
(require 'flymake) ;; set-perl5lib ;; 開いたスクリプトのパスに応じて、PERL5LIBにlibを追加してくれる ;; http://svn.coderepos.org/share/lang/elisp/set-perl5lib/set-perl5lib.el (require 'set-perl5lib) ;; エラー、ウォーニング時のフェイス (set-face-background 'flymake-errline "red4") (set-face-foreground 'flymake-errline "black") (set-face-background 'flymake-warnline "yellow") (set-face-foreground 'flymake-warnline "black") ;; エラーをミニバッファに表示 ;; http://d.hatena.ne.jp/xcezx/20080314/1205475020 (defun flymake-display-err-minibuf () "Displays the error/warning for the current line in the minibuffer" (interactive) (let** ((line-no (flymake-current-line-no)) (line-err-info-list (nth 0 (flymake-find-err-info flymake-err-info line-no))) (count (length line-err-info-list))) (while (> count 0) (when line-err-info-list (let** ((file (flymake-ler-file (nth (1- count) line-err-info-list))) (full-file (flymake-ler-full-file (nth (1- count) line-err-info-list))) (text (flymake-ler-text (nth (1- count) line-err-info-list))) (line (flymake-ler-line (nth (1- count) line-err-info-list)))) (message "[%s] %s" line text))) (setq count (1- count))))) ;; Perl用設定 ;; http://unknownplace.org/memo/2007/12/21#e001 (defvar flymake-perl-err-line-patterns '(("\\(.*\\) at \\([^ \n]+\\) line \\([0-9]+\\)[,.\n]" 2 3 nil 1))) (defconst flymake-allowed-perl-file-name-masks '(("\\.pl$" flymake-perl-init) ("\\.pm$" flymake-perl-init) ("\\.t$" flymake-perl-init))) (defun flymake-perl-init () (let** ((temp-file (flymake-init-create-temp-buffer-copy 'flymake-create-temp-inplace)) (local-file (file-relative-name temp-file (file-name-directory buffer-file-name)))) (list "perl" (list "-wc" local-file)))) (defun flymake-perl-load () (interactive) (defadvice flymake-post-syntax-check (before flymake-force-check-was-interrupted) (setq flymake-check-was-interrupted t)) (ad-activate 'flymake-post-syntax-check) (setq flymake-allowed-file-name-masks (append flymake-allowed-file-name-masks flymake-allowed-perl-file-name-masks)) (setq flymake-err-line-patterns flymake-perl-err-line-patterns) (set-perl5lib) (flymake-mode t)) (add-hook 'cperl-mode-hook 'flymake-perl-load)
perly-sense
- http://search.cpan.org/dist/Devel-PerlySense/
- EmacsをPerl IDEにすることを目論んでいるらしい
- IntelliSenseとかよく知りませんが
- よく使う機能
- クラスのOverviewを見る
- useしているモジュールへ移動
- 親クラスへ移動
- テストファイル実行
perly-senseのデモ
- overview
- ブックマークも出るよ
- 重いのであんま使わない
- モジュールへ移動
- テストファイル実行
perly-senseを使ってみる
- 設定はドキュメントの通り
- まずはperly_senseコマンドで準備。
- .PerlySenseProjectディレクトリが作成される
- 必要ならば、その中のproject.ymlを編集
$ perly_sense create_project MyProject
.PerlySenseProject/project.ymlの、重要なポイント
- @INCに含めたいパスを指定
- 外部モジュールを利用してる時に便利
project: moniker: 'The Project Without a Name' inc_dir: - modules/foo/lib - modules/bar/lib
- メモを書く書式を設定しておくと、overviewに一覧される
bookmark: - moniker: Todo rex: - qr/\# \s** TODO \s** : \s** (.+?) \s*$/x
- "--nocolor"オプションをつけておかないと、Emacs内でテストファイルを実行した後の結果がおかしくなる。
run_file: - command: "prove -v ${INC} --nocolor \"${SOURCE_FILE}\"" moniker: Test rex: \.t$ run_from: source_root_directory
perly-senseの設定
- 設定長い。後でブログに張っておくのでそちらで。
- 詳しくは、ドキュメントを参照のこと。
(setq ps/key-prefix "\C-c\C-c") ;; perly-sense-flymake ;; flymakeは自分で設定する (setq ps/load-flymake nil) ;; load perly-sense (setq ps/external-dir (shell-command-to-string "perly_sense external_dir")) (if (string-match "Devel.PerlySense.external" ps/external-dir) (progn (message "PerlySense elisp files at (%s) according to perly_sense, loading..." ps/external-dir) (setq load-path (cons (expand-file-name (format "%s/%s" ps/external-dir "emacs") ) load-path)) (load "perly-sense") ) (message "Could not identify PerlySense install dir. Is Devel::PerlySense installed properly? Does 'perly_sense external_dir' give you a proper directory? (%s)" ps/external-dir))
perl-completion
- id:IMAKADOさん作
- anything.elを利用して、Perlプログラミングに必要なあれこれを絞り込み
- ってか、anything.elって何?
- Emacs界のPlaggerのようなもの
- リストで入力されたものを
- 絞り込みをかけて
- いろんな形式でもって出力
- 最近、メンテナがRuby/Emacs界で有名な日本人id:rubikitchさんに移管されたので、期待!!1
- Emacs界のPlaggerのようなもの
perl-completionでできること
- 組み込み変数/関数の補完入力
- モジュールの補完入力
- それらのドキュメント閲覧
- 他にもなんかあるかも
perl-completionデモ
- 関数/変数補完
- モジュール補完
- 補完画面での動作
perl-completionの設定
- 設定については後で(ry
(setq plcmp-buffer-dabbrev-expansions-number 0) (add-hook 'cperl-mode-hook (lambda () (require 'perl-completion) (perl-completion-mode t) (define-key plcmp-mode-map "\C-\M-f" 'plcmp-builtin-function-complete) (define-key plcmp-mode-map "\C-\M-v" 'plcmp-builtin-variables-complete) (define-key plcmp-mode-map "\C-\M-u" 'plcmp-installed-modules-complete) (define-key plcmp-mode-map "\C-\M-s" 'plcmp-search-word-at-point) (define-key plcmp-mode-map "\C-\M-c" 'plcmp-clear-all-cache)))
まとめ
- ちょっとツールを導入するだけで、とっても便利に
- http://d.hatena.ne.jp/antipop/20080729/1217336517
おしまい
- ご清聴ありがとうございました。