MISE À JOUR : J'ai créé le package Semantic Refactor qui résout complètement ce problème et plus encore. Vous pouvez regarder les démos pour voir comment cela fonctionne. Le reste du texte de cette réponse, après cette phrase, est ancien et l'a mis là juste pour une raison historique.
ANCIENNE RÉPONSE :
Vous pouvez utiliser senator-copy-tag
pour copier avec précision la signature de la fonction, puis la coller dans votre fichier source. senator-copy-tag
et les commandes Senator sont disponibles lorsque vous activez semantic-mode
:
(semantic-mode 1)
Semantic est un package intégré à Emacs.
Vous pouvez combiner Semantic Senator avec Projectile dans une commande pour insérer un prototype de fonction dans un autre fichier (fichier du même nom mais avec une extension différente) de n'importe où dans votre projet. S'il n'y a qu'un autre fichier, la commande s'insère immédiatement dans ce fichier; s'il y en a plusieurs, vous êtes invité à sélectionner un fichier; s'il n'y en a pas, vous êtes invité à saisir l'intégralité des fichiers de votre projet. Après avoir sélectionné un fichier, une invite propose une liste de balises sémantiques dans le tampon actuel que vous pouvez choisir d'insérer après.
J'ai soumis un PR à Emacs Refactor . Code complet si vous voulez essayer sans attendre le PR: cliquez ici .
Voici une démo (ça commence quand on voit START DEMO
en bas):
Vous pouvez également utiliser uniquement Senator pour copier et faire fonctionner le prototype. Tant que le point se trouve n'importe où à l'intérieur de la signature de fonction ou du corps de fonction, run senator-copy-tag
, qui est lié C-c , M-w
par défaut, il copie la fonction entière: à la fois la signature et le corps. Cependant, vous pouvez coller uniquement la signature si vous le souhaitez en exécutant la commande senator-yank-tag
, qui est liée C-c , C-y
par défaut. Appuyez sur C-y
coller toute la signature de fonction avec son corps. senator-copy-tag
fonctionne même avec la signature de fonction développée sur plusieurs lignes comme ceci:
void
func(int a,
int b,
int c)
{
.....
}
Bien que cette approche ne s'insère pas directement dans le tampon du même nom, elle est plus applicable dans d'autres cas. Votre cas d'utilisation ne fonctionne que si vous avez deux fichiers dans le même répertoire et avec le même nom mais des extensions différentes. Que faire si la déclaration de fonction et la définition de fonction doivent rester dans des fichiers différents avec des noms différents?
EDIT2 : Voici un exemple d'insertion intelligente d'un prototype de fonction à l'aide de balises sémantiques. Actuellement, vous ne pouvez insérer que sur la base des positions relatives ("avant" et "après") des balises sémantiques de niveau supérieur. Je vais mettre à jour à l' utilisateur de faire pour être en mesure d'insérer dans un endroit où les balises sémantiques sont disponibles, avec plusieurs positions (quand une étiquette est Class
, il devrait offrir des postes supplémentaires: public
, projected
et private
). La démo démarre lorsque vous voyez START DEMO
en bas:
Bonus : si vous souhaitez générer une liste de définitions de fonctions vides dans un .cpp
fichier à partir d'un fichier d'en-tête, utilisez member-functions.el . Mais bientôt, je vais le remplacer par Semantic + Projectile.