View previous topic :: View next topic |
Author |
Message |
kwenspc Advocate
Joined: 21 Sep 2003 Posts: 4954
|
Posted: Thu Sep 03, 2009 12:12 pm Post subject: [Emacs] Completion (no troll vs vim ^^) (résolu) |
|
|
Donc ce topic s'adresse à tous ceux qui touchent à emacs ici. Je cherche pas à troller avec Vim (pour moi le "troll" n'en est pas un, vim/emacs c'est comme fraise/vanille: question de goût. Fin de la parenthèse), donc si certains ont envie de s'amuser avec ça je les renvois à "l'énaûrme" topic: [DOW] VI vs. EMACS.
Merci de pas venir pourrir ce présent thread.
J'essaie d'avoir une complétion du même genre que sous des IDE comme netbeans ou autre, donc tout ceux qui me sortent Ctrl+/ qui pointe sur dabbrev non merci. Le problème c'est qu'après toutes les infos lues, tous les essais, toutes les configs dans mon .emacs... c'est pas ça.
Petite explication. Je suis tombé sur cedet, qui semble être la grosse référence pour faire d'emacs un IDE plus complet que ce qu'il est de base. Le lien de référence pour son outil de parsing/completion (et autre) Semantic: http://cedet.sourceforge.net/intellisense.shtml
La complétion via ctags étant loin d'être ce que je cherche.
LE truc qui m'intéresse ici c'est le menu contextuel ainsi que les propositions qu'on y retrouve dedans. J'ai bien le menu contextuel mais point de propositions "complètes". Ce que je veux dire par propositions complètes c'est:
1 - il cherche d'abord dans le fichier courant
2 - dans les headers inclus
3 - et plus globalement dans les headers qu'on trouve dans /usr/include
J'arrive parfaitement à avoir le 1. Ça marche tout seul, bon ok. Le 3 via semanticdb-ebrowse, j'ai crée la base de ref pour /usr/include.
Mais il me faut le 2. J'ai beau essayer de créer la base ebrowse pour mon projet courant, que dalle, rien. Autre soucis, dans le point 3, si j'ajoute disons /usr/include/gnutls, la base de ce dernier va aussi inclure /usr/include... ce qui fait qu'on a des fichiers à rallonge, super lourds. Amha c'est un bug, des bases redondantes comme ça c'est pas normal je pense.
Autre chose, j'ai bien lu la doc Cedet ainsi que A Gentle introduction to Cedet, et comme elles sont hyper bien faites (ironie inside) elles passent complètement sur les vraies questions... Et d'ailleurs elles sont obsolètes. Elles parlent de fonctions qui n'existe plus, ou alors qui génère des erreurs. Bref ça schmoute.
Et vous comment vous faites? avec ou sans Cedet? autre chose? rien? (oui je m'attend bizarrement à avoir peu de réponse... )
Last edited by kwenspc on Fri Sep 04, 2009 11:59 am; edited 1 time in total |
|
Back to top |
|
|
xaviermiller Bodhisattva
Joined: 23 Jul 2004 Posts: 8723 Location: ~Brussels - Belgique
|
Posted: Thu Sep 03, 2009 12:17 pm Post subject: |
|
|
Oh, ce sujet m'intéresse _________________ Kind regards,
Xavier Miller |
|
Back to top |
|
|
kwenspc Advocate
Joined: 21 Sep 2003 Posts: 4954
|
Posted: Thu Sep 03, 2009 12:23 pm Post subject: |
|
|
Y a ce package aussi: Predictive
[edit] Trop général lui par contre, moi je veux un truc dédié au code[/edit] |
|
Back to top |
|
|
ppg Apprentice
Joined: 05 Oct 2008 Posts: 178 Location: Toulouse
|
Posted: Thu Sep 03, 2009 3:03 pm Post subject: |
|
|
Um j'ai utilisé que Ctags et ctrl + /, alors je peux pas beaucoup m'avancer sur le sujet.
Et les modes majeurs, certains comme auctex proposent des raccourcis ahurissant pour aller plus vite.
En farfouillant un peu un truc qui pourrait te plaire :
AutoComplete
Code d'exemple pour pyhton ici.
Et après on se demande pourquoi on préfère emacs |
|
Back to top |
|
|
kwenspc Advocate
Joined: 21 Sep 2003 Posts: 4954
|
Posted: Thu Sep 03, 2009 5:04 pm Post subject: |
|
|
Connaissais pas AutoComplete, mais apparement il est très très basique. Il est incapable d'évaluer des fichiers sources pour y créer un namespace contextuel, selon le fichier source courant. Dommage. Mais sinon oui dans la finalité c'est ce qu'il me faut (un menu pop-up, avec les possibilités).
[edit] hop hop hop, je me suis avancé trop vite: il semble pouvoir utiliser semantic derrière! Mais du coup on retombe sur mon problème de créer les bases de namespaces avec semantic [/edit] |
|
Back to top |
|
|
kwenspc Advocate
Joined: 21 Sep 2003 Posts: 4954
|
Posted: Thu Sep 03, 2009 6:01 pm Post subject: |
|
|
Bon histoire de vous donner une idée d'où j'en suis, et pourquoi pas de voir si ce qui chez moi ne fonctionne pas fonctionne peut-être chez vous...
J'ai ça qui fonctionne: (je n'ajoutes pas le (require 'site-gentoo) personnelement, avec ou sans c'est pareil...)
Code: |
(load "/usr/share/emacs/site-lisp/cedet/common/cedet" nil t)
(semantic-load-enable-excessive-code-helpers)
(require 'semantic-ia)
;; ça ajoute un menu TAGS, qui comporte le namespace local
(defun local-semantic-tag-menu-hook ()
(imenu-add-to-menubar "TAGS"))
(add-hook 'semantic-init-hooks 'local-semantic-tag-menu-hook)
;; Le hook me permettant d'avoir le pop-up (si il y a des propositions)
(defun local-cedet-hook ()
(local-set-key [(control return)] 'semantic-ia-complete-symbol-menu))
(add-hook 'c-mode-common-hook 'local-cedet-hook)
|
Maintenant ce qui marche "à moitié"
Code: |
(require 'semanticdb-ebrowse)
(semanticdb-create-ebrowse-database "/usr/include/")
|
Ça permet de créer la base de namespace lié à tous les headers d'/usr/include... sauf des sous répertoires.
Je me suis dis 'qu'à cela ne tienne j'ajoute (semanticdb-create-ebrowse-database "/usr/include/netinet") pour l'avoir lui aussi' et bien je me retrouve avec une autre fichier bd ebrowse (dans ~/.semanticdb) qui non seulement comporte les namespaces d'/usr/include/netinet mais aussi ceux d'/usr/include alors qu'on a déjà un fichier ebrowse pour ce dernier... on se retrouve avec une bdd de namespaces redondants, c'est du n'importe quoi.
Ce qui ne marche pas du tout maintenant.
Il existe aussi une commande qui permet pour la session courante d'ajouter un repertoires d'includes:
Code: |
(semantic-add-system-include "~/mon_projet/include" 'c-mode)
|
Aucune réaction...
Il existe aussi un (require 'semantic-gcc) qui est censé tout faire tout seul justement pour les en-têtes... tu parles robert. Là encore: rien.
Je veux dire: avec ou sans je ne vois aucune différence d'avec ce que j'ai en haut.
Il existe aussi ceci:
Code: |
(require 'semanticdb-global)
(semanticdb-enable-gnu-global-databases 'c-mode)
(semanticdb-enable-gnu-global-databases 'c++-mode)
|
Les deux dernières lignes me donnent des erreurs...
Voilà... Si chez vous ça marche tant mieux, mais moi je bloque
[edit] même AutoComplete ne fait strictement rien. Je commence à plus rien piger là, ça parait "si simple" en démo, mais en vrai... Et pourtant cette fois j'utilise une initialisation de ce mode passé par un des dev.[edit]
[edit2]Mouarf ok AutoComplete à peine lancé, dès le premier caractère tapé il passe en mode off... joli bug. ok bug trouvé dans l'extension yasnippet, à pas utiliser donc. Là ça marche à peu près[/edit2]
[edit3] Bon au final je suis pas beaucoup plus avancé avec AutoComplete: ce dernier ne fournit que les nampespaces du fichier courant plus les quelques dico standard. gtags a l'air de rien donner, et semantic... bah on revient à mon problème de départ c-a-d que j'arrive pas le configurer comme il faut[edit3] |
|
Back to top |
|
|
kwenspc Advocate
Joined: 21 Sep 2003 Posts: 4954
|
Posted: Fri Sep 04, 2009 11:22 am Post subject: |
|
|
Je suis partis sur AutoComplete, l'intérêt et qu'il utilise l'overlay et peut alors aussi fonctionner en pop-up contextuel en console.
Maintenant... avoir une base de nom derrière c'est une autre paire de manche.
Il y a une extension semantic:
Code: |
(require 'auto-complete)
(require 'semantic-ia)
(defun ac-semantic-candidate (prefix)
(if (memq major-mode
'(c-mode c++-mode jde-mode java-mode))
(mapcar 'semantic-tag-name
(ignore-errors
(or (semantic-ia-get-completions
(semantic-analyze-current-context) (point))
(senator-find-tag-for-completion (regexp-quote prefix)))))))
(defvar ac-source-semantic
'((candidates . (lambda () (all-completions ac-prefix (ac-semantic-candidate ac-prefix)))))
"Source for semantic.")
(provide 'auto-complete-semantic)
|
On peut alors ajouter la source ac-source-semantic au hook qui gère la completion C, ce que j'ai fait. Mais rien de se passe. En fait c'est comme si cette même source ne renvoyait rien. Pourtant: un semantic-ia-complete-symbol fonctionne (cette fonction appelle elle aussi semantic-ia-get-completions et semantic-analyze-current-context, et prise indépendamment ces deux dernières fonctions retournent bien un résultat) et AutoComplete aussi (j'ai insérer une source qui contient les mots clés du C et ça fonctionne).
La moutarde commence à me monter au nez, quelque soit le problème: il trouve sa source dans semantic et l'outil qui souhaite l'utiliser |
|
Back to top |
|
|
kwenspc Advocate
Joined: 21 Sep 2003 Posts: 4954
|
Posted: Fri Sep 04, 2009 11:55 am Post subject: |
|
|
Yech cha marche.
C'est pas encore totalement complet mais cette fois semantic interagit bien avec autocomplete, Et même si la gestions des namespaces venant de headers externe est pas au top, ça me suffit déjà. Apparemment, si on passe par EDE pour créer son projet, semantic arrive bien à gérer les headers du projet. à voir...
[edit] Si vous êtes intéressés je peux vous balancer une archive de mon .emacs par mail c'est plein de fichiers, --> MP[/edit] |
|
Back to top |
|
|
xaviermiller Bodhisattva
Joined: 23 Jul 2004 Posts: 8723 Location: ~Brussels - Belgique
|
Posted: Fri Sep 04, 2009 12:40 pm Post subject: |
|
|
Merci pour l'info.
Oui, ton .emacs m'intéresse, ça fait longtemps que je suis intéressé par un autocomplete dans emacs sans avoir pris le temps de m'y pencher.
Ta solution tourne-t'elle aussi sur d'autres systèmes que Linux ? _________________ Kind regards,
Xavier Miller |
|
Back to top |
|
|
ppg Apprentice
Joined: 05 Oct 2008 Posts: 178 Location: Toulouse
|
Posted: Fri Sep 04, 2009 2:44 pm Post subject: |
|
|
Ah ouais ça pourrait être bien, au moins les fichiers qui concernent le autocomplete. |
|
Back to top |
|
|
tmasscool Apprentice
Joined: 27 Jul 2005 Posts: 151
|
Posted: Fri Sep 04, 2009 3:11 pm Post subject: |
|
|
Je suis intéressé aussi par le .emacs, car ça fait également quelques jours que j'essaie d'avoir cedet qui fonctionne, sans succès... |
|
Back to top |
|
|
kwenspc Advocate
Joined: 21 Sep 2003 Posts: 4954
|
Posted: Fri Sep 04, 2009 3:12 pm Post subject: |
|
|
XavierMiller wrote: |
Ta solution tourne-t'elle aussi sur d'autres systèmes que Linux ? |
En principe oui je n'ai rien de spécifique nux. Mis à part peut-être CEDET (c'est le paque tqui contient ECB, EDE et Semantic) qui semple-t-il est un poil instable sous win, le reste devrait tourner sans problème.
Sinon j'ai pour le moment, pas d'emplacement web où vous mettre ça. Passez moi vos emails par MP que je vous l'envoie. |
|
Back to top |
|
|
xaviermiller Bodhisattva
Joined: 23 Jul 2004 Posts: 8723 Location: ~Brussels - Belgique
|
Posted: Fri Sep 04, 2009 3:20 pm Post subject: |
|
|
"Vous avez ... 1 ... nouveau message" _________________ Kind regards,
Xavier Miller |
|
Back to top |
|
|
kwenspc Advocate
Joined: 21 Sep 2003 Posts: 4954
|
Posted: Fri Sep 04, 2009 3:35 pm Post subject: |
|
|
Envoyé! Ne reste plus que toi ppg
[edit] J'ai oublié de préciser un truc: si vous codez en C vous aller avoir mon mode à moi (des tabs de 4, pas d'espaces à la place des tabs, quelques trucs comme ça). Si ça ne vous conviens pas (ce qui serait normal, c'est vraiment une question de goût) commentez la ligne qui charge c.el dans le .emacs[/edit] |
|
Back to top |
|
|
kwenspc Advocate
Joined: 21 Sep 2003 Posts: 4954
|
Posted: Fri Sep 04, 2009 4:26 pm Post subject: |
|
|
Je pense avoir fixé 2 bugs, l'un dans auto-complete-yasnippet et l'autre dans auto-complete-etags (mais je suis pas totalement sûr, mon lisp est loin, en tout cas ça fonctionne cette mieux)
dans auto-complete-yasnippet:
Code: |
;; fonction ac-yasnippet-candidate, l'original cherche à recreer la table selon le major mode,
;; apparemment cette fonction est dépréciée et il y en a une toute faite qui fournie la table
;; correspondante au mode courant
(defun ac-yasnippet-candidate ()
(let ((table (yas/current-snippet-table)))
(if table
(ac-yasnippet-candidate-1 table))))
|
dans auto-complete-etags:
Code: |
changez:
(eval-when-compile
(require 'cl))
en
(require 'cl)
|
J'ai remarqué que sinon si vous tappiez sur ESC alors que le menu de completion est affiché, après cela auto-complete déconne. |
|
Back to top |
|
|
ppg Apprentice
Joined: 05 Oct 2008 Posts: 178 Location: Toulouse
|
Posted: Fri Sep 04, 2009 5:37 pm Post subject: |
|
|
kwenspc wrote: | Envoyé! Ne reste plus que toi ppg
[edit] J'ai oublié de préciser un truc: si vous codez en C vous aller avoir mon mode à moi (des tabs de 4, pas d'espaces à la place des tabs, quelques trucs comme ça). Si ça ne vous conviens pas (ce qui serait normal, c'est vraiment une question de goût) commentez la ligne qui charge c.el dans le .emacs[/edit] |
Pas grave j'aime bien aussi les 4 espaces sans tab
Au pire un petit coup de M-x customize et c'est réglé.
PS : je t'ai envoyé mon email un MP. |
|
Back to top |
|
|
xaviermiller Bodhisattva
Joined: 23 Jul 2004 Posts: 8723 Location: ~Brussels - Belgique
|
Posted: Fri Sep 04, 2009 5:40 pm Post subject: |
|
|
kwenspc wrote: | Envoyé! Ne reste plus que toi ppg
[edit] J'ai oublié de préciser un truc: si vous codez en C vous aller avoir mon mode à moi (des tabs de 4, pas d'espaces à la place des tabs, quelques trucs comme ça). Si ça ne vous conviens pas (ce qui serait normal, c'est vraiment une question de goût) commentez la ligne qui charge c.el dans le .emacs[/edit] |
Merci merci merci _________________ Kind regards,
Xavier Miller |
|
Back to top |
|
|
|