Philip Kaludercic writes: > Eshel Yaron writes: > >> Hello Philip, >> >> Philip Kaludercic writes: >> >>> I tried to enable `completion-preview-mode' by adding >>> >>> (setopt completion-preview-mode t) >>> >>> in my init, but it had not effect. >> >> Indeed, it is a minor mode, so one normally enables it by calling the >> function completion-preview-mode, perhaps interactively via M-x. > > I enable all minor modes as user options, so I'd disagree that using a > function or invoking the command are the only ways to expect a minor > mode to be enabled. Fair enough :) >>> When I check the implementation, I noticed that it modifies >>> `post-command-hook' locally. I think it would make sense to rename >>> the current `completion-preview-mode' to >>> `completion-preview-local-mode', and then use >>> `define-globalized-minor-mode' to define `completion-preview-mode'. >> >> We can add a global variant, although IMO the natural scope for >> completion-preview-mode is per major mode: for some kinds of content you >> want to have completion preview, and for others you may want it off. >> Note that a necessary condition for completion-preview-mode to be useful >> in a certain context is that completion-at-point is useful in that >> context, since otherwise there's nothing to preview. >> >> Therefore, I recommend enabling completion-preview-mode by adding it to >> major mode hooks, such as prog-mode-hook or comint-mode-hook. >> Admittedly, if you do want to enable it for all buffers, the major mode >> hook approach would require adding it to four or five hooks, which is a >> bit less elegant than enabling a global minor mode once. >> >> So I suggest we keep completion-preview-mode local and add a global >> variant, say, completion-preview-global-mode, for enabling it globally. >> WDYT? > > That seems fine as well. All right, here's a patch that adds such a global variant. I find the :predicate argument of define-globalized-minor-mode pretty neat, it adds a user option that lets users choose in which major modes the minor mode should take effect, and we can provide a sane default: