[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Python completion when using pdb (M-x pdb)
From: |
Charles A. Roelli |
Subject: |
Re: Python completion when using pdb (M-x pdb) |
Date: |
Sun, 28 May 2017 16:38:44 +0200 |
User-agent: |
Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 |
Hi Maxim,
I use PDB all the time and was wondering about this too. From what I've
found, it looks like M-x pdb does not implement completion -- although it
probably could be done by reusing some of the code already written
in python.el.
However, python.el does come with a "PDB tracking" function that works like
this: as soon as a "(Pdb)" prompt is detected in a Python shell buffer
(done by the function `python-pdbtrack-comint-output-filter-function'),
the line/file where the Python interpreter stopped is shown in a buffer.
(I've never tried it out, but this is what I can gather from reading the
code). To me this seems more limited than using M-x pdb, since you miss
out on the helpful features of GUD (traversing stack frames, printing
expressions in tooltips, setting breakpoints with C-x C-a C-b, etc.).
But it may still be helpful in some cases.
Apparently, though, completion in a "PDB tracking" Python shell buffer is
supposed to work, looking at the following lines from
`python-shell-completion-at-point':
(completion-fn
(with-current-buffer (process-buffer process)
(cond ((or (null prompt)
(< (point) (cdr prompt-boundaries)))
#'ignore)
((or (not python-shell-completion-native-enable)
;; Even if native completion is enabled, for
;; pdb interaction always use the fallback
;; mechanism since the completer is changed.
;; Also, since pdb interaction is single-line
;; based, this is enough.
(string-match-p python-shell-prompt-pdb-regexp
prompt))
#'python-shell-completion-get-completions)
(t #'python-shell-completion-native-get-completions)))))
i.e., the completion code is supposed to use the fallback method for
PDB. If you can put together a simple example where this isn't working,
it would be helpful if you filed a bug report with M-x report-emacs-bug,
and we can discuss this further there.
Cheers,
Charles
On 23/05/2017 18:06, Maxim Cournoyer wrote:
Hello Emacs!
I've recently discovered that Emacs provides it's own completion
mechanism, for example when running M-x run-python. This works even with
the vanilla Python interpreter, which doesn't provide such completion
out-of-the-box itself, which is nice!
However, I couldn't make completion work in pdb. My understanding, when
searching on the web, is that it *should* work in pdb too. For example,
the commit a92066b (python.el: Fix completion for pdb interactions) made
two years ago would suggest that it should work.
Things I've tried:
1. Using M-x pdb: The buffer is not even set up for completion with
python.el. C-h k <TAB> reveals that it simply calls
`indent-for-tab-command'.
2. Once debugging, I used 'M-x run-python'. The Python process "inherited"
the already running pdb process and I could see the (Pdb) prompt from
there. (The same could have been attained by M-x run-python at first,
then execfile some/file (python 2) in wich "import pdb; pdb.set_trace()"
is used.
This time, C-h k <TAB> revealed it was bound to
`python-shell-completion-complete-or-indent', which is better. However,
attempting to tab-complete any symbol at the pdb prompt returned 'No
match' at the minibuffer.
I also tested with realgud instead of gud, with the same result.
Any pointers would be very appreciated :)
Maxim