Cela se fait via un filtre de processus.
Par défaut, comint-output-filter-functions
inclut comint-watch-for-password-prompt
, qui est la fonction de filtre qui gère cela.
S'il voit la correspondance de texte, comint-password-prompt-regexp
il appelle send-invisible
pour demander à l'utilisateur un mot de passe.
Pour plus d'informations sur le fonctionnement des filtres de processus, reportez-vous à C-hig (elisp)Filter Functions
Modifier: À titre de suivi, notez également que vous pouvez M-x toggle-debug-on-quit
, puis à l'invite sudo, tapez C-gpour obtenir une trace qui montrerait ce qui se passe. par exemple:
Debugger entered--Lisp error: (quit)
read-string("[sudo] password for <username>: " nil t nil)
read-passwd("[sudo] password for <username>: ")
send-invisible("[sudo] password for <username>: ")
comint-watch-for-password-prompt("[sudo] password for <username>: ")
run-hook-with-args(comint-watch-for-password-prompt "[sudo] password for <username>: ")
comint-output-filter(#<process shell> "[sudo] password for <username>: ")
La sortie est minime en raison de l'évaluation du code compilé en octets, donc le détail de comint-output-filter-functions
est perdu, mais vous pouvez toujours voir immédiatement la situation générale. Vous pouvez également M-x load-library
RET comint.el
RETcharger le code non compilé, puis répéter tout le processus pour obtenir une trace plus détaillée.