← XeFM English | 日本語 · crftwr/xefm on GitHub · craftware

配色

English | 日本語

概要

XeFM にはさまざまなテーマが付属しています。いろいろなターミナル環境で見栄えのよいパレットに加えて、GUI バックエンドではパレットに画面効果と動く背景を組み合わせた、表現力豊かな「スクリーン」テーマもいくつかあります。テーマは実行中に切り替えられ、XeFM は最後に選んだものを覚えています。

このページでは、テーマそのもの、テーマがペインの背後に描くアニメーション背景、そしてテーマが有効にできる動き(ダイアログ、テキスト効果、ペインのフォーカス表示)を説明します。それらをすべて抑える 1 つのスイッチ REDUCED_MOTION も扱います。

使えるテーマ

XeFM は Dark+ で起動し、標準的なパレットを一通り備えています。

画面効果付きのレトロなテーマ

標準のパレットのほかに、XeFM には 4 つのスクリーンテーマが付属しています。それぞれパレットとおすすめの画面効果を組み合わせたものです。

どれも View → Theme から選べます。

画面効果はフレーム全体に合成され、デスクトップアプリ(macOS/Windows)でのみ描画されます。ターミナルではパレットだけが表示されます。効果はそのテーマに切り替えると有効になり、別のテーマに切り替えると無効になります。~/.xefm/config.py の THEMES 辞書で、自作のテーマ(効果あり・なしのどちらも)を追加できます。設定を参照してください。

色が付くもの

どのテーマでも次のものが変わります。

隠しファイル

隠しファイルを表示しているとき(toggle_hidden、View → Show Hidden Files)、隠しエントリはその種類の色を背景色の方向に薄めて描かれます。そのため、フォルダーやリンクであることは読み取れたまま、ペインのほかの項目とははっきり区別されます。Windows ではこれが唯一の手がかりです。Windows での隠しは名前の先頭のドットではなくファイル属性なので、これがなければ desktop.ini と普通のファイルは同じように見えます。

どのくらい薄めるかを変えたり、代わりに 1 つの単色にしたりするには、~/.xefm/config.py でテーマの file_types に hidden を指定します。

THEMES = {
    'Ocean': {
        'file_types': {
            'hidden': 0.6,             # fade harder (0 = not at all)
            # 'hidden': (110, 110, 110),  # ...or one flat gray for every hidden entry
        },
    },
}

数値はある程度まではそのとおりになります。XeFM は隠しエントリの名前について、背後のペインに対する最低限のコントラストを保つので、大きな数値や背景に近い単色を指定しても、薄くなるのはその下限までです。隠しエントリは、読み飛ばせるほど控えめでありながら、見ようとすれば読めるだけのはっきりさが残ります。

使い方

テーマを切り替える

XeFM の実行中に View → Theme から直接テーマを選びます。変更はすぐに反映されます。

既定のテーマ

XeFM は Dark+ テーマで起動し、最後に切り替えたテーマを再起動後も覚えています。既定の配色を指定する設定項目はありません。テーマを追加したりカスタマイズしたりするには、~/.xefm/config.py の THEMES 辞書を使います(設定を参照してください)。

テーマのキーを割り当てる

テーマの順送りには、既定ではキーが割り当てられていません。キーボードで順送りするには、~/.xefm/config.py で toggle_color_scheme を割り当てます。

KEY_BINDINGS = {
    'toggle_color_scheme': ['Y'],  # Pick any free key
    # ... other bindings
}

ターミナルとの互換性

XeFM はターミナルが何に対応しているかを自動で検出します。

背景アニメーション

テーマは、ファイルのペインの背後に、ゆっくり動くアニメーションの場面を描けます。アニメーションは UI 全体の下に描画され、画面が完全に不透明でないところから透けて見えるので、ファイルの上に乗った飾りではなく、生きた壁紙のように見えます。

アニメーションはテーマ自身の色で描かれます。線の色はテーマの前景色から、背景はテーマの背景色から取られるので、どのテーマ(や自作のパレット)を使っても、場面はパレットに合った色になります。

