2 votes

Modifier REPL pour afficher le nom d'utilisateur, le nom d'hôte et le répertoire de travail actuel ?

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 ?

5voto

Stefan Points 275

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X