[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: address@hidden: links in Help buffer aren'talwayscorrect]
From: |
Kevin Rodgers |
Subject: |
Re: address@hidden: links in Help buffer aren'talwayscorrect] |
Date: |
Mon, 19 Dec 2005 11:22:08 -0800 (PST) |
"Richard M. Stallman" <address@hidden> wrote:
> It looks like this code extracts the list of frame parameter names
> when it is _loaded_. That is inconvenient. Could you
> do that when the function is called for the first time?
...
> replace-regexp is meant for users; could you please write a simple
> while loop instead?
Sure, this version fixes both concerns.
--
Kevin
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
(defvar frame-parameter-docstring-alist nil
"List of (PARAMETER . DOC-STRING) associations.")
(defun default-frame-parameter-docstring-alist ()
"Return the default value of `frame-parameter-docstring-alist'."
(save-excursion
(save-window-excursion
(let ((alist '())
(pop-up-frames nil))
(info "(elisp)Window Frame Parameters")
(goto-char (point-min))
(while (re-search-forward "^`\\(\\sw\\(?:\\sw\\|\\s_\\)*\\)'$" nil t)
(let* ((parameter (intern (match-string 1)))
(infostring
(buffer-substring (1+ (point))
(1- (or (re-search-forward "^`" nil t)
(point-max)))))
(case-fold-search t)
(xref-regexp
"\\(?: (\\|; see \\)?\\*note[ \t\n]*\\(?:[^:]*\\)::[).]")
(xref-or-indent-regexp
(format "\\(%s\\)\\|\\(\n +\\)" xref-regexp))
(docstring
;; delete Info xrefs and indentation, then reformat:
(with-temp-buffer
(insert infostring)
(goto-char (point-min))
(while (re-search-forward xref-or-indent-regexp nil t)
(cond ((and (match-beginning 1) (match-end 1))
(replace-match "" t t))
((and (match-beginning 2) (match-end 2))
(replace-match "\n" t t))))
(fill-region (point-min) (point-max))
(buffer-string))))
(setq alist
(cons (cons parameter docstring)
alist))
;; move to matched backquote at bol:
(backward-char 1)))
(nreverse alist)))))
(defun describe-frame-parameter (parameter &optional frame)
"Display the full documentation of frame PARAMETER (a symbol) in FRAME.
If FRAME is nil, describe the selected frame's parameter value."
(interactive
(let* ((enable-recursive-minibuffers t)
(default-param (symbol-at-point))
;; in Emacs 21.4 there are 41 documented frame parameters; 83
;; is the smallest prime that's at least twice that:
(param-table (let ((table (make-vector 83 0)))
(mapc (lambda (assoc)
(intern (symbol-name (car assoc)) table))
(or frame-parameter-docstring-alist
(setq frame-parameter-docstring-alist
(default-frame-parameter-docstring-alist))))
(mapc (lambda (assoc)
(intern (symbol-name (car assoc)) table))
(frame-parameters nil))
table))
(param-name
(progn
;; make sure the default is a frame parameter:
(setq default-param
(intern-soft (symbol-name default-param) param-table))
;; complete on both documented frame parameters and
;; user-defined parameters that may be set:
(completing-read (if default-param
(format "Describe parameter (default %s): "
default-param)
"Describe parameter: ")
param-table
nil t nil nil
(if default-param (symbol-name default-param))))))
(list (if (equal param-name "")
default-param
(intern param-name)))))
(if (null frame)
(setq frame (selected-frame)))
(if (null parameter)
(message "You did not specify a frame parameter")
(let ((value (frame-parameter frame parameter))
(docstring (cdr (assq parameter frame-parameter-docstring-alist))))
(with-output-to-temp-buffer "*Help*"
(prin1 parameter)
(princ "'s value is ")
(terpri)
(with-current-buffer standard-output
(let ((from (point)))
(pp value)
;; (help-xref-on-pp from (point))
(if (< (point) (+ from 20))
(save-excursion
(goto-char from)
(delete-char -1)))))
(terpri)
(terpri)
(princ "Documentation:")
(terpri)
(if docstring
(princ docstring)
(princ "not documented as a frame parameter."))))))
- Re: address@hidden: links in Help buffer aren'talwayscorrect],
Kevin Rodgers <=