デスクトップモードのみです。 アニメーションには本物のピクセルが必要です。描画するのは macOS/Windows のデスクトップバックエンドです。ターミナルにはセルより細かいピクセルがないので、この設定は何も言わずに無視され、テーマの単色の背景になります。

使えるアニメーション

名前 見た目
starfield 消失点からこちらへ流れてくる星。近づくにつれて長く明るくなる動きの軌跡として描かれます。
rain 尾が薄れていく落下する筋。列ごとに速さが異なる、古典的な蛍光体ターミナルの雨です。
constellation ゆっくり漂う点が近くの点と線で結ばれ、点が通り過ぎるにつれて線が現れたり消えたりします。
grid ワイヤーフレームの通路を飛んでいく場面。床、天井、両側の壁がグリッドになっていて、消失点に向かって集まります。カメラがゆっくり漂いながら向きを変えるので、消失点もさまよいます。
wave うねる波の面の上を流れる密な粒子の場。色のグラデーションが面に沿って移ろいます。
datastream 横方向のテレメトリーの流れ。何層にも重なったダッシュの列がそれぞれ異なる速さで流れていきます。ほとんどは短く、ときどき長い筋が混じり、どれも先頭が明るく、一部は小さな縦の刻みで終わります。にぎやかな領域と静かな領域が場の中を漂います。
hologram 奥行きのあるホログラムのパネルがこちらへ漂ってくる場面。それぞれが小さな平らな表示で、左から右へ自分で打ち出されていく疑似テキスト、棒グラフと折れ線グラフ、進捗バー、リングゲージ、ワイヤーフレームのメッシュなどがあり、ところどころに暖かいアクセント色が入ります。場がゆっくり通り過ぎるなか、パネルはそれぞれ自分のタイミングで浮かび上がり、留まり、消えていきます。背後には遠くのパネルの細かなもやがあり、消失点から外側へ数本の太い速度の筋が走り、ぼけた点や線が全体の上をゆっくり漂い、明るい流れ(バーコードのような断片、ダッシュ、点)が横のレーンを高速で走ります。

UI ツールキット自身の cube(回転するワイヤーフレーム)も使えます。これは完成した見た目というより、描画処理の参照用の場面として用意されているものです。

どこで動くか

どの場面も GPU シェーダーで、グラフィックカード上でピクセルごとに計算されます。そのおかげで、密度が高く、単色の線ではなく本物の色のグラデーションを使え、XeFM が何もしていない間はほとんど負荷がかかりません。XeFM が画面を再描画しなくても、グラフィックカードが UI の背後で場面を進めてくれます。

アニメーションには macOS または Windows のデスクトップモードが必要です。ターミナルには描画するピクセルがないので、animation キーは無視され、テーマの単色の背景になります。使える GPU シェーダーのない、まれなデスクトップ環境でも同じです。

有効にする

アニメーションはテーマごとに選びます。内蔵のテーマでは、Sci-Fi に starfield、Cyber に hologram、Shinagawa に wave が付いています。View → Theme から選んでください。

自作のテーマで使うには、~/.xefm/config.py の THEMES 辞書のテーマに animation キーを追加します。

THEMES = {
    'Deep Space': {
        'base': 'Dark+',
        'animation': 'starfield',
        'opacity': 0.6,          # let the scene show through the panes
    },
}

opacity — アニメーションを透けて見せる

アニメーションは UI の背後に描かれるので、画面が完全に不透明だと、レイアウトの隙間からしか見えません。テーマの opacity の値(0〜1)は、ペインと行の背景がどれだけ不透明かを決めます。値を下げると、場面がそれらを透けて見えるようになります。

文字、枠線、ダイアログのボックスは常に不透明なので、opacity を下げても画面が読めなくなることはありません。

使っていないときは消えていく

ずっと動き続けるアニメーションは、ほかのものを読んでいる間もマシンを働かせ続け、バッテリーを減らしてしまいます。そうならないように、次のように動きます。

システムの視差効果を減らす設定がオンの場合、場面は止まりますが、消えずに残ります。フェード自体が動きになりますし、あなたはまだマシンの前にいるからです。

設定することは何もなく、作業が中断されることもありません。止まっている間、XeFM の消費電力は単色の背景のときと変わりません。

速さと強さを調整する

調整するには、animation に名前ではなく辞書を指定します。

'animation': {'type': 'rain', 'speed': 1.0, 'opacity': 0.8},
キー 意味
type どのアニメーションか(上の表を参照)。
speed 動きの速さの倍率。1.0 が調整済みの見た目で、XeFM の既定は 0.6 です。0 で場面が止まります。
opacity 場面そのものをどのくらい濃く描くか(0〜1)。テーマ全体の opacity と混同しないでください。そちらは場面の上にある UI についての値です。
color テーマの前景色以外にしたい場合の、場面の基調色。場面はこの色をそのまま塗るのではなく、自分の色付けの基準にするので、グラデーションのある場面はグラデーションを失わず、この色に合わせて色合いが変わります。

どのアニメーションも、あえてゆっくり控えめにしてあります。実際に作業しているファイルマネージャーの背後にあるものなので、ファイル名と注意を奪い合うのではなく、背景に留まるように調整されています。speed を 1.0 よりかなり大きくしても動きますが、実際に使っていると気が散りやすくなるでしょう。

代わりに画像を使う

背景はアニメーションではなく静止画像にもできます。テーマのドキュメントの wallpaper キーを参照してください。テーマの背景は 1 つだけです。wallpaper と animation の両方を指定すると、壁紙が使われます。

動きとテキスト効果

GUI バックエンドでは、XeFM はいくつかのものをアニメーションさせます(現れるダイアログ、UI の背後を漂う Sci-Fi テーマの星空など)。また、どちらのファイルペインにフォーカスがあるかを示します。この節では、何が見えるか、それをどう変えるかを説明します。

ダイアログ

すべてのモーダル(入力欄、フィルターやお気に入りの選択画面、一括リネーム、テキスト/差分/ディレクトリ差分のビューアー)は同じように現れます。フェードインしながら 92% から実寸まで大きくなり、急に減速してすべるように止まります。

選択画面は 180 ms、全画面のビューアーは 140 ms です。ビューアーはたいてい意図して開くものなので、短くしておくことで、キー操作から遅れているように感じさせないようにしています。

ターミナルには合成機能がないので、同じ意図が 2 フレームで表現されます。内側に縮めたフレームを 1 つ表示し、次に完成したボックスを表示します。失われるものはなく、刻みが粗くなるだけです。

現れる文字(Sci-Fi)

Sci-Fi テーマでは、文字は現れるときに自分で打ち込まれるように表示されます。ディレクトリに入るとファイルペインが左から右へ埋まっていき、ダイアログが開くときにはそのラベルも同じように表示され、ログペインの新しい各行も書き込まれるときに同じように表示されます。ほかのテーマでは文字は普通に描かれます。

この効果は何かが現れたとき、つまり新しい一覧、ダイアログ、新しいログの行のときに働きます。スクロール中や、ステータスの値が切り替わったときにはあえて働きません。読んでいるものとの間に割り込まないようにするためです。すでに読んだログの行までスクロールして戻っても、その行には何も起きません。

別の効果を選ぶ

5 つのスタイルが付属しています。どのテーマでも、config.py でどれかを指定できます。

THEMES = {
    'Dracula': {
        'text_effect': 'scatter',   # or 'typewriter', 'decode', 'wipe', 'flicker'
        # ...or tune it:
        # 'text_effect': {'kind': 'typewriter', 'duration_ms': 300,
        #                 'stagger_ms': 8, 'max_rows': 120},
    },
}

duration_ms は 1 つの文字列にかかる時間、stagger_ms は行ごとに加わる遅れで、これによって一覧がペインの上から下へ流れるように表示されます。max_rows はアニメーションする行数の上限で、それ以降の行はそのまま表示されるので、とても縦長のウィンドウでも何秒も流れ続けることはありません。名前を間違えると、何かが壊れるのではなく効果がオフになります。

オプション

typewriter、scatter、decode では 2 つの調整ができます。

'text_effect': {
    'kind': 'typewriter',
    'flash': 0.08,        # each character flashes as a solid block as it lands
    'hidden': 'scramble', # not-yet-revealed characters churn instead of staying blank
},

編集中の文字は決してアニメーションしません。テーマが何を指定していても、入力欄は常に実際の値を表示します。

すべてが同じ効果を使うわけではない

テキストビューアーは、テーマがどのスタイルを指定していても、flash 付きの scatter を使います。全画面の文字には目で追うべき 1 つの場所がないので、左から右への表示はゆっくりしたワイプに見えてしまいますが、あらゆる場所に一斉に現れれば、同じ時間でページが埋まるからです。

それでも、肝心な点ではテーマに従います。テーマにテキスト効果がなければ、ビューアーもほかと同じように普通に開きますし、タイミングは独自に決めずテーマから取ります。

カーソル行

カーソルのある行は、テーマのカーソル色で示されます。デスクトップアプリでは行を囲む枠線、ターミナルでは行全体の下に引かれる線で、幅の広い一覧でもこれで見つけられます。

その色が付くのは、作業中のペインだけです。反対側のペインはカーソルを無彩色のグレーで示します。そのため 2 つが同じに見えることはなく、色をひと目見れば Enter がどちら側に働くかがわかります(以前は、待機中の表示は同じ色を暗くしたものでしたが、線の幅ではそれが同じ表示に見えてしまいました)。

XeFM は、ターミナルが実際に表示できる印を自分で選びます。 最近のターミナルのほとんど(Windows Terminal、iTerm2、WezTerm、kitty、GNOME Terminal、Ghostty、Alacritty、Konsole など)は下線を独自の色で描けるので、そこでは線が表示されます。macOS 標準の Terminal.app など、それができないターミナルでは、線が行の文字色で出てしまい、「この行に下線がある」ことしか伝わらず、どちらのペインにいるかはわかりません。そのため、カーソル行は代わりにカーソル色の [ … ] で示されます。どちらの表し方も同じことを伝え、どちらも設定は不要で、どちらも一覧の両端を同じく 1 列ずつ使います。そのため、どのターミナルでも、カーソル行の示し方以外はペインの見た目が同じになります。

ペインのフォーカス

作業中のペインは 2 つの手がかりで示されます。どちらもテーマごとの設定で、既定でオンにしているのは Sci-Fi テーマだけです。

待機中のペインのファイル名は読めるままです。この色の薄めは XeFM の読みやすさの処理の前に適用され、その処理がコントラストの下限より下に押し下げられた色を下限の上まで引き上げます。テーマの設定で待機中のペインを読めなくすることはできません。

ターミナルではブラケットは省かれます。文字のグリッドにはセルより細かい余地がなく、飾りのために列や行を丸ごと確保すると一覧の表示領域が実際に減ってしまうからです。そのためターミナルでのフォーカスは、フォーカスのあるペインでは色付き、待機中のペインではグレーになるカーソル表示で示されます。色の変更は場所を取らないので、文字を薄める処理はターミナルでも適用されます。

ほかのテーマで有効にする

どちらも config.py に書く普通のテーマのデータです。

THEMES = {
    'Dracula': {
        # Brackets in the theme accent, default arm length:
        'pane_frame': True,
        # ...or spell it out:
        # 'pane_frame': {'color': (130, 205, 255), 'arm': 2, 'thickness': 1.0},

        # Default wash strength:
        'pane_dim': True,
        # ...or set your own, 0.0 (untouched) to 1.0 (invisible):
        # 'pane_dim': 0.15,
    },
}

動きを減らす

装飾的な動き(ダイアログの拡大表示、テキスト効果、上で説明したテーマのアニメーション背景)をすべて抑えるには、config.py で次のように設定します。

REDUCED_MOTION = True

オンにすると次のようになります。

すべてが途中で止まるのではなく最終的な状態になるので、オンにしても何かが隠れることはありません。

知っておきたいこと:これが影響するのは装飾だけです。進捗バー、ファイル一覧の再読み込み、検索結果など、機能的な更新はすべてこれまでどおり動きます。

アニメーションの各フレームが画面全体の再描画になる、遅い SSH 接続でも設定しておく価値があります。

トラブルシューティング

テーマを切り替えても色が変わらない

色がおかしく見える

色が明るすぎる/暗すぎる

ヒント

さらに詳しく知るには

テーマ機能によって、XeFM はどんなターミナル環境でも見栄えよく表示されます。

関連項目