Emacsでは、さまざまな関数を通じてオペレーティングシステム環境の変数にアクセスできます。これらの変数には、システム名やユーザーのUIDなどが含まれます。
この変数には、システムのハードウェア/ソフトウェア構成に関する標準的なGNU設定名が文字列として格納されています。例えば、64ビットのGNU/Linuxシステムにおける典型的な値は ‘"x86_64-unknown-linux-gnu"’ です。
この変数の値は、Emacsが動作しているオペレーティングシステムの種類を示すシンボルです。取り得る値は以下の通りです:
aixIBMのAIX。
berkeley-unixBerkeley BSDとその派生版。
cygwinMS-Windows上のPOSIXレイヤーであるCygwin。
darwinDarwin (macOS)。
gnuGNUシステム(HURDとMachからなるGNUカーネルを使用)。
gnu/linuxGNU/Linuxシステム――つまり、Linuxカーネルを採用したGNUシステムの派生版のこと。(こうしたシステムが一般に「Linux」と呼ばれているが、実際にはLinuxはカーネルに過ぎず、システム全体ではない。)
gnu/kfreebsdFreeBSDカーネルを搭載したGNU(glibcベース)システム。
haikuBeオペレーティングシステムの派生版であるHaikuオペレーティングシステム。
hpuxヒューレット・パッカード HPUX オペレーティングシステム。
naclGoogle Native Client (NaCl) サンドボックスシステム。
androidOpen Handset AllianceのAndroidオペレーティングシステム。
ms-dosMicrosoftのDOS。MS-DOS向けにDJGPPでコンパイルされたEmacsは、MS-Windows上で実行してもsystem-typeをms-dosにバインドします。
usg-unix-vAT&T Unix System V.
windows-ntMicrosoft Windows NT、9X以降。system-typeの値は常にwindows-ntとなります(例:Windows 10でも同様です)。
どうしても必要な場合を除き、より細かな区別を行うための新しい記号を追加することは避けたいと考えています!実際、将来的にはこうした代替手段の一部を廃止したいと考えています。system-type で可能な範囲よりも細かな区別が必要な場合は、例えば正規表現を用いて system-configuration をテストしてみてください。
この関数は、実行中のマシン名を文字列として返します。
この変数が nil 以外の場合、メールアドレス生成の際に system-name の代わりに使用されます。例えば、user-mail-address のデフォルト値を構築する際に使用されます。ユーザー識別を参照してください。
この関数は、環境変数 var の値を文字列として返します。var は文字列である必要があります。環境内で var
が未定義の場合、getenv は nil
を返します。var が設定されていても null の場合は、‘""’ を返します。Emacs 内では、環境変数とその値のリストが変数
process-environment に保持されています。
オプション引数 frame は、nil
以外の場合はフレームを指定します。この場合、関数は process-environment ではなく
frame のパラメータ environment(基本パラメータ を参照)の中から var を検索します。
環境変数「DISPLAY」は、frame
が省略されているか、あるいは nil である場合に特別な扱いを受けます。process-environment にその変数が見つからない場合、関数は selected-frame の
display パラメータを確認し、それが nil であれば initial-environment
も確認します。
(getenv "USER")
⇒ "lewis"
shellコマンド printenv は、環境の全部または一部を出力します:
bash$ printenv PATH=/usr/local/bin:/usr/bin:/bin USER=lewis
TERM=xterm SHELL=/bin/bash HOME=/home/lewis
...
このコマンドは、variable という名前の環境変数の値を value に設定します。variable
は文字列である必要があります。内部的には、Emacs Lisp は任意の文字列を扱うことができます。ただし、通常 variable
は有効なシェル識別子、すなわち、英字またはアンダースコアで始まり、英字、数字、アンダースコアが並んだものである必要があります。そうでない場合、Emacs
のサブプロセスが variable
の値にアクセスしようとすると、エラーが発生する可能性があります。value が省略された場合、または
nil(あるいは対話的にプレフィックス引数が指定された場合)、setenv は環境から variable
を削除します。それ以外の場合、value は文字列である必要があります。
オプション引数 substitute が nil
以外の場合、Emacs は関数 substitute-env-vars を呼び出して、value 内の環境変数を展開します。
setenvはprocess-environmentを変更することで動作します。その変数をletにバインドすることも妥当な手法です。
setenv は variable
の新しい値を返します。環境から variable が削除された場合は nil を返します。
このマクロは、body の実行時に variables
に従って環境変数を一時的に設定します。フォームの終了時には、以前の値が復元されます。引数 variables は、(var value)
形式の文字列ペアのリストである必要があり、ここで var は環境変数名、value はその変数の値となります。
(with-environment-variables (("LANG" "C")
("LANGUAGE" "en_US:en"))
(call-process "ls" nil t))
この変数は文字列のリストであり、各文字列が1つの環境変数を表しています。関数 getenv および
setenv はこの変数を介して動作します。
process-environment
⇒ ("PATH=/usr/local/bin:/usr/bin:/bin"
"USER=lewis"
"TERM=xterm"
"SHELL=/bin/bash"
"HOME=/home/lewis"
...)
process-environment
に同じ環境変数を指定する要素が複数含まれている場合、それらの要素のうち最初のものが変数を指定し、それ以外は無視されます。
この変数には、Emacs起動時に親プロセスから継承した環境変数のリストが格納されています。
この変数には、検索パス(環境変数で指定されるもの)においてディレクトリを区切る文字を示す文字列が格納されています。その値は、UnixおよびGNUシステムでは
":"、MSシステムでは ";" となります。
この関数は、変数 path-separator
の接続ローカル値を返します。具体的には、MSシステムでは ";"、ローカルでは
default-directory、UnixおよびGNUシステムでは ":"、あるいはリモートでは default-directory となります。
この関数は、環境変数 PATH
の値のような検索パス文字列を受け取り、それを区切り文字で分割してディレクトリの一覧を返します。この一覧における nil はカレントディレクトリを意味します。関数名には「コロン」とありますが、実際には変数 path-separator の値を使用しています。
(parse-colon-path ":/foo:/bar")
⇒ (nil "/foo/" "/bar/")
この変数には、Emacsが起動された際のプログラム名が格納されています。値は文字列であり、ディレクトリ名は含まれません。
この変数には、Emacs の実行ファイルを実行した際にそれが置かれていたディレクトリ、あるいはそのディレクトリが特定できない場合は nil が格納されます。
nil 以外の場合、これは lib-src
および etc サブディレクトリを探すためのディレクトリとなります。インストール済みの Emacs
では、通常は nil です。Emacs
が標準のインストール場所にこれらのディレクトリを見つけられないものの、Emacs 実行ファイルを含むディレクトリ(すなわち invocation-directory)に何らかの形で関連したディレクトリでそれらを見つけられる場合には、nil 以外となります。
この関数は、現在の1分、5分、および15分のシステム負荷平均をリスト形式で返します。負荷平均は、システム上で実行を試みているプロセス数を示します。
デフォルトでは、値はシステムのロードアベレージの100倍の整数となりますが、use-float が
nil 以外の場合は、100倍せずに浮動小数点数として返されます。
load average の取得が不可能な場合、この関数はエラーを通知します。一部のプラットフォームでは、load average へのアクセスに、カーネル情報を読み取れるよう Emacs を setuid または setgid としてインストールする必要がありますが、これは通常推奨されません。
1分単位のロードアベレージは取得できるが、5分または15分単位のものは取得できない場合、この関数は取得可能なアベレージを含む短縮版のリストを返します。
(load-average)
⇒ (169 48 36)
(load-average t)
⇒ (1.69 0.48 0.36)
shellコマンド uptime も同様の情報を返します。
この関数は、EmacsプロセスのプロセスIDを整数として返します。
この変数には、Emacsが起動する前にシステムのターミナルドライバで選択されていた消去文字が格納されています。
この変数にはシステムのヌルデバイスが格納されます。その値は、UnixおよびGNUシステムでは"/dev/null"、MSシステムでは"NUL"となります。
この関数は、変数 null-device の接続ローカル値を返します。具体的には、MSシステムでは
"NUL"、ローカルでは default-directory、UnixおよびGNUシステムでは "/dev/null"、あるいはリモートでは default-directory となります。