Subject: Re: [PATCH] Re: 25.1.50; Python completion should not strip trailing space

From: Dan Davison <[email-masked]>
Date: Sat, 27 Aug 2016 22:58:25 +0000

The patch currently only fixes "native" (readline-based) completion. If it
is agreed that this is the correct direction I can prepare a similar patch
for the non-native / legacy completion function
`python-shell-completion-get-completions', which shows the same behavior.

On Sat, 27 Aug 2016 at 14:47 Dan Davison <[email-masked]> wrote:

> Here is the patch pasted into the body of an email:
>
> From 8e69b33a53ea30389a5e3946dd711320a77e0d23 Mon Sep 17 00:00:00 2001
> From: Dan Davison <[email-masked]>
> Date: Fri, 5 Aug 2016 12:19:20 -0700
> Subject: [PATCH] Don't strip space from python completions
>
> The returned completion deliberately includes a space after a word like
> 'import', which is always followed by more words.
>
> * lisp/progmodes/python.el
> (python-shell-completion-native-get-completions):
> Remove space from regular expression character class
> ---
>  lisp/progmodes/python.el | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
> index ad69f87..8616279 100644
> --- a/lisp/progmodes/python.el
> +++ b/lisp/progmodes/python.el
> @@ -3551,7 +3551,7 @@ completion."
>                   (split-string
>                    (buffer-substring-no-properties
>                     (line-beginning-position) (point-min))
> -                  "[ \f\t\n\r\v()]+" t)
> +                  "[\f\t\n\r\v()]+" t)
>                   :test #'string=))))
>          (set-process-filter process original-filter-fn)))))
>
> --
> 2.3.2 (Apple Git-55)
>
>
> On Sat, 27 Aug 2016 at 14:21 Dan Davison <[email-masked]> wrote:
>
>> Patch attached.
>>
>> This patch is also available as a pull request at at
>> https://github.com/dandavison/emacs/pull/1 The commit hash
>> is 8e69b33a53ea30389a5e3946dd711320a77e0d23.
>>
>> I have only tested this on macOS. As far as I am aware, when the space
>> character is present, it is present deliberately and it is appropriate to
>> retain it, but I would appreciate feedback from python.el experts.
>>
>> On Sat, 27 Aug 2016 at 14:10 Dan Davison <[email-masked]> wrote:
>>
>>> From emacs -Q:
>>>
>>> (setq python-shell-interpreter "ipython"
>>>       python-shell-interpreter-args "-i")
>>>
>>> M-x run-python
>>>
>>> In the python comint buffer insert "from itertools imp" and hit tab.
>>>
>>> You will see "imp" completed as "import" (no trailing space).
>>>
>>> However, if you do this in ipython itself, you will see "imp" completed
>>> as "import ". This (i.e. what ipython does) is the desired behavior
>>> (because import is always followed by another word).
>>>
>>> In GNU Emacs 25.1.50.1 (x86_64-apple-darwin14.5.0, NS appkit-1348.17
>>> Version 10.10.5 (Build 14F27))
>>>  of 2016-04-16 built on hemiprocne
>>> Repository revision: 934549e23d6bda5231375dbfed7b42a966c85d14
>>> Windowing system distributor 'Apple', version 10.3.1348
>>> Configured using:
>>>  'configure --prefix=/usr/local/Cellar/emacs/HEAD
>>>  --enable-locallisppath=/usr/local/share/emacs/site-lisp
>>>  --infodir=/usr/local/Cellar/emacs/HEAD/share/info/emacs --with-xml2
>>>  --without-dbus --without-gnutls --with-ns --disable-ns-self-contained'
>>>
>>> Configured features:
>>> JPEG NOTIFY ACL LIBXML2 ZLIB TOOLKIT_SCROLL_BARS NS
>>>
>>> Important settings:
>>>   value of $LANG: en_US.UTF-8
>>>   locale-coding-system: utf-8-unix
>>>
>>> Major mode: Lisp Interaction
>>>
>>> Minor modes in effect:
>>>   tooltip-mode: t
>>>   global-eldoc-mode: t
>>>   electric-indent-mode: t
>>>   mouse-wheel-mode: t
>>>   tool-bar-mode: t
>>>   menu-bar-mode: t
>>>   file-name-shadow-mode: t
>>>   global-font-lock-mode: t
>>>   font-lock-mode: t
>>>   blink-cursor-mode: t
>>>   auto-composition-mode: t
>>>   auto-encryption-mode: t
>>>   auto-compression-mode: t
>>>   line-number-mode: t
>>>   transient-mark-mode: t
>>>
>>> Recent messages:
>>> For information about GNU Emacs and the GNU system, type C-h C-a.
>>>
>>> Load-path shadows:
>>> None found.
>>>
>>> Features:
>>> (shadow sort mail-extr emacsbug message dired dired-loaddefs format-spec
>>> rfc822 mml easymenu mml-sec password-cache epa derived epg epg-config
>>> gnus-util rmail rmail-loaddefs mm-decode mm-bodies mm-encode mail-parse
>>> rfc2231 mailabbrev gmm-utils mailheader sendmail rfc2047 rfc2045
>>> ietf-drums mm-util mail-prsvr mail-utils time-date mule-util tooltip
>>> eldoc electric uniquify ediff-hook vc-hooks lisp-float-type mwheel
>>> term/ns-win ns-win ucs-normalize term/common-win 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 term/tty-colors 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 obarray 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 kqueue cocoa ns
>>> multi-tty make-network-process emacs)
>>>
>>> Memory information:
>>> ((conses 16 195970 9329)
>>>  (symbols 48 19431 0)
>>>  (miscs 40 43 170)
>>>  (strings 32 14792 5110)
>>>  (string-bytes 1 431078)
>>>  (vectors 16 32763)
>>>  (vector-slots 8 640839 4764)
>>>  (floats 8 156 54)
>>>  (intervals 56 194 0)
>>>  (buffers 976 11))
>>>
>>>