config updates
[emacs-init.git] / python / init_python.el
index d45a25a..e66e6a1 100644 (file)
@@ -25,6 +25,8 @@
 
 (define-key ropemacs-local-keymap "\M-/" 'hippie-expand)
 
+(global-unset-key "\C-xpn")
+
 (defun write-file-py-cleanup-imports ()
   (save-excursion
     (condition-case nil
   nil)
 
 (defun python-init-auto-cleanup-imports-on-save ()
-  (add-hook 'write-file-functions 'write-file-py-cleanup-imports nil t))
+  (add-hook 'write-contents-functions 'write-file-py-cleanup-imports nil t))
 
 (defun my-flymake-error-at-point ()
-  (condition-case nil
+  (condition-case  nil
       (flymake-ler-text (car (nth 0 (flymake-find-err-info flymake-err-info
                                                            (flymake-current-line-no)))))
     (error (error "no flymake error at point"))))
   (flymake-goto-next-error)
   (my-flymake-show-error))
 
+(defun my-flymake-goto-prev-error ()
+  (interactive)
+  (my-flymake-check-and-wait)
+  (flymake-goto-prev-error)
+  (my-flymake-show-error))
+
 (defun py-find-file (errormark filename defaultdir)
   (let ((fullname (expand-file-name filename defaultdir)))
     (or (and (not (file-exists-p fullname))
             (progn
               (set (make-local-variable 'py-eshell-last-error) (point))
               (set (make-local-variable 'py-eshell-prefix) (or (match-string 1) ""))
+              (if (string-match "Original $" py-eshell-prefix)
+                  (setq py-eshell-prefix (substring py-eshell-prefix 0 (match-beginning 0))))
               (if example
                   (forward-line 2)
                 (while (and (< (forward-line 1) 1) (looking-at (concat py-eshell-prefix "  ")))))
   (define-key python-mode-map "\C-ci" 'my-pyflymake-add-import-from-error)
   (define-key python-mode-map "\C-ce" 'my-flymake-show-error)
   (define-key python-mode-map "\C-cn" 'my-flymake-goto-next-error)
+  (define-key python-mode-map "\C-cp" 'my-flymake-goto-prev-error)
   (define-key python-mode-map "\C-cI" 'py-cleanup-imports)
 )
 
            (local-file (file-relative-name
                         temp-file
                         (file-name-directory buffer-file-name))))
+      (message "flymake init pyflakes %s" local-file)
       (list "pyflakes" (list local-file))))
   (add-to-list 'flymake-allowed-file-name-masks
                '("\\.py\\'" flymake-pyflakes-init)))
-(add-hook 'find-file-hook 'flymake-find-file-hook)
+
+(defun safer-flymake-find-file-hook ()
+  "Don't barf if we can't open this flymake file"
+  (let ((flymake-filename
+         (flymake-create-temp-inplace (buffer-file-name) "flymake")))
+    (if (file-writable-p flymake-filename)
+        (flymake-find-file-hook)
+      (message
+       (format
+        "Couldn't enable flymake; permission denied on %s" flymake-filename)))))
+(add-hook 'find-file-hook 'safer-flymake-find-file-hook)
+
+(defun py-skip-few-lines (&optional count)
+  (if (null count) (setq count 3))
+  (let ((blanks 0))
+    (while
+        (and (or (when (eolp) (setq count 0) (incf blanks) t)
+                 (when (> count 0) (decf count) t))
+             (< (forward-line 1) 1)))
+    (> blanks 0)))
 
 (defun py-imports-region ()
   (save-excursion
                 (looking-at "__future__")))
     (beginning-of-line)
     (setq beg (point))
+    (while (and (py-skip-few-lines)
+                (looking-at "import\\s-+\\|from\\s-+"))
+      (setq beg (point)))
     (if (not (looking-at "\\(import\\s-+\\|from\\s-+\\)"))
         (cons beg beg)
       (while (looking-at "\\(import\\s-+\\|from\\s-+\\)")