In che modo le modalità derivate da Comint tengono traccia di buffer e processi?


8

Avendo scritto un paio di comintmodalità personalizzate , trovo spesso difficile decidere come tenere traccia di buffer e processi: ad esempio, associare diversi buffer di origine a diversi interpreti. È meglio mantenere un riferimento al buffer o al processo?

Dato un buffer, è possibile trovare il processo associato usando get-buffer-process. Al contrario, dato un processo, process-bufferrestituisce il relativo buffer associato. Sia i buffer che i processi consentono anche un ulteriore livello di riferimento indiretto osservandoli con un nome univoco, ma questo sembra fragile rispetto al semplice mantenere un riferimento all'oggetto stesso.

Una possibilità sembra chiaramente negativa, poiché viola il principio della memorizzazione dei dati una sola volta: vale a dire, mantenendo i riferimenti sia al buffer che al processo.

La maggior parte delle comint-funzioni per l'invio di input prende un processo piuttosto che un buffer come argomento, il che fa appello all'oggetto processo, non al buffer. D'altra parte, i buffer tendono a rimanere più a lungo dei processi: un processo potrebbe terminare o essere ucciso e un nuovo processo avviato nel buffer utilizzato in precedenza.

Ci sono altri argomenti convincenti per fare riferimento al processo o al suo buffer?

Risposte:


6

Per i motivi forniti, generalmente preferisco mantenere il buffer. Quindi scrivo una foo-procfunzione che restituisce il processo corrispondente, potenzialmente riavviandolo se necessario. E a volte scrivo anche una foo-bufferfunzione che chiama in foo-procmodo che non solo mi dia il buffer ma assicuri anche che il processo sia in esecuzione.


Grazie, questo è il tipo di guida che stavo cercando, e probabilmente non troverò una fonte migliore!
Jon O.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.