Dans le REPL de Guile, l'invite est la suivante scheme@(guile-user)>
mais je veux qu'il montre my-name@hostname(current-working-directory)>
. Y a-t-il un moyen de le faire ?
Réponse
Trop de publicités?Dans system/repl/common de la distribution guile scheme, vous pouvez voir l'implémentation de repl-prompt :
(define (repl-prompt repl)
(cond
((repl-option-ref repl 'prompt)
=> (lambda (prompt) (prompt repl)))
(else
(format #f "~A@~A~A> " (language-name (repl-language repl))
(module-name (current-module))
(let ((level (length (cond
((fluid-ref *repl-stack*) => cdr)
(else '())))))
(if (zero? level) "" (format #f " [~a]" level)))))))
Cela indique que vous avez une option repl 'prompt qui est un lambda.
(lambda (repl) ...)
(Mais il peut aussi s'agir d'une simple chaîne de caractères). Les sorties peuvent être ce que vous voulez.
Vous avez,
https://www.gnu.org/software/guile/manual/html_node/System-Commands.html#System-Commands
pour que vous puissiez faire
scheme@(guile-user)> ,option prompt ">"
>
>(+ 1 2)
$1 = 3
>,option prompt (lambda (repl) ">>")
>>(+ 2 3)
$2 = 5
>>
Mais que faire si vous voulez ajouter l'invite dans votre fichier .guile ?
Si vous placez ces éléments dans le fichier .guile (avant la création de l'invite)
(use-modules (system repl common))
(repl-default-option-set! 'prompt ">>>")
vous obtiendrez
>>> (+ 1 2)
3
Vous pouvez également créer de nouvelles repls, mais c'est une autre question.
Pour votre exemple spécifique, vous pouvez essayer
> ,option prompt (lambda (repl)
(format #f "~a@~a(~a)>"
(getenv "USER")
(vector-ref (uname) 1)
(getcwd)))
(mais sur une seule ligne) et obtenir
stis@lapwine(/home/stis/src/guile/module/system/repl)> (+ 1 2)
3
J'espère que cela vous aidera.