Package: emacs;
Reported by: Thierry Volpiatto <thierry.volpiatto <at> gmail.com>
Date: Wed, 7 Jun 2017 09:32:01 UTC
Severity: normal
Tags: fixed, patch
Found in version 25.2
Fixed in version 26.1
Done: npostavs <at> users.sourceforge.net
Bug is archived. No further changes may be made.
To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 27272 in the body.
You can then email your comments to 27272 AT debbugs.gnu.org in the normal way.
Toggle the display of automated, internal messages from the tracker.
View this report as an mbox folder, status mbox, maintainer mbox
bug-gnu-emacs <at> gnu.org
:bug#27272
; Package emacs
.
(Wed, 07 Jun 2017 09:32:01 GMT) Full text and rfc822 format available.Thierry Volpiatto <thierry.volpiatto <at> gmail.com>
:bug-gnu-emacs <at> gnu.org
.
(Wed, 07 Jun 2017 09:32:01 GMT) Full text and rfc822 format available.Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
From: Thierry Volpiatto <thierry.volpiatto <at> gmail.com> To: bug-gnu-emacs <at> gnu.org Subject: 25.2; [patch] Fix positional args among keyword args in eldoc. Date: Wed, 07 Jun 2017 11:31:28 +0200
If no objections can I push this ? Thanks. master 27cdf2989e82644567553f83ee9ce3f7e99bfc27 Author: Thierry Volpiatto <thierry.volpiatto <at> gmail.com> AuthorDate: Wed Jun 7 11:25:01 2017 +0200 Commit: Thierry Volpiatto <thierry.volpiatto <at> gmail.com> CommitDate: Wed Jun 7 11:25:01 2017 +0200 Parent: 43885eac09d More authors.el updates Merged: master Containing: master Follows: emacs-25.1 (129069) Fix eldoc with positional arg among keyword args. * lisp/progmodes/elisp-mode.el (elisp--highlight-function-argument): Switch to indexed arg searching when no keyword found behind arg. 1 file changed, 3 insertions(+), 3 deletions(-) lisp/progmodes/elisp-mode.el | 6 +++--- modified lisp/progmodes/elisp-mode.el @@ -1416,7 +1416,7 @@ In the absence of INDEX, just call `eldoc-docstring-format-sym-doc'." (let* (case-fold-search key-have-value (sym-name (symbol-name sym)) - (cur-w (current-word)) + (cur-w (current-word t)) (args-lst-ak (cdr (member "&key" args-lst))) (limit (save-excursion (when (re-search-backward sym-name nil t) @@ -1425,7 +1425,7 @@ In the absence of INDEX, just call `eldoc-docstring-format-sym-doc'." (substring cur-w 1) (save-excursion (let (split) - (when (re-search-backward ":\\([^()\n]*\\)" limit t) + (when (re-search-backward ":\\([^ ()\n]*\\)" limit t) (setq split (split-string (match-string 1) " " t)) (prog1 (car split) (when (cdr split) @@ -1437,7 +1437,7 @@ In the absence of INDEX, just call `eldoc-docstring-format-sym-doc'." args-lst-ak (not (member (upcase cur-a) args-lst-ak)) (upcase (car (last args-lst-ak)))))) - (unless (string= cur-w sym-name) + (unless (and cur-w (string= cur-w sym-name)) ;; The last keyword have already a value ;; i.e :foo a b and cursor is at b. ;; If signature have also `&rest' In GNU Emacs 25.2.1 (x86_64-unknown-linux-gnu, GTK+ Version 3.10.8) of 2017-04-22 built on dell-14z Windowing system distributor 'The X.Org Foundation', version 11.0.11701000 System Description: Linux Mint 17.3 Rosa Configured using: 'configure CFLAGS=-O3' Configured features: XPM JPEG TIFF GIF PNG RSVG IMAGEMAGICK SOUND GPM DBUS GCONF GSETTINGS NOTIFY LIBSELINUX GNUTLS LIBXML2 FREETYPE M17N_FLT LIBOTF XFT ZLIB TOOLKIT_SCROLL_BARS GTK3 X11 Important settings: value of $LC_MONETARY: fr_FR.UTF-8 value of $LC_NUMERIC: fr_FR.UTF-8 value of $LC_TIME: fr_FR.UTF-8 value of $LANG: fr_FR.UTF-8 locale-coding-system: utf-8-unix Major mode: Emacs-Lisp Minor modes in effect: global-git-gutter-mode: t git-gutter-mode: t eldoc-in-minibuffer-mode: t global-undo-tree-mode: t undo-tree-mode: t diff-auto-refine-mode: t magit-auto-revert-mode: t auto-revert-mode: t global-git-commit-mode: t psession-mode: t dired-async-mode: t display-time-mode: t winner-mode: t auto-image-file-mode: t savehist-mode: t show-paren-mode: t helm-descbinds-mode: t helm-top-poll-mode: t helm-push-mark-mode: t helm-mode: t shell-dirtrack-mode: t helm-adaptive-mode: t helm-popup-tip-mode: t async-bytecomp-package-mode: t minibuffer-depth-indicate-mode: t override-global-mode: t tooltip-mode: t global-eldoc-mode: t eldoc-mode: t mouse-wheel-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t column-number-mode: t line-number-mode: t transient-mark-mode: t Recent messages: [C-t] show common commands, [?] describe events, [C-h i] show manual Running git commit -- [2 times] Diffing changes to be committed (C-g to abort diffing) [2 times] When done with a buffer, type C-c C-c Type C-c C-c to finish, or C-c C-k to cancel Saving file /home/thierry/labo/emacs/.git/COMMIT_EDITMSG... Wrote /home/thierry/labo/emacs/.git/COMMIT_EDITMSG Git finished [2 times] Drop all stashes in refs/stash? (y or n) y [2 times] Mark set next-line: End of buffer [12 times] Load-path shadows: /home/thierry/.emacs.d/elpa/org-20170515/ob-keys hides /usr/local/share/emacs/25.2/lisp/org/ob-keys /home/thierry/.emacs.d/elpa/org-20170515/ob-ref hides /usr/local/share/emacs/25.2/lisp/org/ob-ref /home/thierry/.emacs.d/elpa/org-20170515/ox-org hides /usr/local/share/emacs/25.2/lisp/org/ox-org /home/thierry/.emacs.d/elpa/org-20170515/ob-sass hides /usr/local/share/emacs/25.2/lisp/org/ob-sass /home/thierry/.emacs.d/elpa/org-20170515/org-bbdb hides /usr/local/share/emacs/25.2/lisp/org/org-bbdb /home/thierry/.emacs.d/elpa/org-20170515/ox-latex hides /usr/local/share/emacs/25.2/lisp/org/ox-latex /home/thierry/.emacs.d/elpa/org-20170515/ox-beamer hides /usr/local/share/emacs/25.2/lisp/org/ox-beamer /home/thierry/.emacs.d/elpa/org-20170515/org-crypt hides /usr/local/share/emacs/25.2/lisp/org/org-crypt /home/thierry/.emacs.d/elpa/org-20170515/ob-maxima hides /usr/local/share/emacs/25.2/lisp/org/ob-maxima /home/thierry/.emacs.d/elpa/org-20170515/ob-R hides /usr/local/share/emacs/25.2/lisp/org/ob-R /home/thierry/.emacs.d/elpa/org-20170515/ob-eval hides /usr/local/share/emacs/25.2/lisp/org/ob-eval /home/thierry/.emacs.d/elpa/org-20170515/org-datetree hides /usr/local/share/emacs/25.2/lisp/org/org-datetree /home/thierry/.emacs.d/elpa/org-20170515/org-element hides /usr/local/share/emacs/25.2/lisp/org/org-element /home/thierry/.emacs.d/elpa/org-20170515/ob-core hides /usr/local/share/emacs/25.2/lisp/org/ob-core /home/thierry/.emacs.d/elpa/org-20170515/ox-md hides /usr/local/share/emacs/25.2/lisp/org/ox-md /home/thierry/.emacs.d/elpa/org-20170515/org-indent hides /usr/local/share/emacs/25.2/lisp/org/org-indent /home/thierry/.emacs.d/elpa/org-20170515/ox hides /usr/local/share/emacs/25.2/lisp/org/ox /home/thierry/.emacs.d/elpa/org-20170515/ob-fortran hides /usr/local/share/emacs/25.2/lisp/org/ob-fortran /home/thierry/.emacs.d/elpa/org-20170515/ob-matlab hides /usr/local/share/emacs/25.2/lisp/org/ob-matlab /home/thierry/.emacs.d/elpa/org-20170515/org-macro hides /usr/local/share/emacs/25.2/lisp/org/org-macro /home/thierry/.emacs.d/elpa/org-20170515/ox-texinfo hides /usr/local/share/emacs/25.2/lisp/org/ox-texinfo /home/thierry/.emacs.d/elpa/org-20170515/ob-sqlite hides /usr/local/share/emacs/25.2/lisp/org/ob-sqlite /home/thierry/.emacs.d/elpa/org-20170515/org-faces hides /usr/local/share/emacs/25.2/lisp/org/org-faces /home/thierry/.emacs.d/elpa/org-20170515/org-pcomplete hides /usr/local/share/emacs/25.2/lisp/org/org-pcomplete /home/thierry/.emacs.d/elpa/org-20170515/org-mouse hides /usr/local/share/emacs/25.2/lisp/org/org-mouse /home/thierry/.emacs.d/elpa/org-20170515/ob-emacs-lisp hides /usr/local/share/emacs/25.2/lisp/org/ob-emacs-lisp /home/thierry/.emacs.d/elpa/org-20170515/org-archive hides /usr/local/share/emacs/25.2/lisp/org/org-archive /home/thierry/.emacs.d/elpa/org-20170515/org-capture hides /usr/local/share/emacs/25.2/lisp/org/org-capture /home/thierry/.emacs.d/elpa/org-20170515/ob-awk hides /usr/local/share/emacs/25.2/lisp/org/ob-awk /home/thierry/.emacs.d/elpa/org-20170515/ob-octave hides /usr/local/share/emacs/25.2/lisp/org/ob-octave /home/thierry/.emacs.d/elpa/org-20170515/org-timer hides /usr/local/share/emacs/25.2/lisp/org/org-timer /home/thierry/.emacs.d/elpa/org-20170515/ob-sql hides /usr/local/share/emacs/25.2/lisp/org/ob-sql /home/thierry/.emacs.d/elpa/org-20170515/ob-latex hides /usr/local/share/emacs/25.2/lisp/org/ob-latex /home/thierry/.emacs.d/elpa/org-20170515/org-macs hides /usr/local/share/emacs/25.2/lisp/org/org-macs /home/thierry/.emacs.d/elpa/org-20170515/org-rmail hides /usr/local/share/emacs/25.2/lisp/org/org-rmail /home/thierry/.emacs.d/elpa/org-20170515/org-w3m hides /usr/local/share/emacs/25.2/lisp/org/org-w3m /home/thierry/.emacs.d/elpa/org-20170515/ob-io hides /usr/local/share/emacs/25.2/lisp/org/ob-io /home/thierry/.emacs.d/elpa/org-20170515/ob hides /usr/local/share/emacs/25.2/lisp/org/ob /home/thierry/.emacs.d/elpa/org-20170515/ob-perl hides /usr/local/share/emacs/25.2/lisp/org/ob-perl /home/thierry/.emacs.d/elpa/org-20170515/ob-mscgen hides /usr/local/share/emacs/25.2/lisp/org/ob-mscgen /home/thierry/.emacs.d/elpa/org-20170515/ob-lilypond hides /usr/local/share/emacs/25.2/lisp/org/ob-lilypond /home/thierry/.emacs.d/elpa/org-20170515/org-footnote hides /usr/local/share/emacs/25.2/lisp/org/org-footnote /home/thierry/.emacs.d/elpa/org-20170515/ob-java hides /usr/local/share/emacs/25.2/lisp/org/ob-java /home/thierry/.emacs.d/elpa/org-20170515/ox-html hides /usr/local/share/emacs/25.2/lisp/org/ox-html /home/thierry/.emacs.d/elpa/org-20170515/ob-haskell hides /usr/local/share/emacs/25.2/lisp/org/ob-haskell /home/thierry/.emacs.d/elpa/org-20170515/org-docview hides /usr/local/share/emacs/25.2/lisp/org/org-docview /home/thierry/.emacs.d/elpa/org-20170515/ob-comint hides /usr/local/share/emacs/25.2/lisp/org/ob-comint /home/thierry/.emacs.d/elpa/org-20170515/ob-css hides /usr/local/share/emacs/25.2/lisp/org/ob-css /home/thierry/.emacs.d/elpa/org-20170515/ob-ditaa hides /usr/local/share/emacs/25.2/lisp/org/ob-ditaa /home/thierry/.emacs.d/elpa/org-20170515/ob-scala hides /usr/local/share/emacs/25.2/lisp/org/ob-scala /home/thierry/.emacs.d/elpa/org-20170515/org hides /usr/local/share/emacs/25.2/lisp/org/org /home/thierry/.emacs.d/elpa/org-20170515/org-mobile hides /usr/local/share/emacs/25.2/lisp/org/org-mobile /home/thierry/.emacs.d/elpa/org-20170515/ob-lisp hides /usr/local/share/emacs/25.2/lisp/org/ob-lisp /home/thierry/.emacs.d/elpa/org-20170515/ob-gnuplot hides /usr/local/share/emacs/25.2/lisp/org/ob-gnuplot /home/thierry/.emacs.d/elpa/org-20170515/org-src hides /usr/local/share/emacs/25.2/lisp/org/org-src /home/thierry/.emacs.d/elpa/org-20170515/ox-ascii hides /usr/local/share/emacs/25.2/lisp/org/ox-ascii /home/thierry/.emacs.d/elpa/org-20170515/ob-calc hides /usr/local/share/emacs/25.2/lisp/org/ob-calc /home/thierry/.emacs.d/elpa/org-20170515/org-irc hides /usr/local/share/emacs/25.2/lisp/org/org-irc /home/thierry/.emacs.d/elpa/org-20170515/org-loaddefs hides /usr/local/share/emacs/25.2/lisp/org/org-loaddefs /home/thierry/.emacs.d/elpa/org-20170515/org-install hides /usr/local/share/emacs/25.2/lisp/org/org-install /home/thierry/.emacs.d/elpa/org-20170515/org-info hides /usr/local/share/emacs/25.2/lisp/org/org-info /home/thierry/.emacs.d/elpa/org-20170515/ob-plantuml hides /usr/local/share/emacs/25.2/lisp/org/ob-plantuml /home/thierry/.emacs.d/elpa/org-20170515/org-feed hides /usr/local/share/emacs/25.2/lisp/org/org-feed /home/thierry/.emacs.d/elpa/org-20170515/org-version hides /usr/local/share/emacs/25.2/lisp/org/org-version /home/thierry/.emacs.d/elpa/org-20170515/ob-makefile hides /usr/local/share/emacs/25.2/lisp/org/ob-makefile /home/thierry/.emacs.d/elpa/org-20170515/org-entities hides /usr/local/share/emacs/25.2/lisp/org/org-entities /home/thierry/.emacs.d/elpa/org-20170515/ob-python hides /usr/local/share/emacs/25.2/lisp/org/ob-python /home/thierry/.emacs.d/elpa/org-20170515/ob-ledger hides /usr/local/share/emacs/25.2/lisp/org/ob-ledger /home/thierry/.emacs.d/elpa/org-20170515/ox-man hides /usr/local/share/emacs/25.2/lisp/org/ox-man /home/thierry/.emacs.d/elpa/org-20170515/ob-shen hides /usr/local/share/emacs/25.2/lisp/org/ob-shen /home/thierry/.emacs.d/elpa/org-20170515/org-inlinetask hides /usr/local/share/emacs/25.2/lisp/org/org-inlinetask /home/thierry/.emacs.d/elpa/org-20170515/org-list hides /usr/local/share/emacs/25.2/lisp/org/org-list /home/thierry/.emacs.d/elpa/org-20170515/ox-publish hides /usr/local/share/emacs/25.2/lisp/org/ox-publish /home/thierry/.emacs.d/elpa/org-20170515/org-gnus hides /usr/local/share/emacs/25.2/lisp/org/org-gnus /home/thierry/.emacs.d/elpa/org-20170515/org-agenda hides /usr/local/share/emacs/25.2/lisp/org/org-agenda /home/thierry/.emacs.d/elpa/org-20170515/org-id hides /usr/local/share/emacs/25.2/lisp/org/org-id /home/thierry/.emacs.d/elpa/org-20170515/org-plot hides /usr/local/share/emacs/25.2/lisp/org/org-plot /home/thierry/.emacs.d/elpa/org-20170515/ob-C hides /usr/local/share/emacs/25.2/lisp/org/ob-C /home/thierry/.emacs.d/elpa/org-20170515/org-clock hides /usr/local/share/emacs/25.2/lisp/org/org-clock /home/thierry/.emacs.d/elpa/org-20170515/org-attach hides /usr/local/share/emacs/25.2/lisp/org/org-attach /home/thierry/.emacs.d/elpa/org-20170515/ob-ruby hides /usr/local/share/emacs/25.2/lisp/org/ob-ruby /home/thierry/.emacs.d/elpa/org-20170515/org-habit hides /usr/local/share/emacs/25.2/lisp/org/org-habit /home/thierry/.emacs.d/elpa/org-20170515/org-eshell hides /usr/local/share/emacs/25.2/lisp/org/org-eshell /home/thierry/.emacs.d/elpa/org-20170515/ob-ocaml hides /usr/local/share/emacs/25.2/lisp/org/ob-ocaml /home/thierry/.emacs.d/elpa/org-20170515/ox-odt hides /usr/local/share/emacs/25.2/lisp/org/ox-odt /home/thierry/.emacs.d/elpa/org-20170515/ob-exp hides /usr/local/share/emacs/25.2/lisp/org/ob-exp /home/thierry/.emacs.d/elpa/org-20170515/ob-dot hides /usr/local/share/emacs/25.2/lisp/org/ob-dot /home/thierry/.emacs.d/elpa/org-20170515/ob-scheme hides /usr/local/share/emacs/25.2/lisp/org/ob-scheme /home/thierry/.emacs.d/elpa/org-20170515/ob-org hides /usr/local/share/emacs/25.2/lisp/org/ob-org /home/thierry/.emacs.d/elpa/org-20170515/org-bibtex hides /usr/local/share/emacs/25.2/lisp/org/org-bibtex /home/thierry/.emacs.d/elpa/org-20170515/org-compat hides /usr/local/share/emacs/25.2/lisp/org/org-compat /home/thierry/.emacs.d/elpa/org-20170515/ox-icalendar hides /usr/local/share/emacs/25.2/lisp/org/ox-icalendar /home/thierry/.emacs.d/elpa/org-20170515/org-colview hides /usr/local/share/emacs/25.2/lisp/org/org-colview /home/thierry/.emacs.d/elpa/org-20170515/ob-picolisp hides /usr/local/share/emacs/25.2/lisp/org/ob-picolisp /home/thierry/.emacs.d/elpa/org-20170515/org-mhe hides /usr/local/share/emacs/25.2/lisp/org/org-mhe /home/thierry/.emacs.d/elpa/org-20170515/org-table hides /usr/local/share/emacs/25.2/lisp/org/org-table /home/thierry/.emacs.d/elpa/org-20170515/ob-clojure hides /usr/local/share/emacs/25.2/lisp/org/ob-clojure /home/thierry/.emacs.d/elpa/org-20170515/ob-tangle hides /usr/local/share/emacs/25.2/lisp/org/ob-tangle /home/thierry/.emacs.d/elpa/org-20170515/ob-table hides /usr/local/share/emacs/25.2/lisp/org/ob-table /home/thierry/.emacs.d/elpa/org-20170515/ob-asymptote hides /usr/local/share/emacs/25.2/lisp/org/ob-asymptote /home/thierry/.emacs.d/elpa/org-20170515/org-ctags hides /usr/local/share/emacs/25.2/lisp/org/org-ctags /home/thierry/.emacs.d/elpa/org-20170515/ob-screen hides /usr/local/share/emacs/25.2/lisp/org/ob-screen /home/thierry/.emacs.d/elpa/org-20170515/org-protocol hides /usr/local/share/emacs/25.2/lisp/org/org-protocol /home/thierry/.emacs.d/elpa/org-20170515/ob-js hides /usr/local/share/emacs/25.2/lisp/org/ob-js /home/thierry/.emacs.d/elpa/org-20170515/ob-lob hides /usr/local/share/emacs/25.2/lisp/org/ob-lob /home/thierry/.emacs.d/elpa/let-alist-1.0.5/let-alist hides /usr/local/share/emacs/25.2/lisp/emacs-lisp/let-alist /home/thierry/.emacs.d/elpa/seq-2.20/seq hides /usr/local/share/emacs/25.2/lisp/emacs-lisp/seq Features: (shadow epa-mail face-remap emacsbug helm-command view tramp-cache whitespace helm-ls-git vc vc-dispatcher tabify make-mode vc-filewise vc-rcs ledger-config ledger vc-git naquadah-theme solar cal-dst holidays hol-loaddefs em-unix em-term term disp-table ehelp em-script em-prompt em-ls em-hist em-pred em-glob em-dirs em-cmpl em-basic em-banner em-alias tv-utils log-view realgud realgud-zshdb realgud:zshdb-track-mode realgud:zshdb-core realgud:zshdb-init realgud-trepan3k realgud:trepan3k-track-mode realgud:trepan3k-core realgud:trepan3k-init realgud-trepan2 realgud:trepan2-track-mode realgud:trepan2-core realgud:trepan2-init python realgud-trepanpl realgud:trepanpl-track-mode realgud:trepanpl-core realgud:trepanpl-init realgud-trepanjs realgud:trepanjs-track-mode realgud:trepanjs-core realgud:trepanjs-init realgud-trepan realgud:trepan-track-mode realgud:trepan-core realgud:trepan-init realgud-remake realgud:remake-track-mode realgud:remake-core realgud:remake-init realgud-rdebug realgud-rdebug-track-mode realgud-rdebug-core realgud-rdebug-init realgud-lang-ruby realgud-perldb realgud:perldb-track-mode realgud:perldb-core realgud:perldb-init realgud-lang-perl realgud-pdb realgud:pdb-track-mode realgud:pdb-core realgud:pdb-init realgud-nodejs realgud:nodejs-track-mode realgud:nodejs-core realgud:nodejs-init realgud-lang-js realgud-kshdb realgud:kshdb-track-mode realgud:kshdb-core realgud:kshdb-init realgud-jdb realgud:jdb-track-mode realgud:jdb-core realgud:jdb-init realgud-lang-java gud realgud-ipdb realgud:ipdb-track-mode realgud:ipdb-core realgud:ipdb-init realgud-lang-python realgud-gub realgud:gub-track-mode realgud:gub-core realgud:gub-init realgud-gdb realgud:gdb-track-mode realgud:gdb-init realgud:gdb-core realgud-bashdb realgud:bashdb-track-mode realgud:bashdb-core realgud:bashdb-init realgud-lang-posix-shell realgud:run realgud-track-mode realgud-backtrace-mode realgud-track realgud-shortkey realgud-menu realgud-eval realgud-cmds realgud-send realgud-window realgud-utils realgud-init realgud-file realgud-core realgud-reset realgud-buffer-helper realgud-buffer-backtrace realgud-buffer-command realgud-buffer-info realgud-regexp realgud-lochist realgud-bp realgud-bp-image-data realgud-loc realgud-buffer-source realgud-key key realgud-follow realgud-lang realgud-fringe realgud-helper loc-changes realgud-custom load-relative flycheck pcmpl-git NetworkManager dbus gh gh-users gh-issues gh-pulls gh-repos gh-comments gh-gist gh-oauth gh-api logito gh-cache pcache eieio-base gh-auth gh-url url-http tls gnutls url-auth url-gw disable-mouse powerline powerline-separators color powerline-themes windmove toc-org elp cl-indent esh-var esh-io esh-cmd esh-opt esh-ext esh-proc esh-arg esh-groups eshell esh-module esh-mode esh-util markdown-mode addressbook-bookmark mu4e-config org-mu4e helm-mu mu4e-contrib mu4e desktop frameset mu4e-speedbar speedbar sb-image ezimage dframe mu4e-main mu4e-view epa derived mu4e-headers mu4e-compose mu4e-context mu4e-draft mu4e-actions ido rfc2368 smtpmail sendmail mu4e-mark mu4e-message flow-fill html2text mu4e-proc mu4e-proc-mu mu4e-utils mu4e-lists mu4e-vars hl-line cl mu4e-meta config-w3m w3m-search w3m doc-view subr-x jka-compr image-mode timezone w3m-hist w3m-fb bookmark-w3m w3m-ems w3m-ccl ccl w3m-favicon w3m-image w3m-proc w3m-util git-gutter cus-edit wid-edit appt diary-lib diary-loaddefs ange-ftp xdvi-search eldoc-eval undo-tree diff magit-obsolete magit-blame magit-stash magit-bisect magit-remote magit-commit magit-sequence magit-notes magit-worktree magit-branch magit-files magit-refs magit-status magit magit-repos magit-apply magit-wip magit-log magit-diff smerge-mode diff-mode magit-core magit-autorevert autorevert filenotify magit-process magit-margin magit-mode magit-git crm magit-section magit-popup git-commit magit-utils log-edit message rfc822 mml mml-sec epg epg-config mm-decode mm-bodies mm-encode mail-parse rfc2231 rfc2047 rfc2045 ietf-drums mailabbrev mail-utils gmm-utils mailheader pcvs-util add-log with-editor tramp-sh server pcomplete-extension pcmpl-unix pcmpl-gnu psession iterator iedit iedit-lib dired-extension emms-vlc-config emms-librefm-stream emms-librefm-scrobbler emms-playlist-limit emms-volume emms-volume-amixer emms-i18n emms-history emms-score emms-stream-info emms-metaplaylist-mode emms-bookmarks emms-cue emms-mode-line-icon emms-browser sort emms-playlist-sort emms-last-played emms-player-xine emms-player-mpd tq emms-playing-time emms-lyrics emms-url emms-streams emms-show-all emms-tag-editor emms-mark emms-mode-line emms-cache emms-info-ogginfo emms-info-mp3info emms-info later-do emms-playlist-mode emms-player-vlc emms-player-mplayer emms-player-simple emms-source-playlist emms-source-file locate emms-setup emms emms-compat org-config-thierry ob-sh org-crypt org-element avl-tree org-location-google-maps org-agenda google-maps google-maps-static google-maps-geocode google-maps-base org org-macro org-footnote org-pcomplete org-list org-faces org-entities noutline outline org-version ob-emacs-lisp ob ob-tangle org-src ob-ref ob-lob ob-table ob-keys ob-exp ob-comint ob-core ob-eval org-compat org-macs org-loaddefs find-func cal-menu calendar cal-loaddefs dired-async net-utils time winner w3m-wget wget wget-sysdep cmake-mode autotest-mode autoconf-mode sh-script smie executable ps-print ps-def lpr rst image-file savehist paren woman man ediff-merg ediff-wind ediff-diff ediff-mult ediff-help ediff-init ediff-util ediff init-helm-thierry helm-descbinds helm-sys popup helm-ring helm-elisp helm-eval edebug helm-mode helm-files image-dired tramp tramp-compat tramp-loaddefs trampver ucs-normalize shell pcomplete format-spec dired-x dired-aux ffap thingatpt helm-buffers helm-tags helm-bookmark helm-adaptive helm-info bookmark pp helm-locate helm-grep wgrep-helm wgrep grep helm-regexp helm-external helm-net browse-url xml url url-proxy url-privacy url-expand url-methods url-history url-cookie url-domsuf url-util mailcap helm-utils compile comint ansi-color ring helm-help helm-types helm helm-source helm-multi-match helm-lib dired helm-extensions-autoloads helm-config helm-autoloads helm-easymenu async-bytecomp advice async mb-depth edmacro kmacro use-package diminish bind-key easy-mmode finder-inf tex-site gh-common gh-profile url-parse auth-source gnus-util mm-util help-fns mail-prsvr password-cache url-vars rx s marshal cl-seq eieio-compat ht json map dash eieio eieio-core cl-macs info package seq byte-opt gv bytecomp byte-compile cl-extra help-mode easymenu cconv time-date avoid cus-start cus-load cl-loaddefs pcase cl-lib mule-util tooltip eldoc electric uniquify ediff-hook vc-hooks lisp-float-type mwheel x-win term/common-win x-dnd tool-bar dnd fontset image regexp-opt fringe tabulated-list newcomment elisp-mode lisp-mode prog-mode register page menu-bar rfn-eshadow timer select scroll-bar mouse jit-lock font-lock syntax facemenu font-core frame cl-generic cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese charscript case-table epa-hook jka-cmpr-hook help simple abbrev minibuffer cl-preloaded nadvice loaddefs button faces cus-face macroexp files text-properties overlay sha1 md5 base64 format env code-pages mule custom widget hashtable-print-readable backquote dbusbind inotify dynamic-setting system-font-setting font-render-setting move-toolbar gtk x-toolkit x multi-tty make-network-process emacs) Memory information: ((conses 16 852624 255376) (symbols 48 63544 4) (miscs 40 1010 3307) (strings 32 203287 136597) (string-bytes 1 6279297) (vectors 16 102612) (vector-slots 8 2224110 91733) (floats 8 3203 2112) (intervals 56 14309 3236) (buffers 976 138) (heap 1024 94228 14737)) -- Thierry Gpg Key fingerprint = 6CEC 7081 AB33 E251 4AB8 5FC2 28D1 7F53 59F2 9997
bug-gnu-emacs <at> gnu.org
:bug#27272
; Package emacs
.
(Wed, 07 Jun 2017 15:34:02 GMT) Full text and rfc822 format available.Message #8 received at 27272 <at> debbugs.gnu.org (full text, mbox):
From: Eli Zaretskii <eliz <at> gnu.org> To: Thierry Volpiatto <thierry.volpiatto <at> gmail.com> Cc: 27272 <at> debbugs.gnu.org Subject: Re: bug#27272: 25.2; [patch] Fix positional args among keyword args in eldoc. Date: Wed, 07 Jun 2017 18:33:36 +0300
> From: Thierry Volpiatto <thierry.volpiatto <at> gmail.com> > Date: Wed, 07 Jun 2017 11:31:28 +0200 > > > If no objections can I push this ? Could you perhaps provide some more explanations for what problem you are trying to solve and how? The log message doesn't help in understanding that (and also doesn't describe the actual changes, only their general idea, so it seems). Also, does any of this cause visible behavior changes? If so, perhaps a NEWS entry is in order. Thanks.
bug-gnu-emacs <at> gnu.org
:bug#27272
; Package emacs
.
(Wed, 07 Jun 2017 16:03:02 GMT) Full text and rfc822 format available.Message #11 received at 27272 <at> debbugs.gnu.org (full text, mbox):
From: Thierry Volpiatto <thierry.volpiatto <at> gmail.com> To: Eli Zaretskii <eliz <at> gnu.org> Cc: 27272 <at> debbugs.gnu.org Subject: Re: bug#27272: 25.2; [patch] Fix positional args among keyword args in eldoc. Date: Wed, 07 Jun 2017 18:02:24 +0200
Eli Zaretskii <eliz <at> gnu.org> writes: > Could you perhaps provide some more explanations for what problem you > are trying to solve and how? (cl-defun foo (prompt lst &key a b c)) (foo "prompt: " bar :b 2) Try to move your cursor on the different args with and without patch applied. Thanks. -- Thierry Gpg Key fingerprint = 6CEC 7081 AB33 E251 4AB8 5FC2 28D1 7F53 59F2 9997
bug-gnu-emacs <at> gnu.org
:bug#27272
; Package emacs
.
(Wed, 07 Jun 2017 16:16:02 GMT) Full text and rfc822 format available.Message #14 received at 27272 <at> debbugs.gnu.org (full text, mbox):
From: Dmitry Gutov <dgutov <at> yandex.ru> To: Eli Zaretskii <eliz <at> gnu.org>, Thierry Volpiatto <thierry.volpiatto <at> gmail.com> Cc: 27272 <at> debbugs.gnu.org Subject: Re: bug#27272: 25.2; [patch] Fix positional args among keyword args in eldoc. Date: Wed, 7 Jun 2017 19:15:12 +0300
On 6/7/17 6:33 PM, Eli Zaretskii wrote: > Could you perhaps provide some more explanations for what problem you > are trying to solve and how? The log message doesn't help in > understanding that (and also doesn't describe the actual changes, only > their general idea, so it seems). It would be great to have a test or two there, and that would take care of the explanation, probably. > Also, does any of this cause visible behavior changes? If so, perhaps > a NEWS entry is in order. I'm guessing it's purely a bugfix.
bug-gnu-emacs <at> gnu.org
:bug#27272
; Package emacs
.
(Wed, 07 Jun 2017 17:01:01 GMT) Full text and rfc822 format available.Message #17 received at 27272 <at> debbugs.gnu.org (full text, mbox):
From: Eli Zaretskii <eliz <at> gnu.org> To: Thierry Volpiatto <thierry.volpiatto <at> gmail.com> Cc: 27272 <at> debbugs.gnu.org Subject: Re: bug#27272: 25.2; [patch] Fix positional args among keyword args in eldoc. Date: Wed, 07 Jun 2017 20:00:25 +0300
> From: Thierry Volpiatto <thierry.volpiatto <at> gmail.com> > Cc: 27272 <at> debbugs.gnu.org > Date: Wed, 07 Jun 2017 18:02:24 +0200 > > > Could you perhaps provide some more explanations for what problem you > > are trying to solve and how? > > (cl-defun foo (prompt lst &key a b c)) > > (foo "prompt: " bar :b 2) > > Try to move your cursor on the different args with and without patch applied. Could you please tell it in English?
bug-gnu-emacs <at> gnu.org
:bug#27272
; Package emacs
.
(Thu, 08 Jun 2017 08:18:02 GMT) Full text and rfc822 format available.Message #20 received at 27272 <at> debbugs.gnu.org (full text, mbox):
From: Thierry Volpiatto <thierry.volpiatto <at> gmail.com> To: Eli Zaretskii <eliz <at> gnu.org> Cc: 27272 <at> debbugs.gnu.org Subject: Re: bug#27272: 25.2; [patch] Fix positional args among keyword args in eldoc. Date: Thu, 08 Jun 2017 10:17:36 +0200
Eli Zaretskii <eliz <at> gnu.org> writes: >> From: Thierry Volpiatto <thierry.volpiatto <at> gmail.com> >> Date: Wed, 07 Jun 2017 21:28:29 +0200 >> >> >> Try to move your cursor on the different args with and without patch applied. >> > >> > Could you please tell it in English? >> >> No I can't sorry. > > Then I don't see how I can approve your patch. Maybe you can ask > someone else to explain the issue. Perhaps I have also other things to do than loosing my time on this mailing list. So ignore the patch and consider this bugreport: Eldoc is highlighting wrongly positional arguments when they are mixed with keyword arguments. Then if you feel it is a bug, fix it (or not) otherwise close this bugreport. Thanks. BTW I am the original author of the code I was trying to patch, nevermind. -- Thierry Gpg Key fingerprint = 6CEC 7081 AB33 E251 4AB8 5FC2 28D1 7F53 59F2 9997
bug-gnu-emacs <at> gnu.org
:bug#27272
; Package emacs
.
(Thu, 08 Jun 2017 15:05:02 GMT) Full text and rfc822 format available.Message #23 received at 27272 <at> debbugs.gnu.org (full text, mbox):
From: Eli Zaretskii <eliz <at> gnu.org> To: Thierry Volpiatto <thierry.volpiatto <at> gmail.com> Cc: 27272 <at> debbugs.gnu.org Subject: Re: bug#27272: 25.2; [patch] Fix positional args among keyword args in eldoc. Date: Thu, 08 Jun 2017 18:04:29 +0300
> From: Thierry Volpiatto <thierry.volpiatto <at> gmail.com> > Cc: 27272 <at> debbugs.gnu.org > Date: Thu, 08 Jun 2017 10:17:36 +0200 > > >> >> Try to move your cursor on the different args with and without patch applied. > >> > > >> > Could you please tell it in English? > >> > >> No I can't sorry. > > > > Then I don't see how I can approve your patch. Maybe you can ask > > someone else to explain the issue. > > Perhaps I have also other things to do than loosing my time on this > mailing list. > > So ignore the patch and consider this bugreport: > > Eldoc is highlighting wrongly positional arguments when they are mixed > with keyword arguments. > > Then if you feel it is a bug, fix it (or not) otherwise close this > bugreport. > > Thanks. > > BTW I am the original author of the code I was trying to patch, nevermind. Oh, my. I feel there's some gigantic misunderstanding here, most probably due to my wording. Sorry about that. Let me try again. Could you please elaborate on the incorrect behavior in the example you provided? You wrote: > (cl-defun foo (prompt lst &key a b c)) > > (foo "prompt: " bar :b 2) > > Try to move your cursor on the different args with and without patch applied. Can you please point out which positional arguments are wrongly highlighted, and in which one of these two lines?
bug-gnu-emacs <at> gnu.org
:bug#27272
; Package emacs
.
(Sat, 10 Jun 2017 16:16:01 GMT) Full text and rfc822 format available.Message #26 received at 27272 <at> debbugs.gnu.org (full text, mbox):
From: Johan Bockgård <bojohan <at> gnu.org> To: Thierry Volpiatto <thierry.volpiatto <at> gmail.com> Cc: 27272 <at> debbugs.gnu.org Subject: Re: bug#27272: 25.2; [patch] Fix positional args among keyword args in eldoc. Date: Sat, 10 Jun 2017 18:15:28 +0200
Thierry Volpiatto <thierry.volpiatto <at> gmail.com> writes: > Fix eldoc with positional arg among keyword args. > > * lisp/progmodes/elisp-mode.el (elisp--highlight-function-argument): > Switch to indexed arg searching when no keyword found behind arg. This code is wrong both with and without your fix. All mandatory and optional arguments should be used *before* keywords are matched. Given this definition of `foo', (cl-defun foo (x &key a b c) (list x a b c)) `:b' in the following call specifies the positional argument `x', not the keyword argument `b': (foo :b :a 1) => (:b 1 nil nil)
bug-gnu-emacs <at> gnu.org
:bug#27272
; Package emacs
.
(Sun, 11 Jun 2017 08:09:02 GMT) Full text and rfc822 format available.Message #29 received at 27272 <at> debbugs.gnu.org (full text, mbox):
From: Thierry Volpiatto <thierry.volpiatto <at> gmail.com> To: Johan Bockgård <bojohan <at> gnu.org> Cc: 27272 <at> debbugs.gnu.org Subject: Re: bug#27272: 25.2; [patch] Fix positional args among keyword args in eldoc. Date: Sun, 11 Jun 2017 10:08:29 +0200
Johan Bockgård <bojohan <at> gnu.org> writes: > Thierry Volpiatto <thierry.volpiatto <at> gmail.com> writes: > >> Fix eldoc with positional arg among keyword args. >> >> * lisp/progmodes/elisp-mode.el (elisp--highlight-function-argument): >> Switch to indexed arg searching when no keyword found behind arg. > > This code is wrong both with and without your fix. All mandatory and > optional arguments should be used *before* keywords are matched. > > Given this definition of `foo', > > (cl-defun foo (x &key a b c) > (list x a b c)) > > `:b' in the following call specifies the positional argument `x', not > the keyword argument `b': > > (foo :b :a 1) => (:b 1 nil nil) Fixed as well. Thanks. -- Thierry Gpg Key fingerprint = 6CEC 7081 AB33 E251 4AB8 5FC2 28D1 7F53 59F2 9997
bug-gnu-emacs <at> gnu.org
:bug#27272
; Package emacs
.
(Thu, 15 Jun 2017 00:05:01 GMT) Full text and rfc822 format available.Message #32 received at 27272 <at> debbugs.gnu.org (full text, mbox):
From: npostavs <at> users.sourceforge.net To: Thierry Volpiatto <thierry.volpiatto <at> gmail.com> Cc: 27272 <at> debbugs.gnu.org, Johan Bockgård <bojohan <at> gnu.org> Subject: Re: bug#27272: 25.2; [patch] Fix positional args among keyword args in eldoc. Date: Wed, 14 Jun 2017 20:05:56 -0400
Thierry Volpiatto <thierry.volpiatto <at> gmail.com> writes: > Johan Bockgård <bojohan <at> gnu.org> writes: > >> Thierry Volpiatto <thierry.volpiatto <at> gmail.com> writes: >> >>> Fix eldoc with positional arg among keyword args. >>> >>> * lisp/progmodes/elisp-mode.el (elisp--highlight-function-argument): >>> Switch to indexed arg searching when no keyword found behind arg. >> >> This code is wrong both with and without your fix. All mandatory and >> optional arguments should be used *before* keywords are matched. >> >> Given this definition of `foo', >> >> (cl-defun foo (x &key a b c) >> (list x a b c)) >> >> `:b' in the following call specifies the positional argument `x', not >> the keyword argument `b': >> >> (foo :b :a 1) => (:b 1 nil nil) > > Fixed as well. Do you mean you have an updated patch that fixes this as well (which you seem to have forgotten to post)?
bug-gnu-emacs <at> gnu.org
:bug#27272
; Package emacs
.
(Thu, 15 Jun 2017 03:27:01 GMT) Full text and rfc822 format available.Message #35 received at 27272 <at> debbugs.gnu.org (full text, mbox):
From: Thierry Volpiatto <thierry.volpiatto <at> gmail.com> To: npostavs <at> users.sourceforge.net Cc: 27272 <at> debbugs.gnu.org, Johan Bockgård <bojohan <at> gnu.org> Subject: Re: bug#27272: 25.2; [patch] Fix positional args among keyword args in eldoc. Date: Thu, 15 Jun 2017 05:26:05 +0200
npostavs <at> users.sourceforge.net writes: > Do you mean you have an updated patch that fixes this as well (which you > seem to have forgotten to post)? It is here. diff --git a/lisp/progmodes/elisp-mode.el b/lisp/progmodes/elisp-mode.el index b3f452ca5b9..b2b3015581d 100644 --- a/lisp/progmodes/elisp-mode.el +++ b/lisp/progmodes/elisp-mode.el @@ -1400,7 +1400,8 @@ In the absence of INDEX, just call `eldoc-docstring-format-sym-doc'." (args-lst (mapcar (lambda (x) (replace-regexp-in-string "\\`[(]\\|[)]\\'" "" x)) - (split-string args)))) + (split-string args))) + (start-key-pos (cl-position "&key" args-lst :test 'equal))) ;; Find the current argument in the argument string. We need to ;; handle `&rest' and informal `...' properly. ;; @@ -1412,11 +1413,12 @@ In the absence of INDEX, just call `eldoc-docstring-format-sym-doc'." ;; When `&key' is used finding position based on `index' ;; would be wrong, so find the arg at point and determine ;; position in ARGS based on this current arg. - (when (string-match "&key" args) + (when (and (string-match "&key" args) + (> index start-key-pos)) (let* (case-fold-search key-have-value (sym-name (symbol-name sym)) - (cur-w (current-word)) + (cur-w (current-word t)) (args-lst-ak (cdr (member "&key" args-lst))) (limit (save-excursion (when (re-search-backward sym-name nil t) @@ -1425,7 +1427,7 @@ In the absence of INDEX, just call `eldoc-docstring-format-sym-doc'." (substring cur-w 1) (save-excursion (let (split) - (when (re-search-backward ":\\([^()\n]*\\)" limit t) + (when (re-search-backward ":\\([^ ()\n]*\\)" limit t) (setq split (split-string (match-string 1) " " t)) (prog1 (car split) (when (cdr split) @@ -1437,7 +1439,7 @@ In the absence of INDEX, just call `eldoc-docstring-format-sym-doc'." args-lst-ak (not (member (upcase cur-a) args-lst-ak)) (upcase (car (last args-lst-ak)))))) - (unless (string= cur-w sym-name) + (unless (or (null cur-w) (string= cur-w sym-name)) ;; The last keyword have already a value ;; i.e :foo a b and cursor is at b. ;; If signature have also `&rest' -- Thierry Gpg Key fingerprint = 6CEC 7081 AB33 E251 4AB8 5FC2 28D1 7F53 59F2 9997
bug-gnu-emacs <at> gnu.org
:bug#27272
; Package emacs
.
(Fri, 30 Jun 2017 04:01:02 GMT) Full text and rfc822 format available.Message #38 received at 27272 <at> debbugs.gnu.org (full text, mbox):
From: npostavs <at> users.sourceforge.net To: Thierry Volpiatto <thierry.volpiatto <at> gmail.com> Cc: 27272 <at> debbugs.gnu.org, Johan Bockgård <bojohan <at> gnu.org> Subject: Re: bug#27272: 25.2; [patch] Fix positional args among keyword args in eldoc. Date: Fri, 30 Jun 2017 00:01:43 -0400
Thierry Volpiatto <thierry.volpiatto <at> gmail.com> writes: > npostavs <at> users.sourceforge.net writes: > >> Do you mean you have an updated patch that fixes this as well (which you >> seem to have forgotten to post)? > > It is here. I get a compile warning In elisp--highlight-function-argument: ../../emacs-master/lisp/progmodes/elisp-mode.el:1404:44:Warning: reference to free variable ‘args-lst’ and then at run-time eldoc is non-functional, it just prints eldoc error: (void-variable args-lst)
bug-gnu-emacs <at> gnu.org
:bug#27272
; Package emacs
.
(Fri, 30 Jun 2017 06:38:01 GMT) Full text and rfc822 format available.Message #41 received at 27272 <at> debbugs.gnu.org (full text, mbox):
From: Thierry Volpiatto <thierry.volpiatto <at> gmail.com> To: npostavs <at> users.sourceforge.net Cc: 27272 <at> debbugs.gnu.org, Johan Bockgård <bojohan <at> gnu.org> Subject: Re: bug#27272: 25.2; [patch] Fix positional args among keyword args in eldoc. Date: Fri, 30 Jun 2017 08:36:52 +0200
npostavs <at> users.sourceforge.net writes: > Thierry Volpiatto <thierry.volpiatto <at> gmail.com> writes: > >> npostavs <at> users.sourceforge.net writes: >> >>> Do you mean you have an updated patch that fixes this as well (which you >>> seem to have forgotten to post)? >> >> It is here. > > I get a compile warning > > In elisp--highlight-function-argument: > ../../emacs-master/lisp/progmodes/elisp-mode.el:1404:44:Warning: reference to > free variable ‘args-lst’ > > and then at run-time eldoc is non-functional, it just prints > > eldoc error: (void-variable args-lst) This patch is an adaptation of what I use in my .emacs.el, originally the patch was correct, I have then deleted it (because the patch was refused) and then created it again on your request, forgetting to merge one line; Use let* instead of let. Don't expect me to send another patch for such trivial change and more generally to collaborate anymore on any emacs bugs. -- Thierry Gpg Key fingerprint = 6CEC 7081 AB33 E251 4AB8 5FC2 28D1 7F53 59F2 9997
bug-gnu-emacs <at> gnu.org
:bug#27272
; Package emacs
.
(Sat, 01 Jul 2017 21:01:02 GMT) Full text and rfc822 format available.Message #44 received at 27272 <at> debbugs.gnu.org (full text, mbox):
From: Noam Postavsky <npostavs <at> users.sourceforge.net> To: Thierry Volpiatto <thierry.volpiatto <at> gmail.com> Cc: 27272 <at> debbugs.gnu.org, Johan Bockgård <bojohan <at> gnu.org> Subject: Re: bug#27272: 25.2; [patch] Fix positional args among keyword args in eldoc. Date: Sat, 1 Jul 2017 17:00:19 -0400
On Fri, Jun 30, 2017 at 2:36 AM, Thierry Volpiatto <thierry.volpiatto <at> gmail.com> wrote: > > This patch is an adaptation of what I use in my .emacs.el, originally > the patch was correct, I have then deleted it (because the patch was > refused) and then created it again on your request, forgetting to merge > one line; Use let* instead of let. Thanks, we will have to test the patch to make sure it works since it hasn't been tested in isolation then. > Don't expect me to send another patch for such trivial change and more > generally to collaborate anymore on any emacs bugs. Yes, I noticed throughout this thread you have been avoiding any effort beyond posting your patch but I don't understand why. Are you angry about something?
bug-gnu-emacs <at> gnu.org
:bug#27272
; Package emacs
.
(Thu, 20 Jul 2017 02:21:02 GMT) Full text and rfc822 format available.Message #47 received at 27272 <at> debbugs.gnu.org (full text, mbox):
From: npostavs <at> users.sourceforge.net To: Thierry Volpiatto <thierry.volpiatto <at> gmail.com> Cc: 27272 <at> debbugs.gnu.org, Johan Bockgård <bojohan <at> gnu.org> Subject: Re: bug#27272: 25.2; [patch] Fix positional args among keyword args in eldoc. Date: Wed, 19 Jul 2017 22:22:04 -0400
[Message part 1 (text/plain, inline)]
Noam Postavsky <npostavs <at> users.sourceforge.net> writes: > On Fri, Jun 30, 2017 at 2:36 AM, Thierry Volpiatto > <thierry.volpiatto <at> gmail.com> wrote: >> >> This patch is an adaptation of what I use in my .emacs.el, originally >> the patch was correct, I have then deleted it (because the patch was >> refused) and then created it again on your request, forgetting to merge >> one line; Use let* instead of let. > > Thanks, we will have to test the patch to make sure it works since it > hasn't been tested in isolation then. I've added a commit message and tests, I will push in a few days if there are no objections.
[v3-0001-Fix-eldoc-highlighting-for-key-args-Bug-27272.patch (text/x-diff, inline)]
From 27ddcf55804d4e852b2572ec4b7cab7dacecc5d6 Mon Sep 17 00:00:00 2001 From: Thierry Volpiatto <thierry.volpiatto <at> gmail.com> Date: Thu, 15 Jun 2017 05:26:05 +0200 Subject: [PATCH v3 1/2] Fix eldoc highlighting for &key args (Bug#27272) * lisp/progmodes/elisp-mode.el (elisp--highlight-function-argument): Only switch to keyword-based searching if INDEX is greater than the index of `&key' in the argument list. All arguments prior to the `&key' are position based. Additionally, be more strict about what is a keyword when searching for the current keyword. --- lisp/progmodes/elisp-mode.el | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/lisp/progmodes/elisp-mode.el b/lisp/progmodes/elisp-mode.el index b3f452ca5b..c70d5baffe 100644 --- a/lisp/progmodes/elisp-mode.el +++ b/lisp/progmodes/elisp-mode.el @@ -1394,13 +1394,14 @@ (defun elisp--highlight-function-argument (sym args index prefix) ;; FIXME: This should probably work on the list representation of `args' ;; rather than its string representation. ;; FIXME: This function is much too long, we need to split it up! - (let ((start nil) - (end 0) - (argument-face 'eldoc-highlight-function-argument) - (args-lst (mapcar (lambda (x) - (replace-regexp-in-string - "\\`[(]\\|[)]\\'" "" x)) - (split-string args)))) + (let* ((start nil) + (end 0) + (argument-face 'eldoc-highlight-function-argument) + (args-lst (mapcar (lambda (x) + (replace-regexp-in-string + "\\`[(]\\|[)]\\'" "" x)) + (split-string args))) + (start-key-pos (cl-position "&key" args-lst :test 'equal))) ;; Find the current argument in the argument string. We need to ;; handle `&rest' and informal `...' properly. ;; @@ -1412,11 +1413,12 @@ (defun elisp--highlight-function-argument (sym args index prefix) ;; When `&key' is used finding position based on `index' ;; would be wrong, so find the arg at point and determine ;; position in ARGS based on this current arg. - (when (string-match "&key" args) + (when (and start-key-pos + (> index start-key-pos)) (let* (case-fold-search key-have-value (sym-name (symbol-name sym)) - (cur-w (current-word)) + (cur-w (current-word t)) (args-lst-ak (cdr (member "&key" args-lst))) (limit (save-excursion (when (re-search-backward sym-name nil t) @@ -1425,7 +1427,7 @@ (defun elisp--highlight-function-argument (sym args index prefix) (substring cur-w 1) (save-excursion (let (split) - (when (re-search-backward ":\\([^()\n]*\\)" limit t) + (when (re-search-backward ":\\([^ ()\n]*\\)" limit t) (setq split (split-string (match-string 1) " " t)) (prog1 (car split) (when (cdr split) @@ -1437,7 +1439,7 @@ (defun elisp--highlight-function-argument (sym args index prefix) args-lst-ak (not (member (upcase cur-a) args-lst-ak)) (upcase (car (last args-lst-ak)))))) - (unless (string= cur-w sym-name) + (unless (or (null cur-w) (string= cur-w sym-name)) ;; The last keyword have already a value ;; i.e :foo a b and cursor is at b. ;; If signature have also `&rest' -- 2.11.1
[v3-0002-Add-tests-for-previous-commit.patch (text/x-diff, inline)]
From 2e15fa20c441d5ead95a416e7fd67c525bc5fbaf Mon Sep 17 00:00:00 2001 From: Noam Postavsky <npostavs <at> gmail.com> Date: Wed, 19 Jul 2017 22:06:02 -0400 Subject: [PATCH v3 2/2] Add tests for previous commit * test/lisp/progmodes/elisp-mode-tests.el (elisp-mode-tests--face-propertized-string): New function. (elisp--highlight-function-argument-indexed) (elisp--highlight-function-argument-keyed-1) (elisp--highlight-function-argument-keyed-2): New tests. --- test/lisp/progmodes/elisp-mode-tests.el | 56 +++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/test/lisp/progmodes/elisp-mode-tests.el b/test/lisp/progmodes/elisp-mode-tests.el index ee0837f2c4..675aa31a79 100644 --- a/test/lisp/progmodes/elisp-mode-tests.el +++ b/test/lisp/progmodes/elisp-mode-tests.el @@ -24,6 +24,7 @@ (require 'ert) (require 'xref) +(eval-when-compile (require 'cl-lib)) ;;; Completion @@ -180,6 +181,61 @@ (ert-deftest eval-last-sexp-print-format-large-int-echo () (call-interactively #'eval-last-sexp) (should (equal (current-message) "66 (#o102, #x42, ?B)")))))) +;;; eldoc + +(defun elisp-mode-tests--face-propertized-string (string) + "Return substring of STRING with a non-nil `face' property." + (let* ((start (next-single-property-change 0 'face string)) + (end (and start (next-single-property-change start 'face string)))) + (and end + (substring string start end)))) + +(ert-deftest elisp--highlight-function-argument-indexed () + (dotimes (i 3) + (should + (equal (elisp-mode-tests--face-propertized-string + (elisp--highlight-function-argument 'foo "(A B C)" (1+ i) "foo: ")) + (propertize (nth i '("A" "B" "C")) + 'face 'eldoc-highlight-function-argument))))) + +(ert-deftest elisp--highlight-function-argument-keyed-1 () + (with-temp-buffer + (emacs-lisp-mode) + (insert "(foo prompt bar :b 2)") + (goto-char (1+ (point-min))) + (cl-flet ((bold-arg (i) + (elisp-mode-tests--face-propertized-string + (elisp--highlight-function-argument + 'foo "(PROMPT LST &key A B C)" i "foo: ")))) + (should-not (bold-arg 0)) + (progn (forward-sexp) (forward-char)) + (should (equal (bold-arg 1) "PROMPT")) + (progn (forward-sexp) (forward-char)) + (should (equal (bold-arg 2) "LST")) + ;; Both `:b' and `2' should highlight the `B' arg. + (progn (forward-sexp) (forward-char)) + (should (equal (bold-arg 3) "B")) + (progn (forward-sexp) (forward-char)) + (should (equal (bold-arg 4) "B"))))) + +(ert-deftest elisp--highlight-function-argument-keyed-2 () + (with-temp-buffer + (emacs-lisp-mode) + (insert "(foo :b :a 1)") + (goto-char (1+ (point-min))) + (cl-flet ((bold-arg (i) + (elisp-mode-tests--face-propertized-string + (elisp--highlight-function-argument + 'foo "(X &key A B C)" i "foo: ")))) + (should-not (bold-arg 0)) + ;; The `:b' specifies positional arg `X'. + (progn (forward-sexp) (forward-char)) + (should (equal (bold-arg 1) "X")) + (progn (forward-sexp) (forward-char)) + (should (equal (bold-arg 2) "A")) + (progn (forward-sexp) (forward-char)) + (should (equal (bold-arg 3) "A"))))) + ;;; xref (defun xref-elisp-test-descr-to-target (xref) -- 2.11.1
bug-gnu-emacs <at> gnu.org
:bug#27272
; Package emacs
.
(Sat, 05 Aug 2017 01:34:02 GMT) Full text and rfc822 format available.Message #50 received at 27272 <at> debbugs.gnu.org (full text, mbox):
From: npostavs <at> users.sourceforge.net To: Thierry Volpiatto <thierry.volpiatto <at> gmail.com> Cc: 27272 <at> debbugs.gnu.org, Johan Bockgård <bojohan <at> gnu.org> Subject: Re: bug#27272: 25.2; [patch] Fix positional args among keyword args in eldoc. Date: Fri, 04 Aug 2017 21:35:18 -0400
[Message part 1 (text/plain, inline)]
npostavs <at> users.sourceforge.net writes: > Noam Postavsky <npostavs <at> users.sourceforge.net> writes: >> Thanks, we will have to test the patch to make sure it works since it >> hasn't been tested in isolation then. > > I've added a commit message and tests, I will push in a few days if there > are no objections. Actually, I found another little problem: it uses `cl-position' without requiring `cl-lib', so it triggers void-function errors in the *scratch* buffer from 'emacs -Q'. Here's a new version that uses `member' instead of `cl-position'.
[v4-0001-Fix-eldoc-highlighting-for-key-args-Bug-27272.patch (text/x-diff, inline)]
From b6861be04246d29ea46cf4130700df4d923fac58 Mon Sep 17 00:00:00 2001 From: Thierry Volpiatto <thierry.volpiatto <at> gmail.com> Date: Thu, 15 Jun 2017 05:26:05 +0200 Subject: [PATCH v4] Fix eldoc highlighting for &key args (Bug#27272) * lisp/progmodes/elisp-mode.el (elisp--highlight-function-argument): Only switch to keyword-based searching if INDEX point beyond `&key' in the argument list. All arguments prior to the `&key' are position based. Additionally, be more strict about what is a keyword when searching for the current keyword. --- lisp/progmodes/elisp-mode.el | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/lisp/progmodes/elisp-mode.el b/lisp/progmodes/elisp-mode.el index b3f452ca5b..47739f5957 100644 --- a/lisp/progmodes/elisp-mode.el +++ b/lisp/progmodes/elisp-mode.el @@ -1394,13 +1394,14 @@ (defun elisp--highlight-function-argument (sym args index prefix) ;; FIXME: This should probably work on the list representation of `args' ;; rather than its string representation. ;; FIXME: This function is much too long, we need to split it up! - (let ((start nil) - (end 0) - (argument-face 'eldoc-highlight-function-argument) - (args-lst (mapcar (lambda (x) - (replace-regexp-in-string - "\\`[(]\\|[)]\\'" "" x)) - (split-string args)))) + (let* ((start nil) + (end 0) + (argument-face 'eldoc-highlight-function-argument) + (args-lst (mapcar (lambda (x) + (replace-regexp-in-string + "\\`[(]\\|[)]\\'" "" x)) + (split-string args))) + (args-lst-ak (cdr (member "&key" args-lst)))) ;; Find the current argument in the argument string. We need to ;; handle `&rest' and informal `...' properly. ;; @@ -1412,12 +1413,12 @@ (defun elisp--highlight-function-argument (sym args index prefix) ;; When `&key' is used finding position based on `index' ;; would be wrong, so find the arg at point and determine ;; position in ARGS based on this current arg. - (when (string-match "&key" args) + (when (and args-lst-ak + (>= index (- (length args-lst) (length args-lst-ak)))) (let* (case-fold-search key-have-value (sym-name (symbol-name sym)) - (cur-w (current-word)) - (args-lst-ak (cdr (member "&key" args-lst))) + (cur-w (current-word t)) (limit (save-excursion (when (re-search-backward sym-name nil t) (match-end 0)))) @@ -1425,7 +1426,7 @@ (defun elisp--highlight-function-argument (sym args index prefix) (substring cur-w 1) (save-excursion (let (split) - (when (re-search-backward ":\\([^()\n]*\\)" limit t) + (when (re-search-backward ":\\([^ ()\n]*\\)" limit t) (setq split (split-string (match-string 1) " " t)) (prog1 (car split) (when (cdr split) @@ -1437,7 +1438,7 @@ (defun elisp--highlight-function-argument (sym args index prefix) args-lst-ak (not (member (upcase cur-a) args-lst-ak)) (upcase (car (last args-lst-ak)))))) - (unless (string= cur-w sym-name) + (unless (or (null cur-w) (string= cur-w sym-name)) ;; The last keyword have already a value ;; i.e :foo a b and cursor is at b. ;; If signature have also `&rest' -- 2.11.1
bug-gnu-emacs <at> gnu.org
:bug#27272
; Package emacs
.
(Wed, 16 Aug 2017 01:30:03 GMT) Full text and rfc822 format available.Message #53 received at 27272 <at> debbugs.gnu.org (full text, mbox):
From: npostavs <at> users.sourceforge.net To: Thierry Volpiatto <thierry.volpiatto <at> gmail.com> Cc: 27272 <at> debbugs.gnu.org, Johan Bockgård <bojohan <at> gnu.org> Subject: Re: bug#27272: 25.2; [patch] Fix positional args among keyword args in eldoc. Date: Tue, 15 Aug 2017 21:30:53 -0400
tags 27272 fixed close 27272 26.1 quit >> I've added a commit message and tests, I will push in a few days if there >> are no objections. > > Actually, I found another little problem: it uses `cl-position' without > requiring `cl-lib', so it triggers void-function errors in the *scratch* > buffer from 'emacs -Q'. Here's a new version that uses `member' instead > of `cl-position'. Pushed to master. [1: 55c9238189]: 2017-08-15 21:22:41 -0400 Fix eldoc highlighting for &key args (Bug#27272) http://git.savannah.gnu.org/cgit/emacs.git/commit/?id=55c9238189795448075e2d4af93a7b29a505f23c [2: 3305dec538]: 2017-08-15 21:22:41 -0400 Add tests for previous commit http://git.savannah.gnu.org/cgit/emacs.git/commit/?id=3305dec5387021791eb09a93df5ab784b2297dc8
npostavs <at> users.sourceforge.net
to control <at> debbugs.gnu.org
.
(Wed, 16 Aug 2017 01:30:04 GMT) Full text and rfc822 format available.npostavs <at> users.sourceforge.net
to control <at> debbugs.gnu.org
.
(Wed, 16 Aug 2017 01:30:04 GMT) Full text and rfc822 format available.Debbugs Internal Request <help-debbugs <at> gnu.org>
to internal_control <at> debbugs.gnu.org
.
(Wed, 13 Sep 2017 11:24:05 GMT) Full text and rfc822 format available.
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.