* bug#19400: 24.4.50; `completion-separator-self-insert-command' calls `undefined' with error
@ 2014-12-17 20:09 Nicolas Richard
2014-12-19 22:48 ` Stefan Monnier
0 siblings, 1 reply; 9+ messages in thread
From: Nicolas Richard @ 2014-12-17 20:09 UTC (permalink / raw)
To: 19400
Hello,
From:
emacs -Q -f dynamic-completion-mode
Open a vc controlled directory with vc-dir
Hit ^
Instead of "^ is undefined", I get
"completion-separator-self-insert-command: Wrong number of arguments: (0
. 0), 1"
backtrace is :
Debugger entered--Lisp error: (wrong-number-of-arguments (0 . 0) 1)
undefined(1)
completion-separator-self-insert-command(1)
call-interactively(completion-separator-self-insert-command nil nil)
command-execute(completion-separator-self-insert-command)
Have the function "undefined" accept (and ignore) any argument would be
an easy workaround. WDYT ?
--
Nicolas Richard
^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#19400: 24.4.50; `completion-separator-self-insert-command' calls `undefined' with error
2014-12-17 20:09 bug#19400: 24.4.50; `completion-separator-self-insert-command' calls `undefined' with error Nicolas Richard
@ 2014-12-19 22:48 ` Stefan Monnier
2014-12-19 23:13 ` Drew Adams
2014-12-22 11:23 ` Nicolas Richard
0 siblings, 2 replies; 9+ messages in thread
From: Stefan Monnier @ 2014-12-19 22:48 UTC (permalink / raw)
To: Nicolas Richard; +Cc: 19400
> emacs -Q -f dynamic-completion-mode
[ Yuck! completion.el is one of the packages which does not following
the prefix convention *at all*. ]
> Instead of "^ is undefined", I get
> "completion-separator-self-insert-command: Wrong number of arguments: (0
> . 0), 1"
Does the patch below fix this problem (I'm pretty sure it does), and
more importantly, does it seem to preserve the expected behavior?
Stefan
diff --git a/lisp/completion.el b/lisp/completion.el
index d2d94e7..3e8b6aa 100644
--- a/lisp/completion.el
+++ b/lisp/completion.el
@@ -2156,26 +2156,27 @@ Patched to remove the most recent completion."
;; to work)
;; All common separators (eg. space "(" ")" """) characters go through a
-;; function to add new words to the list of words to complete from:
-;; COMPLETION-SEPARATOR-SELF-INSERT-COMMAND (arg).
+;; function to add new words to the list of words to complete from.
;; If the character before this was an alpha-numeric then this adds the
;; symbol before point to the completion list (using ADD-COMPLETION).
-(defun completion-separator-self-insert-command (arg)
- (interactive "p")
- (if (command-remapping 'self-insert-command)
- (funcall (command-remapping 'self-insert-command) arg)
- (use-completion-before-separator)
- (self-insert-command arg)))
-
-(defun completion-separator-self-insert-autofilling (arg)
- (interactive "p")
- (if (command-remapping 'self-insert-command)
- (funcall (command-remapping 'self-insert-command) arg)
- (use-completion-before-separator)
- (self-insert-command arg)
- (and auto-fill-function
- (funcall auto-fill-function))))
+(defvar completion-separator-chars
+ (append " !%^&()=`|{}[];\\'#,?"
+ ;; We include period and colon even though they are symbol
+ ;; chars because :
+ ;; - in text we want to pick up the last word in a sentence.
+ ;; - in C pointer refs. we want to pick up the first symbol
+ ;; - it won't make a difference for lisp mode (package names
+ ;; are short)
+ ".:"))
+
+(defun completion--post-self-insert ()
+ (when (memq last-command-event completion-separator-chars)
+ (let ((after-pos (electric--after-char-pos)))
+ (when after-pos
+ (save-excursion
+ (goto-char (1- after-pos))
+ (use-completion-before-separator))))))
;;-----------------------------------------------
;; Wrapping Macro
@@ -2244,9 +2245,8 @@ TYPE is the type of the wrapper to be added. Can be :before or :under."
(completion-def-wrapper 'electric-c-semi :separator)
(defun completion-c-mode-hook ()
(setq completion-syntax-table completion-c-syntax-table)
- (local-set-key "+" 'completion-separator-self-insert-command)
- (local-set-key "*" 'completion-separator-self-insert-command)
- (local-set-key "/" 'completion-separator-self-insert-command))
+ (setq-local completion-separator-chars
+ (append "+*/" completion-separator-chars)))
;; FORTRAN mode diffs. (these are defined when fortran is called)
@@ -2259,10 +2259,8 @@ TYPE is the type of the wrapper to be added. Can be :before or :under."
(defun completion-setup-fortran-mode ()
(setq completion-syntax-table completion-fortran-syntax-table)
- (local-set-key "+" 'completion-separator-self-insert-command)
- (local-set-key "-" 'completion-separator-self-insert-command)
- (local-set-key "*" 'completion-separator-self-insert-command)
- (local-set-key "/" 'completion-separator-self-insert-command))
+ (setq-local completion-separator-chars
+ (append "+-*/" completion-separator-chars)))
\f
;; Enable completion mode.
@@ -2281,15 +2279,16 @@ if ARG is omitted or nil."
;; This is always good, not specific to dynamic-completion-mode.
(define-key function-key-map [C-return] [?\C-\r])
- (dolist (x '((find-file-hook . completion-find-file-hook)
- (pre-command-hook . completion-before-command)
+ (dolist (x `((find-file-hook . ,#'completion-find-file-hook)
+ (pre-command-hook . ,#'completion-before-command)
;; Save completions when killing Emacs.
- (kill-emacs-hook . kill-emacs-save-completions)
-
+ (kill-emacs-hook . ,#'kill-emacs-save-completions)
+ (post-self-insert-hook . ,#'completion--post-self-insert)
+
;; Install the appropriate mode tables.
- (lisp-mode-hook . completion-lisp-mode-hook)
- (c-mode-hook . completion-c-mode-hook)
- (fortran-mode-hook . completion-setup-fortran-mode)))
+ (lisp-mode-hook . ,#'completion-lisp-mode-hook)
+ (c-mode-hook . ,#'completion-c-mode-hook)
+ (fortran-mode-hook . ,#'completion-setup-fortran-mode)))
(if dynamic-completion-mode
(add-hook (car x) (cdr x))
(remove-hook (car x) (cdr x))))
@@ -2315,44 +2314,7 @@ if ARG is omitted or nil."
;; cumb
;; Patches to standard keymaps insert completions
- ([remap kill-region] . completion-kill-region)
-
- ;; Separators
- ;; We've used the completion syntax table given as a guide.
- ;;
- ;; Global separator chars.
- ;; We left out <tab> because there are too many special
- ;; cases for it. Also, in normal coding it's rarely typed
- ;; after a word.
- (" " . completion-separator-self-insert-autofilling)
- ("!" . completion-separator-self-insert-command)
- ("%" . completion-separator-self-insert-command)
- ("^" . completion-separator-self-insert-command)
- ("&" . completion-separator-self-insert-command)
- ("(" . completion-separator-self-insert-command)
- (")" . completion-separator-self-insert-command)
- ("=" . completion-separator-self-insert-command)
- ("`" . completion-separator-self-insert-command)
- ("|" . completion-separator-self-insert-command)
- ("{" . completion-separator-self-insert-command)
- ("}" . completion-separator-self-insert-command)
- ("[" . completion-separator-self-insert-command)
- ("]" . completion-separator-self-insert-command)
- (";" . completion-separator-self-insert-command)
- ("\"". completion-separator-self-insert-command)
- ("'" . completion-separator-self-insert-command)
- ("#" . completion-separator-self-insert-command)
- ("," . completion-separator-self-insert-command)
- ("?" . completion-separator-self-insert-command)
-
- ;; We include period and colon even though they are symbol
- ;; chars because :
- ;; - in text we want to pick up the last word in a sentence.
- ;; - in C pointer refs. we want to pick up the first symbol
- ;; - it won't make a difference for lisp mode (package names
- ;; are short)
- ("." . completion-separator-self-insert-command)
- (":" . completion-separator-self-insert-command)))
+ ([remap kill-region] . completion-kill-region)))
(push (cons (car binding) (lookup-key global-map (car binding)))
completion-saved-bindings)
(global-set-key (car binding) (cdr binding)))
^ permalink raw reply related [flat|nested] 9+ messages in thread
* bug#19400: 24.4.50; `completion-separator-self-insert-command' calls `undefined' with error
2014-12-19 22:48 ` Stefan Monnier
@ 2014-12-19 23:13 ` Drew Adams
2014-12-22 11:23 ` Nicolas Richard
2014-12-22 11:23 ` Nicolas Richard
1 sibling, 1 reply; 9+ messages in thread
From: Drew Adams @ 2014-12-19 23:13 UTC (permalink / raw)
To: Stefan Monnier, Nicolas Richard; +Cc: 19400
> > emacs -Q -f dynamic-completion-mode
>
> > Instead of "^ is undefined", I get
> > "completion-separator-self-insert-command: Wrong number of
> > arguments: (0 . 0), 1"
FWIW, I don't see that problem at all, with this build (the latest
one I have):
In GNU Emacs 25.0.50.1 (i686-pc-mingw32)
of 2014-11-30 on LEG570
Repository revision: 3517da701ea5d16c296745d6678988b06bee615d
Windowing system distributor `Microsoft Corp.', version 6.1.7601
Configured using:
`configure --without-dbus --enable-checking=yes,glyphs
CPPFLAGS=-DGLYPH_DEBUG=1'
With emacs -Q -f dynamic-completion-mode I just get that mode turned on in *scratch*, and dynamic completion works fine. And I see no such problem with official releases through Emacs 24.4 either.
> Does the patch below fix this problem (I'm pretty sure it does), and
> more importantly, does it seem to preserve the expected behavior?
I haven't tried it. But why rewrite so much, just to fix this problem (if it is indeed a problem and a fix)?
If this is a regression introduced sometime after the build I mentioned above, then why not concentrate on the code change that led to the breakage? It surely wasn't a change in the completions.el code that introduced a regression here.
FWIW, just looking at the patch I wonder what happened to the autofill behavior of SPC...
^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#19400: 24.4.50; `completion-separator-self-insert-command' calls `undefined' with error
2014-12-19 23:13 ` Drew Adams
@ 2014-12-22 11:23 ` Nicolas Richard
0 siblings, 0 replies; 9+ messages in thread
From: Nicolas Richard @ 2014-12-22 11:23 UTC (permalink / raw)
To: Drew Adams; +Cc: 19400
Hi,
Drew Adams <drew.adams@oracle.com> writes:
> FWIW, I don't see that problem at all, with this build (the latest
> one I have):
"Problem" is a bit too strong to describe the situation. Pressing ^
doesn't make sense in vc-dir anyway. It's only a minor annoyance that
the error is wrong.
> With emacs -Q -f dynamic-completion-mode I just get that mode turned
> on in *scratch*, and dynamic completion works fine.
It's a global mode : it's turned on everywhere.
The next step was to open a vc-dir buffer. Did you do that ?
--
Nicolas Richard
^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#19400: 24.4.50; `completion-separator-self-insert-command' calls `undefined' with error
2014-12-19 22:48 ` Stefan Monnier
2014-12-19 23:13 ` Drew Adams
@ 2014-12-22 11:23 ` Nicolas Richard
2014-12-22 11:27 ` Andreas Schwab
2014-12-22 16:06 ` Stefan Monnier
1 sibling, 2 replies; 9+ messages in thread
From: Nicolas Richard @ 2014-12-22 11:23 UTC (permalink / raw)
To: Stefan Monnier; +Cc: Nicolas Richard, 19400
Stefan Monnier <monnier@iro.umontreal.ca> writes:
>> Instead of "^ is undefined", I get
>> "completion-separator-self-insert-command: Wrong number of arguments: (0
>> . 0), 1"
>
> Does the patch below fix this problem (I'm pretty sure it does), and
It does, thanks. Though, you need to append nil at the end of the
definition of completion-separator-chars to make it a list : (append
"foo" ".:") is not a list.
> more importantly, does it seem to preserve the expected behavior?
It seems to, but my vote doesn't really count : I rarely use
dynamic-completion-mode in fact. (I mostly use hippie-expand these
days.)
--
Nicolas Richard
^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#19400: 24.4.50; `completion-separator-self-insert-command' calls `undefined' with error
2014-12-22 11:23 ` Nicolas Richard
@ 2014-12-22 11:27 ` Andreas Schwab
2014-12-22 11:43 ` Nicolas Richard
2014-12-22 16:06 ` Stefan Monnier
1 sibling, 1 reply; 9+ messages in thread
From: Andreas Schwab @ 2014-12-22 11:27 UTC (permalink / raw)
To: Nicolas Richard; +Cc: 19400
Nicolas Richard <theonewiththeevillook@yahoo.fr> writes:
> Stefan Monnier <monnier@iro.umontreal.ca> writes:
>>> Instead of "^ is undefined", I get
>>> "completion-separator-self-insert-command: Wrong number of arguments: (0
>>> . 0), 1"
>>
>> Does the patch below fix this problem (I'm pretty sure it does), and
>
> It does, thanks. Though, you need to append nil at the end of the
> definition of completion-separator-chars to make it a list : (append
> "foo" ".:") is not a list.
s/append/concat/?
Andreas.
--
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5
"And now for something completely different."
^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#19400: 24.4.50; `completion-separator-self-insert-command' calls `undefined' with error
2014-12-22 11:27 ` Andreas Schwab
@ 2014-12-22 11:43 ` Nicolas Richard
0 siblings, 0 replies; 9+ messages in thread
From: Nicolas Richard @ 2014-12-22 11:43 UTC (permalink / raw)
To: Andreas Schwab; +Cc: Nicolas Richard, 19400
Andreas Schwab <schwab@linux-m68k.org> writes:
>> It does, thanks. Though, you need to append nil at the end of the
>> definition of completion-separator-chars to make it a list : (append
>> "foo" ".:") is not a list.
>
> s/append/concat/?
IIRC the code later uses memq on the result, hence my guess he wanted a
list.
--
Nicolas
^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#19400: 24.4.50; `completion-separator-self-insert-command' calls `undefined' with error
2014-12-22 11:23 ` Nicolas Richard
2014-12-22 11:27 ` Andreas Schwab
@ 2014-12-22 16:06 ` Stefan Monnier
2014-12-22 17:44 ` Stefan Monnier
1 sibling, 1 reply; 9+ messages in thread
From: Stefan Monnier @ 2014-12-22 16:06 UTC (permalink / raw)
To: Nicolas Richard; +Cc: 19400
> It does, thanks. Though, you need to append nil at the end of the
> definition of completion-separator-chars to make it a list : (append
> "foo" ".:") is not a list.
Thanks for spotting this.
>> more importantly, does it seem to preserve the expected behavior?
> It seems to, but my vote doesn't really count : I rarely use
> dynamic-completion-mode in fact. (I mostly use hippie-expand these
> days.)
I don't know anyone else who uses it, so you're the only vote I have
so far.
Stefan
^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#19400: 24.4.50; `completion-separator-self-insert-command' calls `undefined' with error
2014-12-22 16:06 ` Stefan Monnier
@ 2014-12-22 17:44 ` Stefan Monnier
0 siblings, 0 replies; 9+ messages in thread
From: Stefan Monnier @ 2014-12-22 17:44 UTC (permalink / raw)
To: Nicolas Richard; +Cc: 19400-done
Version:25.1
>> It does, thanks. Though, you need to append nil at the end of the
>> definition of completion-separator-chars to make it a list : (append
>> "foo" ".:") is not a list.
> Thanks for spotting this.
Fixed and installed into master.
Stefan
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2014-12-22 17:44 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-12-17 20:09 bug#19400: 24.4.50; `completion-separator-self-insert-command' calls `undefined' with error Nicolas Richard
2014-12-19 22:48 ` Stefan Monnier
2014-12-19 23:13 ` Drew Adams
2014-12-22 11:23 ` Nicolas Richard
2014-12-22 11:23 ` Nicolas Richard
2014-12-22 11:27 ` Andreas Schwab
2014-12-22 11:43 ` Nicolas Richard
2014-12-22 16:06 ` Stefan Monnier
2014-12-22 17:44 ` Stefan Monnier
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).