English | 日本語
XeFM にはさまざまなテーマが付属しています。いろいろなターミナル環境で見栄えのよいパレットに加えて、GUI バックエンドではパレットに画面効果と動く背景を組み合わせた、表現力豊かな「スクリーン」テーマもいくつかあります。テーマは実行中に切り替えられ、XeFM は最後に選んだものを覚えています。
このページでは、テーマそのもの、テーマがペインの背後に描くアニメーション背景、そしてテーマが有効にできる動き(ダイアログ、テキスト効果、ペインのフォーカス表示)を説明します。それらをすべて抑える 1 つのスイッチ REDUCED_MOTION も扱います。
XeFM は Dark+ で起動し、標準的なパレットを一通り備えています。
標準のパレットのほかに、XeFM には 4 つのスクリーンテーマが付属しています。それぞれパレットとおすすめの画面効果を組み合わせたものです。
hologram パネルがこちらへ漂ってくる背景に重なります。純粋に発光だけで構成され、強いブルームのにじみとグローがあり、走査線もローリンググリッチもないので、走査されるブラウン管ではなく投影されたホログラムのように見えます。ファイル名は現れるときにデコードされるように表示されます。wave の面がうねりながら流れていきます。枠は青から白への 1 つのグラデーションですが、内容はそうではありません。ディレクトリは暖かいオレンジ(インクリメンタルサーチもそれに合わせた色)で、テキストビューアーには多彩なシンタックスの色が付くので、動く水面を背にしてもファイル一覧をひと目で見分けられます。効果は文字に付く柔らかなドロップシャドウだけで、文字を背景から浮き上がらせます。文字はすぐに表示され、動くのは水面だけです。どれも 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)は、ペインと行の背景がどれだけ不透明かを決めます。値を下げると、場面がそれらを透けて見えるようになります。
1.0 — UI は完全に不透明(既定)。アニメーションは実質的に見えません。0.6 — 最初に試すのによい値です。場面がはっきり見え、文字もくっきりしたままです。0.3 — とても透明です。雰囲気は出ますが、使っているパレットで読みやすさを確認してください。文字、枠線、ダイアログのボックスは常に不透明なので、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 テーマでは、文字は現れるときに自分で打ち込まれるように表示されます。ディレクトリに入るとファイルペインが左から右へ埋まっていき、ダイアログが開くときにはそのラベルも同じように表示され、ログペインの新しい各行も書き込まれるときに同じように表示されます。ほかのテーマでは文字は普通に描かれます。
この効果は何かが現れたとき、つまり新しい一覧、ダイアログ、新しいログの行のときに働きます。スクロール中や、ステータスの値が切り替わったときにはあえて働きません。読んでいるものとの間に割り込まないようにするためです。すでに読んだログの行までスクロールして戻っても、その行には何も起きません。
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},
},
}
typewriter — 文字が左から右へ現れ、まだ現れていない部分には何も表示しません(Sci-Fi の既定)scatter — 文字がランダムな順番で、それぞれ最終的な位置に直接現れます。横にずれることはありません。打ち込まれるというより、メッセージが実体化していくように見えますdecode — まだ現れていない部分は、表示が通り過ぎるまででたらめな文字としてかき回されますwipe — まだ現れていない部分は、確定するまでブロック文字で埋められますflicker — 文字は表示されていますが、乱れたあとで落ち着きます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 — 文字が確定する瞬間に、一瞬だけ塗りつぶしたブロックとして表示され、それから本来の文字に落ち着きます。typewriter では入力カーソルのように、scatter では文字が打ち付けられるように見えます。値は全体の時間に対する割合なので、およそ 1 / len(text) にすると 1 文字分ほどの時間だけ光ります。たいていの文字列には 0.06〜0.12 が合います。hidden — まだ現れていない文字に何を表示するか。既定では空白です。'scramble' にするとでたらめな文字がかき回されます(decode があのように見えるのはこのためで、scatter に適用するとより騒がしく実体化します)。編集中の文字は決してアニメーションしません。テーマが何を指定していても、入力欄は常に実際の値を表示します。
テキストビューアーは、テーマがどのスタイルを指定していても、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 接続でも設定しておく価値があります。
F1 を押すとヘルプが開き、すべてのキーバインドが一覧表示されますテーマ機能によって、XeFM はどんなターミナル環境でも見栄えよく表示されます。
~/.xefm/config.py の場所と、テーマの定義方法