WezTermには起動時に右半分へ配置する設定項目がありません1。
Lua設定でイベントフックを使います。
local wezterm = require 'wezterm'
local mux = wezterm.mux
wezterm.on('gui-startup', function(cmd)
local screen = wezterm.gui.screens().main
local half_w = math.floor(screen.width / 2)
local h = screen.height
local tab, pane, win = mux.spawn_window(cmd or {})
local gui = win:gui_window()
gui:set_position(screen.x + half_w, screen.y)
gui:set_inner_size(half_w, h)
end)Code language: PHP (php)
set_inner_sizeはピクセル単位で指定します2。
タイトルバーを除いた内側の描画領域を直接制御するため、狙ったサイズになります。
1. MUX層とGUI層
WezTermは二層構造です3。
MUX層が端末を管理し、GUI層が表示を担当します。
spawn_windowはMUX層のAPIで、文字数ベースで動きます。gui_window()を取得してからset_inner_sizeを呼ぶと、macOSのウィンドウへ直接ピクセル指定できます4。
GUI層で上書きするため、initial_colsやinitial_rowsを設定していても影響を受けにくくなります。
2. つまずきやすい罠
反対に、spawn_windowのwidthとheightを直接使うと失敗します5。
この値はピクセルではなく文字数を指定するためです。
画面幅をscreen.widthで取得してそのまま渡しても、端末の列数として解釈されます。
意図したサイズになりません6
サイズが戻る場合はinitial_colsとinitial_rowsをコメントアウトしてください7。
これらの設定が起動後の再計算を引き起こすことがあります。
タイミング問題ならwezterm.time.call_afterで少し遅延させてset_inner_sizeを再実行すると安定します8。
- WezTermはRustで実装されたクロスプラットフォームの端末エミュレータで、Lua設定ファイル(
~/.wezterm.luaまたは~/.config/wezterm/wezterm.lua)で動作をカスタマイズします – WezTerm Documentation set_inner_size(width, height)は「ウィンドウ装飾を除いた内側の領域をピクセル単位でリサイズする」と公式で定義されています – set_inner_size – WezTerm- WezTermのアーキテクチャは、端末セッションを管理するMultiplexer層と表示を担当するGUI層に分かれています。この設計により、ヘッドレス運用やリモート接続が可能になります – wezterm.mux module
gui_window()はMuxWindowオブジェクトからGUIウィンドウオブジェクトを取得するメソッドです。これにより、MUX層からGUI層の操作が可能になります – gui_window – WezTerm- 公式ドキュメントでは「width and heightはcolumn and row cellsの数を指定する」と明記されています。ピクセル単位ではありません – spawn_window – WezTerm
- ウィンドウの中央配置やサイズ指定については、コミュニティでも多くの議論があります。この手法は複数のユーザーによって検証されています – How to center a new window on the screen? – Discussion #5501
- LinuxのX11やGNOME環境では、
set_inner_sizeで設定したサイズがinitial_colsとinitial_rowsに戻される既知の問題が報告されています – Issue #6757 – wezterm/wezterm wezterm.time.call_after(seconds, callback)は指定秒数後にコールバックを実行する関数です。バージョン20230320以降では小数点も受け付けます – wezterm.time module