;; Use cperl mode instead of the default perl mode
(defalias 'perl-mode 'cperl-mode)
;; turn autoindenting on
(global-set-key "\r" 'newline-and-indent)
;; Use 4 space indents via cperl mode
(custom-set-variables
'(cperl-close-paren-offset -4)
'(cperl-continued-statement-offset 4)
'(cperl-indent-level 4)
'(cperl-indent-parens-as-block t)
'(cperl-tab-always-indent t))
;; Insert spaces instead of tabs
(setq-default indent-tabs-mode nil)
;; Set line width to 78 columns...
(setq fill-column 78)
(setq auto-fill-mode t)
;; Use % to match various kinds of brackets...
;; See: http://www.lifl.fr/~hodique/uploads/Perso/patches.el
(global-set-key "%" 'match-paren)
(defun match-paren (arg)
"Go to the matching paren if on a paren; otherwise insert %."
(interactive "p")
(let ((prev-char (char-to-string (preceding-char)))
(next-char (char-to-string (following-char))))
(cond ((string-match "[[{(<]" next-char) (forward-sexp 1))
((string-match "[\]})>]" prev-char) (backward-sexp 1))
(t (self-insert-command (or arg 1))))))
;; Load an application template in a new unattached buffer...
(defun application-template-pl ( )
"Inserts the standard Perl application template" ; For help and info.
(interactive "*") ; Make this user accessible.
(switch-to-buffer "application-template-pl")
(insert-file "~/.code_templates/perl_application.pl"))
;; Set to a specific key combination...
(global-set-key "\C-ca" 'application-template-pl)
;; Load a module template in a new unattached buffer...
(defun module-template-pm ( )
"Inserts the standard Perl module template" ; For help and info.
(interactive "*") ; Make this user accessible.
(switch-to-buffer "module-template-pm")
(insert-file "~/.code_templates/perl_module.pm"))
;; Set to a specific key combination...
(global-set-key "\C-cm" 'module-template-pm)
;; Expand the following abbreviations while typing in text files...
(abbrev-mode 1)
(define-abbrev-table 'global-abbrev-table '(
("pdbg" "use Data::Dumper qw( Dumper );\nwarn Dumper[];" nil 1)
("phbp" "#! /usr/bin/perl -w" nil 1)
("pbmk" "use Benchmark qw( cmpthese );\ncmpthese -10, {};" nil 1)
("pusc" "use Smart::Comments;\n\n### " nil 1)
("putm" "use Test::More 'no_plan';" nil 1)
))
(add-hook 'text-mode-hook (lambda ( ) (abbrev-mode 1)))