Show More
@@ -1,7 +1,11 b'' | |||||
1 | 2006-05-24 Fernando Perez <Fernando.Perez@colorado.edu> |
|
1 | 2006-05-24 Fernando Perez <Fernando.Perez@colorado.edu> | |
2 |
|
2 | |||
3 | * ipython.el: fix the py-pdbtrack-input-prompt variable so that |
|
3 | * ipython.el: fix the py-pdbtrack-input-prompt variable so that | |
4 | python-mode recognizes our debugger mode. |
|
4 | python-mode recognizes our debugger mode. Add support for | |
|
5 | autoindent inside (X)emacs. After a patch sent in by Jin Liu | |||
|
6 | <m.liu.jin-AT-gmail.com> originally written by | |||
|
7 | doxgen-AT-newsmth.net (with minor modifications for xemacs | |||
|
8 | compatibility) | |||
5 |
|
9 | |||
6 | * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of |
|
10 | * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of | |
7 | tracebacks when walking the stack so that the stack tracking system |
|
11 | tracebacks when walking the stack so that the stack tracking system |
@@ -6,7 +6,7 b'' | |||||
6 | ;; URL: http://ipython.scipy.org |
|
6 | ;; URL: http://ipython.scipy.org | |
7 | ;; Compatibility: Emacs21, XEmacs21 |
|
7 | ;; Compatibility: Emacs21, XEmacs21 | |
8 | ;; FIXME: #$@! INPUT RING |
|
8 | ;; FIXME: #$@! INPUT RING | |
9 |
(defconst ipython-version "$Revision: 132 |
|
9 | (defconst ipython-version "$Revision: 1325 $" | |
10 | "VC version number.") |
|
10 | "VC version number.") | |
11 |
|
11 | |||
12 | ;;; Commentary |
|
12 | ;;; Commentary | |
@@ -405,4 +405,81 b' in the current *Python* session."' | |||||
405 | (message "Making completion list...%s" "done"))))) |
|
405 | (message "Making completion list...%s" "done"))))) | |
406 | ) |
|
406 | ) | |
407 |
|
407 | |||
|
408 | ;;; autoindent support: patch sent in by Jin Liu <m.liu.jin@gmail.com>, | |||
|
409 | ;;; originally written by doxgen@newsmth.net | |||
|
410 | ;;; Minor modifications by fperez for xemacs compatibility. | |||
|
411 | ||||
|
412 | (defvar ipython-autoindent t | |||
|
413 | "If non-nil, enable autoindent for IPython shell through python-mode.") | |||
|
414 | ||||
|
415 | (defvar ipython-indenting-buffer-name "*IPython Indentation Calculation*" | |||
|
416 | "Temporary buffer for indenting multiline statement.") | |||
|
417 | ||||
|
418 | (defun ipython-get-indenting-buffer () | |||
|
419 | "Return a temporary buffer set in python-mode. Create one if necessary." | |||
|
420 | (let ((buf (get-buffer-create ipython-indenting-buffer-name))) | |||
|
421 | (set-buffer buf) | |||
|
422 | (unless (eq major-mode 'python-mode) | |||
|
423 | (python-mode)) | |||
|
424 | buf)) | |||
|
425 | ||||
|
426 | (defvar ipython-indentation-string nil | |||
|
427 | "Indentation for the next line in a multiline statement.") | |||
|
428 | ||||
|
429 | (defun ipython-send-and-indent () | |||
|
430 | "Send the current line to IPython, and calculate the indentation for | |||
|
431 | the next line." | |||
|
432 | (interactive) | |||
|
433 | (if ipython-autoindent | |||
|
434 | (let ((line (buffer-substring (point-at-bol) (point))) | |||
|
435 | (after-prompt1) | |||
|
436 | (after-prompt2)) | |||
|
437 | (save-excursion | |||
|
438 | (comint-bol t) | |||
|
439 | (if (looking-at py-shell-input-prompt-1-regexp) | |||
|
440 | (setq after-prompt1 t) | |||
|
441 | (setq after-prompt2 (looking-at py-shell-input-prompt-2-regexp))) | |||
|
442 | (with-current-buffer (ipython-get-indenting-buffer) | |||
|
443 | (when after-prompt1 | |||
|
444 | (erase-buffer)) | |||
|
445 | (when (or after-prompt1 after-prompt2) | |||
|
446 | (delete-region (point-at-bol) (point)) | |||
|
447 | (insert line) | |||
|
448 | (newline-and-indent)))))) | |||
|
449 | ;; send input line to ipython interpreter | |||
|
450 | (comint-send-input)) | |||
|
451 | ||||
|
452 | (defun ipython-indentation-hook (string) | |||
|
453 | "Insert indentation string if py-shell-input-prompt-2-regexp | |||
|
454 | matches last process output." | |||
|
455 | (let* ((start-marker (or comint-last-output-start | |||
|
456 | (point-min-marker))) | |||
|
457 | (end-marker (process-mark (get-buffer-process (current-buffer)))) | |||
|
458 | (text (ansi-color-filter-apply (buffer-substring start-marker end-marker)))) | |||
|
459 | (progn | |||
|
460 | ;; XXX if `text' matches both pattern, it MUST be the last prompt-2 | |||
|
461 | (cond ((and (string-match "\n$" text) (string-match | |||
|
462 | py-shell-input-prompt-2-regexp text)) | |||
|
463 | (with-current-buffer (ipython-get-indenting-buffer) | |||
|
464 | (erase-buffer))) | |||
|
465 | ;; still a prompt-2 | |||
|
466 | ((string-match py-shell-input-prompt-2-regexp text) | |||
|
467 | (with-current-buffer (ipython-get-indenting-buffer) | |||
|
468 | (setq ipython-indentation-string | |||
|
469 | (buffer-substring (point-at-bol) (point)))) | |||
|
470 | (unless (eq ipython-indentation-string nil) | |||
|
471 | (message "ipython-indentation-hook: %s#%s##" text | |||
|
472 | ipython-indentation-string)) | |||
|
473 | (goto-char end-marker) | |||
|
474 | (insert ipython-indentation-string))) | |||
|
475 | (setq ipython-indentation-string nil)))) | |||
|
476 | ||||
|
477 | (add-hook 'py-shell-hook | |||
|
478 | (lambda () | |||
|
479 | (add-hook 'comint-output-filter-functions | |||
|
480 | 'ipython-indentation-hook))) | |||
|
481 | ||||
|
482 | (define-key py-shell-map (kbd "RET") 'ipython-send-and-indent) | |||
|
483 | ;;; / end autoindent support | |||
|
484 | ||||
408 | (provide 'ipython) |
|
485 | (provide 'ipython) |
General Comments 0
You need to be logged in to leave comments.
Login now