]> code.delx.au - gnu-emacs/blobdiff - lisp/progmodes/cperl-mode.el
(gdb-gud-context-call): Does not need to be a macro.
[gnu-emacs] / lisp / progmodes / cperl-mode.el
index 13f1e0c24b82664bf581884e08d15f1778938894..4fdbfb75c5314c1a329f3fe012826a3c35101066 100644 (file)
@@ -1,19 +1,20 @@
 ;;; cperl-mode.el --- Perl code editing commands for Emacs
 
 ;; Copyright (C) 1985, 1986, 1987, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
-;; 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+;; 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
 ;;     Free Software Foundation, Inc.
 
-;; Author: Ilya Zakharevich and Bob Olson
+;; Author: Ilya Zakharevich
+;;     Bob Olson
 ;; Maintainer: Ilya Zakharevich <ilyaz@cpan.org>
 ;; Keywords: languages, Perl
 
 ;; This file is part of GNU Emacs.
 
-;; GNU Emacs is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
 
 ;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -21,9 +22,7 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-;; Boston, MA 02110-1301, USA.
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
 
 ;;; Corrections made by Ilya Zakharevich ilyaz@cpan.org
 
@@ -231,12 +230,18 @@ for constructs with multiline if/unless/while/until/for/foreach condition."
   :type 'integer
   :group 'cperl-indentation-details)
 
-;; Is is not unusual to put both perl-indent-level and
+;; Is is not unusual to put both things like perl-indent-level and
 ;; cperl-indent-level in the local variable section of a file. If only
 ;; one of perl-mode and cperl-mode is in use, a warning will be issued
-;; about the variable. Autoload this here, so that no warning is
+;; about the variable. Autoload these here, so that no warning is
 ;; issued when using either perl-mode or cperl-mode.
 ;;;###autoload(put 'cperl-indent-level 'safe-local-variable 'integerp)
+;;;###autoload(put 'cperl-brace-offset 'safe-local-variable 'integerp)
+;;;###autoload(put 'cperl-continued-brace-offset 'safe-local-variable 'integerp)
+;;;###autoload(put 'cperl-label-offset 'safe-local-variable 'integerp)
+;;;###autoload(put 'cperl-continued-statement-offset 'safe-local-variable 'integerp)
+;;;###autoload(put 'cperl-extra-newline-before-brace 'safe-local-variable 'booleanp)
+;;;###autoload(put 'cperl-merge-trailing-else 'safe-local-variable 'booleanp)
 
 (defcustom cperl-lineup-step nil
   "*`cperl-lineup' will always lineup at multiple of this number.
@@ -830,7 +835,7 @@ voice);
 
 3) Everything is customizable, one-by-one or in a big sweep;
 
-4) It has many easily-accessable \"tools\":
+4) It has many easily-accessible \"tools\":
         a) Can run program, check syntax, start debugger;
         b) Can lineup vertically \"middles\" of rows, like `=' in
                 a  = b;
@@ -1241,7 +1246,7 @@ versions of Emacs."
          ["Contract groups" cperl-contract-levels
           cperl-use-syntax-table-text-property]
          "----"
-         ["Find next interpolated" cperl-next-interpolated-REx 
+         ["Find next interpolated" cperl-next-interpolated-REx
           (next-single-property-change (point-min) 'REx-interpolated)]
          ["Find next interpolated (no //o)"
           cperl-next-interpolated-REx-0
@@ -1510,6 +1515,8 @@ the last)."
      2 3))
   "Alist that specifies how to match errors in perl output.")
 
