Це робиться за допомогою технологічного фільтра.
За замовчуванням comint-output-filter-functions
включає comint-watch-for-password-prompt
, що є функцією фільтра, яка справляється з цим.
Якщо він бачить відповідність тексту, comint-password-prompt-regexp
він закликає send-invisible
запросити користувача на пароль.
Для отримання додаткової інформації про те, як працюють фільтри процесів, див C-hig (elisp)Filter Functions
Редагувати: В подальшому зауважте, що ви можете, M-x toggle-debug-on-quit
а потім у типі підказок sudo C-gотримати зворотній слід, який би показував, що відбувається. наприклад:
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>: ")
Вихід є мінімальним за рахунок оцінюваного байтом коду, який оцінюється, тому деталізація comint-output-filter-functions
втрачається, але ви все одно можете відразу побачити загальну ситуацію. Ви також M-x load-library
RET comint.el
RETможете завантажити некомпільований код, а потім повторити весь процес, щоб отримати більш детальний зворотній шлях.