[EMACS]auto-complete python(résolu)

Xorg, Compiz, KDE / Gnome / Xfce / Fluxbox / e17 / fvwm ... GDM/KDM/XDM...
Avatar de l’utilisateur
bungle
Daikyu
Messages : 85
Inscription : mer. 29 sept. 2010, 01:14

[EMACS]auto-complete python(résolu)

Message par bungle »

Bonjour,

donc, je vient de suivre les indication sur ce site:
http://hide1713.wordpress.com/2009/01/3 ... -in-emacs/
pour faire de mon emacs un super-IDE python

le problème, c'est que le module auto-complete fonctionne bien avec les autre langages (cela dit je suis obligé de faire Mx auto-complete à chaque fois... depuis que j'ai installé tous sa), mais pas avec python:
- quand je fait < tab > (et oui tab à été rajouter comme raccourci pour auto-complete) il m'affiche dans le mini-buffer:
auto-complete-mode is not enabled
donc je fait < Mx auto-complete-mode > il m'affiche:
auto-complete mode enabled
je refait < tab > il m'affiche:
auto-complete-mode is not enabled
donc je le force, je fait < Mx auto-complete-mode > puis < Mx auto-complete > et la il m'affiche:
auto-complete error: (void-variable ac-source-yasnippet
bef, sa fonctionne pas :? , j'effectue ce test sur un variable que j'ai déjà instancié auparavant.

le point positif, quand j’écris < class > suivit de la touche < tab > il me fait le squelette d'un classe, mais avec l'auto-completion en plus sa serai vraiment cool

si quelqu'un à une idée...
Dernière modification par bungle le ven. 25 févr. 2011, 19:18, modifié 1 fois.
Avatar de l’utilisateur
bungle
Daikyu
Messages : 85
Inscription : mer. 29 sept. 2010, 01:14

Re: [EMACS]auto-complete python(encour)

Message par bungle »

pour information, voici mon .emacs:

Code : Tout sélectionner

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;EMACS CONFIGURATION;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(set-language-environment "utf-8")

;; affectation de la variable custom-file(fichier de configuration de customize) au chemin voulu
(setq custom-file "~/.emacs-custom.el")
;; execute custom-file au demarage
(load custom-file)

;; enlève : le menu, la barre d'outil et les scroll
(menu-bar-mode -1)
(tool-bar-mode -1)
(scroll-bar-mode -1)
;; affiche le numéro des colonnes
(column-number-mode t)
 
(custom-set-variables                                                                       
;;désactive l'écran d'accueil                                                                       
'(inhibit-startup-screen t) 
;;pas de messsage dans le scratch                                                                       
'(initial-scratch-message nil))

;; auto-completion
(add-to-list 'load-path "~/.emacs.d/")
(require 'auto-complete)
(global-auto-complete-mode t)
(auto-complete-mode t)
(require 'yasnippet)
(yas/initialize)
(yas/load-directory "~/.emacs.d/snippets")

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(autoload 'python-mode "python-mode" "Python Mode." t)
(add-to-list 'auto-mode-alist '("\\.py\\'" . python-mode))
(add-to-list 'interpreter-mode-alist '("python" . python-mode))
(require 'python-mode)
(add-hook 'python-mode-hook
      (lambda ()
    (set-variable 'py-indent-offset 4)
    ;(set-variable 'py-smart-indentation nil)
    (set-variable 'indent-tabs-mode nil)
    (define-key py-mode-map (kbd "RET") 'newline-and-indent)
    ;(define-key py-mode-map [tab] 'yas/expand)
    ;(setq yas/after-exit-snippet-hook 'indent-according-to-mode)
    (smart-operator-mode-on)
    ))
;; 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)
;;(eval-after-load "pymacs"
;;  '(add-to-list 'pymacs-load-path YOUR-PYMACS-DIRECTORY"))
(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)
    (nreverse
     (dolist (element list value)
      (setq value (cons (format "%s%s" prefix element) value))))))
(defvar ac-source-rope
  '((candidates
     . (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)))
            (point)
          nil)
      symbol)))
(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)))
             cand)
        (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) nil)))
;;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
 (interactive)
  (if (eql (ac-start) 0)
      (indent-for-tab-command)))
