(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
(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)
(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
"\\(?:-[{([<`\"].*?\\)?"; 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))
;; 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))))))
(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)))
(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 ".")))