guix-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] scripts: container: Pass through TERM when calling exec


From: Christopher Baines
Subject: [PATCH] scripts: container: Pass through TERM when calling exec
Date: Wed, 25 Jan 2017 07:24:20 +0000

* guix/scripts/container/exec.scm (guix-container-exec): Capture the value of
  the TERM environment variable, and pass it through to the container.  This
  means some applications now work where they did not before (e.g. htop), and
  others have more functionality, providing that the terminal was capable of
  enabling that functionality in the first place.
---
 guix/scripts/container/exec.scm | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/guix/scripts/container/exec.scm b/guix/scripts/container/exec.scm
index 10e70568c..2dd6d802d 100644
--- a/guix/scripts/container/exec.scm
+++ b/guix/scripts/container/exec.scm
@@ -74,7 +74,17 @@ and the other containing arguments for the command to be 
executed."
       (let* ((opts (parse-command-line args %options '(())
                                        #:argument-handler
                                        handle-argument))
-             (pid  (assoc-ref opts 'pid)))
+             (pid  (assoc-ref opts 'pid))
+             (environment (fold (lambda (name alist)
+                                  (let ((value (getenv name)))
+                                    (if value
+                                        (cons (cons name value) alist)
+                                        alist)))
+                                '()
+                                ;; Pass through the TERM environment variable
+                                ;; to inform processes about the capabilities
+                                ;; of the terminal
+                                '("TERM"))))
 
         (unless pid
           (leave (_ "no pid specified~%")))
@@ -89,6 +99,9 @@ and the other containing arguments for the command to be 
executed."
                         (lambda ()
                           (match command
                             ((program . program-args)
+                             (for-each
+                              (match-lambda ((name . value) (setenv name 
value)))
+                              environment)
                              (apply execlp program program program-args)))))))
           (unless (zero? result)
             (leave (_ "exec failed with status ~d~%") result)))))))
-- 
2.11.0




reply via email to

[Prev in Thread] Current Thread [Next in Thread]