Comment les modes dérivés de comint doivent-ils suivre les tampons et les processus?


8

Après avoir écrit quelques comintmodes personnalisés , je trouve souvent difficile de décider comment garder une trace des tampons et des processus: par exemple, pour associer différents tampons source à différents interprètes. Est-il préférable de conserver une référence au tampon ou au processus?

Étant donné un tampon, on peut trouver son processus associé en utilisant get-buffer-process. Inversement, étant donné un processus, process-bufferretourne son tampon associé. Les tampons et les processus permettent également une couche supplémentaire d'indirection en les recherchant par un nom unique, mais cela semble fragile par rapport à la simple conservation d'une référence à l'objet lui-même.

Une possibilité semble clairement mauvaise, car elle viole le principe de stockage des données une fois et une seule fois: à savoir conserver les références à la fois au tampon et au processus.

La plupart des comint-fonctions d'envoi d'entrée prennent un processus plutôt qu'un tampon comme argument, ce qui plaide pour s'accrocher à l'objet processus, pas au tampon. D'un autre côté, les tampons ont tendance à rester plus longtemps que les processus: un processus peut se terminer ou être tué et un nouveau processus démarré dans le tampon qu'il utilisait précédemment.

Existe-t-il d'autres arguments convaincants pour référencer le processus ou son tampon?

Réponses:


6

Pour les raisons que vous avez fournies, je préfère généralement conserver le tampon. Ensuite, j'écris une foo-procfonction qui retourne le processus correspondant, potentiellement en le redémarrant si nécessaire. Et j'écris même parfois une foo-bufferfonction qui appelle foo-procpour que non seulement elle me donne le tampon mais aussi qu'elle assure que le processus est en cours d'exécution.


Merci, c'est le genre de conseils que je cherchais, et je ne suis pas susceptible de trouver une meilleure source!
Jon O.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.