From xemacs-m  Fri Jun 13 23:00:56 1997
Received: from jagor.srce.hr (hniksic@jagor.srce.hr [161.53.2.130])
	by xemacs.org (8.8.5/8.8.5) with ESMTP id XAA21883
	for <xemacs-beta@xemacs.org>; Fri, 13 Jun 1997 23:00:54 -0500 (CDT)
Received: (from hniksic@localhost)
          by jagor.srce.hr (8.8.5/8.8.4)
	  id GAA03294; Sat, 14 Jun 1997 06:00:43 +0200 (MET DST)
To: XEmacs Developers <xemacs-beta@xemacs.org>
Subject: [PATCH] Additional hyper-apropos
X-Attribution: Hrv
X-Face: Mie8:rOV<\c/~z{s.X4A{!?vY7{drJ([U]0O=W/<W*SMo/Mv:58:*_y~ki>xDi&N7XG
        KV^$k0m3Oe/)'e%3=$PCR&3ITUXH,cK>]bci&<qQ>Ff%x_>1`T(+M2Gg/fgndU%k*ft
        [(7._6e0n-V%|%'[c|q:;}td$#INd+;?!-V=c8Pqf}3J
From: Hrvoje Niksic <hniksic@srce.hr>
Date: 14 Jun 1997 06:00:42 +0200
Message-ID: <kigg1ul96l1.fsf@jagor.srce.hr>
Lines: 586
X-Mailer: Gnus v5.4.52/XEmacs 20.3(beta6)

It is now possible to customize from hyper-apropos.  All the faces are 
now prefixed with `hypropos-'; the mode-motion stuff was nixed out.

Also, I've tweaked some more faces -- let me know how you like the
changes, or if you have some suggestions.  This patch applies on top
of my previous patch.


--- lisp/packages/hyper-apropos.el.orig	Fri Jun 13 19:56:43 1997
+++ lisp/packages/hyper-apropos.el	Sat Jun 14 05:42:38 1997
@@ -64,7 +64,11 @@
 (defgroup hyper-apropos nil
   "Hypertext emacs lisp documentation interface."
   :prefix "hypropos-"
-  :group 'docs)
+  :group 'docs
+  :group 'lisp
+  :group 'tools
+  :group 'help
+  :group 'matching)
 
 ;;;###autoload
 (defcustom hypropos-show-brief-docs t
@@ -73,6 +77,15 @@
   :type 'boolean
   :group 'hyper-apropos)
 
+;; I changed this to true because I think it's more useful this way. --ben
+
+(defcustom hypropos-programming-apropos t
+  "*If non-nil, then `hyper-apropos' takes a bit longer and generates more
+output.  If nil, then only functions that are interactive and variables that
+are user variables are found by `hyper-apropos'."
+  :type 'boolean
+  :group 'hyper-apropos)
+
 (defcustom hypropos-shrink-window nil
   "*If non-nil, shrink *Hyper Help* buffer if possible."
   :type 'boolean
@@ -83,50 +96,50 @@
   :type 'boolean
   :group 'hyper-apropos)
 
-;; I changed this to true because I think it's more useful this way. --ben
 
-(defcustom hypropos-programming-apropos t
-  "*If non-nil, then `hyper-apropos' takes a bit longer and generates more
-output.  If nil, then only functions that are interactive and variables that
-are user variables are found by `hyper-apropos'."
-  :type 'boolean
+(defgroup hypropos-faces nil
+  "Faces defined by hyper-apropos."
+  :prefix "hypropos-"
   :group 'hyper-apropos)
 
-(defvar hypropos-ref-buffer)
-(defvar hypropos-prev-wconfig)
-
-(defface hyperlink '((t
-		      (:bold t :foreground "blue")))
-  "Hyper-apropos hyperlinks."
-  :group 'hyper-apropos)
 
-(defface documentation '((((type x))
-			  (:family "courier" :foreground "firebrick"))
-			 (t
-			  (:italic t)))
+(defface hypropos-documentation '((((class color) (background light))
+				   (:foreground "darkred"))
+				  (((class color) (background dark))
+				   (:foreground "gray90")))
   "Hyper-apropos documentation."
-  :group 'hyper-apropos)
+  :group 'hypropos-faces)
 
-(defface major-heading '((t (:bold t)))
+(defface hypropos-hyperlink '((((class color) (background light))
+			       (:foreground "blue4"))
+			      (((class color) (background dark))
+			       (:foreground "lightseagreen"))
+			      (t
+			       (:bold t)))
+  "Hyper-apropos hyperlinks."
+  :group 'hypropos-faces)
+
+(defface hypropos-major-heading '((t (:bold t)))
   "Hyper-apropos major heading."
-  :group 'hyper-apropos)
+  :group 'hypropos-faces)
 
-(defface section-heading '((t (:bold t)))
+(defface hypropos-section-heading '((t (:bold t :italic t)))
   "Hyper-apropos section heading."
-  :group 'hyper-apropos)
+  :group 'hypropos-faces)
 
-(defface heading '((t (:bold t)))
+(defface hypropos-heading '((t (:bold t)))
   "Hyper-apropos heading."
-  :group 'hyper-apropos)
-
-(defface standout '((t (:italic t)))
-  "Hyper-apropos standout face."
-  :group 'hyper-apropos)
+  :group 'hypropos-faces)
 
-(defface warning '((t (:bold t :foreground "red")))
+(defface hypropos-warning '((t (:bold t :foreground "red")))
   "Hyper-apropos warning."
-  :group 'hyper-apropos)
+  :group 'hypropos-faces)
+
 
+;;; Internal variables below this point
+
+(defvar hypropos-ref-buffer)
+(defvar hypropos-prev-wconfig)
 
 (defvar hypropos-help-map
   (let ((map (make-sparse-keymap)))
@@ -144,6 +157,7 @@
     (define-key map "s"     'hypropos-set-variable)
     (define-key map "t"     'hypropos-find-tag)
     (define-key map "l"     'hypropos-last-help)
+    (define-key map "c"     'hypropos-customize-variable)
     (define-key map [button2] 'hypropos-mouse-get-doc)
     (define-key map [button3] 'hypropos-popup-menu)
     ;; for the totally hardcore...
@@ -176,10 +190,10 @@
   "Keybindings for the *Hyper Apropos* buffer.
 This map inherits from `hypropos-help-map.'")
 
-(defvar hypropos-mousable-keymap
-  (let ((map (make-sparse-keymap)))
-    (define-key map [button2] 'hypropos-mouse-get-doc)
-    map))
+;;(defvar hypropos-mousable-keymap
+;;  (let ((map (make-sparse-keymap)))
+;;    (define-key map [button2] 'hypropos-mouse-get-doc)
+;;    map))
 
 (defvar hyper-apropos-mode-hook nil
   "*User function run after hyper-apropos mode initialization.  Usage:
@@ -217,31 +231,32 @@
 	      (hypropos-toggle-programming-flag)
 	    (message "Using last search results"))
 	(error "Be more specific..."))
-    (let (flist vlist)
-      (set-buffer (get-buffer-create hypropos-apropos-buf))
-      (setq buffer-read-only nil)
-      (erase-buffer)
-      (if toggle-apropos
-	  (set (make-local-variable 'hypropos-programming-apropos)
-	       (not (default-value 'hypropos-programming-apropos))))
-      (if (not hypropos-programming-apropos)
-	  (setq flist (apropos-internal regexp 'commandp)
-		vlist (apropos-internal regexp 'user-variable-p))
-	;; #### - add obsolete functions/variables here...
-	;; #### - 'variables' may be unbound !!!
-	(setq flist (apropos-internal regexp 'fboundp)
-	      vlist (apropos-internal regexp 'boundp)))
-      (insert-face (format "Apropos search for: %S\n\n" regexp) 'major-heading)
-      (insert-face "* = command (M-x) or user-variable.\n" 'documentation)
+    (set-buffer (get-buffer-create hypropos-apropos-buf))
+    (setq buffer-read-only nil)
+    (erase-buffer)
+    (if toggle-apropos
+	(set (make-local-variable 'hypropos-programming-apropos)
+	     (not (default-value 'hypropos-programming-apropos))))
+    (let ((flist (apropos-internal regexp
+				   (if hypropos-programming-apropos
+				       #'fboundp
+				     #'commandp)))
+	  (vlist (apropos-internal regexp
+				   (if hypropos-programming-apropos
+				       #'boundp
+				     #'user-variable-p))))
+      (insert-face (format "Apropos search for: %S\n\n" regexp)
+		   'hypropos-major-heading)
+      (insert-face "* = command (M-x) or user-variable.\n"
+		   'hypropos-documentation)
       (insert-face "\
 a = autoloaded, b = byte-compiled, i = internal, l = lambda, m = macro.\n\n"
-		   'documentation)
-      (insert-face "Functions and Macros:\n\n" 'major-heading)
+		   'hypropos-documentation)
+      (insert-face "Functions and Macros:\n\n" 'hypropos-major-heading)
       (hypropos-grok-functions flist)
-      (insert-face "\n\nVariables and Constants:\n\n" 'major-heading)
+      (insert-face "\n\nVariables and Constants:\n\n" 'hypropos-major-heading)
       (hypropos-grok-variables vlist)
-      (goto-char (point-min))
-      ))
+      (goto-char (point-min))))
   (switch-to-buffer hypropos-apropos-buf)
   (hyper-apropos-mode regexp))
 
@@ -266,9 +281,8 @@
 					 ??))
 		       (t ?\ )))
       (insert type (if (commandp fn) "* " "  "))
-      (let ((e (insert-face (format "%S" fn) 'hyperlink)))
-	(set-extent-property e 'mouse-face 'highlight)
-	(set-extent-property e 'keymap hypropos-mousable-keymap))
+      (let ((e (insert-face (format "%S" fn) 'hypropos-hyperlink)))
+	(set-extent-property e 'mouse-face 'highlight))
       (insert-char ?\  (let ((l (- 30 (length (format "%S" fn)))))
 			 (if (natnump l) l 0)))
       (and hypropos-show-brief-docs
@@ -277,7 +291,7 @@
 			    (concat " - "
 				    (substring doc 0 (string-match "\n" doc)))
 			  " Not documented.")
-			'documentation))
+			'hypropos-documentation))
       (insert ?\n))))
 
 (defun hypropos-grok-variables (vars)
@@ -285,9 +299,8 @@
     (dolist (var vars)
       (setq userp (user-variable-p var))
       (insert (if userp " * " "   "))
-      (let ((e (insert-face (format "%S" var) 'hyperlink)))
-	(set-extent-property e 'mouse-face 'highlight)
-	(set-extent-property e 'keymap hypropos-mousable-keymap))
+      (let ((e (insert-face (format "%S" var) 'hypropos-hyperlink)))
+	(set-extent-property e 'mouse-face 'highlight))
       (insert-char ?\  (let ((l (- 30 (length (format "%S" var)))))
 			 (if (natnump l) l 0)))
       (and hypropos-show-brief-docs
@@ -296,7 +309,7 @@
 			    (concat " - " (substring doc (if userp 1 0)
 						     (string-match "\n" doc)))
 			  " - Not documented.")
-			'documentation))
+			'hypropos-documentation))
       (insert ?\n))))
 
 ;; ---------------------------------------------------------------------- ;;
@@ -521,23 +534,23 @@
       (display-buffer hypropos-help-buf))))
 
 (defun hypropos-insert-face (string &optional face)
-  "Insert STRING and fontify some parts with face `hyperlink'."
+  "Insert STRING and fontify some parts with face `hypropos-hyperlink'."
   (let ((beg (point)) end)
-    (insert-face string (or face 'documentation))
+    (insert-face string (or face 'hypropos-documentation))
     (setq end (point))
     (goto-char beg)
     (while (re-search-forward
 	    "`\\([-a-zA-Z0-9_][-a-zA-Z0-9_][-a-zA-Z0-9_.]+\\)'"
 	    end 'limit)
       (let ((e (make-extent (match-beginning 1) (match-end 1))))
-	(set-extent-face e 'hyperlink)
+	(set-extent-face e 'hypropos-hyperlink)
 	(set-extent-property e 'mouse-face 'highlight))
     (goto-char beg)
     (while (re-search-forward
 	    "M-x \\([-a-zA-Z0-9_][-a-zA-Z0-9_][-a-zA-Z0-9_.]+\\)"
 	    end 'limit)
       (let ((e (make-extent (match-beginning 1) (match-end 1))))
-	(set-extent-face e 'hyperlink)
+	(set-extent-face e 'hypropos-hyperlink)
 	(set-extent-property e 'mouse-face 'highlight))))))
 
 (defun hypropos-insert-keybinding (keys string)
@@ -560,10 +573,10 @@
   (aset desc 0 (upcase (aref desc 0))) ; capitalize
   (goto-char (point-max))
   (newline 3) (delete-blank-lines) (newline 2)
-  (hypropos-insert-face desc 'section-heading))
+  (hypropos-insert-face desc 'hypropos-section-heading))
 
 (defun hypropos-insert-value (string symbol val)
-  (insert-face string 'heading)
+  (insert-face string 'hypropos-heading)
   (insert (if (symbol-value symbol)
 	      (if (or (null val) (eq val t) (integerp val))
 		  (prog1
@@ -640,7 +653,7 @@
 	  ;;(setq standard-output (current-buffer))
 	  (setq buffer-read-only nil)
 	  (erase-buffer)
-	  (insert-face (format "`%s'" symbol) 'major-heading)
+	  (insert-face (format "`%s'" symbol) 'hypropos-major-heading)
 	  (insert (format " (buffer: %s, mode: %s)\n"
 			  (buffer-name hypropos-ref-buffer)
 			  local)))
@@ -668,7 +681,10 @@
 					       (bytecode . "compiled Lisp ")
 					       (autoload . "autoloaded Lisp ")
 					       (lambda   . "Lisp "))))
-				  desc)
+				  desc
+				  (if (eq symtype 'autoload)
+				      (format ", (autoloaded from \"%s\")"
+				      (nth 1 newsym))))
 		     local (current-local-map)
 		     global (current-global-map)
 		     obsolete (get symbol 'byte-obsolete-info)
@@ -678,9 +694,6 @@
 		 (goto-char (point-max))
 		 (setq standard-output (current-buffer))
 		 (hypropos-insert-section-heading alias-desc desc)
-		 (and (eq symtype 'autoload)
-		      (insert (format ", (autoloaded from \"%s\")"
-				      (nth 1 newsym))))
 		 (insert ":\n")
 		 (if local
 		     (hypropos-insert-keybinding
@@ -696,9 +709,9 @@
 			      (if (stringp (car obsolete))
 				  (car obsolete)
 				(format "use `%s' instead." (car obsolete))))
-		      'warning))
+		      'hypropos-warning))
 		 (setq beg (point))
-		 (insert-face "arguments: " 'heading)
+		 (insert-face "arguments: " 'hypropos-heading)
 		 (cond ((eq symtype 'lambda)
 			(princ (or (nth 1 newsym) "()")))
 		       ((eq symtype 'bytecode)
@@ -713,7 +726,8 @@
 			(setq doc (substring doc 0 (match-beginning 0))))
 		       ((and (eq symtype 'subr)
 			     (string-match
-			      "[\n\t ]*([^\n\t )]+[\t ]*\\([^\n)]+\\)?)\\(:[\t ]*\\|\n?\\'\\)"
+			      "\
+\[\n\t ]*([^\n\t )]+[\t ]*\\([^\n)]+\\)?)\\(:[\t ]*\\|\n?\\'\\)"
 			      doc))
 			(insert "("
 				(if (match-end 1)
@@ -742,7 +756,9 @@
 				 (and (local-variable-p newsym
 							(current-buffer) t)
 				      'auto-local))
-		     desc (concat (if (user-variable-p newsym)
+		     desc (concat (and (get newsym 'custom-type)
+				       "customizable ")
+				  (if (user-variable-p newsym)
 				      "user variable"
 				    "variable")
 				  (cond ((eq symtype t) ", buffer-local")
@@ -767,6 +783,15 @@
 		 (goto-char (point-max))
 		 (setq standard-output (current-buffer))
 		 (hypropos-insert-section-heading alias-desc desc)
+		 (when (and (user-variable-p newsym)
+			    (get newsym 'custom-type))
+		   (let ((e (make-extent (point-at-bol) (point))))
+		     (set-extent-property e 'mouse-face 'highlight)
+		     (set-extent-property e 'help-echo
+					  (format "Customize %s" newsym))
+		     (set-extent-property
+		      e 'hypropos-custom
+		      `(lambda () (customize-variable (quote ,newsym))))))
 		 (insert ":\n\n")
 		 (setq beg (point))
 		 (if obsolete
@@ -775,7 +800,7 @@
 			      (if (stringp obsolete)
 				  obsolete
 				(format "use `%s' instead." obsolete)))
-		      'warning))
+		      'hypropos-warning))
 		 ;; generally, the value of the variable is short and the
 		 ;; documentation of the variable long, so it's desirable
 		 ;; to see all of the value and the start of the
@@ -786,12 +811,12 @@
 		 (if (and (or (null local-str) (< (length local-str) 69))
 			  (or (null global-str) (< (length global-str) 69)))
 					; 80 cols.  docstrings assume this.
-		     (progn (insert-face "value: " 'heading)
+		     (progn (insert-face "value: " 'hypropos-heading)
 			    (insert (or local-str "is void"))
 			    (if (eq symtype t)
 				(progn
 				  (insert "\n")
-				  (insert-face "default value: " 'heading)
+				  (insert-face "default value: " 'hypropos-heading)
 				  (insert (or global-str "is void"))))
 			    (insert "\n\n")
 			    (hypropos-insert-face doc))
@@ -806,7 +831,7 @@
 		   (if local-str
 		       (progn
 			 (newline 3) (delete-blank-lines) (newline 1)
-			 (insert-face "value: " 'heading)
+			 (insert-face "value: " 'hypropos-heading)
 			 (if hypropos-prettyprint-long-values
 			     (condition-case nil
 				 (let ((pp-print-readably nil)) (pprint local))
@@ -815,7 +840,7 @@
 		   (if global-str
 		       (progn
 			 (newline 3) (delete-blank-lines) (newline 1)
-			 (insert-face "default value: " 'heading)
+			 (insert-face "default value: " 'hypropos-heading)
 			 (if hypropos-prettyprint-long-values
 			     (condition-case nil
 				 (let ((pp-print-readably nil)) (pprint global))
@@ -850,23 +875,38 @@
 	       (save-excursion
 		 (set-buffer hypropos-help-buf)
 		 (setq standard-output (current-buffer))
-		 (hypropos-insert-section-heading "Face:\n\n  ")
-		 (insert-face "ABCDEFHIJKLMNOPQRSTUVWXYZ abcdefhijklmnopqrstuvwxyz 0123456789"
+		 (hypropos-insert-section-heading
+		  (concat "Face"
+			  (when (get symbol 'face-defface-spec)
+			    (let* ((str " (customizable)")
+				   (e (make-extent 1 (length str) str)))
+			      (set-extent-property e 'mouse-face 'highlight)
+			      (set-extent-property e 'help-echo
+						   (format "Customize %s" symbol))
+			      (set-extent-property e 'unique t)
+			      (set-extent-property e 'duplicable t)
+			      (set-extent-property
+			       e 'hypropos-custom
+			       `(lambda () (customize-face (quote ,symbol))))
+			      str))
+			  ":\n\n  "))
+		 (insert-face "\
+ABCDEFHIJKLMNOPQRSTUVWXYZ abcdefhijklmnopqrstuvwxyz 0123456789"
 			      'hypropos-temp-face)
 		 (newline 2)
-		 (insert-face "  Font: " 'heading)
+		 (insert-face "  Font: " 'hypropos-heading)
 		 (insert (format (if (numberp (car font)) "(%s)\n" "%s\n")
 				 (and (cdr font)
 				      (font-instance-name (cdr font)))))
-		 (insert-face "  Foreground: " 'heading)
+		 (insert-face "  Foreground: " 'hypropos-heading)
 		 (insert (format (if (numberp (car fore)) "(%s)\n" "%s\n")
 				 (and (cdr fore)
 				      (color-instance-name (cdr fore)))))
-		 (insert-face "  Background: " 'heading)
+		 (insert-face "  Background: " 'hypropos-heading)
 		 (insert (format (if (numberp (car back)) "(%s)\n" "%s\n")
 				 (and (cdr back)
 				      (color-instance-name (cdr back)))))
-		 (insert-face "  Underline: " 'heading)
+		 (insert-face "  Underline: " 'hypropos-heading)
 		 (insert (format (if (numberp (car undl)) "(%s)\n" "%s\n")
 				 (cdr undl)))
 		 (if doc
@@ -895,7 +935,7 @@
 		    (setq symtype (cdr symtype))
 		  (insert-face (concat "  " (symbol-name (car symtype))
 				       ": ")
-			       'heading)
+			       'hypropos-heading)
 		  (setq symtype (cdr symtype))
 		  (indent-to 32)
 		  (insert (prin1-to-string (car symtype)) "\n"))
@@ -919,54 +959,30 @@
 different variables and functions.  Common commands:
 
 \\{hypropos-help-map}"
-  (setq mode-motion-hook 'hypropos-highlight-lisp-symbol
-	buffer-read-only t
+  (setq buffer-read-only t
 	major-mode	     'hyper-help-mode
 	mode-name	     "Hyper-Help")
   (set-syntax-table emacs-lisp-mode-syntax-table)
+  (hypropos-highlightify)
   (use-local-map hypropos-help-map))
 
-(defun hypropos-highlight-lisp-symbol (event)
-  ;; mostly copied from mode-motion-highlight-internal
-  (let* ((window (event-window event))
-	 (buffer (and window (window-buffer window)))
-	 (point (and buffer (event-point event)))
-	 st en sym highlight-p)
-    (if buffer
-	(progn
-	  (set-buffer buffer)
-	  (if point
-	      (save-excursion
-		(goto-char point)
-		(setq st (save-excursion
-			   (skip-syntax-backward "w_")
-			   (skip-chars-forward "`")
-			   (point))
-		      en (save-excursion
-			   (goto-char st)
-			   (skip-syntax-forward "w_")
-			   (skip-chars-backward ".")
-			   (point))
-		      sym (and (not (eq st en))
-			       (intern-soft (buffer-substring st en)))
-		      highlight-p (and sym
-				       (or (boundp sym)
-					   (fboundp sym))))
-		(if highlight-p
-		    (if mode-motion-extent
-		      (set-extent-endpoints mode-motion-extent st en)
-		    (setq mode-motion-extent (make-extent st en))
-		    (set-extent-property mode-motion-extent 'highlight t))
-		  (and mode-motion-extent
-			 (progn (delete-extent mode-motion-extent)
-				(setq mode-motion-extent nil)))
-		  ))
-	    ;; not over text; zero the extent.
-	    (if (and mode-motion-extent (extent-object mode-motion-extent)
-		     (not (eq (extent-start-position mode-motion-extent)
-			      (extent-end-position mode-motion-extent))))
-		(set-extent-endpoints mode-motion-extent 1 1)))))))
+;; ---------------------------------------------------------------------- ;;
 
+(defun hypropos-highlightify ()
+  (save-excursion
+    (goto-char (point-min))
+    (let ((st (point-min))
+	  sym)
+      (while (not (eobp))
+	(if (zerop (skip-syntax-forward "w_"))
+	    (forward-char 1)
+	  (and (> (- (point) st) 3)
+	       (setq sym (intern-soft (buffer-substring st (point))))
+	       (or (boundp sym)
+		   (fboundp sym))
+	       (set-extent-property (make-extent st (point))
+				    'mouse-face 'highlight)))
+	(setq st (point))))))
 
 ;; ---------------------------------------------------------------------- ;;
 
@@ -1004,11 +1020,14 @@
   "Get the documentation for the symbol the mouse is on."
   (interactive "e")
   (mouse-set-point event)
-  (save-excursion
-    (let ((symbol (hypropos-this-symbol)))
-      (if symbol
-	  (hypropos-get-doc symbol)
-	(error "Click on a symbol")))))
+  (let ((e (extent-at (point) nil 'hypropos-custom)))
+    (if e
+	(funcall (extent-property e 'hypropos-custom))
+      (save-excursion
+	(let ((symbol (hypropos-this-symbol)))
+	  (if symbol
+	      (hypropos-get-doc symbol)
+	    (error "Click on a symbol")))))))
 
 ;; ---------------------------------------------------------------------- ;;
 
@@ -1132,6 +1151,11 @@
 			  str))
 	      (error nil)))))))
 
+(defun hypropos-customize-variable ()
+  (interactive)
+  (let ((var (hypropos-this-symbol)))
+    (customize-variable var)))
+
 ;; ---------------------------------------------------------------------- ;;
 
 (defun hypropos-find-tag (&optional tag-name)
@@ -1198,6 +1222,9 @@
 	 (notjunk (not (null sym)))
 	 (command-p (if (commandp sym) t))
 	 (variable-p (and sym (boundp sym)))
+	 (customizable-p (and variable-p
+			      (get sym 'custom-type)
+			      t))
 	 (function-p (fboundp sym))
 	 (apropos-p (eq 'hyper-apropos-mode
 			(save-excursion (set-buffer (event-buffer event))
@@ -1209,6 +1236,8 @@
 	   (list (concat "Hyper-Help: " name)
 	    (vector "Display documentation" 'hypropos-get-doc   notjunk)
 	    (vector "Set variable"	'hypropos-set-variable	variable-p)
+	    (vector "Customize variable" 'hypropos-customize-variable
+		    customizable-p)
 	    (vector "Show keys for"     'hypropos-where-is      command-p)
 	    (vector "Invoke command"	'hypropos-invoke-fn	command-p)
 	    (vector "Find tag"		'hypropos-find-tag	notjunk)


-- 
Hrvoje Niksic <hniksic@srce.hr> | Student at FER Zagreb, Croatia
--------------------------------+--------------------------------
Which is worse: ignorance or apathy?  Who knows?  Who cares?

