Je voudrai creer un nouveau mode emacs pour un langage de macro. Pour
commencer, faire du syntax highlighting sur les mots clef puis faire de
l'indentation automatique.
Est-ce que quellqu'un aurai des exemples simples pour programmer ca ?
ou est-ce que je dois aller voir dans les modes pre-definis ?
Est-ce qu'il faut une grammaire du langage pour pouvoir faire de
l'indentation ou des petits "trucs" du style :
<< apres une "{" ajouter 4 espace d'indentation >> suffisent ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
drkm
writes:
Est-ce que quellqu'un aurai des exemples simples pour programmer ca ? ou est-ce que je dois aller voir dans les modes pre-definis ?
Cfr. (info: (elisp)Modes), (info: (elisp)Major Modes) et (info: (elisp)Example Major Modes). Tu peux peut-être dériver d'un mode existant, (info: (elisp)Derived Modes).
Est-ce qu'il faut une grammaire du langage pour pouvoir faire de l'indentation ou des petits "trucs" du style : << apres une "{" ajouter 4 espace d'indentation >> suffisent ?
Cela dépend. De toute façon, l'indentation n'est pas ajoutée automatiquement. Soit tu as une commande de reformatage de tout le buffer, ou d'une région, soit tu fournis une commande pour TAB, soit tu fournis une commande pour RET (qui indente la nouvelle ligne), etc.
Et tout dépend du langage, et de la qualité que tu veux pour ton mode. Surcharger RET pour insérer 4 espaces de plus que la ligne précédente lorsque la ligne se termine par '{' est extrêmement simple. Mais détecter au préalable si l'on est dans une chaîne de caractères ou un commentaire l'est parfois moins.
Mais suivant tes capacités et le temps qui t'est disponible, tu trouveras peut-être le comportement initial suffisant, même si quelques fois cela donne quelque chose de bizarre dans une chaîne de caractères.
Si tu veux parser ton buffer avec exactitude (si ton langage n'est pas simplissime), tu sera peut-être intéressé par Semantic <URL:http://cedet.sf.net/>.
À quoi ressemble le langage pour lequel tu veux créer un mode ?
--drkm
cyril.guilloud@free.fr writes:
Est-ce que quellqu'un aurai des exemples simples pour programmer ca ?
ou est-ce que je dois aller voir dans les modes pre-definis ?
Cfr. (info: (elisp)Modes), (info: (elisp)Major Modes) et (info:
(elisp)Example Major Modes). Tu peux peut-être dériver d'un mode
existant, (info: (elisp)Derived Modes).
Est-ce qu'il faut une grammaire du langage pour pouvoir faire de
l'indentation ou des petits "trucs" du style :
<< apres une "{" ajouter 4 espace d'indentation >> suffisent ?
Cela dépend. De toute façon, l'indentation n'est pas ajoutée
automatiquement. Soit tu as une commande de reformatage de tout
le buffer, ou d'une région, soit tu fournis une commande pour
TAB, soit tu fournis une commande pour RET (qui indente la
nouvelle ligne), etc.
Et tout dépend du langage, et de la qualité que tu veux pour
ton mode. Surcharger RET pour insérer 4 espaces de plus que la
ligne précédente lorsque la ligne se termine par '{' est
extrêmement simple. Mais détecter au préalable si l'on est dans
une chaîne de caractères ou un commentaire l'est parfois moins.
Mais suivant tes capacités et le temps qui t'est disponible, tu
trouveras peut-être le comportement initial suffisant, même si
quelques fois cela donne quelque chose de bizarre dans une chaîne
de caractères.
Si tu veux parser ton buffer avec exactitude (si ton langage
n'est pas simplissime), tu sera peut-être intéressé par Semantic
<URL:http://cedet.sf.net/>.
À quoi ressemble le langage pour lequel tu veux créer un mode ?
Est-ce que quellqu'un aurai des exemples simples pour programmer ca ? ou est-ce que je dois aller voir dans les modes pre-definis ?
Cfr. (info: (elisp)Modes), (info: (elisp)Major Modes) et (info: (elisp)Example Major Modes). Tu peux peut-être dériver d'un mode existant, (info: (elisp)Derived Modes).
Est-ce qu'il faut une grammaire du langage pour pouvoir faire de l'indentation ou des petits "trucs" du style : << apres une "{" ajouter 4 espace d'indentation >> suffisent ?
Cela dépend. De toute façon, l'indentation n'est pas ajoutée automatiquement. Soit tu as une commande de reformatage de tout le buffer, ou d'une région, soit tu fournis une commande pour TAB, soit tu fournis une commande pour RET (qui indente la nouvelle ligne), etc.
Et tout dépend du langage, et de la qualité que tu veux pour ton mode. Surcharger RET pour insérer 4 espaces de plus que la ligne précédente lorsque la ligne se termine par '{' est extrêmement simple. Mais détecter au préalable si l'on est dans une chaîne de caractères ou un commentaire l'est parfois moins.
Mais suivant tes capacités et le temps qui t'est disponible, tu trouveras peut-être le comportement initial suffisant, même si quelques fois cela donne quelque chose de bizarre dans une chaîne de caractères.
Si tu veux parser ton buffer avec exactitude (si ton langage n'est pas simplissime), tu sera peut-être intéressé par Semantic <URL:http://cedet.sf.net/>.
À quoi ressemble le langage pour lequel tu veux créer un mode ?
--drkm
Matthieu Moy
drkm writes:
Cela dépend. De toute façon, l'indentation n'est pas ajoutée automatiquement. Soit tu as une commande de reformatage de tout le buffer, ou d'une région, soit tu fournis une commande pour TAB, soit tu fournis une commande pour RET (qui indente la nouvelle ligne), etc.
Plutôt que de surcharger TAB, il vaut mieux positionner `indent-line-function' (qui te donnera la commande pour une ligne ET la commande pour une région en bonnus).
-- Matthieu
drkm <usenet.fcaemacs@fgeorges.org> writes:
Cela dépend. De toute façon, l'indentation n'est pas ajoutée
automatiquement. Soit tu as une commande de reformatage de tout
le buffer, ou d'une région, soit tu fournis une commande pour
TAB, soit tu fournis une commande pour RET (qui indente la
nouvelle ligne), etc.
Plutôt que de surcharger TAB, il vaut mieux positionner
`indent-line-function' (qui te donnera la commande pour une ligne ET
la commande pour une région en bonnus).
Cela dépend. De toute façon, l'indentation n'est pas ajoutée automatiquement. Soit tu as une commande de reformatage de tout le buffer, ou d'une région, soit tu fournis une commande pour TAB, soit tu fournis une commande pour RET (qui indente la nouvelle ligne), etc.
Plutôt que de surcharger TAB, il vaut mieux positionner `indent-line-function' (qui te donnera la commande pour une ligne ET la commande pour une région en bonnus).
-- Matthieu
drkm
Matthieu Moy writes:
Plutôt que de surcharger TAB, il vaut mieux positionner `indent-line-function' (qui te donnera la commande pour une ligne ET la commande pour une région en bonnus).
Oui. Pardon, ce n'était peut-être pas clair. Je ne parlais pas au niveau technique exact. Plutôt sur le principe.
Plutôt que de surcharger TAB, il vaut mieux positionner
`indent-line-function' (qui te donnera la commande pour une ligne ET
la commande pour une région en bonnus).
Oui. Pardon, ce n'était peut-être pas clair. Je ne parlais
pas au niveau technique exact. Plutôt sur le principe.
Plutôt que de surcharger TAB, il vaut mieux positionner `indent-line-function' (qui te donnera la commande pour une ligne ET la commande pour une région en bonnus).
Oui. Pardon, ce n'était peut-être pas clair. Je ne parlais pas au niveau technique exact. Plutôt sur le principe.
Merci.
--drkm
Olivier
Bonjour,
Il y a trois cas (pour etendre ce que disait drkm) : -- ou tu veux faire un mode mineur, et la, faut reflechir (ce serait "editer des macros dans un code qui n'en contient que peu et sans utiliser mmode"). En general, il faut laisser la programmation des modes mineurs aux hyper-pros, car ces derniers doivent etre compatibles avec tout ce qui existe, c'est un miracle d'equilibre et de justesse d'ecriture. -- ou bien c'est un petit truc et tu fais un derived-mode (dans le genre, il faut ce mode pour un code special, mais dans trois mois il n'aura plus d'utilisation) -- ou bien tu veux faire un mode majeur complet, et il faut (1) aller recuperer le Elisp manual GNU Emacs Lisp Reference Manual sur le net et l'acheter pour faire bonne mesure :-) (2) lire les sections "Major and Minor Modes", "Major Modes" qui disent clairement comment faire. (3) aller faire un tour sur les sections "Indentation" et "Syntax tables". ya aussi "Font lock" et "Text properties", mais la un peu de hack sur des codes existants est souvent plus efficaces. Et inspecter "M-/" (dynamic completion) avant de se lancer dans le moindre code de completion. (4) ca se fait en une demi-heure pour le squelette. (5) si l'indentation pose probleme, j'ai un petit moteur general "sli-tools.el" a aller chercher sur sourceforge dans le projet "mupacs". Le fichier correspondant est completement independant. La aussi, il suffit de charger le code et de definir les differentes balises etc et de voir si le resultat plait. Mais si les primitives standards suffisent (ce qui est rare !), autant s'en contenter. Bon courage ! Et reviens si probleme :-) Amities, Olivier
Bonjour,
Il y a trois cas (pour etendre ce que disait drkm) :
-- ou tu veux faire un mode mineur, et la, faut reflechir
(ce serait "editer des macros dans un code qui n'en contient
que peu et sans utiliser mmode"). En general, il faut laisser
la programmation des modes mineurs aux hyper-pros, car ces
derniers doivent etre compatibles avec tout ce qui existe,
c'est un miracle d'equilibre et de justesse d'ecriture.
-- ou bien c'est un petit truc et tu fais un derived-mode
(dans le genre, il faut ce mode pour un code special,
mais dans trois mois il n'aura plus d'utilisation)
-- ou bien tu veux faire un mode majeur complet, et il
faut
(1) aller recuperer le Elisp manual
GNU Emacs Lisp Reference Manual sur le net et
l'acheter pour faire bonne mesure :-)
(2) lire les sections "Major and Minor Modes",
"Major Modes" qui disent clairement comment faire.
(3) aller faire un tour sur les sections
"Indentation" et "Syntax tables". ya aussi
"Font lock" et "Text properties", mais la un peu de
hack sur des codes existants est souvent plus efficaces.
Et inspecter "M-/" (dynamic completion) avant de se lancer
dans le moindre code de completion.
(4) ca se fait en une demi-heure pour le squelette.
(5) si l'indentation pose probleme, j'ai un petit moteur
general "sli-tools.el" a aller chercher sur sourceforge
dans le projet "mupacs". Le fichier correspondant est
completement independant. La aussi, il suffit de charger
le code et de definir les differentes balises etc et de voir
si le resultat plait. Mais si les primitives standards
suffisent (ce qui est rare !), autant s'en contenter.
Bon courage !
Et reviens si probleme :-)
Amities,
Olivier
Il y a trois cas (pour etendre ce que disait drkm) : -- ou tu veux faire un mode mineur, et la, faut reflechir (ce serait "editer des macros dans un code qui n'en contient que peu et sans utiliser mmode"). En general, il faut laisser la programmation des modes mineurs aux hyper-pros, car ces derniers doivent etre compatibles avec tout ce qui existe, c'est un miracle d'equilibre et de justesse d'ecriture. -- ou bien c'est un petit truc et tu fais un derived-mode (dans le genre, il faut ce mode pour un code special, mais dans trois mois il n'aura plus d'utilisation) -- ou bien tu veux faire un mode majeur complet, et il faut (1) aller recuperer le Elisp manual GNU Emacs Lisp Reference Manual sur le net et l'acheter pour faire bonne mesure :-) (2) lire les sections "Major and Minor Modes", "Major Modes" qui disent clairement comment faire. (3) aller faire un tour sur les sections "Indentation" et "Syntax tables". ya aussi "Font lock" et "Text properties", mais la un peu de hack sur des codes existants est souvent plus efficaces. Et inspecter "M-/" (dynamic completion) avant de se lancer dans le moindre code de completion. (4) ca se fait en une demi-heure pour le squelette. (5) si l'indentation pose probleme, j'ai un petit moteur general "sli-tools.el" a aller chercher sur sourceforge dans le projet "mupacs". Le fichier correspondant est completement independant. La aussi, il suffit de charger le code et de definir les differentes balises etc et de voir si le resultat plait. Mais si les primitives standards suffisent (ce qui est rare !), autant s'en contenter. Bon courage ! Et reviens si probleme :-) Amities, Olivier