(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 py-mode-map "\t" 'ryan-python-tab)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; End Auto Completion
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Auto Syntax Error Hightlight
(when (load "flymake" t)
  (defun flymake-pyflakes-init ()
    (let* ((temp-file (flymake-init-create-temp-buffer-copy
               'flymake-create-temp-inplace))
       (local-file (file-relative-name
            temp-file
            (file-name-directory buffer-file-name))))
      (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)
(provide 'init_python)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; set cursor color
;;(set-cursor-color "black")
;; The following takes care of the cursor color
;; In read only files, you get a grey cursor
;; In overwrite mode you get a red cursor
;; Normally, it will be white
(setq hcz-set-cursor-color-color "")
(setq hcz-set-cursor-color-buffer "")
(defun hcz-set-cursor-color-according-to-mode ()
  "change cursor color according to some minor modes."
  ;; set-cursor-color is somewhat costly, so we only call it when needed:
  (let ((color
		 (if buffer-read-only "grey"
		   (if overwrite-mode "red"
			 "white"))))
	(unless (and
			 (string= color hcz-set-cursor-color-color)
			 (string= (buffer-name) hcz-set-cursor-color-buffer))
	  (set-cursor-color (setq hcz-set-cursor-color-color color))
	  (setq hcz-set-cursor-color-buffer (buffer-name)))))
(add-hook 'post-command-hook 'hcz-set-cursor-color-according-to-mode)

;; charge le mode python
;;(require 'pymacs)
;;(pymacs-load "ropemacs" "rope-")



;; enlève le bip d'erreur
(setq ring-bell-function 'ignore)
;; affiche l'heure;;
(display-time-mode t)

(server-start)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;; java jdee completion ;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; dependance de jdee (Java Development Environment for Emacs)
(setq load-path (append (list "/usr/share/emacs/site-lisp/elib")
                         load-path))

;; This .emacs file illustrates the minimal setup
;; required to run the JDE.

;; Update the Emacs load-path to include the path to
;; the JDE and its require packages. This code assumes
;; that you have installed the packages in the emacs/site
;; subdirectory of your home directory.
(add-to-list 'load-path (expand-file-name "/usr/share/emacs/site-lisp/jde/lisp"))
(add-to-list 'load-path (expand-file-name "/usr/share/emacs/site-lisp/cedet/common"))
(add-to-list 'load-path (expand-file-name "/usr/share/emacs/site-lisp/elib"))

;; Initialize CEDET.
(load-file (expand-file-name "/usr/share/emacs/site-lisp/cedet/common/cedet.el"))


;; If you want Emacs to defer loading the JDE until you open a
;; Java file, edit the following line
(setq defer-loading-jde nil)
;; to read:
;;
;;(setq defer-loading-jde t)
;;

(if defer-loading-jde
    (progn
      (autoload 'jde-mode "jde" "JDE mode." t)
      (setq auto-mode-alist
          (append
           '(("\\.java\\'" . jde-mode))
           auto-mode-alist)))
  (require 'jde))
;;;;;;;;;;;;;;;;fin jdee ;;;;;;;;;;;;;;;;;;
et l'arboraissance de mon .emacs.d:

Code : Tout sélectionner

  /home/moi/.emacs.d:
  total used in directory 852 available 57502140
  drwxr-xr-x  8 moi moi   4096 24 févr. 11:16 .
  drwxrwxrwx 89 moi moi   4096 24 févr. 12:18 ..
  -rw-r--r--  1 moi moi   2288 24 févr. 11:16 ac-comphist.dat
  -rw-r--r--  1 moi moi  17326 18 nov.  09:17 auto-complete-config.el
  -rw-r--r--  1 moi moi  15902  6 févr. 15:40 auto-complete-config.elc
  -rw-r--r--  1 moi moi  64128 18 nov.  09:17 auto-complete.el
  -rw-r--r--  1 moi moi  59952  6 févr. 15:40 auto-complete.elc
  drwx------  2 moi moi   4096 24 févr. 12:22 auto-save-list
  -rw-r--r--  1 moi moi  22962 18 nov.  09:17 COPYING.FDL.txt
  -rw-r--r--  1 moi moi  35147 18 nov.  09:17 COPYING.GPLv3.txt
  drwxr-xr-x  2 moi moi   4096 23 févr. 17:58 dict
  drwxr-xr-x  2 moi moi   4096 23 févr. 17:58 doc
  -rw-r--r--  1 moi moi  85097  1 févr.  2009 doctest-mode.el
  -rw-r--r--  1 moi moi  10454 13 sept.  2009 dropdown-list.el
  drwxr-xr-x  2 moi moi   4096 23 févr. 17:58 etc
  -rw-r--r--  1 moi moi   8351 18 nov.  09:17 fuzzy.el
  -rw-r--r--  1 moi moi   7384  6 févr. 15:40 fuzzy.elc
  -rw-r--r--  1 moi moi   4295 23 févr. 17:03 init_python.el
  -rw-r--r--  1 moi moi   5094 23 févr. 16:57 init_python.el~
  -rw-r--r--  1 moi moi    538 18 nov.  09:17 Makefile
  -rw-r--r--  1 moi moi  40681 18 nov.  09:17 popup.el
  -rw-r--r--  1 moi moi  68538  6 févr. 15:40 popup.elc
  -rw-r--r--  1 moi moi   1566  1 févr.  2009 pycomplete.el
  -rw-r--r--  1 moi moi   3274  1 févr.  2009 pycomplete.py
  drwxr-xr-x  2 moi moi   4096 23 févr. 17:16 python-mode-5.1.0
  -rw-r--r--  1 moi moi 160977  1 févr.  2009 python-mode.el
  -rw-r--r--  1 moi moi    316  1 févr.  2009 README
  -rw-r--r--  1 moi moi    285 18 nov.  09:17 README.txt
  drwxr-xr-x  3 moi moi   4096 13 sept.  2009 snippets
  -rw-r--r--  1 moi moi    238 18 nov.  09:17 TODO.txt
  -rw-r--r--  1 moi moi 150094 13 sept.  2009 yasnippet.el
merci
Avatar de l’utilisateur
FoolEcho
Maître du Kyudo
Messages : 10711
Inscription : dim. 15 août 2010, 11:48
Localisation : Basse-Normandie

Re: [EMACS]auto-complete python(encour)

Message par FoolEcho »

Je ne sais pas pour rope et tout le tintouin (en plus le tuto date un peu) -- au passage, j'espère que tu as vu que Aur fournissait emacs-yasnippet ropemacs python-rope.

Je te suggère en tous cas lorsque tu rajoutes des modules à Emacs de le faire en faisant un nouveau répertoire dans ~/.emacs.d (parce que là, c'est déjà le bazar chez toi :mrgreen: ... mais c'est surtout pour plus facilement invalider ou supprimer un machin obsolète :wink: )

Bref. Pour le mode de complétion, il y a plus simple en tous cas (enfin il me semble... enfin moins fouillis, disons).
Tu récupères ce paquet (sauf si j'ai mal vu, il n'est pas sur Aur :troll:) : http://cx4a.org/software/auto-complete/index.html
Et par exemple, si on ne le veut que pour soi

Code : Tout sélectionner

mkdir ~/.emacs.d/auto-complete
make install DIR=~/.emacs.d/auto-complete/
Tu récupères le code final à rajouter dans ~/.emacs et hop, auto-complete-mode activé par défaut (normalement, sinon tu as juste à le réactiver avec Mx auto-complete-mode comme tu as vu), juste à saisir quelques caractères et ça devrait tenter la complétion.

Tous les détails: http://cx4a.org/software/auto-complete/ ... stallation
Perso, je n'ai jamais fait de python mais j'ai bien la complétion comme ça (et ça inclue java, c, c++, php, etc. :D ). A vérifier pour les trucs que tu veux rajouter.
«The following statement is not true. The previous statement is true.» :nage:
Avatar de l’utilisateur
bungle
Daikyu
Messages : 85
Inscription : mer. 29 sept. 2010, 01:14

Re: [EMACS]auto-complete python(encour)

Message par bungle »

yep,

désoler pour le temps de réponse, (j'avais pas d'accès web)

donc effectivement, c'était le bazar chez moi, donc j'ai fait le ménage c-a-d:
- effacer
- installer les paquets disponibles sur aur (emacs-yasnippet ropemacs python-rope)
- ré-installer auto-complete proprement
- installer python.el : http://www.loveshack.ukfsn.org/emacs/#emacs.py
- enlever le code *#! dans mon .emacs

et voilà tout fonctionne à merveille

Merci :wink:
Répondre