Subject: RE: bug#9669: 24.0.50; `tramp-compat.el' in *Help* when it doesn't belong (?)

From: "Drew Adams" <[email-masked]>
Date: Tue, 4 Oct 2011 18:03:24 -0700

> But it's the part in the "..." that I'm interested in (i.e. in which
> context is icicle-redefine-standard-functions called).

It is called when you turn on minor mode `icicle-mode'.

Debugger entered--entering a function:
* symbol-name(comint-dynamic-complete)
  icicle-redefine-standard-functions()
  (cond (icicle-mode (icicle-define-icicle-maps) (icicle-bind-other-keymap-keys)
(add-hook (quote minibuffer-setup-hook) (quote icicle-minibuffer-setup))
(add-hook (quote minibuffer-exit-hook) (quote icicle-cancel-Help-redirection))
(add-hook (quote minibuffer-exit-hook) (quote icicle-restore-region-face))
(add-hook (quote minibuffer-exit-hook) (quote icicle-unhighlight-lighter))
(add-hook (quote icicle-post-command-hook) (quote icicle-activate-mark) (quote
append)) (add-hook (quote completion-setup-hook) (quote icicle-set-calling-cmd)
(quote append)) (when icicle-customize-save-flag (add-hook (quote
kill-emacs-hook) (quote icicle-command-abbrev-save))) (add-hook (quote
comint-mode-hook) (quote icicle-comint-hook-fn)) (add-hook (quote
compilation-mode-hook) (quote icicle-compilation-hook-fn)) (add-hook (quote
compilation-minor-mode-hook) (quote icicle-compilation-hook-fn))
(icicle-undo-std-completion-faces) (icicle-redefine-std-completion-fns)
(icicle-redefine-standard-functions) (icicle-redefine-standard-options) (when
(ad-find-some-advice (quote describe-face) (quote before) (quote
icicle-respect-WYSIWYG)) (ad-enable-advice (quote describe-face) (quote before)
(quote icicle-respect-WYSIWYG))) (when (fboundp (quote
minibuffer-depth-indicate-mode)) (minibuffer-depth-indicate-mode 99)) (if
icicle-menu-items-to-history-flag (add-hook (quote pre-command-hook) (quote
icicle-add-menu-item-to-cmd-history)) (remove-hook (quote pre-command-hook)
(quote icicle-add-menu-item-to-cmd-history))) (when (> emacs-major-version 22)
(when icicle-populate-interactive-history-flag (ad-enable-advice (quote
call-interactively) (quote after) (quote icicle-save-to-history))) (ad-activate
(quote call-interactively))) (dolist (fn icicle-inhibit-advice-functions) (when
(and (fboundp fn) (ad-is-active fn)) (push (cons fn (ad-copy-advice-info fn))
icicle-advice-info-list) (ad-deactivate fn)))) (t (makunbound (quote
icicle-mode-map)) (icicle-restore-other-keymap-keys) (remove-hook (quote
minibuffer-setup-hook) (quote icicle-minibuffer-setup)) (remove-hook (quote
minibuffer-exit-hook) (quote icicle-cancel-Help-redirection)) (remove-hook
(quote minibuffer-exit-hook) (quote icicle-restore-region-face)) (remove-hook
(quote icicle-post-command-hook) (quote icicle-activate-mark)) (remove-hook
(quote pre-command-hook) (quote icicle-top-level-prep)) (remove-hook (quote
pre-command-hook) (quote icicle-run-icicle-pre-command-hook) t) (remove-hook
(quote post-command-hook) (quote icicle-run-icicle-post-command-hook) t)
(remove-hook (quote completion-setup-hook) (quote icicle-set-calling-cmd))
(remove-hook (quote kill-emacs-hook) (quote icicle-command-abbrev-save))
(remove-hook (quote comint-mode-hook) (quote icicle-comint-hook-fn))
(remove-hook (quote compilation-mode-hook) (quote icicle-compilation-hook-fn))
(remove-hook (quote compilation-minor-mode-hook) (quote
icicle-compilation-hook-fn)) (icicle-restore-std-completion-fns)
(icicle-restore-standard-functions) (icicle-restore-standard-options) (when
(ad-find-some-advice (quote describe-face) (quote before) (quote
icicle-respect-WYSIWYG)) (ad-disable-advice (quote describe-face) (quote before)
(quote icicle-respect-WYSIWYG))) (when (fboundp (quote
minibuffer-depth-indicate-mode)) (minibuffer-depth-indicate-mode -99))
(remove-hook (quote pre-command-hook) (quote
icicle-add-menu-item-to-cmd-history)) (when (> emacs-major-version 22)
(ad-disable-advice (quote call-interactively) (quote after) (quote
icicle-save-to-history)) (ad-activate (quote call-interactively))) (dolist (fn
icicle-inhibit-advice-functions) (let ((info (memq fn icicle-advice-info-list)))
(when (and (fboundp fn) info) (ad-set-advice-info fn info) (when (ad-is-active
fn) (ad-activate fn)))))))
  (let ((last-message (current-message))) (setq icicle-mode (if (eq arg (quote
toggle)) (not icicle-mode) (> (prefix-numeric-value arg) 0))) (cond (icicle-mode
(icicle-define-icicle-maps) (icicle-bind-other-keymap-keys) (add-hook (quote
minibuffer-setup-hook) (quote icicle-minibuffer-setup)) (add-hook (quote
minibuffer-exit-hook) (quote icicle-cancel-Help-redirection)) (add-hook (quote
minibuffer-exit-hook) (quote icicle-restore-region-face)) (add-hook (quote
minibuffer-exit-hook) (quote icicle-unhighlight-lighter)) (add-hook (quote
icicle-post-command-hook) (quote icicle-activate-mark) (quote append)) (add-hook
(quote completion-setup-hook) (quote icicle-set-calling-cmd) (quote append))
(when icicle-customize-save-flag (add-hook (quote kill-emacs-hook) (quote
icicle-command-abbrev-save))) (add-hook (quote comint-mode-hook) (quote
icicle-comint-hook-fn)) (add-hook (quote compilation-mode-hook) (quote
icicle-compilation-hook-fn)) (add-hook (quote compilation-minor-mode-hook)
(quote icicle-compilation-hook-fn)) (icicle-undo-std-completion-faces)
(icicle-redefine-std-completion-fns) (icicle-redefine-standard-functions)
(icicle-redefine-standard-options) (when (ad-find-some-advice (quote
describe-face) (quote before) (quote icicle-respect-WYSIWYG)) (ad-enable-advice
(quote describe-face) (quote before) (quote icicle-respect-WYSIWYG))) (when
(fboundp (quote minibuffer-depth-indicate-mode)) (minibuffer-depth-indicate-mode
99)) (if icicle-menu-items-to-history-flag (add-hook (quote pre-command-hook)
(quote icicle-add-menu-item-to-cmd-history)) (remove-hook (quote
pre-command-hook) (quote icicle-add-menu-item-to-cmd-history))) (when (>
emacs-major-version 22) (when icicle-populate-interactive-history-flag
(ad-enable-advice (quote call-interactively) (quote after) (quote
icicle-save-to-history))) (ad-activate (quote call-interactively))) (dolist (fn
icicle-inhibit-advice-functions) (when (and (fboundp fn) (ad-is-active fn))
(push (cons fn (ad-copy-advice-info fn)) icicle-advice-info-list) (ad-deactivate
fn)))) (t (makunbound (quote icicle-mode-map))
(icicle-restore-other-keymap-keys) (remove-hook (quote minibuffer-setup-hook)
(quote icicle-minibuffer-setup)) (remove-hook (quote minibuffer-exit-hook)
(quote icicle-cancel-Help-redirection)) (remove-hook (quote
minibuffer-exit-hook) (quote icicle-restore-region-face)) (remove-hook (quote
icicle-post-command-hook) (quote icicle-activate-mark)) (remove-hook (quote
pre-command-hook) (quote icicle-top-level-prep)) (remove-hook (quote
pre-command-hook) (quote icicle-run-icicle-pre-command-hook) t) (remove-hook
(quote post-command-hook) (quote icicle-run-icicle-post-command-hook) t)
(remove-hook (quote completion-setup-hook) (quote icicle-set-calling-cmd))
(remove-hook (quote kill-emacs-hook) (quote icicle-command-abbrev-save))
(remove-hook (quote comint-mode-hook) (quote icicle-comint-hook-fn))
(remove-hook (quote compilation-mode-hook) (quote icicle-compilation-hook-fn))
(remove-hook (quote compilation-minor-mode-hook) (quote
icicle-compilation-hook-fn)) (icicle-restore-std-completion-fns)
(icicle-restore-standard-functions) (icicle-restore-standard-options) (when
(ad-find-some-advice (quote describe-face) (quote before) (quote
icicle-respect-WYSIWYG)) (ad-disable-advice (quote describe-face) (quote before)
(quote icicle-respect-WYSIWYG))) (when (fboundp (quote
minibuffer-depth-indicate-mode)) (minibuffer-depth-indicate-mode -99))
(remove-hook (quote pre-command-hook) (quote
icicle-add-menu-item-to-cmd-history)) (when (> emacs-major-version 22)
(ad-disable-advice (quote call-interactively) (quote after) (quote
icicle-save-to-history)) (ad-activate (quote call-interactively))) (dolist (fn
icicle-inhibit-advice-functions) (let ((info (memq fn icicle-advice-info-list)))
(when (and (fboundp fn) info) (ad-set-advice-info fn info) (when (ad-is-active
fn) (ad-activate fn))))))) (unless (eq icicle-guess-commands-in-path (quote
load)) (setq icicle-shell-command-candidates-cache nil)) (message "Turning %s
Icicle mode..." (if icicle-mode "ON" "OFF")) (icicle-define-minibuffer-maps
icicle-mode) (run-hooks (quote icicle-mode-hook)) (message "Turning %s Icicle
mode...done" (if icicle-mode "ON" "OFF")) (run-hooks (quote icicle-mode-hook)
(if icicle-mode (quote icicle-mode-on-hook) (quote icicle-mode-off-hook))) (if
(called-interactively-p (quote any)) (progn (customize-mark-as-set (quote
icicle-mode)) (unless (and (current-message) (not (equal last-message
(current-message)))) (message "Icicle mode %sabled" (if icicle-mode "en"
"dis"))))))
  icy-mode(1)
...

> >> For the other function, showing us how it's defined would be a
> >> good first step.
> > What other function?
> The one you said Emacs couldn't discover where it's defined.

As I said, there are about 30 such "other functions", and all of their
definitions are different.  But I guess you are interested in the context of the
definition and not the definition itself.

All are defined pretty much at the top level of an Icicles file, so they get
defined each time the file is loaded.  (The defalias for the `old-*' function to
restore to is done only on the first load of the file.)  E.g.:

(unless (fboundp 'old-display-completion-list)
  (defalias 'old-display-completion-list
            (symbol-function 'display-completion-list)))

(defun icicle-display-completion-list (completions &optional ignored)
  ...)

In this example, `icicle-display-completion-list' would be the file that Emacs
thinks is defined in `tramp-compat.el'.