Isso é feito através de um filtro de processo.
Por padrão , comint-output-filter-functions
inclui comint-watch-for-password-prompt
, que é a função de filtro que lida com isso.
Se houver texto correspondente comint-password-prompt-regexp
, ele solicitará send-invisible
uma senha ao usuário.
Para obter mais informações sobre como os filtros de processo funcionam, consulte C-hig (elisp)Filter Functions
Edit: Como acompanhamento, observe também que você pode M-x toggle-debug-on-quit
e, no prompt do sudo, digite C-gum backtrace que mostre o que está acontecendo. por exemplo:
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>: ")
A saída é mínima porque o código compilado em bytes está sendo avaliado; portanto, os detalhes comint-output-filter-functions
são perdidos, mas você ainda pode ver imediatamente a situação geral. Você também M-x load-library
RET comint.el
RETpode carregar o código não compilado e repetir todo o processo para obter um rastreamento mais detalhado.