+(defvar compilation-error-regexp-alist)
+
 ;;;###autoload
 (defun cperl-mode ()
   "Major mode for editing Perl code.
@@ -1790,9 +1797,11 @@ or as help on variables `cperl-tips', `cperl-problems',
   (set 'vc-sccs-header cperl-vc-sccs-header)
   ;; This one is obsolete...
   (make-local-variable 'vc-header-alist)
-  (set 'vc-header-alist (or cperl-vc-header-alist ; Avoid warning
-                           `((SCCS ,(car cperl-vc-sccs-header))
-                              (RCS ,(car cperl-vc-rcs-header)))))
+  (with-no-warnings
+   (set 'vc-header-alist (or cperl-vc-header-alist ; Avoid warning
+                            `((SCCS ,(car cperl-vc-sccs-header))
+                              (RCS ,(car cperl-vc-rcs-header)))))
+   )
   (cond ((boundp 'compilation-error-regexp-alist-alist);; xemacs 20.x
         (make-local-variable 'compilation-error-regexp-alist-alist)
         (set 'compilation-error-regexp-alist-alist
@@ -2029,11 +2038,11 @@ char is \"{\", insert extra newline before only if
          (save-excursion
            (setq insertpos (point-marker))
            (goto-char other-end)
-           (setq last-command-char ?\{)
+           (setq last-command-event ?\{)
            (cperl-electric-lbrace arg insertpos))
          (forward-char 1))
       ;; Check whether we close something "usual" with `}'
-      (if (and (eq last-command-char ?\})
+      (if (and (eq last-command-event ?\})
               (not
                (condition-case nil
                    (save-excursion
@@ -2051,7 +2060,7 @@ char is \"{\", insert extra newline before only if
                          (save-excursion
                            (skip-chars-backward " \t")
                            (bolp)))
-                    (and (eq last-command-char ?\{) ; Do not insert newline
+                    (and (eq last-command-event ?\{) ; Do not insert newline
                          ;; if after ")" and `cperl-extra-newline-before-brace'
                          ;; is nil, do not insert extra newline.
                          (not cperl-extra-newline-before-brace)
@@ -2072,7 +2081,7 @@ char is \"{\", insert extra newline before only if
              (save-excursion
                (if insertpos (progn (goto-char insertpos)
                                     (search-forward (make-string
-                                                     1 last-command-char))
+                                                     1 last-command-event))
                                     (setq insertpos (1- (point)))))
                (delete-char -1))))
        (if insertpos
@@ -2111,12 +2120,12 @@ char is \"{\", insert extra newline before only if
       (setq cperl-auto-newline nil))
     (cperl-electric-brace arg)
     (and (cperl-val 'cperl-electric-parens)
-        (eq last-command-char ?{)
-        (memq last-command-char
+        (eq last-command-event ?{)
+        (memq last-command-event
               (append cperl-electric-parens-string nil))
         (or (if other-end (goto-char (marker-position other-end)))
             t)
-        (setq last-command-char ?} pos (point))
+        (setq last-command-event ?} pos (point))
         (progn (cperl-electric-brace arg t)
                (goto-char pos)))))
 
@@ -2133,11 +2142,11 @@ See `cperl-electric-parens'."
                         (point-marker))
                     nil)))
     (if (and (cperl-val 'cperl-electric-parens)
-            (memq last-command-char
+            (memq last-command-event
                   (append cperl-electric-parens-string nil))
             (>= (save-excursion (cperl-to-comment-or-eol) (point)) (point))
             ;;(not (save-excursion (search-backward "#" beg t)))
-            (if (eq last-command-char ?<)
+            (if (eq last-command-event ?<)
                 (progn
                   (and abbrev-mode ; later it is too late, may be after `for'
                        (expand-abbrev))
@@ -2148,7 +2157,7 @@ See `cperl-electric-parens'."
          (if other-end (goto-char (marker-position other-end)))
          (insert (make-string
                   (prefix-numeric-value arg)
-                  (cdr (assoc last-command-char '((?{ .?})
+                  (cdr (assoc last-command-event '((?{ .?})
                                                   (?[ . ?])
                                                   (?( . ?))
                                                   (?< . ?>))))))
@@ -2163,7 +2172,7 @@ Affected by `cperl-electric-parens'."
   (let ((beg (save-excursion (beginning-of-line) (point)))
        (other-end (if (and cperl-electric-parens-mark
                            (cperl-val 'cperl-electric-parens)
-                           (memq last-command-char
+                           (memq last-command-event
                                  (append cperl-electric-parens-string nil))
                            (cperl-mark-active)
                            (< (mark) (point)))
@@ -2172,7 +2181,7 @@ Affected by `cperl-electric-parens'."
        p)
     (if (and other-end
             (cperl-val 'cperl-electric-parens)
-            (memq last-command-char '( ?\) ?\] ?\} ?\> ))
+            (memq last-command-event '( ?\) ?\] ?\} ?\> ))
             (>= (save-excursion (cperl-to-comment-or-eol) (point)) (point))
             ;;(not (save-excursion (search-backward "#" beg t)))
             )
@@ -2182,7 +2191,7 @@ Affected by `cperl-electric-parens'."
          (if other-end (goto-char other-end))
          (insert (make-string
                   (prefix-numeric-value arg)
-                  (cdr (assoc last-command-char '((?\} . ?\{)
+                  (cdr (assoc last-command-event '((?\} . ?\{)
                                                   (?\] . ?\[)
                                                   (?\) . ?\()
                                                   (?\> . ?\<))))))
@@ -2194,9 +2203,9 @@ Affected by `cperl-electric-parens'."
 Help message may be switched off by setting `cperl-message-electric-keyword'
 to nil."
   (let ((beg (save-excursion (beginning-of-line) (point)))
-       (dollar (and (eq last-command-char ?$)
+       (dollar (and (eq last-command-event ?$)
                     (eq this-command 'self-insert-command)))
-       (delete (and (memq last-command-char '(?\s ?\n ?\t ?\f))
+       (delete (and (memq last-command-event '(?\s ?\n ?\t ?\f))
                     (memq this-command '(self-insert-command newline))))
        my do)
     (and (save-excursion
@@ -2250,7 +2259,7 @@ to nil."
                                 (forward-char 1)
                               (delete-char 1)))
             (search-backward ")")
-            (if (eq last-command-char ?\()
+            (if (eq last-command-event ?\()
                 (progn                 ; Avoid "if (())"
                   (delete-backward-char 1)
                   (delete-backward-char -1))))
@@ -2271,7 +2280,7 @@ to nil."
 
 (defun cperl-electric-pod ()
   "Insert a POD chunk appropriate after a =POD directive."
-  (let ((delete (and (memq last-command-char '(?\s ?\n ?\t ?\f))
+  (let ((delete (and (memq last-command-event '(?\s ?\n ?\t ?\f))
                     (memq this-command '(self-insert-command newline))))
        head1 notlast name p really-delete over)
     (and (save-excursion
@@ -2491,7 +2500,7 @@ If in POD, insert appropriate lines."
   (interactive "P")
   (let ((end (point))
        (auto (and cperl-auto-newline
-                  (or (not (eq last-command-char ?:))
+                  (or (not (eq last-command-event ?:))
                       cperl-auto-newline-after-colon)))
        insertpos)
     (if (and ;;(not arg)
@@ -2505,7 +2514,7 @@ If in POD, insert appropriate lines."
                     ;; Colon is special only after a label
                     ;; So quickly rule out most other uses of colon
                     ;; and do no indentation for them.
-                    (and (eq last-command-char ?:)
+                    (and (eq last-command-event ?:)
                          (save-excursion
                            (forward-word 1)
                            (skip-chars-forward " \t")
@@ -2836,7 +2845,7 @@ Will not look before LIM."
                                    (skip-chars-backward " \t")
                                    (looking-at "[ \t]*[a-zA-Z_][a-zA-Z_0-9]*[ \t]*:")))
                             (get-text-property (point) 'first-format-line)))
-                  
+
                   ;; Look at previous line that's at column 0
                   ;; to determine whether we are in top-level decls
                   ;; or function's arg decls.  Set basic-indent accordingly.
@@ -3070,7 +3079,7 @@ and closing parentheses and brackets."
         ((eq 'toplevel (elt i 0)) ;; [toplevel start char-after state immed-after-block]
          (+ (save-excursion            ; To beg-of-defun, or end of last sexp
               (goto-char (elt i 1))    ; start = Good place to start parsing
-              (- (current-indentation) ; 
+              (- (current-indentation) ;
                  (if (elt i 4) cperl-indent-level 0))) ; immed-after-block
             (if (eq (elt i 2) ?{) cperl-continued-brace-offset 0) ; char-after
             ;; Look at previous line that's at column 0
@@ -3599,7 +3608,7 @@ the sections using `cperl-pod-head-face', `cperl-pod-face',
         face head-face here-face b e bb tag qtag b1 e1 argument i c tail tb
         is-REx is-x-REx REx-subgr-start REx-subgr-end was-subgr i2 hairy-RE
         (case-fold-search nil) (inhibit-read-only t) (buffer-undo-list t)
-        (modified (buffer-modified-p)) overshoot is-o-REx
+        (modified (buffer-modified-p)) overshoot is-o-REx name
         (after-change-functions nil)
         (cperl-font-locking t)
         (use-syntax-state (and cperl-syntax-state
@@ -3890,7 +3899,7 @@ the sections using `cperl-pod-head-face', `cperl-pod-face',
               ;;; XXX What to do: foo <<bar ???
               ;;; XXX Need to support print {a} <<B ???
                                       (forward-sexp -1)
-                                      (save-match-data 
+                                      (save-match-data
                                        ; $foo << b; $f .= <<B;
                                        ; ($f+1) << b; a($f) . <<B;
                                        ; foo 1, <<B; $x{a} <<b;
@@ -3922,7 +3931,7 @@ the sections using `cperl-pod-head-face', `cperl-pod-face',
                        qtag (regexp-quote tag))
                  (cond (cperl-pod-here-fontify
                         ;; Highlight the starting delimiter
-                        (cperl-postpone-fontification 
+                        (cperl-postpone-fontification
                          b1 e1 'face my-cperl-delimiters-face)
                         (cperl-put-do-not-fontify b1 e1 t)))
                  (forward-line)
@@ -4282,7 +4291,7 @@ the sections using `cperl-pod-head-face', `cperl-pod-face',
 ;;;m^a[\^b]c^ + m.a[^b]\.c.;
                        (save-excursion
                          (goto-char (1+ b))
-                         ;; First 
+                         ;; First
                          (cperl-look-at-leading-count is-x-REx e)
                          (setq hairy-RE
                                (concat
@@ -4443,7 +4452,7 @@ the sections using `cperl-pod-head-face', `cperl-pod-face',
                                 ;; This is not pretty: the 5.8.7 logic:
                                 ;; \0numx  -> octal (up to total 3 dig)
                                 ;; \DIGIT  -> backref unless \0
-                                ;; \DIGITs -> backref if legal
+                                ;; \DIGITs -> backref if valid
                                 ;;          otherwise up to 3 -> octal
                                 ;; Do not try to distinguish, we guess
                                 ((or (and (memq qtag (append "01234567" nil))
@@ -4451,7 +4460,7 @@ the sections using `cperl-pod-head-face', `cperl-pod-face',
                                            "\\=[01234567]?[01234567]?"
                                            (1- e) 'to-end))
                                      (and (memq qtag (append "89" nil))
-                                          (re-search-forward 
+                                          (re-search-forward
                                            "\\=[0123456789]*" (1- e) 'to-end))
                                      (and (eq qtag ?x)
                                           (re-search-forward
@@ -4489,7 +4498,7 @@ the sections using `cperl-pod-head-face', `cperl-pod-face',
                              ;; in m]]: m][\\\]\]] produces [\\]]
 ;;; POSIX?  [:word:] [:^word:] only inside []
 ;;;                                   "\\=\\(\\\\.\\|[^][\\\\]\\|\\[:\\^?\sw+:]\\|\\[[^:]\\)*]")
-                             (while 
+                             (while
                                  (and argument
                                       (re-search-forward
                                        (if (eq (char-after b) ?\] )
@@ -4577,7 +4586,7 @@ the sections using `cperl-pod-head-face', `cperl-pod-face',
                                           (setq qtag "Can't find })")))
                                  (progn
                                    (goto-char (1- e))
-                                   (message qtag))
+                                   (message "%s" qtag))
                                (cperl-postpone-fontification
                                 (1- tag) (1- (point))
                                 'face font-lock-variable-name-face)
@@ -5806,7 +5815,7 @@ indentation and initial hashes.  Behaves usually outside of comment."
                                   ","
                                   cperl-maybe-white-and-comment-rex
                                   "\\([$@%*]\\([a-zA-Z0-9_:]+\\|[^a-zA-Z0-9_]\\)\\)")
-                       ;; Bug in font-lock: limit is used not only to limit 
+                       ;; Bug in font-lock: limit is used not only to limit
                        ;; searches, but to set the "extend window for
                        ;; facification" property.  Thus we need to minimize.
                        ,(if cperl-font-lock-multiline
@@ -6563,7 +6572,7 @@ Customized by setting variables `cperl-shrink-wrap-info-frame',
                         ;; Non-functioning under OS/2:
                         (if (eq char-height 1) (setq char-height 18))
                         ;; Title, menubar, + 2 for slack
-                        (- (/ (x-display-pixel-height) char-height) 4)))
+                        (- (/ (display-pixel-height) char-height) 4)))
                 (if (> height max-height) (setq height max-height))
                 ;;(message "was %s doing %s" iniheight height)
                 (if not-loner
@@ -6775,7 +6784,7 @@ construct.  DONE-TO and STATEPOS indicate changes to internal caches maintained
 by CPerl."
   (interactive "P")
   (or arg
-      (setq arg (if (eq cperl-syntaxify-by-font-lock 
+      (setq arg (if (eq cperl-syntaxify-by-font-lock
                        (if backtrace 'backtrace 'message)) 0 1)))
   (setq arg (if (> arg 0) (if backtrace 'backtrace 'message) t))
   (setq cperl-syntaxify-by-font-lock arg)
@@ -7081,6 +7090,8 @@ Use as
                        (cons cons1 (car cperl-hierarchy)))))))
       (end-of-line))))
 
+(declare-function x-popup-menu "xmenu.c" (position menu))
+
 (defun cperl-tags-hier-init (&optional update)
   "Show hierarchical menu of classes and methods.
 Finds info about classes by a scan of loaded TAGS files.
@@ -8236,7 +8247,7 @@ We suppose that the regexp is scanned already."
 (defun cperl-invert-if-unless-modifiers ()
   "Change `B if A;' into `if (A) {B}' etc if possible.
 \(Unfinished.)"
-  (interactive)                                ; 
+  (interactive)                                ;
   (let (A B pre-B post-B pre-if post-if pre-A post-A if-string
          (w-rex "\\<\\(if\\|unless\\|while\\|until\\|for\\|foreach\\)\\>"))
     (and (= (char-syntax (preceding-char)) ?w)
@@ -8884,5 +8895,5 @@ do extra unwind via `cperl-unwind-to-safe'."
 
 (provide 'cperl-mode)
 
-;;; arch-tag: 42e5b19b-e187-4537-929f-1a7408980ce6
+;; arch-tag: 42e5b19b-e187-4537-929f-1a7408980ce6
 ;;; cperl-mode.el ends here