]> gitweb.factorcode.org Git - factor.git/commitdiff
environment: Add change-os-env, docs, example, etc.
authorSlava Pestov <slava@factorcode.org>
Wed, 20 Jun 2012 01:45:53 +0000 (18:45 -0700)
committerSlava Pestov <slava@factorcode.org>
Wed, 20 Jun 2012 01:45:53 +0000 (18:45 -0700)
basis/environment/environment-docs.factor
basis/environment/environment-tests.factor
basis/environment/environment.factor

index 6f913c1a936e89f90d79e1c2e579975154f1efdd..0bf7f2a11f1b9abcc4caa2eeb33219b913d73706 100644 (file)
@@ -29,6 +29,21 @@ HELP: os-env
     }
 } ;
 
+HELP: change-os-env
+{ $values { "key" string } { "quot" { $quotation "( old -- new )" } } }
+{ $description "Applies a quotation to change the value stored in an environment variable." }
+{ $examples
+    "This is an operating system-specific feature. On Unix, you can do:"
+    { $unchecked-example
+        "USING: environment io ;"
+        "\"USER\" os-env print"
+        "\"USER\" [ \"-doe\" append ] change-os-env"
+        "\"USER\" os-env print"
+        "jane\njane-doe"
+    }
+}
+{ $side-effects "key" } ;
+
 HELP: os-envs
 { $values { "assoc" "an association mapping strings to strings" } }
 { $description "Outputs the current set of environment variables." }
@@ -57,7 +72,7 @@ HELP: unset-os-env
     "Names and values of environment variables are operating system-specific."
 } ;
 
-{ os-env os-envs set-os-env unset-os-env set-os-envs } related-words
+{ os-env os-envs set-os-env unset-os-env set-os-envs change-os-env } related-words
 
 
 ARTICLE: "environment" "Environment variables"
@@ -72,6 +87,7 @@ ARTICLE: "environment" "Environment variables"
     set-os-env
     unset-os-env
     set-os-envs
+    change-os-env
 } ;
 
 ABOUT: "environment"
index f7c609bd283cad7c137b5c48ceda44fe13e32490..c84ddd8edd508dbdae164f952604fe2d5c144924 100644 (file)
@@ -25,3 +25,10 @@ os unix? [
 ] unit-test
 [ 32766 ] [ "factor-test-key-long" os-env length ] unit-test
 [ ] [ "factor-test-key-long" unset-os-env ] unit-test
+
+[ "abc" ] [
+    "a" "factor-test-key-change" set-os-env
+    "factor-test-key-change" [ "bc" append ] change-os-env
+    "factor-test-key-change" os-env
+] unit-test
+[ ] [ "factor-test-key-change" unset-os-env ] unit-test
index 7431e38cdad55984de2bae0a18d69f56d4bfe225..ef94a32f9071b358095c5bd8797b803b7fc17e71 100644 (file)
@@ -14,6 +14,9 @@ HOOK: (os-envs) os ( -- seq )
 
 HOOK: (set-os-envs) os ( seq -- )
 
+: change-os-env ( key quot -- )
+    [ [ os-env ] keep ] dip dip set-os-env ; inline
+
 : os-envs ( -- assoc )
     (os-envs) [ "=" split1 ] H{ } map>assoc ;