spacemacs/layers/+lang/perl5/packages.el
syl20bnr ebe4c60264 Revert "Defer packages by default using use-package-always-defer"
This reverts commit 29c78ce841 and all other fixes
that have been made afterwards.

The motivation is that use-package is seen by many as a replacement for
`require`. Is use-package always defer the loading of packages then is breaks
this use case, this does not respect POLA so even if it was making Spacemacs
loading faster (up to 3s faster on some startup on my machine) we just cannot
use it, it would be irresponsible. Spacemacs should be easy to use, loading
performance will come with time but it is not a priority.
2018-03-03 23:40:10 -05:00

129 lines
5 KiB
EmacsLisp

;;; packages.el --- Perl5 Layer packages File for Spacemacs
;;
;; Copyright (c) 2012-2018 Sylvain Benner & Contributors
;;
;; Author: Troy Hinckley <troyhinckley@gmail.com>
;; URL: https://github.com/syl20bnr/spacemacs
;;
;; This file is not part of GNU Emacs.
;;
;;; License: GPLv3
(setq perl5-packages
'(
(company-plsense :requires company)
(cperl-mode :location built-in)
flycheck
smartparens
))
(defun perl5/init-company-plsense ()
(use-package company-plsense
:defer t
:init
(spacemacs|add-company-backends
:backends company-plsense
:modes cperl-mode)))
(defun perl5/init-cperl-mode ()
(use-package cperl-mode
:defer t
:mode "\\.\\(p[lm]x?\\|P[LM]X?\\)\\'"
:interpreter "perl"
:interpreter "perl5"
:init
(progn
(setq
;; highlight all scalar variables not just the instantiation
cperl-highlight-variables-indiscriminately t
cperl-indent-level 4 ; 4 spaces is the standard indentation
cperl-close-paren-offset -4 ; indent the closing paren back four spaces
cperl-continued-statement-offset 4 ; if a statement continues indent it to four spaces
cperl-indent-parens-as-block t)) ; parentheses are indented with the block and not with scope
:config
(progn
;; Don't highlight arrays and hashes in comments
(font-lock-remove-keywords
'cperl-mode
'(("\\(\\([@%]\\|\\$#\\)[a-zA-Z_:][a-zA-Z0-9_:]*\\)" 1
(if (eq (char-after (match-beginning 2)) 37)
'cperl-hash-face 'cperl-array-face) t)
("\\(\\([$@]+\\)[a-zA-Z_:][a-zA-Z0-9_:]*\\)[ \t]*\\([[{]\\)" 1
(if (= (- (match-end 2) (match-beginning 2)) 1)
(if (eq (char-after (match-beginning 3)) 123)
'cperl-hash-face 'cperl-array-face)
font-lock-variable-name-face) t)
("\\([]}\\\\%@>*&]\\|\\$[a-zA-Z0-9_:]*\\)[ \t]*{[ \t]*\\(-?[a-zA-Z0-9_:]+\\)[ \t]*}"
(2 font-lock-string-face t)
("\\=[ \t]*{[ \t]*\\(-?[a-zA-Z0-9_:]+\\)[ \t]*}" nil nil
(1 font-lock-string-face t)))
("[[ \t{,(]\\(-?[a-zA-Z0-9_:]+\\)[ \t]*=>" 1 font-lock-string-face t)))
(font-lock-add-keywords
'cperl-mode
'(("\\(\\([@%]\\|\\$#\\)[a-zA-Z_:][a-zA-Z0-9_:]*\\)" 1
(if (nth 4 (syntax-ppss))
'font-lock-comment-face
(if (eq (char-after (match-beginning 2)) ?%)
'cperl-hash-face
'cperl-array-face)) t)
("\\(\\([$@]+\\)[a-zA-Z_:][a-zA-Z0-9_:]*\\)[ \t]*\\([[{]\\)" 1
(if (nth 4 (syntax-ppss))
'font-lock-comment-face
(if (= (- (match-end 2) (match-beginning 2)) 1)
(if (eq (char-after (match-beginning 3)) ?{)
'cperl-hash-face
'cperl-array-face)
font-lock-variable-name-face)) t)
("\\([]}\\\\%@>*&]\\|\\$[a-zA-Z0-9_:]*\\)[ \t]*{[ \t]*\\(-?[a-zA-Z0-9_:]+\\)[ \t]*}"
(2 (if (nth 4 (syntax-ppss))
'font-lock-comment-face
'font-lock-string-face) t)
("\\=[ \t]*{[ \t]*\\(-?[a-zA-Z0-9_:]+\\)[ \t]*}" nil nil
(1 (if (nth 4 (syntax-ppss))
'font-lock-comment-face
'font-lock-string-face) t)))
("[[ \t{,(]\\(-?[a-zA-Z0-9_:]+\\)[ \t]*=>" 1
(if (nth 4 (syntax-ppss))
'font-lock-comment-face
'font-lock-string-face) t)))
;; Use less horrible colors for cperl arrays and hashes
(set-face-attribute 'cperl-array-face nil
:foreground "#DD7D0A"
:background 'unspecified
:weight 'unspecified)
(set-face-attribute 'cperl-hash-face nil
:foreground "OrangeRed3"
:background 'unspecified
:weight 'unspecified)
;; tab key will ident all marked code when tab key is pressed
(add-hook 'cperl-mode-hook
(lambda () (local-set-key (kbd "<tab>") 'indent-for-tab-command)))
(spacemacs/declare-prefix "m=" "format")
(spacemacs/declare-prefix "mg" "find-symbol")
(spacemacs/declare-prefix "mh" "perldoc")
(spacemacs/set-leader-keys-for-major-mode 'cperl-mode
"==" 'spacemacs/perltidy-format
"=b" 'spacemacs/perltidy-format-buffer
"=f" 'spacemacs/perltidy-format-function
"hh" 'cperl-perldoc-at-point
"hd" 'cperl-perldoc
"v" 'cperl-select-this-pod-or-here-doc)
(font-lock-add-keywords 'cperl-mode
'(("\\_<say\\_>" . cperl-nonoverridable-face))))))
(defun perl5/post-init-flycheck ()
(spacemacs/enable-flycheck 'cperl-mode))
(defun perl5/post-init-smartparens ()
;; fixs a bug with electric mode and smartparens https://github.com/syl20bnr/spacemacs/issues/480
(with-eval-after-load 'cperl-mode
(add-hook 'smartparens-enabled-hook 'spacemacs//perl5-smartparens-enable)
(add-hook 'smartparens-disabled-hook 'spacemacs//perl5-spartparens-disable)))