From 05a437b1ad76e50147decd3a9eb3ac77d9bad44f Mon Sep 17 00:00:00 2001 From: Takafumi Arakaki Date: Sun, 3 Jun 2012 17:50:13 +0200 Subject: [PATCH] Make ein:pytools-jump-to-source-command more robust --- ein-pytools.el | 24 +++++++++++++++--------- ein.py | 8 +++++--- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/ein-pytools.el b/ein-pytools.el index 9faee4b..69c349a 100644 --- a/ein-pytools.el +++ b/ein-pytools.el @@ -54,19 +54,25 @@ kernel (format "__import__('ein').find_source('%s')" object) (lambda (string object) - (let* ((filename-lineno (split-string string "\n")) - (filename (car filename-lineno)) - (lineno (string-to-number (cadr filename-lineno)))) - (unless (equal filename "") - (find-file-other-window filename) - (goto-char (point-min)) - (forward-line (1- lineno)) - (ein:log 'info "Jumping to the source of %s...Done" object)))) + (if (string-match "^WARNING: .*" string) + (ein:log 'info "Jumping to the source of %s...Not found" object) + (let* ((filename-lineno (split-string string "\n")) + (filename (car filename-lineno)) + (lineno (string-to-number (cadr filename-lineno)))) + (unless (equal filename "") + (find-file-other-window filename) + (goto-char (point-min)) + (forward-line (1- lineno)) + (ein:log 'info "Jumping to the source of %s...Done" object))))) (list object))) (defun ein:pytools-jump-to-source-command () (interactive) - (ein:pytools-jump-to-source (ein:pytools-get-kernel) (ein:object-at-point))) + (let ((kernel (ein:pytools-get-kernel)) + (object (ein:object-at-point))) + (assert (ein:kernel-ready-p kernel) nil "Kernel is not ready.") + (assert object nil "Object at point not found.") + (ein:pytools-jump-to-source kernel object))) (provide 'ein-pytools) diff --git a/ein.py b/ein.py index 7e24e6d..2e81bcf 100644 --- a/ein.py +++ b/ein.py @@ -25,6 +25,8 @@ def find_source(name): """Given an object as string, `name`, print its place in source code.""" from IPython.core.interactiveshell import InteractiveShell inst = InteractiveShell.instance() - (filename, lineno, use_temp) = inst._find_edit_target(name, {}, []) - print filename - print lineno + ret = inst._find_edit_target(name, {}, []) + if ret: + (filename, lineno, use_temp) = ret + print filename + print lineno