;ELC   
;;; Compiled
;;; in Emacs version 29.3
;;; with all optimizations.



(byte-code "\300\301!\210\300\302!\210\300\303!\210\300\304!\210\300\305!\210\300\306!\210\300\307!\210\300\310!\210\300\311!\210\300\312!\210\300\313!\210\300\314!\210\300\315!\207" [require elisp-refs help help-fns dash s f find-func nadvice info-look edebug trace imenu cc-langs] 2)
(defvar helpful--sym nil nil)
(make-variable-buffer-local 'helpful--sym)
(defvar helpful--callable-p nil nil)
(make-variable-buffer-local 'helpful--callable-p)#@71 The buffer being used when showing inspecting
buffer-local variables.
(defvar helpful--associated-buffer nil (#$ . 529))
(make-variable-buffer-local 'helpful--associated-buffer)#@44 The buffer we were originally called from.
(defvar helpful--start-buffer nil (#$ . 712))
(make-variable-buffer-local 'helpful--start-buffer)#@69 Whether to show a value as a literal, or a pretty interactive
view.
(defvar helpful--view-literal nil (#$ . 858))
(make-variable-buffer-local 'helpful--view-literal)#@168 Whether this is the first time this results buffer has been
displayed.

Nil means that we're refreshing, so we don't want to clobber any
settings changed by the user.
(defvar helpful--first-display t (#$ . 1030))
(byte-code "\300\301!\210\302\303\304\305\306\307\310\311&\210\312\313\314\315\316DD\317\320\321\310\303&\210\312\322\314\315\323DD\324\320\315\310\303&\210\312\325\314\315\326DD\327\320\315\310\303&\207" [make-variable-buffer-local helpful--first-display custom-declare-group helpful nil "A rich help system with contextual information." :link (url-link "https://github.com/Wilfred/helpful") :group help custom-declare-variable helpful-max-buffers funcall function #[0 "\300\207" [5] 1 #1=""] "Helpful will kill the least recently used Helpful buffer\nif there are more than this many.\n\nTo disable cleanup entirely, set this variable to nil. See also\n`helpful-kill-buffers' for a one-off cleanup." :type (choice (const nil) number) helpful-switch-buffer-function #[0 "\300\207" [pop-to-buffer] 1 #1#] "Function called to display the *Helpful* buffer." helpful-set-variable-function #[0 "\301W\203 \302\207\303\207" [emacs-major-version 29 setopt setq] 2 #1#] "Function used by `helpful--set' to interactively set variables."] 8)#@276 Don't highlight code with more than this many characters.

This is currently only used for C code, as lisp highlighting
seems to be more efficient. This may change again in future.

See `this-command' as an example of a large piece of C code that
can make Helpful very slow.
(defconst helpful-max-highlight 5000 (#$ . 2288))#@63 Describe what kind of symbol this is.

(fn SYMBOL CALLABLE-P)
(defalias 'helpful--kind-name #[514 "\211\204 \300\207\301!\203 \302\207\303!\203 \304\207\305!\203 \306\207\307!\205% \310\207" ["variable" commandp "command" macrop "macro" functionp "function" special-form-p "special form"] 4 (#$ . 2618)])#@69 Return a buffer to show help for SYMBOL in.

(fn SYMBOL CALLABLE-P)
(defalias 'helpful--buffer #[514 "p\306\3079\203 \306\310\311\"#\202 \312\"\313!\211\204a \247\203\\ \314 \315\316\203K \211A\262\242r\211q\210	)\317=\203C \211B\262\210\211T\262\202) \266\211\237\262\320S\"\321\322\"\266\323!\262r\211q\210\317 \2109\203\203 \306\310\311\"#\202\204 \312\324\"\203\227 \325\326!\210\327\202\236 \325\326!\210\330)\207" [helpful-max-buffers major-mode helpful--sym helpful--callable-p helpful--start-buffer helpful--associated-buffer format "*helpful %s*" "%s: %s" helpful--kind-name "lambda" get-buffer buffer-list nil 0 helpful-mode -drop -each kill-buffer get-buffer-create helpful--primitive-p make-local-variable comment-start "//" ";" list-buffers-directory] 12 (#$ . 2936)])
(custom-declare-face 'helpful-heading '((t (:weight bold))) "Face used for headings in Helpful buffers.")#@42 Propertize TEXT as a heading.

(fn TEXT)
(defalias 'helpful--heading #[257 "\300\301P\302\303#\207" [propertize "\n" face helpful-heading] 5 (#$ . 3878)])#@66 Given a closure, return an equivalent defun form.

(fn SYM FORM)
(defalias 'helpful--format-closure #[514 "\211AA\211A\262\242\300@;\203  @\262A\262\301\302\303#\262\211\203/ \304BBBB\207\304BBB\207" [nil s-replace "\n(" "\n\\(" defun] 11 (#$ . 4039)])#@195 Pretty-print VALUE.

If VALUE is very big, the user may press \[keyboard-quit] to
gracefully stop the printing. If VALUE is self-referential, the
error will be caught and displayed.

(fn VALUE)
(defalias 'helpful--pretty-print #[257 "\3001 \3011 \302\303!!00\2070\304\305\306A@\"\307\310#\207\304\311\307\310#\207" [(quit) (error) s-trim-right pp-to-string propertize format "(Display error: %s)" face font-lock-comment-face "(User quit during pretty-printing.)"] 6 (#$ . 4317)])#@57 Sort symbols in SYM-LIST alphabetically.

(fn SYM-LIST)
(defalias 'helpful--sort-symbols #[257 "\300\301\"\207" [-sort #[514 "\300!\300!\231\207" [symbol-name] 5 "\n\n(fn IT OTHER)"]] 4 (#$ . 4806)])#@35 

(fn TEXT TYPE &rest PROPERTIES)
(defalias 'helpful--button #[642 "\300!\262\301\302\303\304&\207" [substring-no-properties apply make-text-button nil :type] 10 (#$ . 5014)])#@94 If SYM is an alias, return the underlying symbol.
Return SYM otherwise.

(fn SYM CALLABLE-P)
(defalias 'helpful--canonical-symbol #[514 "\3009\2034 \2034 K9\203! \211\301W\203! K\262\211T\262\202\n \302K!\2039 \303\304K!!\262\210\202: \305!\262\210\207" [0 10 subrp intern subr-name indirect-variable] 6 (#$ . 5203)])#@54 Return all the aliases for SYM.

(fn SYM CALLABLE-P)
(defalias 'helpful--aliases #[514 "\300\"\301C\302\303\304	%!\210\305\242!\207" [helpful--canonical-symbol nil mapatoms make-closure #[257 "\302\203\n \304!\202 \305!\205& \301\306\302\"=\205& \303=?\205& \300\300\242B\240\207" [V0 V1 V2 V3 fboundp boundp helpful--canonical-symbol] 5 "\n\n(fn S)"] helpful--sort-symbols] 11 (#$ . 5538)])#@23 

(fn SYM CALLABLE-P)
(defalias 'helpful--obsolete-info #[514 "9\205 \203 \300\202 \301N\207" [byte-obsolete-info byte-obsolete-variable] 4 (#$ . 5949)])#@23 

(fn SYM CALLABLE-P)
(defalias 'helpful--format-alias #[514 "\300\"\301\302!\303\304\305&\203' \306!\211\203\" \307\310#\207\307\311\"\207\207" [helpful--obsolete-info helpful--button symbol-name helpful-describe-exactly-button symbol callable-p -last-item format "%s (obsolete since %s)" "%s (obsolete)"] 10 (#$ . 6114)])#@70 Indent string S by adding AMOUNT spaces to each line.

(fn S AMOUNT)
(defalias 'helpful--indent-rigidly #[514 "\300\301\302\"r\211q\210\303\304\"\216c\210\305ed#\210\306 *\207" [generate-new-buffer " *temp*" t make-closure #[0 "\301\300!\205	 \302\300!\207" [V0 buffer-name kill-buffer] 2] indent-rigidly buffer-string] 7 (#$ . 6456)])#@71 Return a string describing all the properties of SYMBOL.

(fn SYMBOL)
(defalias 'helpful--format-properties #[257 "\300\3019\205\n \302!\"\303\304\"\305\306\307\"\"\211\205 \310\311\"\207" [-partition 2 symbol-plist -sort #[514 "\211\211A\262\242@\210\300\211\211A\262\242@\210\300\301!\301!\231\207" [nil symbol-name] 11 "\n\n(fn INPUT0 INPUT1)"] mapcar make-closure #[257 "\211\211A\262\242@\301!\302\303\304\305!\306\307#\310\311\"\312!\203+ \302\313\314!\"\202< \315=\203; \302\313\316\300!\"\202< \317$\207" [V0 helpful--pretty-print format "%s\n%s%s" propertize symbol-name face font-lock-constant-face helpful--indent-rigidly 2 byte-code-function-p "\n  %s" helpful--make-disassemble-button ert--test helpful--make-run-test-button ""] 13 "\n\n(fn IT)"] s-join "\n"] 7 (#$ . 6800)])
(define-button-type 'helpful-forget-button 'action 'helpful--forget 'symbol nil 'callable-p nil 'follow-link t 'help-echo "Unbind this function")#@41 Unbind the current symbol.

(fn BUTTON)
(defalias 'helpful--forget #[257 "\300\301\"\300\302\"\303\"\304\305\306#!\205/ \203\" \307!\210\202& \310!\210\311\312#\210\313p!\207" [button-get symbol callable-p helpful--kind-name yes-or-no-p format "Forget %s %s?" fmakunbound makunbound message "Forgot %s %s." kill-buffer] 9 (#$ . 7768)])
(define-button-type 'helpful-c-source-directory 'action 'helpful--c-source-directory 'follow-link t 'help-echo "Set directory to Emacs C source code")#@99 Set `find-function-C-source-directory' so we can show the
source code to primitives.

(fn BUTTON)
(defalias 'helpful--c-source-directory #[257 "\301\302!\303!\304\232\204 \305\304\"\262\306 \207" [find-function-C-source-directory read-directory-name "Path to Emacs source code: " f-filename "src" f-join helpful-update] 5 (#$ . 8272)])
(define-button-type 'helpful-disassemble-button 'action 'helpful--disassemble 'follow-link t 'object nil 'help-echo "Show disassembled bytecode")#@46 Disassemble the current symbol.

(fn BUTTON)
(defalias 'helpful--disassemble #[257 "\300\301\302\"!\207" [disassemble button-get object] 5 (#$ . 8764)])
(define-button-type 'helpful-run-test-button 'action 'helpful--run-test 'follow-link t 'symbol nil 'help-echo "Run ERT test")#@46 Disassemble the current symbol.

(fn BUTTON)
(defalias 'helpful--run-test #[257 "\300\301\302\"!\207" [ert button-get symbol] 5 (#$ . 9049)])
(define-button-type 'helpful-edebug-button 'action 'helpful--edebug 'follow-link t 'symbol nil 'help-echo "Toggle edebug (re-evaluates definition)")#@36 Is SYM a keyboard macro?

(fn SYM)
(defalias 'helpful--kbd-macro-p #[257 "\2119\205 \211K\211;\206 \300!\262\207" [vectorp] 4 (#$ . 9346)])#@68 Does function SYM have its definition patched by edebug?

(fn SYM)
(defalias 'helpful--edebug-p #[257 "\300!\211:\205 \211A:\205 \301!\211:\205 \211@\302=\262\207" [indirect-function -last-item edebug-enter] 5 (#$ . 9495)])#@58 Can we use edebug with SYM?

(fn SYM CALLABLE-P BUF POS)
(defalias 'helpful--can-edebug-p #[1028 "\205 \300\"?\205 \205 \211\207" [helpful--primitive-p] 7 (#$ . 9730)])#@85 Enable edebug when function SYM is called,
or disable if already enabled.

(fn SYM)
(defalias 'helpful--toggle-edebug #[257 "\303!?\304\305\"\211\211A\262\242\211A\262\242@\203F \203F rq\210\212\214~\210b\210\306 \307\310!\n\"-\266\211\205I ?\205I \311!\207\312\313!\207" [edebug-all-forms edebug-all-defs lexical-binding helpful--edebug-p helpful--definition t edebug-read-top-level-form eval eval-sexp-add-defvars kill-buffer user-error "Could not find source for edebug"] 11 (#$ . 9911)])#@52 Toggle edebug for the current symbol.

(fn BUTTON)
(defalias 'helpful--edebug #[257 "\300\301\302\"!\210\303 \207" [helpful--toggle-edebug button-get symbol helpful-update] 5 (#$ . 10427)])
(define-button-type 'helpful-trace-button 'action 'helpful--trace 'follow-link t 'symbol nil 'help-echo "Toggle function tracing")#@53 Toggle tracing for the current symbol.

(fn BUTTON)
(defalias 'helpful--trace #[257 "\300\301\"\302!\203 \303!\266\202 \304!\266\305 \207" [button-get symbol trace-is-traced untrace-function trace-function helpful-update] 4 (#$ . 10754)])
(define-button-type 'helpful-navigate-button 'action 'helpful--navigate 'path nil 'position nil 'follow-link t 'help-echo "Navigate to definition")#@120 Move point to POS in the current buffer.
If narrowing is in effect, widen if POS isn't in the narrowed area.

(fn POS)
(defalias 'helpful--goto-char-widen #[257 "\211eW\204\f \211dV\203 ~\210\211b\207" [] 3 (#$ . 11155)])#@59 Navigate to the path this BUTTON represents.

(fn BUTTON)
(defalias 'helpful--navigate #[257 "\300\301\302\303\"!!\210\304\305\306!#\211\205 \307!\207" [find-file substring-no-properties button-get path get-text-property position marker-buffer helpful--goto-char-widen] 6 (#$ . 11383)])#@86 Return a button that opens PATH and puts point at POS.

(fn TEXT PATH &optional POS)
(defalias 'helpful--navigate-button #[770 "\300\301\302\303&\207" [helpful--button helpful-navigate-button path position] 10 (#$ . 11680)])
(define-button-type 'helpful-buffer-button 'action 'helpful--switch-to-buffer 'buffer nil 'position nil 'follow-link t 'help-echo "Switch to this buffer")#@61 Navigate to the buffer this BUTTON represents.

(fn BUTTON)
(defalias 'helpful--switch-to-buffer #[257 "\300\301\"\300\302\"\303!\210\211\205 \304!\207" [button-get buffer position switch-to-buffer helpful--goto-char-widen] 5 (#$ . 12070)])#@91 Return a button that switches to BUFFER and puts point at POS.

(fn BUFFER &optional POS)
(defalias 'helpful--buffer-button #[513 "\300\301!\302\303\304&\207" [helpful--button buffer-name helpful-buffer-button buffer position] 9 (#$ . 12321)])
(define-button-type 'helpful-customize-button 'action 'helpful--customize 'symbol nil 'follow-link t 'help-echo "Open Customize for this symbol")#@46 Open Customize for this symbol.

(fn BUTTON)
(defalias 'helpful--customize #[257 "\300\301\302\"!\207" [customize-variable button-get symbol] 5 (#$ . 12721)])
(define-button-type 'helpful-associated-buffer-button 'action 'helpful--associated-buffer 'symbol nil 'prompt-p nil 'follow-link t 'help-echo "Change associated buffer")#@193 Read a live buffer name, and return the buffer object.

This is largely equivalent to `read-buffer', but counsel.el
overrides that to include previously opened buffers.

(fn PROMPT PREDICATE)
(defalias 'helpful--read-live-buffer #[514 "\302\303\304 \"\203 \305!\203 \303!\202T 	\203% \305	!\203% \303	!\202T \306\307\306\203O \242\262\310\311\"\204D \310\312\"\204D \266\203\202Q T\262A\262\202) \266\211\262\313\314\315\306\211&!\207" [helpful--associated-buffer helpful--start-buffer -map buffer-name buffer-list buffer-live-p nil 0 s-starts-with-p " " "*" get-buffer completing-read t] 13 (#$ . 13057)])#@79 Change the associated buffer, so we can see buffer-local values.

(fn BUTTON)
(defalias 'helpful--associated-buffer #[257 "\301\302\"\301\303\"\211\203 \304\305\306\307\"\"\266\202 \310\266\311 \207" [helpful--associated-buffer button-get symbol prompt-p helpful--read-live-buffer "View variable in: " make-closure #[257 "\301\300\302!\"\207" [V0 local-variable-p get-buffer] 5 "\n\n(fn BUF-NAME)"] nil helpful-update] 8 (#$ . 13693)])
(define-button-type 'helpful-toggle-button 'action 'helpful--toggle 'symbol nil 'buffer nil 'follow-link t 'help-echo "Toggle this symbol between t and nil")#@51 Toggle the symbol between nil and t.

(fn BUTTON)
(defalias 'helpful--toggle #[257 "\300\301\"\300\302\"r\211\203 \211q\210\211J?L)\210\303 \207" [button-get symbol buffer helpful-update] 5 (#$ . 14302)])
(define-button-type 'helpful-set-button 'action 'helpful--set 'symbol nil 'buffer nil 'follow-link t 'help-echo "Set the value of this symbol")#@44 Set the value of this symbol.

(fn BUTTON)
(defalias 'helpful--set #[257 "\302\303\"\302\304\"\305\"\306\"\203 \307\202 \310!\311\312#\313\314!\211\311\315#M\210\311\316\"\216\317\320\"\210\321\322\323:\204P 9\203T \203T \324!\204T \325\202U \326\n	$	\327\330%)\266\202r\203k q\210\331!)\210\332 \207" [helpful-set-variable-function read-expression-map button-get symbol buffer helpful--sym-value local-variable-p "setq" symbol-name make-closure #[0 "\302\303\304\305B\306\307$\210\310\311!\210\312 b\210\313\314\300\301#Gu\207" [V0 V1 advice--add-function :before-until #[0 "\300\301!\207" [advice--buffer-local eldoc-documentation-function] 2] #[257 "\300\301\"\207" [advice--set-buffer-local eldoc-documentation-function] 4 "\n\n(fn GV--VAL)"] elisp-eldoc-documentation-function nil run-hooks eval-expression-minibuffer-setup-hook minibuffer-prompt-end format "(%s %S "] 5] make-symbol "minibuffer-setup" #[0 "\302\303\300\"\210\301 \207" [V0 V1 remove-hook minibuffer-setup-hook] 3] #[0 "\301\302\300\"\207" [V0 remove-hook minibuffer-setup-hook] 3] add-hook minibuffer-setup-hook read-from-minibuffer "Eval: " format keywordp "(%s %s '%S)" "(%s %s %S)" t read-expression-history eval-expression helpful-update] 14 (#$ . 14660)])
(define-button-type 'helpful-view-literal-button 'action 'helpful--view-literal 'help-echo "Toggle viewing as a literal")#@44 Set the value of this symbol.

(fn BUTTON)
(defalias 'helpful--view-literal #[257 "?\301 \207" [helpful--view-literal helpful-update] 2 (#$ . 16053)])
(define-button-type 'helpful-all-references-button 'action 'helpful--all-references 'symbol nil 'callable-p nil 'follow-link t 'help-echo "Find all references to this symbol")#@81 Find all the references to the symbol that this BUTTON represents.

(fn BUTTON)
(defalias 'helpful--all-references #[257 "\300\301\"\300\302\"\211\204 \303!\207\304!\203 \305!\207\306!\205# \307!\207" [button-get symbol callable-p elisp-refs-variable functionp elisp-refs-function macrop elisp-refs-macro] 5 (#$ . 16387)])
(define-button-type 'helpful-callees-button 'action 'helpful--show-callees 'symbol nil 'source nil 'follow-link t 'help-echo "Find the functions called by this function/macro")#@46 Insert every entry in CALLEES.

(fn CALLEES)
(defalias 'helpful--display-callee-group #[257 "\300!\211\205  \211@\301\302\303!\304\305\306\307&\310\261\210A\266\202\202 \207" [helpful--sort-symbols "  " helpful--button symbol-name helpful-describe-exactly-button symbol callable-p t "\n"] 11 (#$ . 16901)])#@81 Find all the references to the symbol that this BUTTON represents.

(fn BUTTON)
(defalias 'helpful--show-callees #[257 "\301\302!\303\304\"\303\305\"\211;\203 \306!\202 \211\307!\310\311\"\312\313\"\314!\210\315\316 \210\317\320\"c\210\321!\210\203I \322c\210\317\323\"c\210\321!\210eb\210\324 )\207" [inhibit-read-only get-buffer-create "*helpful callees*" button-get symbol source read helpful--callees -filter #[257 "\300\301\"\207" [helpful--primitive-p t] 4 "\n\n(fn SYM)"] -remove #[257 "\300\301\"\207" [helpful--primitive-p t] 4 "\n\n(fn SYM)"] pop-to-buffer t erase-buffer format "Functions called by %s:\n\n" helpful--display-callee-group "\n" "Primitives called by %s:\n\n" helpful-mode] 11 (#$ . 17220)])
(define-button-type 'helpful-manual-button 'action 'helpful--manual 'symbol nil 'follow-link t 'help-echo "View this symbol in the Emacs manual")#@74 Open the manual for the system that this BUTTON represents.

(fn BUTTON)
(defalias 'helpful--manual #[257 "\300\301\"\302\301\303#\207" [button-get symbol info-lookup emacs-lisp-mode] 6 (#$ . 18108)])
(define-button-type 'helpful-describe-button 'action 'helpful--describe 'symbol nil 'follow-link t 'help-echo "Describe this symbol")#@63 Describe the symbol that this BUTTON represents.

(fn BUTTON)
(defalias 'helpful--describe #[257 "\300\301\"\302!\207" [button-get symbol helpful-symbol] 4 (#$ . 18450)])
(define-button-type 'helpful-describe-exactly-button 'action 'helpful--describe-exactly 'symbol nil 'callable-p nil 'follow-link t 'help-echo "Describe this symbol")#@178 Describe the symbol that this BUTTON represents.
This differs from `helpful--describe' because here we know
whether the symbol represents a variable or a callable.

(fn BUTTON)
(defalias 'helpful--describe-exactly #[257 "\300\301\"\300\302\"\211\203 \303!\207\304!\207" [button-get symbol callable-p helpful-callable helpful-variable] 5 (#$ . 18795)])
(define-button-type 'helpful-info-button 'action 'helpful--info 'info-node nil 'follow-link t 'help-echo "View this Info node")#@63 Describe the symbol that this BUTTON represents.

(fn BUTTON)
(defalias 'helpful--info #[257 "\300\301\302\"!\207" [info button-get info-node] 5 (#$ . 19285)])
(define-button-type 'helpful-shortdoc-button 'action 'helpful--shortdoc 'info-node nil 'follow-link t 'help-echo "View this Shortdoc group")#@63 Describe the symbol that this BUTTON represents.

(fn BUTTON)
(defalias 'helpful--shortdoc #[257 "\300\301\302\"\301\303\"\"\207" [shortdoc-display-group button-get shortdoc-group symbol] 6 (#$ . 19592)])#@101 If the first line is a standalone sentence, ensure we have a
blank line afterwards.

(fn DOCSTRING)
(defalias 'helpful--split-first-line #[257 "\300!\211@G\301V\205 A@\302\303\"\203, \211;\203, \211\304\232\204, \305\306\307\304A#\"\207\207" [s-lines 1 s-ends-with-p "." "" s-join "\n" -cons*] 10 (#$ . 19805)])#@125 Given a symbol name from a docstring, convert to a button (if
bound) or else highlight.

(fn SYM-NAME BEFORE-TXT AFTER-TXT)
(defalias 'helpful--propertize-sym-ref #[771 "\300!\301\302\"\203 \303\304\305#\207\306!\203( \307\310\227\"\203( \311\312\313\314\315&\207\316!\203P \317\320\227\"\204F \307\321\227\"\204F \307\322\227\"\203P \311\312\313\314\323&\207\306!\204\\ \316!\203c \311\324\313$\207\325\326\327#\203n \207\303\304\330#\207" [intern s-matches-p ":\\_<\\(?:\\sw\\|\\s_\\)+?\\_>" propertize face font-lock-builtin-face boundp s-ends-with-p "variable " helpful--button helpful-describe-exactly-button symbol callable-p nil fboundp s-starts-with-p " command" "command " "function " t helpful-describe-button get-text-property 0 button font-lock-constant-face] 11 (#$ . 20132)])#@66 Convert info references in DOCSTRING to buttons.

(fn DOCSTRING)
(defalias 'helpful--propertize-info #[257 "\300\301\302\303\211%\207" [replace-regexp-in-string "\\(\\<[Ii]nfo[[:space:]]+\\)\\(\\(?:anchor\\|node\\)[[:space:]]+\\)['`‘]\\([^'’]+\\)['’]" #[257 "\300\301\"\300\302\"\300\303\"\304 \305\306\"\216\307\310\"\204 \311P\262)\210\312\313\314$Q\207" [match-string 1 2 3 match-data make-closure #[0 "\301\300\302\"\207" [V0 set-match-data t] 3] string-match "^([^)]+)" "(emacs)" helpful--button helpful-info-button info-node] 11 "\n\n(fn IT)"] t] 7 (#$ . 20951)])#@241 Return all the keys and commands in KEYMAP.
Flattens nested keymaps and follows remapped commands.

Returns a list of pairs (KEYCODES COMMAND), where KEYCODES is a
vector suitable for `key-description', and COMMAND is a smbol.

(fn KEYMAP)
(defalias 'helpful--keymap-keys #[257 "\2119\203 \300!\203 \301K!\203 \302K!\207\2119\204- \303!\204- \211;\204- \304!\2032 \305DC\207\211@;\203= \302A!\207\306CA\211\203\204 \211@\211:\203S \211@\307=\204} \211:\203o \211\211A\262\242\310\302!\311\312	#\"\266\202} \313!\203} \314\311\315\"\"\210A\266\202\202A \210\211\316\317\320\242#\240\210\211\242\237\207" [fboundp keymapp helpful--keymap-keys functionp vectorp [] nil menu-bar -each make-closure #[257 "\211\211A\262\242@\301\302\303\300!\"D\301\242B\240\207" [V0 V1 vconcat vector] 8 "\n\n(fn INPUT0)"] char-table-p map-char-table #[514 "\301\302!\303\304\300#\"\207" [V0 -each helpful--keymap-keys make-closure #[257 "\211\211A\262\242@\301\302\303\300!\"D\301\242B\240\207" [V0 V1 vconcat vector] 8 "\n\n(fn INPUT0)"]] 8 "\n\n(fn KEYCODE VALUE)"] -map-when #[257 "\211\211A\262\242@\210\300G\301V\205 \302\234\303=\207" [nil 1 0 remap] 6 "\n\n(fn INPUT0)"] #[257 "\211\211A\262\242@\301\302\234\303#D\207" [global-map where-is-internal 1 t] 8 "\n\n(fn INPUT0)"]] 12 (#$ . 21547)])#@90 Given a list value assigned to a hook, format it with links to functions.

(fn HOOK-VAL)
(defalias 'helpful--format-hook #[257 "\300\301\"\302\303\304\305\"\"\207" [mapcar #[257 "\2119\203 \300!\203 \301\302!\303\304\305\306&\207\307\310!!\207" [fboundp helpful--button symbol-name helpful-describe-exactly-button symbol callable-p t helpful--syntax-highlight helpful--pretty-print] 8 "\n\n(fn IT)"] format "(%s)" s-join "\n "] 7 (#$ . 22880)])#@29 Format KEYMAP.

(fn KEYMAP)
(defalias 'helpful--format-keymap #[257 "\300!\301\302\"\301\303\"\304\305\301\306\"B!\307\310\311\"\"\301\312\"\307\313\"\301\314\315\"\"\316\317\320\321\"\"\207" [helpful--keymap-keys -map -first-item key-description -max 0 length mapcar make-closure #[257 "\301\300T\302#\207" [V0 s-pad-right " "] 5 "\n\n(fn IT)"] #[257 "\211A@\207" [] 2 "\n\n(fn INPUT0)"] #[257 "\2119\203 \300\301!\302\303$\207\211;\204 \304!\203 \305\207\306\207" [helpful--button symbol-name helpful-describe-button symbol vectorp "Keyboard Macro" "#<anonymous-function>"] 6 "\n\n(fn IT)"] #[257 "\211\211A\262\242\300\301#\207" [format "%s %s"] 7 "\n\n(fn INPUT0)"] -zip-pair s-join "\n" -sort string<] 14 (#$ . 23339)])#@69 Replace all the \[ references in STR with buttons.

(fn STR KEYMAP)
(defalias 'helpful--format-commands #[514 "\300\301\302\303\"\304\211%\207" [replace-regexp-in-string "\\\\\\[\\([^]]+\\)]" make-closure #[257 "	\302Y\203\n \303\202 \304\305\306\"\307!\310\300\311#\211\203! \312!\202% \313\314\"\315\316\317\320\311\321\f&\207" [V0 emacs-major-version 28 help-key-binding button match-string 1 intern where-is-internal t key-description format "M-x %s" helpful--button helpful-describe-exactly-button symbol callable-p face] 15 "\n\n(fn IT)"] t] 8 (#$ . 24092)])#@127 Return up to N chars before POS in the current buffer.
The string may be shorter than N or empty if out-of-range.

(fn POS N)
(defalias 'helpful--chars-before #[514 "eZ]{\207" [] 5 (#$ . 24676)])#@126 Return up to N chars after POS in the current buffer.
The string may be shorter than N or empty if out-of-range.

(fn POS N)
(defalias 'helpful--chars-after #[514 "d\\^{\207" [] 6 (#$ . 24881)])#@167 Convert command key references and keymap references
in DOCSTRING to buttons.

Emacs uses \= to escape \[ references, so replace that
unescaping too.

(fn DOCSTRING)
(defalias 'helpful--format-command-keys #[257 "\300\301\302\303\"r\211q\210\304\305\"\216c\210eb\210m\204,\306\307!\203G `\300u\210\310\307\300\303#\300\203@ {\262|\210\311\312\313#c\266\202 \314u\266\202 \306\315!\203Y ``\316\\|\210\314u\210\202 \306\317!\203\266 `\310\320\300\303#\211\205n TS{\211\204z Tb\266\202 \321\317\"\203\211 Tb\266\202 \321\322\"\203\237 |\210\323\"c\266\202 \324\325\"\326\325\"|\210\327#c\266\202 \306\330!\203\324 \331\332!\331\314!``G\\|\210\333!J\262\266\202 \306\334!\203\f\331\332!\331\314!\3351\354 \333!J0\202\356 \210\300``G\\|\210\211\203\336!c\266\202 \337\340\"c\266\202 \306\341!\203&\331\332!``G\\|\210\323\"c\266\202 \314u\210\202 \342 *\207" [nil generate-new-buffer " *temp*" t make-closure #[0 "\301\300!\205	 \302\300!\207" [V0 buffer-name kill-buffer] 2] looking-at "\"" search-forward s-replace "\\" "\\\\" 1 "\\\\=" 2 "`" "'" s-contains-p "\\[" helpful--format-commands helpful--chars-before 10 helpful--chars-after helpful--propertize-sym-ref "\\\\<\\([^>]+\\)>\n?" match-string 0 intern "\\\\{\\([^}]+\\)}" (error) helpful--format-keymap format "Keymap %s is not currently defined." "\\\\\\[\\([^]]+\\)]" buffer-string] 12 (#$ . 25085)])#@67 Replace cross-references with links in DOCSTRING.

(fn DOCSTRING)
(defalias 'helpful--format-docstring #[257 "\300\301\302\303\304\305!!!!!!\207" [s-trim helpful--format-command-keys helpful--propertize-bare-links helpful--propertize-links helpful--propertize-info helpful--split-first-line] 8 (#$ . 26511)])
(define-button-type 'helpful-link-button 'action 'helpful--follow-link 'follow-link t 'help-echo "Follow this link")#@61 Convert URL links in docstrings to buttons.

(fn DOCSTRING)
(defalias 'helpful--propertize-links #[257 "\300\301\302#\207" [replace-regexp-in-string "URL `\\(.*?\\)'" #[257 "\300\301\"\302\303\304\305$P\207" [match-string 1 "URL " helpful--button helpful-link-button url] 8 "\n\n(fn MATCH)"]] 5 (#$ . 26944)])#@61 Convert URL links in docstrings to buttons.

(fn DOCSTRING)
(defalias 'helpful--propertize-bare-links #[257 "\300\301\302#\207" [replace-regexp-in-string "\\(\\`\\|[[:space:]]\\|<\\)\\(https?://[^[:space:]]+?\\)\\([).>]?\\(?:[[:space:]]\\|\\'\\|>\\)\\)" #[257 "\300\301\"\300\302\"\300\303\"\304\305\306$Q\207" [match-string 1 2 3 helpful--button helpful-link-button url] 10 "\n\n(fn MATCH)"]] 5 (#$ . 27263)])#@50 Follow the URL specified by BUTTON.

(fn BUTTON)
(defalias 'helpful--follow-link #[257 "\300\301\302\"!\207" [browse-url button-get url] 5 (#$ . 27688)])#@197 Highlighting functions that are safe to run in a temporary buffer.
This is used in `helpful--syntax-highlight' to support extra
highlighting that the user may have configured in their mode
hooks.
(defconst helpful--highlighting-funcs '(ert--activate-font-lock-keywords highlight-quoted-mode rainbow-delimiters-mode) (#$ . 27849))#@77 Return a propertized version of SOURCE in MODE.

(fn SOURCE &optional MODE)
(defalias 'helpful--syntax-highlight #[513 "\211\204 \304\262GW\204 \211\304=\203f \305\306\307\"r\211q\210\310\311\"\216c\210\312\301!\210\307 )\210\313\n\211\203F \211@\211J\314\"\262\210A\266\202\2020 \210\315\"\262\316\317\"\266\320\321!\203_ \321 \210\202b \322 \210\323 *\207\324\325\326\327#\330\331\332\333\300\334\313&\324\335\326\327#R\207" [helpful-max-highlight delay-mode-hooks delayed-mode-hooks helpful--highlighting-funcs emacs-lisp-mode generate-new-buffer " *temp*" t make-closure #[0 "\301\300!\205	 \302\300!\207" [V0 buffer-name kill-buffer] 2] make-local-variable nil append -intersection -map funcall fboundp font-lock-ensure font-lock-fontify-buffer buffer-string propertize "// Skipping highlighting due to " face font-lock-comment-face helpful--button "helpful-max-highlight" helpful-describe-exactly-button symbol callable-p ".\n"] 10 (#$ . 28184)])#@119 Return the source code of SYM.
If the source code cannot be found, return the sexp used.

(fn SYM CALLABLE-P BUF POS)
(defalias 'helpful--source #[1028 "\3022\215 9\204 \303\302\"\210\304\203\200 \203\200 rq\210\212\214b\210\305\"\203K \204K \306 \262\307 p\310\311#\216\312!\210\313 )\266\304u\210`}\210\202R \314\315\314!)\210e\262\316ed\"+\262\317!\262\211\203{ \320!\203{ \321\322\320!\323\324\314&\262\303\302\"\210\210\205\214 \303\302\325!\"0\207" [emacs-lisp-mode-syntax-table parse-sexp-ignore-comments source throw nil helpful--primitive-p line-beginning-position syntax-table make-closure #[0 "r\300q\210\302\301!)\207" [V0 V1 set-syntax-table] 2] set-syntax-table forward-list t narrow-to-defun buffer-substring-no-properties s-trim-right buffer-file-name propertize helpful-path helpful-pos helpful-pos-is-start indirect-function] 13 (#$ . 29163)])#@86 Return non-nil if shortdoc.el is available and SYM is in a shortdoc group.

(fn SYM)
(defalias 'helpful--has-shortdoc-p #[257 "\300\301!\205	 \302!\207" [featurep shortdoc shortdoc-function-groups] 3 (#$ . 30063)])#@55 Return non-nil if SYM is in an Info manual.

(fn SYM)
(defalias 'helpful--in-manual-p #[257 "\300\301K\302\303\"\216\301M\210\304\305\306\")\266\202\307\310!\211\203 \311!\210\210\312\"\206* \313\"\207" [#[385 "\300\207" [nil] 3 "\n\n(fn FORMAT-STRING &rest ARGS)"] message make-closure #[0 "\301\300M\207" [V0 message] 2] info-lookup->completions symbol emacs-lisp-mode get-buffer " temp-info-look" kill-buffer assoc assoc-string] 6 (#$ . 30284)])#@87 If SYM has version information, format and return it.
Return nil otherwise.

(fn SYM)
(defalias 'helpful--version-info #[257 "\2119\205- \211\301N\302N\211\203\" \303\304\242\206 \305\243\206 \305#\202* \205* \303\306\")\262\207" [emacs-version custom-package-version custom-version format "This variable was added, or its default value changed, in %s version %s." "unknown" "This variable was added, or its default value changed, in Emacs %s."] 6 (#$ . 30746)])#@204 Find the absolute path for the source of LIBRARY-NAME.

LIBRARY-NAME takes the form "foo.el" , "foo.el" or
"src/foo.c".

If .elc files exist without the corresponding .el, return nil.

(fn LIBRARY-NAME)
(defalias 'helpful--library-path #[257 "\301!\302\235\203 \303\304!\"\262\3051 \306!0\207\210\307\207" [find-function-C-source-directory f-ext ("c" "rs") f-expand f-parent (error) find-library-name nil] 5 (#$ . 31224)])#@95 Try to fully macroexpand FORM.
If it fails, attempt to partially macroexpand FORM.

(fn FORM)
(defalias 'helpful--macroexpand-try #[257 "\3002& \3011 \302\300\303!\"0\210\202 \210\3041# \302\300\305!\"0\210\202$ \210\2110\207" [result (error) throw macroexpand-all (error) macroexpand-1] 5 (#$ . 31659)])#@93 Walk TREE, applying PRED to every subtree.
Return t if PRED ever returns t.

(fn PRED TREE)
(defalias 'helpful--tree-any-p #[514 "\30027 \211C\211\2034 \211A\262\242!\203 \301\300\302\"\266\202 \211:\2030 \211@B\262\211AB\262\210\202 \210\3030\207" [found throw t nil] 7 (#$ . 31973)])#@107 Search BUF for the definition of SYM by macroexpanding
interesting forms in BUF.

(fn BUF SYM CALLABLE-P)
(defalias 'helpful--find-by-macroexpanding #[771 "\3002@ rq\210\212eb\210\3011< \302p!\303\304\"\303\305\"\306!\262\307\203) \202* \"\2037 \310\300\311`\312\"\"\210\266\202 *\210\3130\207" [found (end-of-file) read make-closure #[257 "\211\242\301=\205\f \211A\242\300=\207" [V0 defvar] 3 "\n\n(fn SEXP)"] #[257 "\211\242\301=\205 \211A\242\302\300D\232\207" [V0 defalias quote] 4 "\n\n(fn SEXP)"] helpful--macroexpand-try helpful--tree-any-p throw scan-sexps -1 nil] 11 (#$ . 32277)])#@202 Return a list (BUF OPENED) where BUF is a buffer visiting PATH.
If a buffer already exists, return that. If not, open PATH with
the `emacs-lisp-mode' syntax table active but skip any hooks.

(fn PATH)
(defalias 'helpful--open-if-needed #[257 "\304 \305\211\211\211\305\306!)\262\307\"\2045 \310\262\311\312\"\203+ \313 \262\314!\210rq\210\315!)\266*D\207" [enable-local-variables find-file-hook auto-mode-alist emacs-lisp-mode-syntax-table buffer-list nil find-file-noselect -contains-p t s-ends-with-p ".c" make-syntax-table c-populate-syntax-table set-syntax-table] 8 (#$ . 32887)])#@299 Return a list (BUF POS OPENED) where SYM is defined.

BUF is the buffer containing the definition. If the user wasn't
already visiting this buffer, OPENED is t and callers should kill
the buffer when done.

POS is the position of the start of the definition within the
buffer.

(fn SYM CALLABLE-P)
(defalias 'helpful--definition #[514 "\301\"\302\211\211\211\211\204 \203 \303\304!\2109\2039 \203* \305!A\262\2029 \306\307\"\2067 \310\311\"\262\203B \312!\2629\204O \313!\204\375 \203\222 \203\222 \203\375 \314!\211A\262\242@\262\266\203rq\210\212\214~\210\315\302#A+\262\203\375 \204\375 \316	\317#\262\202\375 \203\271 \320N\211\203\265 \211:\203\251 \211@\202\252 \211\321!\262\322!\262\210\210\202\375 \204\375 \203\375 \314!\211A\262\242@\262\211\262rq\210\212\3231\367 \3241\360 \325	\"A\211\26200\210\202\372 0\302\266\202\372 \302\266*\266E\207" [find-function-C-source-directory helpful--primitive-p nil cl--assertion-failed (or find-function-C-source-directory (not primitive-p)) find-function-library symbol-file defvar help-C-file-name var helpful--library-path functionp helpful--open-if-needed find-function-search-for-symbol helpful--find-by-macroexpanding t edebug marker-buffer marker-position (error) (search-failed) find-variable-noselect] 14 (#$ . 33496)])#@87 Return all the buffer positions of references to SYM in BUF.

(fn SYM CALLABLE-P BUF)
(defalias 'helpful--reference-positions #[771 "\300C\301\302#\"\211@\211\211A\262\242\303\304\305\"\207" [elisp-refs--search-1 make-closure #[257 "\302\301\300\203 \303\202\f \304#\207" [V0 V1 elisp-refs--read-and-find elisp-refs--function-p elisp-refs--variable-p] 5 "\n\n(fn BUF)"] nil -map #[257 "\211A\211A\262\242@\210\300\207" [nil] 5 "\n\n(fn INPUT0)"]] 11 (#$ . 34854)])#@52 Return all keymaps defined in this Emacs instance.
(defalias 'helpful--all-keymap-syms #[0 "\300C\301\302\303\"!\210\211\242\207" [nil mapatoms make-closure #[257 "\301!\205 \302J!\205 \300\300\242B\240\207" [V0 boundp keymapp] 4 "\n\n(fn SYM)"]] 5 (#$ . 35337)])#@97 Return all the key sequences of COMMAND-SYM in KEYMAP.

(fn COMMAND-SYM KEYMAP GLOBAL-KEYCODES)
(defalias 'helpful--key-sequences #[771 "\301\302\303$\304!\211\205 \301C\302\303$=?\205 \305\306\302\307\203I \211A\262\242\310\"\204A \310\"\204A \211B\262\210\211T\262\202\" \266\211\237\262\"\207" [global-map where-is-internal nil t keymap-parent -map key-description 0 -contains-p] 16 (#$ . 35612)])#@427 Return a list of pairs listing keymap names that contain COMMAND-SYM,
along with the keybindings in each keymap.

Keymap names are typically variable names, but may also be
descriptions of values in `minor-mode-map-alist'.

We ignore keybindings that are menu items, and ignore keybindings
from parent keymaps.

`widget-global-map' is also ignored as it generally contains the
same bindings as `global-map'.

(fn COMMAND-SYM)
(defalias 'helpful--keymaps-containing #[257 "\302 \303\304\"\305C\306\307$\306C\303\310\311	$\312\"\"\210\303\310\313\n%	\"\210\211\242\207" [global-map minor-mode-map-alist helpful--all-keymap-syms -map symbol-value where-is-internal nil t make-closure #[257 "\211\211A\262\242\303\302\301#\211\205! \304=?\205! \300\305!B\300\242B\240\207" [V0 V1 V2 helpful--key-sequences widget-global-map symbol-name] 7 "\n\n(fn INPUT0)"] -zip-pair #[257 "\211\211A\262\242\304!\205* \302>?\205* \305\303\301#\211\205( \300\306\307\"B\300\242B\240\262\207" [V0 V1 V2 V3 keymapp helpful--key-sequences format "minor-mode-map-alist (%s)"] 8 "\n\n(fn INPUT0)"]] 12 (#$ . 36045)])#@107 Given two alists mapping symbols to lists, return a single
alist with the lists concatenated.

(fn L1 L2)
(defalias 'helpful--merge-alists #[514 "\300\301\"\300\301\"\302\"\303\304\305\"\"\300\304\306\"\"\307\"\207" [-map -first-item -difference mapcar make-closure #[257 "\301\300\"\207" [V0 assoc] 4 "\n\n(fn IT)"] #[257 "\211\211A\262\242\211\301\302\300\"A\"B\207" [V0 append assoc] 9 "\n\n(fn INPUT0)"] append] 10 (#$ . 37172)])#@197 Return a list of pairs mapping keymap symbols to the
keybindings for COMMAND-SYM in each keymap.

Includes keybindings for aliases, unlike
`helpful--keymaps-containing'.

(fn COMMAND-SYM ALIASES)
(defalias 'helpful--keymaps-containing-aliases #[514 "B\300\301\"\302\303\"\207" [-map helpful--keymaps-containing -reduce helpful--merge-alists] 7 (#$ . 37630)])#@72 Describe all the keys that call COMMAND-SYM.

(fn COMMAND-SYM ALIASES)
(defalias 'helpful--format-keys #[514 "\301\211\302\"\303\203] \211A\262\242\211\211A\262\242\211\203T \211@\304\305\306\307\310#\311Y\2034 \306\307\312#\2025 #\313=\203F \211	B\262	\210\202M \211\nB\262\n\210A\266\202\202 \266\211T\262\202 \266\314\315\"\262\314\315\"\262\316\"\211\203x \317\320\"\207\321\207" [emacs-major-version nil helpful--keymaps-containing-aliases 0 format "%s %s" propertize face font-lock-variable-name-face 28 help-key-binding global-map -sort string< append s-join "\n" "This command is not in any keymaps."] 18 (#$ . 37998)])#@126 Find position POS in BUF, and return the name of the outer sexp,
along with its position.

Moves point in BUF.

(fn BUF POS)
(defalias 'helpful--outer-sexp #[514 "rq\210\211b\210\300 \3018\211\203 \211@b\210\266`\302\303\304!\")D\207" [syntax-ppss 9 -take 2 read] 7 (#$ . 38660)])#@112 Return an alist of the count of each value in ITEMS.
E.g. (x x y z y) -> ((x . 2) (y . 2) (z . 1))

(fn ITEMS)
(defalias 'helpful--count-values #[257 "\300\211\203) \211@\301\"\211\203 \211AT\241\266\202\" \302BB\262\210A\266\202\202 \237\207" [nil assoc 1] 7 (#$ . 38952)])#@120 Given advised function SYM, return the function object
without the advice. Assumes function has been loaded.

(fn SYM)
(defalias 'helpful--without-advice #[257 "\300\301!!\207" [advice--cd*r advice--symbol-function] 4 (#$ . 39245)])#@52 Does SYM have advice associated with it?

(fn SYM)
(defalias 'helpful--advised-p #[257 "\2119\205\n \300\301!!\207" [advice--p advice--symbol-function] 4 (#$ . 39484)])#@93 Given a 'head' (the first two symbols of a sexp) format and
syntax highlight it.

(fn HEAD)
(defalias 'helpful--format-head #[257 "\211\211A\262\242@\211:\203 \211@\300=\203 \301\302A@\"\202\" \301\303\"\301\304#\305!\207" [quote format "'%S" "%S" "(%s %s ...)" helpful--syntax-highlight] 9 (#$ . 39659)])#@130 Return a syntax-highlighted version of HEAD, with a link
to its source location.

(fn HEAD LONGEST-HEAD REF-COUNT POSITION PATH)
(defalias 'helpful--format-reference #[1285 "\300\301\211\302V\203 \303\202 \304#\305\300\306\307\310\311\f!#\305\312\313##\314\315%\207" [format "%d reference%s" 1 "s" "" propertize "%s %s" s-pad-right " " helpful--format-head face font-lock-comment-face helpful-path helpful-pos] 14 (#$ . 39981)])#@150 Given a list of outer sexps, format them for display.
POSITION-HEADS takes the form ((123 (defun foo)) (456 (defun bar))).

(fn POSITION-HEADS PATH)
(defalias 'helpful--format-position-heads #[514 "\300\301\302\301\303\"\"!\304\305\301\306\307#\310!\"\"\207" [-max -map length #[257 "\211A@\300!\207" [helpful--format-head] 4 "\n\n(fn INPUT0)"] s-join "\n" make-closure #[257 "\211\211A\262\242\211A\262\242@\302\300\301%\207" [V0 V1 helpful--format-reference] 11 "\n\n(fn INPUT0)"] helpful--count-values] 10 (#$ . 40426)])#@55 Return t if SYM is defined in C.

(fn SYM CALLABLE-P)
(defalias 'helpful--primitive-p #[514 "\300\301!\203\n \301\202 \302\203 \303!\203 \211\304!!\207\203% \211\305!!\207\306\307\"\211\310=\206B \211;\205B \311!\211\312\232\206@ \211\313\232\262\207" [fboundp subr-primitive-p subrp helpful--advised-p helpful--without-advice indirect-function find-lisp-object-file-name defvar C-source file-name-extension "c" "rs"] 7 (#$ . 40972)])#@47 Return the value of SYM in BUF.

(fn SYM BUF)
(defalias 'helpful--sym-value #[514 "\211\203\f r\211q\210J)\207\300!\203 \301!\207J\207" [local-variable-if-set-p default-value] 4 (#$ . 41423)])#@43 Insert section break into helpful buffer.
(defalias 'helpful--insert-section-break #[0 "\300c\207" ["\n\n"] 1 (#$ . 41626)])#@70 When `helpful--sym' is a generic method, insert its implementations.
(defalias 'helpful--insert-implementations #[0 "\301\302\303!\205: \304\305\306\"r\211q\210\307\310\"\216\303!\210eb\210\311\312\301\306#\203) `d{\262*\210\211\205: \313 \210\314\315!\316!\261\207" [helpful--sym nil fboundp cl--generic-describe generate-new-buffer " *temp*" t make-closure #[0 "\301\300!\205	 \302\300!\207" [V0 buffer-name kill-buffer] 2] re-search-forward "^Implementations:$" helpful--insert-section-break helpful--heading "Implementations" s-trim] 7 (#$ . 41756)])#@79 Calculate references for SYM in SOURCE-PATH.

(fn SYM CALLABLE-P SOURCE-PATH)
(defalias 'helpful--calculate-references #[771 "\211\205\" \302\"\303!?\205 \304	#\305\306\307\"\"\310!\210\266\203\207" [helpful--sym helpful--callable-p helpful--primitive-p elisp-refs--contents-buffer helpful--reference-positions mapcar make-closure #[257 "\301\300\"\207" [V0 helpful--outer-sexp] 4 "\n\n(fn IT)"] kill-buffer] 10 (#$ . 42322)])#@51 Make a line for shortdoc groups of SYM.

(fn SYM)
(defalias 'helpful--make-shortdoc-sentence #[257 "\300\301!\2050 \302\303\304!\"\211\205. \211G\305U\203 \306\307@\"\202. \306\310\311\312\313!\"\314\315!@Q\"\262\207" [featurep shortdoc mapcar #[257 "\300\301!\302\303$\207" [helpful--button symbol-name helpful-shortdoc-button shortdoc-group] 6 "\n\n(fn IT)"] shortdoc-function-groups 1 format "Other relevant functions are documented in the %s group." "Other relevant functions are documented in the %s groups." s-join ", " butlast " and " last] 8 (#$ . 42765)])#@39 Make manual button for SYM.

(fn SYM)
(defalias 'helpful--make-manual-button #[257 "\300\301\302\303$\207" [helpful--button "View in manual" helpful-manual-button symbol] 6 (#$ . 43343)])#@56 Make toggle button for SYM in BUFFER.

(fn SYM BUFFER)
(defalias 'helpful--make-toggle-button #[514 "\300\301\302\303\304&\207" [helpful--button "Toggle" helpful-toggle-button symbol buffer] 9 (#$ . 43537)])#@53 Make set button for SYM in BUFFER.

(fn SYM BUFFER)
(defalias 'helpful--make-set-button #[514 "\300\301\302\303\304&\207" [helpful--button "Set" helpful-set-button symbol buffer] 9 (#$ . 43754)])#@36 Make set button for SYM in BUFFER.
(defalias 'helpful--make-toggle-literal-button #[0 "\301\203	 \302\202\n \303\304\"\207" [helpful--view-literal helpful--button "Pretty view" "View as literal" helpful-view-literal-button] 3 (#$ . 43959)])#@42 Make customize button for SYM.

(fn SYM)
(defalias 'helpful--make-customize-button #[257 "\300\301\302\303$\207" [helpful--button "Customize" helpful-customize-button symbol] 6 (#$ . 44206)])#@54 Make references button for SYM.

(fn SYM CALLABLE-P)
(defalias 'helpful--make-references-button #[514 "\300\301\302\303\304&\207" [helpful--button "Find all references" helpful-all-references-button symbol callable-p] 9 (#$ . 44404)])#@39 Make edebug button for SYM.

(fn SYM)
(defalias 'helpful--make-edebug-button #[257 "\300\301\302\303!\203 \304\202 \305\"\306\307$\207" [helpful--button format "%s edebug" helpful--edebug-p "Disable" "Enable" helpful-edebug-button symbol] 6 (#$ . 44648)])#@40 Make tracing button for SYM.

(fn SYM)
(defalias 'helpful--make-tracing-button #[257 "\300\301\302\303!\203 \304\202 \305\"\306\307$\207" [helpful--button format "%s tracing" trace-is-traced "Disable" "Enable" helpful-trace-button symbol] 6 (#$ . 44913)])#@95 Make disassemble button for OBJ.
OBJ may be a symbol or a compiled function object.

(fn OBJ)
(defalias 'helpful--make-disassemble-button #[257 "\300\301\302\303$\207" [helpful--button "Disassemble" helpful-disassemble-button object] 6 (#$ . 45178)])#@44 Make an ERT test button for SYM.

(fn SYM)
(defalias 'helpful--make-run-test-button #[257 "\300\301\302\303$\207" [helpful--button "Run test" helpful-run-test-button symbol] 6 (#$ . 45435)])#@50 Make forget button for SYM.

(fn SYM CALLABLE-P)
(defalias 'helpful--make-forget-button #[514 "\300\301\302\303\304&\207" [helpful--button "Forget" helpful-forget-button symbol callable-p] 9 (#$ . 45632)])#@19 

(fn SYM SOURCE)
(defalias 'helpful--make-callees-button #[514 "\300\301\302\"\303\304\305&\207" [helpful--button format "Functions used by %s" helpful-callees-button symbol source] 9 (#$ . 45847)])#@61 Return non-nil if function SYM is autoloaded.

(fn SYM BUF)
(defalias 'helpful--autoloaded-p #[514 "\300!\211\205 \301\302\"\262\3031 \304\"0\207\210\304!\207" [buffer-file-name s-chop-suffix ".gz" (error) help-fns--autoloaded-p] 6 (#$ . 46057)])#@59 Return non-nil if function SYM is byte-compiled

(fn SYM)
(defalias 'helpful--compiled-p #[257 "\2119\205	 \300K!\207" [byte-code-function-p] 3 (#$ . 46317)])#@61 Return non-nil if function SYM is native-compiled

(fn SYM)
(defalias 'helpful--native-compiled-p #[257 "\2119\205 \300\301!\205 \301K!\207" [fboundp subr-native-elisp-p] 3 (#$ . 46482)])#@59 Join a list of strings with commas and "and".

(fn ITEMS)
(defalias 'helpful--join-and #[257 "\211G\300U\203	 \301\207\211G\302U\203 \211@\207\303\304\305\306\307\302\"\"\310!#\207" [0 "" 1 format "%s and %s" s-join ", " -drop-last -last-item] 8 (#$ . 46678)])#@69 Return a one sentence summary for SYM.

(fn SYM CALLABLE-P BUF POS)
(defalias 'helpful--summary #[1028 "\300\"\301\"\211=?\203 \302\303\304\305\306$\202  \302\307\310\311\312$\302\313\310\311\314$\302\315\310\311\316$\302\317\310\311\320$\302\321\310\311\322$\302\323\310\311\324$\302\325\310\311\326$\302\327\330\305\331$\302\332\310\311\333$\205` \205` \334\"\205i \335!\205r \336!\f\205y \205\204 \205\204 \205\222 \337!\205\222 	\205\230 \205\236 ?\205\255 \340!\205\255 ?\205\274 \341!\205\274 	\257\342\343!!\344!\203\317 \f\202	\203\350 \345\346\302\347!\350\305\351&\"\202	\204\361 \352\202	\353!\203\374 \354\202	\355!\203\n\202	\356\2032\357!\211\203$\345\360\361\362!#\"\202-\345\363\364\"\"\262\202G\203;\365\202G\355!\203F\366\202G\367\370\371\345\3729\203X\373!\202Y\374\375\366\376\377$\266\203\203n\201@ \202q\201A \203\203\201B 	P\202\206\201C &\"\207" [helpful--primitive-p helpful--canonical-symbol helpful--button "function alias" helpful-manual-button symbol defalias "alias" helpful-info-button info-node "(elisp)Variable Aliases" "special form" "(elisp)Special Forms" "customizable" "(elisp)Variable Definitions" "keyboard macro" "(elisp)Keyboard Macros" "interactive" "(elisp)Using Interactive" "autoloaded" "(elisp)Autoload" "byte-compiled" "(elisp)Byte Compilation" "natively compiled" helpful-describe-button native-compile "buffer-local" "(elisp)Buffer-Local Variables" helpful--autoloaded-p helpful--compiled-p helpful--native-compiled-p commandp custom-variable-p local-variable-if-set-p helpful--join-and -non-nil special-form-p format "for %s," symbol-name helpful-describe-exactly-button callable-p "variable" macrop "macro" helpful--kbd-macro-p "function" buffer-file-name "defined in %s" helpful--navigate-button file-name-nondirectory "defined in buffer %s" helpful--buffer-button "defined in C source code" nil "without a source file" s-word-wrap 70 "%s is %s %s %s%s." helpful--format-symbol "This lambda" "\\`[aeiou]" string-match t "an" "a" " " ""] 36 (#$ . 46948)])#@79 Given source code FORM, return a list of all the functions called.

(fn FORM)
(defalias 'helpful--callees #[257 "\300!\301!\302\303\304!\"\305\306\203, \211A\262\242\211>\203$ \211B\262\210\211T\262\202 \266\211\237\262\307!\207" [macroexpand-all helpful--callees-1 -filter symbolp -flatten nil 0 -distinct] 10 (#$ . 49090)])#@143 Return a list of all the functions called in FORM.
Assumes FORM has been macro expanded. The returned list
may contain duplicates.

(fn FORM)
(defalias 'helpful--callees-1 #[257 "\211:\204 \300\207\211@\301>\203 \302\303\304A\"!\207\211@\305=\203' \211A\306\307\"\302!\207\211@\310=\203G \3118\304!\312\313\"\303\314\"\306\315\"\316\302!\"\207\211@\317>\203e \211A@\242\320=\203e \211A@A@\302\303\304A\"!B\207\211@\321=\203{ \211A@\2119\203w \211C\207\304!\207\211@\322=\203\213 \302\303\304AA\"!\207\211@\323=\203\234 \302\303\304\312\313\"\"!\207\211@\324>\203\267 \211A@\306\325\"\316\302!\303\304AA\"\"\207\211@\320=\203\300 \300\207\211@\302\303\304A\"!B\207" [nil (and catch defconst defvar if interactive or prog1 prog2 progn save-current-buffer save-restriction setq setq-default track-mouse unwind-protect while) -flatten -map helpful--callees-1 cond mapcar #[257 "\300\301\"\207" [-map helpful--callees-1] 4 "\n\n(fn IT)"] condition-case 2 -drop 3 cdr #[257 "\300\301\"\207" [-map helpful--callees-1] 4 "\n\n(fn IT)"] append (funcall apply call-interactively mapcar mapc mapconcat -map) quote function lambda closure (let let*) #[257 "\211:\205	 \300\301\"\207" [-map helpful--callees-1] 4 "\n\n(fn IT)"]] 10 (#$ . 49437)])#@71 Ensure the symbol associated with the current buffer has been loaded.
(defalias 'helpful--ensure-loaded #[0 "\205 	9\205 	K\211\211\242\302=\262\205 \303!\262\207" [helpful--callable-p helpful--sym autoload autoload-do-load] 4 (#$ . 50700)])#@50 Does SYMBOL look like a hook?

(fn SYMBOL VALUE)
(defalias 'helpful--hook-p #[514 "\300\301\302!\"\204 \300\303\302!\"\205 \211:\207" [s-ends-with-p "-hook" symbol-name "-functions"] 6 (#$ . 50954)])#@43 Format VALUE as a string.

(fn SYM VALUE)
(defalias 'helpful--format-value #[514 "\203\n \301\302!!\207\211;\203 \207\303!\203 \304!\207\305\"\203% \306!\207\302!\207" [helpful--view-literal helpful--syntax-highlight helpful--pretty-print keymapp helpful--format-keymap helpful--hook-p helpful--format-hook] 5 (#$ . 51163)])#@128 Return the original value for SYM, if any.

If SYM has an original value, return it in a list. Return nil
otherwise.

(fn SYM)
(defalias 'helpful--original-value #[257 "\211\300N\211:\205 \3011 \302@!C0\207\210\303\207" [standard-value (error) eval nil] 4 (#$ . 51504)])#@86 Return t if SYM has an original value, and its current
value is different.

(fn SYM)
(defalias 'helpful--original-value-differs-p #[257 "\300!\211:\205 \211@J=?\207" [helpful--original-value] 4 (#$ . 51783)])#@80 Update the current *Helpful* buffer to the latest
state of the current symbol.
(defalias 'helpful-update #[0 "\204 \306\307!\210\310	!\204 \311\312 \210\n?\205 \313	\"\314\315 i\316\n\"\317\n\"?\206/ \f\211\203: \320\n\"\202; \321\211A\262\242\211A\262\242@\205S \322\n$\205Z \323!\324\n#\325\n\"\326 \210\327\n		$c\210\330\n\"\203 \331\332\n\"\261\210\n\203\227 \333!\204\227 \334 \210\335\336!\337\340!!\261\210\n\204\\\334 \210;\206\261 \341!\206\261 \342\"\203\304 ;\203\301 \314@\202\304 \311@\335	\203\345 \343	\"\203\345 \344\345\346\344\347\350	!\"\351\352	\353&\"\202\360 \354!\203\357 \355\202\360 \356!\357\"\331\261\210\360!\203\335\361!\357\362!@\"\331\261\210\211\203\363 \364\261\210\354!\2036\346\365\366\367\370\314&\364\346\371\366\367\370\311&\364\261\210\313	\"\372>\203G\373	\"\364\261\210\374	\"c\210\375!\203Z\364\376!\261\210\266\377\n\"\n?\205j\201A !\204r\211\203\311\334 \210\335\201B !c\210\203\207\201C !c\210\211\203\227\331\201D \201E \"\261\2109\203\262\n\203\262\201F !\203\262\331c\210\201G !c\2109\203\311\201H !\203\311\331c\210\201I !c\210\266\201J !\203\344\334 \210\335\201K !\201L \"\261\210\334 \210\335\201M !\205\201N \201O !	\206\201P #\203\203\344\201Q \201R 	\"#\202R\2032\f\2032\344\201S \201T !\"\202R\203@\344\201U #\202R\f\203O\f\204O\201V \202R\201W \262\331\201X \n\"\261\210\n\203{9\203{\203{\n\204{\364\201Y \"\261\210\201Z !\203\244\334 \210\335\201[ !\344\201\\ \201] !\203\235\201^ \202\240\201_ \"\261\210\201` \n		$9\205\304\n\205\304\201a \201b !\201c \"?\n\205\313\f?\201d !?\205\327?\204\347\204\347\204\347\211\203\361\334 \210\335\201e !c\210\203\374\201f !c\210\203\203\364c\210\201g !c\210\204\203#\204\211\203#\201h c\210\203.\201i !c\210\211\203A\2039\364c\210\201j \n\"c\210\266\211\203a\334 \210\335\201k !\201l \201h \201m \201n \"\"\261\210\n\203j\201o  \210\334 \210\204v\n\203\335\335=\203\204\201p \202\207\201q !\203\276\201r \344\201s \203\236\201t \202\241\201u \"\201v \201w #\201N \201x !\n#\201h Q\202\332\205\332\201r \201V \201v \201w #\331\346\201y \201z \"Q\261\210\203W;\203\n\205\201{ !\211\201| \267\202\201} \202\201~ \201 !\205\201 \202\311\262\337\"\262\202U:\203<@\201\200 =\203<\337\201\201 \201\202 \201\203 \"!P!\202U\337=\203J\201\204 \202M\201\205 \201\202 !P!c\210\334 \210\201\206 !\211\203l\335\201\207 !\261\210\210eb\210\fSy\210u\210\311\205\205\201\210 !)\207" [helpful--sym helpful--associated-buffer helpful--callable-p inhibit-read-only find-function-C-source-directory helpful--first-display cl--assertion-failed (not (null helpful--sym)) buffer-live-p nil helpful--ensure-loaded helpful--sym-value t line-number-at-pos helpful--primitive-p helpful--canonical-symbol helpful--definition (nil nil nil) helpful--source buffer-file-name helpful--calculate-references helpful--aliases erase-buffer helpful--summary helpful--obsolete-info "\n\n" helpful--format-obsolete-info helpful--kbd-macro-p helpful--insert-section-break helpful--heading "Signature" helpful--syntax-highlight helpful--signature keymapp helpful--hook-p local-variable-p format "Value in %s" helpful--button "#<buffer %s>" buffer-name helpful-buffer-button buffer position local-variable-if-set-p "Global Value" "Value" helpful--format-value helpful--original-value-differs-p "Original Value" helpful--original-value helpful--make-toggle-literal-button " " "Buffer values" helpful-associated-buffer-button symbol prompt-p "Global value" (nil t) helpful--make-toggle-button helpful--make-set-button custom-variable-p helpful--make-customize-button helpful--docstring helpful--view-literal helpful--version-info "Documentation" helpful--format-docstring s-word-wrap 70 helpful--has-shortdoc-p helpful--make-shortdoc-sentence helpful--in-manual-p helpful--make-manual-button commandp "Key Bindings" helpful--format-keys "References" helpful--navigate-button file-name-nondirectory 0 "References in %s:\n%s" helpful--format-position-heads "Finding references in a .%s file is not supported." f-ext "%s is unused in %s." "C code is not yet loaded." "Could not find source file." helpful--make-references-button helpful--make-callees-button helpful--advised-p "Advice" "This %s is advised." macrop "macro" "function" helpful--can-edebug-p plist-get symbol-plist byte-opcode special-form-p "Debugging" helpful--make-edebug-button helpful--make-tracing-button "\n" helpful--make-disassemble-button helpful--make-forget-button "Aliases" s-join mapcar #[257 "\301\"\207" [helpful--callable-p helpful--format-alias] 4 "\n\n(fn IT)"] helpful--insert-implementations "Source Code" "Alias Source Code" propertize "%s Defined in " "//" ";;" face font-lock-comment-face f-abbrev "Set C source directory" helpful-c-source-directory file-name-extension #s(hash-table size 2 test equal rehash-size 1.5 rehash-threshold 0.8125 purecopy t data ("c" 1016 "rs" 1022)) c-mode fboundp rust-mode closure ";; Closure converted to defun by helpful.\n" helpful--pretty-print helpful--format-closure ";; Could not find source code, showing raw function object.\n" ";; Could not find alias source code, showing raw function object.\n" helpful--format-properties "Symbol Properties" kill-buffer] 26 (#$ . 52000) nil])#@59 Remove mentions of advice from DOCSTRING.

(fn DOCSTRING)
(defalias 'helpful--skip-advice #[257 "\300!\211\301\302\203, \242\262\303\304\"\204 \303\305\"\203, A\262T\262A\262\202 \266\211\262\306\307\310\"!\207" [s-lines 0 nil s-starts-with-p ":around advice:" "This function has :around advice:" s-trim s-join "\n"] 9 (#$ . 57462)])#@70 Format ARG (a symbol) according to Emacs help conventions.

(fn ARG)
(defalias 'helpful--format-argument #[257 "\300!\301\302\"\203 \207\303!\207" [symbol-name s-starts-with-p "&" s-upcase] 5 (#$ . 57819)])#@61 Format symbol as a string, escaping as necessary.

(fn SYM)
(defalias 'helpful--format-symbol #[257 "\300\301\302\303\304\"#\207" [s-replace " " "\\ " format "%s"] 7 (#$ . 58035)])#@106 Get the signature for function SYM, as a string.
For example, "(some-func FOO &optional BAR)".

(fn SYM)
(defalias 'helpful--signature #[257 "\301\2119\205\f \302K\"9\203 \303!\202: \304!\204) \305\306!\2037 \306!\2037 \307H\211:\2052 \211\262\202: A@\203E \310\311\"\202S \211<\203Q \310\311\"\202S \211C9\204b \312\313\314\315\"\"\202{ \211\203t \312\316\317!\314\315\"#\202{ \312\313\317!\"\262\266\320!\211\203\224 \321\"\211\203\223 \211@\262\210\210\211\203\233 \207\203\246 \322\323\324\325$\207\207" [advertised-signature-table nil gethash help-function-arglist byte-code-function-p fboundp interpreted-function-p 0 -map helpful--format-argument format "(%s)" s-join " " "(%s %s)" helpful--format-symbol documentation help-split-fundoc replace-regexp-in-string "\\\\=\\(['\\`‘’]\\)" "\\1" t] 12 (#$ . 58223)])#@23 

(fn SYM CALLABLE-P)
(defalias 'helpful--format-obsolete-info #[514 "\300\"\211A\262\242A@\301\302\303\304\305\306\n\n\"\203% \304\307\"\202& \310;\2033 \311	P\202A \203@ \304\312\n\"\202A \313$\"!\207" [helpful--obsolete-info helpful--format-docstring s-word-wrap 70 format "This %s is obsolete%s%s" helpful--kind-name " since %s" "" "; " "; use `%s' instead." "."] 15 (#$ . 59082)])#@158 Get the docstring for SYM.
Note that this returns the raw docstring, including \=\=
escapes that are used by `substitute-command-keys'.

(fn SYM CALLABLE-P)
(defalias 'helpful--docstring #[514 "\301\302\203' \303\304\"\262\305\"\211\203# \211A\262\203# \306!\262\210\202. \307\310\304#\262)\207" [text-quoting-style grave nil documentation t help-split-fundoc helpful--skip-advice documentation-property variable-documentation] 8 (#$ . 59491)])#@108 Read a symbol from the minibuffer, with completion.
Returns the symbol.

(fn PROMPT DEFAULT-VAL PREDICATE)
(defalias 'helpful--read-symbol #[771 "\203 \211!\204 \301\262\203  \302!\262\303\304\305\306\"#\262\307\310\311\301\211	&!\207" [obarray nil symbol-name replace-regexp-in-string ": \\'" format " (default: %s): " intern completing-read t] 12 (#$ . 59955)])#@70 Update and switch to help buffer for SYMBOL.

(fn SYMBOL CALLABLE-P)
(defalias 'helpful--update-and-switch-buffer #[514 "\301\"r\211q\210\302 )\210!\207" [helpful-switch-buffer-function helpful--buffer helpful-update] 5 (#$ . 60340)])#@120 Show help for function named SYMBOL.

See also `helpful-macro', `helpful-command' and `helpful-callable'.

(fn SYMBOL)
(defalias 'helpful-function #[257 "\300\301\"\207" [helpful--update-and-switch-buffer t] 4 (#$ . 60585) (byte-code "\300\301\302 \303#C\207" [helpful--read-symbol "Function: " helpful--callable-at-point functionp] 4)])#@93 Show help for interactive function named SYMBOL.

See also `helpful-function'.

(fn SYMBOL)
(defalias 'helpful-command #[257 "\300\301\"\207" [helpful--update-and-switch-buffer t] 4 (#$ . 60929) (byte-code "\300\301\302 \303#C\207" [helpful--read-symbol "Command: " helpful--callable-at-point commandp] 4)])#@77 Show help for interactive command bound to KEY-SEQUENCE.

(fn KEY-SEQUENCE)
(defalias 'helpful-key #[257 "\300!\211\204 \301\302\303!\"\207\304\305\"\203 \306\305\"\207\301\307\303!#\207" [key-binding user-error "No command is bound to %s" key-description commandp t helpful--update-and-switch-buffer "%s is bound to %s which is not a command"] 6 (#$ . 61243) (byte-code "\300\301!C\207" [read-key-sequence "Press key: "] 2)])#@48 Show help for macro named SYMBOL.

(fn SYMBOL)
(defalias 'helpful-macro #[257 "\300\301\"\207" [helpful--update-and-switch-buffer t] 4 (#$ . 61683) (byte-code "\300\301\302 \303#C\207" [helpful--read-symbol "Macro: " helpful--callable-at-point macrop] 4)])#@143 Show help for function, macro or special form named SYMBOL.

See also `helpful-macro', `helpful-function' and `helpful-command'.

(fn SYMBOL)
(defalias 'helpful-callable #[257 "\300\301\"\207" [helpful--update-and-switch-buffer t] 4 (#$ . 61947) (byte-code "\300\301\302 \303#C\207" [helpful--read-symbol "Callable: " helpful--callable-at-point fboundp] 4)])#@54 Return non-nil if SYMBOL is a variable.

(fn SYMBOL)
(defalias 'helpful--variable-p #[257 "\211\300N\206 \301!\205 \302!?\205 \211??\205 \211\303=?\207" [variable-documentation boundp keywordp t] 3 (#$ . 62312)])#@144 Return non-nil if SYMBOL is a variable, callable, or face.

This differs from `boundp' because we do not consider nil, t
or :foo.

(fn SYMBOL)
(defalias 'helpful--bound-p #[257 "\300!\206 \301!\206 \302!\207" [fboundp helpful--variable-p facep] 3 (#$ . 62537)])#@64 Create and switch to helpful bookmark BOOKMARK.

(fn BOOKMARK)
(defalias 'helpful--bookmark-jump #[257 "\300\301\"\300\302\"\300\303\"\203 \304!\210\202 \305!\210\211b\207" [bookmark-prop-get callable-p sym position helpful-callable helpful-variable] 6 (#$ . 62809)])#@93 Create a bookmark record for helpful buffers.

See docs of `bookmark-make-record-function'.
(defalias 'helpful--bookmark-make-record #[0 "\302B\303	B\304`B\305BBB\207" [helpful--sym helpful--callable-p sym callable-p position ((handler . helpful--bookmark-jump))] 4 (#$ . 63090)])#@276 Convert SYMBOL from a C name to an Elisp name.
E.g. convert `Fmake_string' to `make-string' or
`Vgc_cons_percentage' to `gc-cons-percentage'. Interpret
SYMBOL as variable name if VAR, else a function name. Return
nil if SYMBOL doesn't begin with "F" or "V".

(fn SYMBOL VAR)
(defalias 'helpful--convert-c-name #[514 "\300!\203 \301\202\f \302\303\"\205 \304\305\306\307\310#\"!\207" [symbol-name "V" "F" s-starts-with-p intern s-chop-prefix s-replace "_" "-"] 11 (#$ . 63378)])#@484 Prompt the user to disambiguate SYM via a `read-char-choice' selection.

CHOICES is a list of tuples of the form (FN DESC CHAR), where

  CHAR is the input character associated with the choice
  DESC is a short description of the choice to display in the prompt.
  FN is the function being chosen, which takes SYM as an argument.

For instance, the choice (#'helpful-variable "[v]ariable" ?v)
calls (helpful-variable SYM) when the key `v' is pressed in the prompt.

(fn SYM CHOICES)
(defalias 'helpful--disambiguate #[514 "\301\302\303\304!\305#\306\307\310##\311\312\"\311\313\"\314\"\315\"!\207" [font-lock-keyword-face format "%s is ambiguous: describe %s ?" propertize symbol-name face mapconcat #[257 "\211A\211A\262\242@\210\300\207" [nil] 5 "\n\n(fn INPUT0)"] " / " mapcar #[257 "\3008\207" [2] 3 "\n\n(fn INPUT0)"] #[257 "\211\211A\262\242A@\211B\207" [] 6 "\n\n(fn INPUT0)"] read-char-choice alist-get] 9 (#$ . 63871)])#@127 Show help for SYMBOL, a variable, function, macro, or face.

See also `helpful-callable' and `helpful-variable'.

(fn SYMBOL)
(defalias 'helpful-symbol #[257 "\300\301\302\"\211\203 \303\304\"\305\306EC\262\210\301\300\"\211\203' \303\307\"\310\311EB\262\210\312!\2036 \313\314\315EB\262\316!\203D \317\320\321EB\262\322!\203R \323\324\325EB\262\211\204[ \326\327\"\207\211G\330U\203h \211@@!\207\331\"\207" [nil helpful--convert-c-name t make-closure #[257 "\301\300!\207" [V0 helpful-variable] 3 "\n\n(fn _)"] "c-style [V]ariable" 86 #[257 "\301\300!\207" [V0 helpful-callable] 3 "\n\n(fn _)"] "c-style [F]unction" 70 fboundp helpful-callable "[c]allable" 99 boundp helpful-variable "[v]ariable" 118 facep #[257 "\301!\210\302 !\207" [helpful-switch-buffer-function describe-face help-buffer] 3 "\n\n(fn FACE)"] "[f]ace" 102 user-error "Not bound: %S" 1 helpful--disambiguate] 6 (#$ . 64826) (byte-code "\300\301\302 \303#C\207" [helpful--read-symbol "Symbol: " helpful--symbol-at-point helpful--bound-p] 4)])#@51 Show help for variable named SYMBOL.

(fn SYMBOL)
(defalias 'helpful-variable #[257 "\300\301\"\207" [helpful--update-and-switch-buffer nil] 4 (#$ . 65866) (byte-code "\300\301\302 \303#C\207" [helpful--read-symbol "Variable: " helpful--variable-at-point helpful--variable-p] 4)])#@55 Return the symbol at point, if it's a bound variable.
(defalias 'helpful--variable-at-point-exactly #[0 "\300 \2119\204\n \301\262\302!\205 \211\207" [variable-at-point nil helpful--variable-p] 3 (#$ . 66153)])#@58 Return the variable defined in the form enclosing point.
(defalias 'helpful--variable-defined-at-point #[0 "\212\214~\210\300 \211A@\301\205. b\210\3021 \303p!0\202 \210\301\262\211\242\304\305\306\307F>\205. \211A@\266\203*\207" [syntax-ppss nil (error) read defvar defvar-local defcustom defconst] 8 (#$ . 66372)])#@63 Return the variable exactly under point, or defined at point.
(defalias 'helpful--variable-at-point #[0 "\300 \211\206 \301 \302!\205 \211\262\207" [helpful--variable-at-point-exactly helpful--variable-defined-at-point helpful--variable-p] 4 (#$ . 66699)])
(defalias 'helpful--callable-at-point #[0 "\300 \301 \302!\203\f \207\207" [symbol-at-point function-called-at-point fboundp] 4])#@44 Return the symbol at point, if it's bound.
(defalias 'helpful--symbol-at-point-exactly #[0 "\300 \301!\205	 \211\207" [symbol-at-point helpful--bound-p] 3 (#$ . 67097)])#@81 Find the most relevant symbol at or around point.
Returns nil if nothing found.
(defalias 'helpful--symbol-at-point #[0 "\300 \206\f \301 \206\f \302 \207" [helpful--symbol-at-point-exactly helpful--callable-at-point helpful--variable-at-point] 1 (#$ . 67273)])#@36 Show help for the symbol at point.
(defalias 'helpful-at-point #[0 "\300 \211\203\n \301!\207\302\303!\207" [helpful--symbol-at-point helpful-symbol user-error "There is no symbol at point."] 3 (#$ . 67540) nil])#@70 Return a list of headings in the current buffer, suitable for
imenu.
(defalias 'helpful--imenu-index #[0 "\300eb\210m\204$ \301`\302\"\303=\203 \304\305 \306 \"\305 BB\262\300y\210\202 \211\237\207" [nil get-text-property face helpful-heading buffer-substring-no-properties line-beginning-position line-end-position] 4 (#$ . 67759)])#@65 Temporarily highlight region from START to END.

(fn START END)
(defalias 'helpful--flash-region #[514 "\300\"\301\302\303#\210\304\305\306\307$\207" [make-overlay overlay-put face highlight run-with-timer 1.5 nil delete-overlay] 8 (#$ . 68102)])#@31 Go to the reference at point.
(defalias 'helpful-visit-reference #[0 "\301`\302\"\301`\303\"\301`\304\"\205l \205l \211\203; \212\305\301`\303\"\2030 m\2040 \306u\210\211T\262\202 \211S\262\\)\262\210\307!\210\310!\210\311\305!\210\212\312`\313\"\314\315\316\317\320	!\321BBB!\322#\205i \323\305\224\305\225\"\210\202L )\262\207" [helpful--sym get-text-property helpful-path helpful-pos helpful-pos-is-start 0 -1 find-file helpful--goto-char-widen recenter scan-sexps 1 re-search-forward rx-to-string seq symbol-start symbol-name (symbol-end) t helpful--flash-region] 11 (#$ . 68358) nil])#@67 Kill all `helpful-mode' buffers.

See also `helpful-max-buffers'.
(defalias 'helpful-kill-buffers #[0 "\300 \211\205 \211@\301\302\"\303=\203 \304!\210A\266\202\202 \207" [buffer-list buffer-local-value major-mode helpful-mode kill-buffer] 5 (#$ . 68967) nil])#@28 Keymap for `helpful-mode'.
(defvar helpful-mode-map (byte-code "\300 \301\302\303#\210\301\304\303#\210\305\306!\203 \301\307\303#\210\301\310\311#\210\301\312\313#\210\301\314\315#\210\301\316\313#\210\301\317\315#\210\207" [make-sparse-keymap define-key "g" helpful-update [remap revert-buffer] fboundp revert-buffer-quick [remap revert-buffer-quick] "" helpful-visit-reference "	" forward-button [backtab] backward-button "n" "p"] 5) (#$ . 69239))#@55 Improve support for org "help" links through helpful.
(defalias 'helpful--add-support-for-org-links #[0 "\300 \210\301 \207" [helpful--support-storing-org-links helpful--prefer-helpful-when-following-org-link] 1 (#$ . 69705)])#@65 Make `org-store-link' in a helpful buffer return a "help" link.
(defalias 'helpful--support-storing-org-links #[0 "\300\301!\205 \302\303 \304\"?\205 \301\304\305\306#\207" [fboundp org-link-set-parameters -contains-p org-link-types "helpful" :store helpful--org-link-store] 4 (#$ . 69937)])#@50 Store "help" type link when in a helpful buffer.
(defalias 'helpful--org-link-store #[0 "\301\302!\205 \303\304\305\306\307\310\"\311\312&\207" [helpful--sym derived-mode-p helpful-mode org-link-store-props :type "help" :link format "help:%s" :description nil] 7 (#$ . 70236)])#@65 Prefer helpful when using `org-open-at-point' on a "help" link.
(defalias 'helpful--prefer-helpful-when-following-org-link #[0 "\300\301!\205 \302\303\304\"\211\305=?\205 \301\303\304\305#\262\207" [fboundp org-link-set-parameters org-link-get-parameter "help" :follow helpful--org-link-follow] 5 (#$ . 70522)])#@15 

(fn LINK _)
(defalias 'helpful--org-link-follow #[514 "\300\301!!\207" [helpful-symbol intern] 5 (#$ . 70842)])#@183 `outline-search-function' for `helpful-mode`.
See documentation of `outline-search-function' for BOUND, MOVE,
BACKWARD and LOOKING-AT.

(fn &optional BOUND MOVE BACKWARD LOOKING-AT)
(defalias 'helpful--outline-function #[1024 "\211\203 \300`\301\"\302=\207\303\206 \203 e\202 d\212\300`\301\"\302=\203. \203+ \304\202, \305y\210\203P `=\204\\ \300`\301\"\302=\204\\ \306`\301\303$\206K \211b\210\2022 \307`\301\302$\206Z \211b\210\300`\301\"\302=\203h `\262)\203v b\210\310\211D!\207\205~ \211b\210\303\207" [get-text-property face helpful-heading nil -1 1 previous-single-property-change text-property-any set-match-data] 11 (#$ . 70963)])
(defvar helpful-mode-hook nil)
(byte-code "\300\301N\204\f \302\300\301\303#\210\304\305!\204 \302\305\306\307#\210\300\207" [helpful-mode-hook variable-documentation put "Hook run after entering Helpful mode.\nNo problems result if this variable is not bound.\n`add-hook' automatically binds it.  (This is true for all hook variables.)" boundp helpful-mode-map definition-name helpful-mode] 4)
(defvar helpful-mode-map (make-sparse-keymap))
(byte-code "\301\302N\204 \303\301\302\304\305!#\210\306\307!\204* \303\307\310\311#\210\312\307\306\307!\203& \313\202( \314 \"\210\307\302N\2048 \303\307\302\304\315!#\210\306\300!\204X \303\300\310\311#\210\312\300\306\300!\203P \313\202V \316\300\313\"\210\"\210\300\302N\204f \303\300\302\304\317!#\210\303\311\320\321#\207" [helpful-mode-abbrev-table helpful-mode-map variable-documentation put purecopy "Keymap for `helpful-mode'." boundp helpful-mode-syntax-table definition-name helpful-mode defvar-1 nil make-syntax-table "Syntax table for `helpful-mode'." define-abbrev-table "Abbrev table for `helpful-mode'." derived-mode-parent special-mode] 5)#@230 Major mode for *Helpful* buffers.

In addition to any hooks its parent mode `special-mode' might have
run, this mode runs the hook `helpful-mode-hook', as the final or
penultimate step during initialization.

\{helpful-mode-map}
(defalias 'helpful-mode #[0 "\306\300!\210\307\310 \210\311\312\310\313N\203 \314\311\313\310\313N#\210\315!\204' \316\317 \"\210\320\f!\211\2035 \211\321 =\203; \322\f\323 \"\210\210\324\325\"\204R (=\204R \326\325(C#\210\327!\210\330\f!\210(\331\332\333\334\307$\210\335)\306\336!\210\337\306\340!\210\341 *\342W\204\203 \306\343!\210\344#\345 )\210\346\347!\207" [delay-mode-hooks major-mode mode-name helpful-mode-map helpful-mode-syntax-table helpful-mode-abbrev-table make-local-variable t special-mode helpful-mode "Helpful" mode-class put keymap-parent set-keymap-parent current-local-map char-table-parent standard-syntax-table set-char-table-parent syntax-table abbrev-table-get :parents abbrev-table-put use-local-map set-syntax-table add-hook xref-backend-functions elisp--xref-backend nil helpful--imenu-index imenu-space-replacement " " bookmark-make-record-function helpful--bookmark-make-record 29 outline-search-function helpful--outline-function helpful--add-support-for-org-links run-mode-hooks helpful-mode-hook local-abbrev-table imenu-create-index-function emacs-major-version] 5 (#$ . 72730) nil])
(provide 'helpful)
