Если вы запускаете slime
непосредственно из emacs (даже если emacs запускается с -nw
), нет терминала для управления с term ios. В этом случае sb-sys:*tty*
связан с двусторонним потоком, который не является ни file-stream
, ни fixnum
. Вот почему код терпит неудачу.
Если ваш код должен иметь возможность работать в разных пользовательских интерфейсах (фактические emacs GUI, GTK и т. Д. c.), Тогда вам нужно управлять внешним интерфейсом и специальные способы запроса пароля (например, в emacs есть функция read-passwd
, но вы должны вызывать код emacs из sbcl, который по умолчанию запрещен; и, вероятно, пароль должен быть зашифрован во время передачи между emacs и sbcl); это намного больше работы, и нет простого ответа.
Если вы хотите написать приложение, которое должно работать исключительно в терминале, но во время разработки вы хотите написать код из emacs, используя Slime, тогда вы можете просто изменить способ запуска Slime:
- Запустить sbcl с терминала
Запустить сервер swank
(ql:quickload :swank)
(swank:create-server)
Из emacs, используйте slime-connect
для подключения к этому серверу
Тогда sb-sys:*tty*
будет обозначать терминал, и код должен работать как задумано. Один и тот же код выполняется во всех случаях (разработка и фактическое использование).