Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
172 lines (149 sloc) 7.38 KB

Starter Kit Python

This is part of the Emacs Starter Kit.

Starter kit Python

Support for the Python programming language.

Use Python’s python-mode.el instead of Emacs’ python.el

Replace the Python mode that comes with Emacs by the Python mode supplied by the Python distribution itself.

(require 'python-mode)
(add-to-list 'auto-mode-alist '("\\.py\\'" . python-mode))
(add-to-list 'interpreter-mode-alist '("python" . python-mode))
(setq org-babel-python-mode 'python-mode)

;;; My modification: get it to stop at underscores...not
(modify-syntax-entry ?_ "w" py-mode-syntax-table)

Facilitate the use of IPython

(defun python-use-ipython (cmd args)
  (setq ipython-command cmd)
  (setq py-python-command-args args)
  (require 'ipython)
  ;; (setq ipython-completion-command-string
  ;;       "print(';'.join(__IP.Completer.all_completions('%s')))\n")
(setq ipython-command "/usr/local/share/python/ipython")

(setq ipython-completion-command-string "print(';'.join(get_ipython().Completer.complete('%s')[1])) #PYTHON-MODE SILENT\n")

(setq interpreter-mode-alist
      (cons '("python" . python-mode)
      '(lambda () (progn
               (set-variable 'py-indent-offset 4)
               (set-variable 'py-smart-indentation nil)
               (set-variable 'indent-tabs-mode nil) )))

;;; Added by Chris
;; (python-use-ipython "/usr/local/share/python/ipython")

In your personal configuration, add something like this to use IPython:

(python-use-ipython "/usr/local/bin/ipython" '("-colors" "LightBG" "-nobanner"))

Virtualenv support

(add-to-list 'load-path (concat dotfiles-dir "/src/virtualenv"))
(require 'virtualenv)

New ropemacs thing

;;  (load-library "init_python")
  ;;; Sometimes commenting so it doesn't stop my emacs startup, requiring me to --debug-init

Ropemacs and Pymacs

  ;; (add-to-list 'load-path "~/.emacs.d/src/Pymacs-.24b/")
  ;; Initialize Pymacs                                                                                           
  ;; (autoload 'pymacs-apply "pymacs")
  ;; (autoload 'pymacs-call "pymacs")
  ;; (autoload 'pymacs-eval "pymacs" nil t)
  ;; (autoload 'pymacs-exec "pymacs" nil t)
  ;; (autoload 'pymacs-load "pymacs" nil t)
  ;; Initialize Rope
  ;; (pymacs-load "ropemacs" "rope-")
  (setq ropemacs-enable-autoimport t)
  ;;; Auto-completion                                                                                            
  ;;;  Integrates:                                                                                               
  ;;;   1) Rope                                                                                                  
  ;;;   2) Yasnippet                                                                                             
  ;;;   all with AutoComplete.el                                                                                 
  (defun prefix-list-elements (list prefix)
    (let (value)
       (dolist (element list value)
        (setq value (cons (format "%s%s" prefix element) value))))))
  (defvar ac-source-rope
       . (lambda ()
           (prefix-list-elements (rope-completions) ac-target))))
    "Source for Rope")
  (defun ac-python-find ()
    "Python `ac-find-function'."
    (require 'thingatpt)
    (let ((symbol (car-safe (bounds-of-thing-at-point 'symbol))))
      (if (null symbol)
          (if (string= "." (buffer-substring (- (point) 1) (point)))
  (defun ac-python-candidate ()
    "Python `ac-candidates-function'"
    (let (candidates)
      (dolist (source ac-sources)
        (if (symbolp source)
            (setq source (symbol-value source)))
        (let* ((ac-limit (or (cdr-safe (assq 'limit source)) ac-limit))
               (requires (cdr-safe (assq 'requires source)))
          (if (or (null requires)
                  (>= (length ac-target) requires))
              (setq cand
                    (delq nil
                          (mapcar (lambda (candidate)
                                    (propertize candidate 'source source))
                                  (funcall (cdr (assq 'candidates source)))))))
          (if (and (> ac-limit 1)
                   (> (length cand) ac-limit))
              (setcdr (nthcdr (1- ac-limit) cand) nil))
          (setq candidates (append candidates cand))))
      (delete-dups candidates)))
  (add-hook 'python-mode-hook
            (lambda ()
                   (auto-complete-mode 1)
                   (set (make-local-variable 'ac-sources)
                        (append ac-sources '(ac-source-rope) '(ac-source-yasnippet)))
                   (set (make-local-variable 'ac-find-function) 'ac-python-find)
                   (set (make-local-variable 'ac-candidate-function) 'ac-python-candidate)
                   (set (make-local-variable 'ac-auto-start) 2)))
;;;                   (set (make-local-variable 'ac-auto-start) nil)))
;;; trying to see why ac won't work
  ;;Ryan's python specific tab completion                                                                        
  (defun ryan-python-tab ()
    ; Try the following:                                                                                         
    ; 1) Do a yasnippet expansion                                                                                
    ; 2) Do a Rope code completion                                                                               
    ; 3) Do an indent                                                                                            
    (if (eql (ac-start) 0)
  (defadvice ac-start (before advice-turn-on-auto-start activate)
    (set (make-local-variable 'ac-auto-start) t))
  (defadvice ac-cleanup (after advice-turn-off-auto-start activate)
    (set (make-local-variable 'ac-auto-start) nil))
  (define-key python-mode-map "\t" 'ryan-python-tab)
  ;;; End Auto Completion                                                                                        

Use Cython mode

(require 'cython-mode)
(add-to-list 'auto-mode-alist '("\\.pyx\\'" . cython-mode))
(add-to-list 'auto-mode-alist '("\\.pxd\\'" . cython-mode))
(add-to-list 'auto-mode-alist '("\\.pxi\\'" . cython-mode))