Fix a gdb-mi process filtering issue arising in ansi-color.el.
[bpt/emacs.git] / lisp / help-fns.el
index ed1bd83..ed52be6 100644 (file)
@@ -1,6 +1,6 @@
 ;;; help-fns.el --- Complex help functions -*- lexical-binding: t -*-
 
-;; Copyright (C) 1985-1986, 1993-1994, 1998-2011
+;; Copyright (C) 1985-1986, 1993-1994, 1998-2012
 ;;   Free Software Foundation, Inc.
 
 ;; Maintainer: FSF
@@ -65,7 +65,9 @@
 
 (defun help-split-fundoc (docstring def)
   "Split a function DOCSTRING into the actual doc and the usage info.
-Return (USAGE . DOC) or nil if there's no usage info.
+Return (USAGE . DOC) or nil if there's no usage info, where USAGE info
+is a string describing the argument list of DEF, such as
+\"(apply FUNCTION &rest ARGUMENTS)\".
 DEF is the function whose usage we're looking for in DOCSTRING."
   ;; Functions can get the calling sequence at the end of the doc string.
   ;; In cases where `function' has been fset to a subr we can't search for
@@ -156,12 +158,7 @@ the same names as used in the original source code, when possible."
 (defun help-make-usage (function arglist)
   (cons (if (symbolp function) function 'anonymous)
        (mapcar (lambda (arg)
-                 (if (not (symbolp arg))
-                     (if (and (consp arg) (symbolp (car arg)))
-                         ;; CL style default values for optional args.
-                         (cons (intern (upcase (symbol-name (car arg))))
-                               (cdr arg))
-                       arg)
+                 (if (not (symbolp arg)) arg
                    (let ((name (symbol-name arg)))
                      (cond
                        ((string-match "\\`&" name) arg)
@@ -222,7 +219,7 @@ if the variable `help-downcase-arguments' is non-nil."
 (defun help-do-arg-highlight (doc args)
   (with-syntax-table (make-syntax-table emacs-lisp-mode-syntax-table)
     (modify-syntax-entry ?\- "w")
-    (dolist (arg args doc)
+    (dolist (arg args)
       (setq doc (replace-regexp-in-string
                  ;; This is heuristic, but covers all common cases
                  ;; except ARG1-ARG2
@@ -236,7 +233,8 @@ if the variable `help-downcase-arguments' is non-nil."
                          "\\(?:-[{([<`\"].*?\\)?"; for ARG-{x}, (x), <x>, [x], `x'
                          "\\>")                  ; end of word
                  (help-highlight-arg arg)
-                 doc t t 1)))))
+                 doc t t 1)))
+    doc))
 
 (defun help-highlight-arguments (usage doc &rest args)
   (when (and usage (string-match "^(" usage))
@@ -258,7 +256,7 @@ if the variable `help-downcase-arguments' is non-nil."
               ;; so let's skip over it
               (search-backward "(")
               (goto-char (scan-sexps (point) 1)))))
-        ;; Highlight aguments in the USAGE string
+        ;; Highlight arguments in the USAGE string
         (setq usage (help-do-arg-highlight (buffer-string) args))
         ;; Highlight arguments in the DOC string
         (setq doc (and doc (help-do-arg-highlight doc args))))))
@@ -484,12 +482,14 @@ suitable file is found, return nil."
                  (if (member (event-modifiers (aref key 0)) '(nil (shift)))
                      (push key non-modified-keys)))
                (when remapped
-                 (princ "It is remapped to `")
+                 (princ "Its keys are remapped to `")
                  (princ (symbol-name remapped))
-                 (princ "'"))
+                 (princ "'.\n"))
 
                (when keys
-                 (princ (if remapped ", which is bound to " "It is bound to "))
+                 (princ (if remapped
+                            "Without this remapping, it would be bound to "
+                          "It is bound to "))
                  ;; If lots of ordinary text characters run this command,
                  ;; don't mention them one by one.
                  (if (< (length non-modified-keys) 10)
@@ -709,12 +709,19 @@ it is displayed along with the global value."
              (with-current-buffer standard-output
                (setq val-start-pos (point))
                (princ "value is ")
-               (let ((from (point)))
-                 (terpri)
-                 (pp val)
-                 (if (< (point) (+ 68 (line-beginning-position 0)))
-                     (delete-region from (1+ from))
-                   (delete-region (1- from) from))
+               (let ((from (point))
+                     (line-beg (line-beginning-position))
+                     ;;
+                     (print-rep
+                      (let ((print-quoted t))
+                        (prin1-to-string val))))
+                 (if (< (+ (length print-rep) (point) (- line-beg)) 68)
+                     (insert print-rep)
+                   (terpri)
+                   (pp val)
+                   (if (< (point) (+ 68 (line-beginning-position 0)))
+                       (delete-region from (1+ from))
+                     (delete-region (1- from) from)))
                  (let* ((sv (get variable 'standard-value))
                         (origval (and (consp sv)
                                       (condition-case nil
@@ -730,12 +737,18 @@ it is displayed along with the global value."
                          (delete-region (1- from) from)))))))
            (terpri)
            (when locus
-             (if (bufferp locus)
-                 (princ (format "%socal in buffer %s; "
-                                (if (get variable 'permanent-local)
-                                    "Permanently l" "L")
-                                (buffer-name)))
-               (princ (format "It is a frame-local variable; ")))
+             (cond
+               ((bufferp locus)
+                (princ (format "%socal in buffer %s; "
+                               (if (get variable 'permanent-local)
+                                   "Permanently l" "L")
+                               (buffer-name))))
+               ((framep locus)
+                (princ (format "It is a frame-local variable; ")))
+               ((terminal-live-p locus)
+                (princ (format "It is a terminal-local variable; ")))
+               (t
+                (princ (format "It is local to %S" locus))))
              (if (not (default-boundp variable))
                  (princ "globally void")
                (let ((val (default-value variable)))
@@ -804,7 +817,8 @@ it is displayed along with the global value."
               (when obsolete
                 (setq extra-line t)
                 (princ "  This variable is obsolete")
-                (if (cdr obsolete) (princ (format " since %s" (cdr obsolete))))
+                (if (nth 2 obsolete)
+                    (princ (format " since %s" (nth 2 obsolete))))
                (princ (cond ((stringp use) (concat ";\n  " use))
                             (use (format ";\n  use `%s' instead." (car obsolete)))
                             (t ".")))