2012-05-19 22 views
5

Estoy buscando un complemento para hacer una ventana emergente de autocompletado para el desarrollo de C++ en emacs. lo que he intentado son Cedet Semantics y Autocompletion mode, son bastante geniales en términos de completar la variable y los nombres de las funciones, siempre y cuando ya tenga algunas palabras. Por ejemplo, tengo una foo clase llamada y una función que devuelve un entero 1buscando la funcionalidad de autocompletar en emacs

class foo{ 
    int getInt(){return 1}; 
}; 

En el método principal, siempre y cuando empecé a escribir este

int main(){ 
foo bar; 
bar.get... 
} 

los plugins no tendrá ningún problema apareciendo sugerencias como bar.getInt(). Sin embargo, lo que realmente estoy buscando es algo así como en Eclipse, tan pronto como presione el "punto", podrían generarse posibles opciones para mí. ¿Es eso posible en Emacs? Gracias

Respuesta

2

Depende de su configuración de autocompletar & CEDET. Parece que el autocompletado está configurado para mostrar posibles terminaciones solo después de que se tipearon varios caracteres. Puede verificar el valor de la variable ac-auto-start; si se trata de un número, se llamará automáticamente después de esta cantidad de caracteres. Otra cosa importante es lo que está en su variable ac-sources - para trabajar con CEDET debe usar ac-source-semantic-raw o ac-source-semantic fuente de finalización. Para la terminación automática después de . o -> se puede tratar de utilizar semántico de una función de finalización con algo como:

(defun my-c-mode-cedet-hook() 
(local-set-key "." 'semantic-complete-self-insert) 
(local-set-key ">" 'semantic-complete-self-insert)) 
(add-hook 'c-mode-common-hook 'my-c-mode-cedet-hook) 

P. S. ¿Había visto my article on CEDET & C++?

+1

¡Hola Alex! De hecho, vi tu artículo e intento imitar lo que hiciste pero no pude configurarlo correctamente. Bueno, tengo algunas preguntas. Sobre la inserción de *** punto ***, hice lo que sugeriste arriba, pero cada vez que escribí un *** punto ** como en el caso anterior después de ** barra *** , Recibí este mensaje *** La definición de la función de Symbol es nula: eieio-build-class-alist *** y ni siquiera podía insertar un signo de punto normal en absoluto. También el *** ac-source ***, estoy usando el paquete de autocompletado, parece que el ac-source es parte de él. cuál es la relación entre ellos, estoy un poco confundido. Gracias –

+0

Por cierto, configuré la variable *** ac-auto-start ** para que sea 4, pero cada vez que inicié Emacs, necesitaba verificar manualmente el valor de la variable escribiendo CH v ** ac-auto -comienzo *** primero, luego mi *** punto *** inserción funcionaría después, de lo contrario seguí recibiendo la *** definición es vacío *** error. Por cierto, el *** punto *** parece tener problemas para encontrar los encabezados del sistema también, como escribí un punto después de un objeto Vector, no pude ver la función de tamaño() apareciendo como quería. Muchas gracias –

+0

hmm, eso extraño - parece que eieio no se cargó correctamente. ¿Qué versión de Semántica estás usando? –

0

He encontrado que cedet es realmente decepcionante, especialmente en proyectos de cmake.

Recomendaría usar https://github.com/Andersbakken/rtags Subraya los errores a medida que escribe, así como el uso de terminaciones inteligentes. Simplemente agregue esto a su archivo init después de obtener los paquetes necesarios de emacs

(require 'rtags) 
(require 'popup) 
(require 'rtags-ac) 
(setq rtags-completions-enabled t) 
(rtags-enable-standard-keybindings c-mode-base-map) 
(add-hook 'c++-mode-hook 
      (lambda() 
      (setq ac-sources '(ac-source-rtags) 
))) 
Cuestiones relacionadas