[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: python-mode patch

From: Ken Manheimer
Subject: Re: python-mode patch
Date: Wed, 23 Aug 2006 11:03:30 -0400

On 8/23/06, Nick Roberts <address@hidden> wrote:
 > the other python-mode, python-mode.el, has one feature that i would
 > love (and need) to see in any python-mode before switching.  (like
 > others, i didn't know about the python-mode that comes with emacs 22,
 > and i haven't tried it.)  i originally developed it as "pdbtrack", and
 > barry warsaw integrated it with  python-mode.el.

I think it would be good to add this especially as it is so few lines
of code.

particularly when useful...

 > what it does is add a comint-output-filter-function which looks for
 > the prompts from python's interactive debugger, pdb.

Yes.  I think these hooks should be local as they interfere with other
comint derived buffers like shell, GUD etc.

agreed - didn't know about qualifying hooks as local, at the time.
(they're incredibly useful.)

 > 150 lines of code (apparently 156, now) only gets the very basic
 > pdb-session file/line tracking.  you type debugging commands at the
 > interpreter, there are no provisions for setting breakpoints in a
 > screen-oriented manner, etc - but file/line tracking is 9/10 of the
 > value of a screen-oriented debugger, for me, and the interpreter is
 > quite manageable for the other 1/10.  i'd prefer if this approach were
 > extended to do the other stuff , but at least would like to see it
 > incorporated with python.el's python-mode.

It seems to me that most Python developers prefer it to pdb in gud.el but
I see no reason why they shouldn't work alongside one another.

i don't disagree at all about enabling pdbtrack and gud to coexist.
i've seen some discussion about revamping gud (after the emacs 22
release), and have wanted to alert those concerned to a substantially
different approach, which migh yield better results - or might not,
but is worth considering.  however gud's job is done, enabling them to
coexist is good.

(i think for many python developers, me included, pdb in gud is not an
option, because it means leaving the environment at the point where
you want/need to do the debugging and somehow recreating it in a new
gud / python session.  i mention this because this quandry is not
obvious until you're actually in the situation, but the situation is
the common one for an interaction-oriented interpreted environment
like python's.  ironically, it's much like lisp in this way - hence,
emacs has edebug, debug-on-error, edebug-on-error, etc, so you can
start to debug when the bugs occur.  i suspect the pdbtrack approach
would be eminently suited for inferior lisp processes, as well...)

 > if you're interested in scoping it out, look for variables and
 > functions that contain the string pdbtrack".  i suspect most of it can
 > be used exactly as is.
 > at 150 lines of code, and since i wrote the original, i would be happy
 > to sign papers for it.

Presumably you've already signed papers for Emacs as you have contributed

i don't recall whether the signoff i've done applies to any
contributions - i think i had to sign another for icomplete, for

I find the PDB string in the mode-line too intrusive.  If it's needed, perhaps
it could be a real minor-mode in the py-shell buffer.

i haven't noticed that in a while (and haven't had the opportunity to
write python for a while), will take a look.

I would also add a sentinel so e.g the overlay arrow is no longer displayed
if the py-shell buffer is killed.

that sounds good.

How about the changes below? (this is from FC5, I don't know what version
of python-mode that corresponds to).

these are good suggestions - i'll look at them soon, see about
incorporating them into python-mode.el, and including them in the
suggestions if someone works it all into python.el.



*** /usr/share/emacs/site-lisp/python-mode.el   2006-03-08 01:12:21.000000000 
--- /home/nickrob/lisp/python-mode.el   2006-08-23 20:08:47.000000000 +1200
*** 271,281 ****
    :group 'python)
  (make-variable-buffer-local 'py-pdbtrack-do-tracking-p)

- (defcustom py-pdbtrack-minor-mode-string " PDB"
-   "*String to use in the minor mode list when pdbtrack is enabled."
-   :type 'string
-   :group 'python)
  ;; Not customizable
  (defvar py-master-file nil
    "If non-nil, execute the named file instead of the buffer's file.
--- 271,276 ----
*** 1298,1308 ****
       (apply 'make-comint py-which-bufname py-which-shell nil args))
      (make-local-variable 'comint-prompt-regexp)
      (setq comint-prompt-regexp "^>>> \\|^[.][.][.] \\|^(pdb) ")
      (add-hook 'comint-output-filter-functions
!             'py-comint-output-filter-function)
      ;; pdbtrack
!     (add-hook 'comint-output-filter-functions 'py-pdbtrack-track-stack-file)
      (setq py-pdbtrack-do-tracking-p t)
      (set-syntax-table py-mode-syntax-table)
      (use-local-map py-shell-map)
--- 1293,1305 ----
       (apply 'make-comint py-which-bufname py-which-shell nil args))
      (make-local-variable 'comint-prompt-regexp)
+     (set-process-sentinel (get-buffer-process (current-buffer)) 'py-sentinel)
      (setq comint-prompt-regexp "^>>> \\|^[.][.][.] \\|^(pdb) ")
      (add-hook 'comint-output-filter-functions
!             'py-comint-output-filter-function nil t)
      ;; pdbtrack
!     (add-hook 'comint-output-filter-functions
!             'py-pdbtrack-track-stack-file nil t)
      (setq py-pdbtrack-do-tracking-p t)
      (set-syntax-table py-mode-syntax-table)
      (use-local-map py-shell-map)
*** 3245,3258 ****

  ;; arrange to kill temp files when Emacs exists
  (add-hook 'kill-emacs-hook 'py-kill-emacs-hook)
- (add-hook 'comint-output-filter-functions 'py-pdbtrack-track-stack-file)

! ;; Add a designator to the minor mode strings
! (or (assq 'py-pdbtrack-minor-mode-string minor-mode-alist)
!     (push '(py-pdbtrack-is-tracking-p py-pdbtrack-minor-mode-string)
!         minor-mode-alist))

  (provide 'python-mode)
  ;;; python-mode.el ends here
--- 3242,3250 ----

  ;; arrange to kill temp files when Emacs exists
  (add-hook 'kill-emacs-hook 'py-kill-emacs-hook)

! (defun py-sentinel (proc msg)
!   (setq overlay-arrow-position nil))

  (provide 'python-mode)
  ;;; python-mode.el ends here

reply via email to

[Prev in Thread] Current Thread [Next in Thread]