bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#25187: Initialization of `shell-mode-map' is not safe


From: Alexander Shukaev
Subject: bug#25187: Initialization of `shell-mode-map' is not safe
Date: Tue, 13 Dec 2016 00:08:07 +0100

Hi,

consider

(defvar shell-mode-map
  (let ((map (nconc (make-sparse-keymap) comint-mode-map)))
    (define-key map "\C-c\C-f" 'shell-forward-command)
    (define-key map "\C-c\C-b" 'shell-backward-command)
    (define-key map "\t" 'completion-at-point)
    (define-key map (kbd "M-RET") 'shell-resync-dirs)
    (define-key map "\M-?" 'comint-dynamic-list-filename-completions)
    (define-key map [menu-bar completion]
      (cons "Complete"
            (copy-keymap (lookup-key comint-mode-map [menu-bar completion]))))
    (define-key-after (lookup-key map [menu-bar completion])
      [complete-env-variable] '("Complete Env. Variable Name" .
                                shell-dynamic-complete-environment-variable)
      'complete-file)
    (define-key-after (lookup-key map [menu-bar completion])
      [expand-directory] '("Expand Directory Reference" .
                           shell-replace-by-expanded-directory)
      'complete-expand)
    map))

from 'shell.el'. When somebody decides to customize `comint-mode-map' by, for example, first wiping it out and then filling it again,

(with-eval-after-load 'comint   
  ;; Wipe `comint-mode-map':
  (setcdr comint-mode-map nil)
  ;; Fill `comint-mode-map':
  ...)

then when the `shell' feature is loaded, it will inevitably fail because `(lookup-key comint-mode-map [menu-bar completion])' may no longer return a keymap but rather nil or a number.

Looking forward for fix.

Regards,
Alexander





reply via email to

[Prev in Thread] Current Thread [Next in Thread]