他のXresourcesファイルを#includeするときに環境変数を使用できますか?

他のXresourcesファイルを#includeするときに環境変数を使用できますか?

私の~/.Xresourcesファイル内に場所が環境変数の値に依存する別のファイルを含めたいと思います。可能ですか?

#include "${env_path}/abc/def/Xresources"

拡張はないようです${env_path}

答え1

はい、しかし直接的ではありません。

ロードされたツール.Xresourcesxrdb、移動するC プリプロセッサ。それが#includeディレクティブのソースです。 C プリプロセッサは環境変数へのアクセスを提供しません。プリプロセッサの出力は、変数補間などの追加の動的処理なしでリソースのリストとして解釈されます。

2つの回避策があります。別のプリプロセッサを使用するか、呼び出し時に変数を定義してxrdb使用します。どちらもxrdb呼び出し方法を変更する必要があります。xrdbXセッション起動スクリプトにコマンドを追加します。

Cプリプロセッサで変数を使用するには、xrdbコマンドラインに変数を渡します。

xrdb -DEXTRA_RESOURCES_FILE="<$env_path/abc/def/Xresources>" -merge ~/.Xresources

ファイル内で対応する変数を使用します。

#include EXTRA_RESOURCES_FILE

プリプロセッサには接続機能だけでなく文字列処理機能もないため、インクルードディレクティブの機能が制限されます。フルファイル名は単一の文字列で指定する必要があります。そしてxrdb音のない変身のようでしたが幸いに出まし"_<>

さらに柔軟性が必要な場合は、他のプリプロセッサを使用できます。私は使うm4、奇妙で理想的ではありませんが、Cプリプロセッサよりも悪くはありません。 M4には実際の文字列処理機能があり、他のファイルを含めることができます。ただし、環境変数に直接アクセスすることはできません。 GNU m4ではこれを行うことができますが、シェルエスケープを使用する必要があります。カスタム呼び出しを実行している場合は、xrdbこの時点で環境変数を渡すことをお勧めします。

xrdb -D"env_path=$env_path" -merge ~/.Xresources

.Xresourcesファイルから:

m4_include(env_path/abc/def/Xresources)

`…'m4は文字列を引用するために使用されます。`出力にaを含めるには、引用符文字を一時的に変更する必要があります。

または、追加のファイルを含める必要がある場合は、以下を実行してください。

xrdb -merge "$env_path/abc/def/Xresources"

関連情報