GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/System-Environment.html ・ emacs-doc.conao3.com

43.3 オペレーティングシステム環境

Emacsでは、さまざまな関数を通じてオペレーティングシステム環境の変数にアクセスできます。これらの変数には、システム名やユーザーのUIDなどが含まれます。

変数: system-configuration

この変数には、システムのハードウェア/ソフトウェア構成に関する標準的なGNU設定名が文字列として格納されています。例えば、64ビットのGNU/Linuxシステムにおける典型的な値は ‘"x86_64-unknown-linux-gnu"’ です。

変数: system-type

この変数の値は、Emacsが動作しているオペレーティングシステムの種類を示すシンボルです。取り得る値は以下の通りです:

aix

IBMのAIX。

berkeley-unix

Berkeley BSDとその派生版。

cygwin

MS-Windows上のPOSIXレイヤーであるCygwin。

darwin

Darwin (macOS)。

gnu

GNUシステム(HURDとMachからなるGNUカーネルを使用)。

gnu/linux

GNU/Linuxシステム――つまり、Linuxカーネルを採用したGNUシステムの派生版のこと。(こうしたシステムが一般に「Linux」と呼ばれているが、実際にはLinuxはカーネルに過ぎず、システム全体ではない。)

gnu/kfreebsd

FreeBSDカーネルを搭載したGNU(glibcベース)システム。

haiku

Beオペレーティングシステムの派生版であるHaikuオペレーティングシステム。

hpux

ヒューレット・パッカード HPUX オペレーティングシステム。

nacl

Google Native Client (NaCl) サンドボックスシステム。

android

Open Handset AllianceのAndroidオペレーティングシステム。

ms-dos

MicrosoftのDOS。MS-DOS向けにDJGPPでコンパイルされたEmacsは、MS-Windows上で実行してもsystem-typeをms-dosにバインドします。

usg-unix-v

AT&T Unix System V.

windows-nt

Microsoft Windows NT、9X以降。system-typeの値は常にwindows-ntとなります(例:Windows 10でも同様です)。

どうしても必要な場合を除き、より細かな区別を行うための新しい記号を追加することは避けたいと考えています!実際、将来的にはこうした代替手段の一部を廃止したいと考えています。system-type で可能な範囲よりも細かな区別が必要な場合は、例えば正規表現を用いて system-configuration をテストしてみてください。

関数: system-name

この関数は、実行中のマシン名を文字列として返します。

ユーザーオプション: mail-host-address

この変数が nil 以外の場合、メールアドレス生成の際に system-name の代わりに使用されます。例えば、user-mail-address のデフォルト値を構築する際に使用されます。ユーザー識別を参照してください。

コマンド: getenv var &optional frame

この関数は、環境変数 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
...
コマンド: setenv variable &optional value substitute

このコマンドは、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 を返します。

マクロ: with-environment-variables variables body…

このマクロは、body の実行時に variables に従って環境変数を一時的に設定します。フォームの終了時には、以前の値が復元されます。引数 variables は、(var value) 形式の文字列ペアのリストである必要があり、ここで var は環境変数名、value はその変数の値となります。

(with-environment-variables (("LANG" "C")
                             ("LANGUAGE" "en_US:en"))
  (call-process "ls" nil t))
変数: process-environment

この変数は文字列のリストであり、各文字列が1つの環境変数を表しています。関数 getenv および setenv はこの変数を介して動作します。

process-environment
⇒ ("PATH=/usr/local/bin:/usr/bin:/bin"
    "USER=lewis"
    "TERM=xterm"
    "SHELL=/bin/bash"
    "HOME=/home/lewis"
    ...)

process-environment に同じ環境変数を指定する要素が複数含まれている場合、それらの要素のうち最初のものが変数を指定し、それ以外は無視されます。

変数: initial-environment

この変数には、Emacs起動時に親プロセスから継承した環境変数のリストが格納されています。

変数: path-separator

この変数には、検索パス(環境変数で指定されるもの)においてディレクトリを区切る文字を示す文字列が格納されています。その値は、UnixおよびGNUシステムでは ":"、MSシステムでは ";" となります。

関数: path-separator

この関数は、変数 path-separator の接続ローカル値を返します。具体的には、MSシステムでは ";"、ローカルでは default-directory、UnixおよびGNUシステムでは ":"、あるいはリモートでは default-directory となります。

関数: parse-colon-path path

この関数は、環境変数 PATH の値のような検索パス文字列を受け取り、それを区切り文字で分割してディレクトリの一覧を返します。この一覧における nil はカレントディレクトリを意味します。関数名には「コロン」とありますが、実際には変数 path-separator の値を使用しています。

(parse-colon-path ":/foo:/bar")
     ⇒ (nil "/foo/" "/bar/")
変数: invocation-name

この変数には、Emacsが起動された際のプログラム名が格納されています。値は文字列であり、ディレクトリ名は含まれません。

変数: invocation-directory

この変数には、Emacs の実行ファイルを実行した際にそれが置かれていたディレクトリ、あるいはそのディレクトリが特定できない場合は nil が格納されます。

変数: installation-directory

nil 以外の場合、これは lib-src および etc サブディレクトリを探すためのディレクトリとなります。インストール済みの Emacs では、通常は nil です。Emacs が標準のインストール場所にこれらのディレクトリを見つけられないものの、Emacs 実行ファイルを含むディレクトリ(すなわち invocation-directory)に何らかの形で関連したディレクトリでそれらを見つけられる場合には、nil 以外となります。

関数: load-average &optional use-float

この関数は、現在の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-pid

この関数は、EmacsプロセスのプロセスIDを整数として返します。

変数: tty-erase-char

この変数には、Emacsが起動する前にシステムのターミナルドライバで選択されていた消去文字が格納されています。

変数: null-device

この変数にはシステムのヌルデバイスが格納されます。その値は、UnixおよびGNUシステムでは"/dev/null"、MSシステムでは"NUL"となります。

関数: null-device

この関数は、変数 null-device の接続ローカル値を返します。具体的には、MSシステムでは "NUL"、ローカルでは default-directory、UnixおよびGNUシステムでは "/dev/null"、あるいはリモートでは default-directory となります。