diff --git a/CHANGES.md b/CHANGES.md index 5906219..cf19ee2 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -7,6 +7,9 @@ - Types: declare `libtmux.Session`, `Window`, `WindowLink`, `Pane`, `Client` and `Buffer` handle classes. Each lists only the methods tmux accepts for that kind; `Server:handle` returns the class that matches the record. +- Types: give each option, hook and environment operation its own options + class, listing only the fields that operation accepts. `run_hook` takes + `process` alone; `hidden` belongs to `set_environment`. ## 0.1.0alpha1-1 (2026-09-20) diff --git a/lua/libtmux/_internal/entity.lua b/lua/libtmux/_internal/entity.lua index 1540003..1b033c4 100644 --- a/lua/libtmux/_internal/entity.lua +++ b/lua/libtmux/_internal/entity.lua @@ -388,26 +388,28 @@ end --- Options and hooks, shared by sessions, windows and panes. --- Scopes are limited to the handle's own kind; global scopes belong to the Server. ---@class libtmux.Configurable: libtmux.Entity ----@field get_option fun(self:libtmux.Configurable,name:string,options?:libtmux.SettingOptions): +---@field get_option fun(self:libtmux.Configurable,name:string, +--- options?:libtmux.SettingGetOptions): --- libtmux.Request Reads one option. ----@field list_options fun(self:libtmux.Configurable,options?:libtmux.SettingOptions): +---@field list_options fun(self:libtmux.Configurable,options?:libtmux.SettingListOptions): --- libtmux.Request Lists the options set at this scope. ---@field set_option fun(self:libtmux.Configurable,name:string,value:libtmux.OptionInput, ---- options?:libtmux.SettingOptions): +--- options?:libtmux.SettingSetOptions): --- libtmux.Request Sets one option. ---@field unset_option fun(self:libtmux.Configurable,name:string, ---- options?:libtmux.SettingOptions): +--- options?:libtmux.SettingUnsetOptions): --- libtmux.Request Unsets one option. ----@field get_hook fun(self:libtmux.Configurable,name:string,options?:libtmux.SettingOptions): +---@field get_hook fun(self:libtmux.Configurable,name:string,options?:libtmux.SettingGetOptions): --- libtmux.Request Reads one hook. ----@field list_hooks fun(self:libtmux.Configurable,options?:libtmux.SettingOptions): +---@field list_hooks fun(self:libtmux.Configurable,options?:libtmux.SettingListOptions): --- libtmux.Request Lists the hooks set at this scope. ---@field set_hook fun(self:libtmux.Configurable,name:string,value:libtmux.HookProgram, ---- options?:libtmux.SettingOptions): +--- options?:libtmux.SettingSetOptions): --- libtmux.Request Sets one hook. ----@field unset_hook fun(self:libtmux.Configurable,name:string,options?:libtmux.SettingOptions): +---@field unset_hook fun(self:libtmux.Configurable,name:string, +--- options?:libtmux.SettingUnsetOptions): --- libtmux.Request Unsets one hook. ----@field run_hook fun(self:libtmux.Configurable,name:string,options?:libtmux.SettingOptions): +---@field run_hook fun(self:libtmux.Configurable,name:string,options?:libtmux.RunHookOptions): --- libtmux.Request Runs one hook now. --- A tmux session. @@ -425,12 +427,12 @@ end ---@field attach fun(self:libtmux.Session):libtmux.Request --- Requires an interactive terminal capability; current adapters return unsupported_tty. ---@field get_environment fun(self:libtmux.Session,name:string, ---- options?:libtmux.EnvironmentOptions): +--- options?:libtmux.EnvironmentGetOptions): --- libtmux.Request Reads one environment variable. ----@field list_environment fun(self:libtmux.Session,options?:libtmux.EnvironmentOptions): +---@field list_environment fun(self:libtmux.Session,options?:libtmux.EnvironmentListOptions): --- libtmux.Request Lists this session's environment. ---@field set_environment fun(self:libtmux.Session,name:string,value:string, ---- options?:libtmux.EnvironmentOptions): +--- options?:libtmux.EnvironmentSetOptions): --- libtmux.Request Sets one environment variable. ---@field unset_environment fun(self:libtmux.Session,name:string, --- options?:libtmux.EnvironmentOptions): diff --git a/lua/libtmux/_internal/environment.lua b/lua/libtmux/_internal/environment.lua index 89dc521..84a5573 100644 --- a/lua/libtmux/_internal/environment.lua +++ b/lua/libtmux/_internal/environment.lua @@ -434,11 +434,18 @@ end ---@field inherited boolean True only for a global fallback requested through a session. ---@field target? libtmux.Reference Session storage identity; omitted for global storage. +--- What every environment operation accepts; unset and remove take no more. ---@class libtmux.EnvironmentOptions ---@field scope? "global"|"session" Must match the receiving handle. ---@field process? libtmux.CreationProcessOptions ----@field inherit? boolean Reads only; session fallback to global, default false. ----@field include_hidden? boolean Lists only; default true. ----@field hidden? boolean Set only; default false. + +---@class libtmux.EnvironmentGetOptions: libtmux.EnvironmentOptions +---@field inherit? boolean Session fallback to global; default false. + +---@class libtmux.EnvironmentListOptions: libtmux.EnvironmentGetOptions +---@field include_hidden? boolean Default true. + +---@class libtmux.EnvironmentSetOptions: libtmux.EnvironmentOptions +---@field hidden? boolean Default false. return M diff --git a/lua/libtmux/_internal/server.lua b/lua/libtmux/_internal/server.lua index 6aeab33..43dda96 100644 --- a/lua/libtmux/_internal/server.lua +++ b/lua/libtmux/_internal/server.lua @@ -601,30 +601,31 @@ end ---@field error? libtmux.Error ---@class libtmux.Server ----@field get_option fun(self:libtmux.Server,name:string,options?:libtmux.SettingOptions): +---@field get_option fun(self:libtmux.Server,name:string,options?:libtmux.SettingGetOptions): --- libtmux.Request ----@field list_options fun(self:libtmux.Server,options?:libtmux.SettingOptions): +---@field list_options fun(self:libtmux.Server,options?:libtmux.SettingListOptions): --- libtmux.Request ---@field set_option fun(self:libtmux.Server,name:string,value:libtmux.OptionInput, ---- options?:libtmux.SettingOptions): +--- options?:libtmux.SettingSetOptions): --- libtmux.Request ----@field unset_option fun(self:libtmux.Server,name:string,options?:libtmux.SettingOptions): +---@field unset_option fun(self:libtmux.Server,name:string,options?:libtmux.SettingUnsetOptions): --- libtmux.Request ----@field get_hook fun(self:libtmux.Server,name:string,options?:libtmux.SettingOptions): +---@field get_hook fun(self:libtmux.Server,name:string,options?:libtmux.SettingGetOptions): --- libtmux.Request ----@field list_hooks fun(self:libtmux.Server,options?:libtmux.SettingOptions): +---@field list_hooks fun(self:libtmux.Server,options?:libtmux.SettingListOptions): --- libtmux.Request ---@field set_hook fun(self:libtmux.Server,name:string,value:libtmux.HookProgram, ---- options?:libtmux.SettingOptions): +--- options?:libtmux.SettingSetOptions): --- libtmux.Request ----@field unset_hook fun(self:libtmux.Server,name:string,options?:libtmux.SettingOptions): +---@field unset_hook fun(self:libtmux.Server,name:string,options?:libtmux.SettingUnsetOptions): --- libtmux.Request ----@field get_environment fun(self:libtmux.Server,name:string,options?:libtmux.EnvironmentOptions): +---@field get_environment fun(self:libtmux.Server,name:string, +--- options?:libtmux.EnvironmentGetOptions): --- libtmux.Request ----@field list_environment fun(self:libtmux.Server,options?:libtmux.EnvironmentOptions): +---@field list_environment fun(self:libtmux.Server,options?:libtmux.EnvironmentListOptions): --- libtmux.Request ---@field set_environment fun(self:libtmux.Server,name:string,value:string, ---- options?:libtmux.EnvironmentOptions): +--- options?:libtmux.EnvironmentSetOptions): --- libtmux.Request ---@field unset_environment fun(self:libtmux.Server,name:string, --- options?:libtmux.EnvironmentOptions): diff --git a/lua/libtmux/_internal/settings.lua b/lua/libtmux/_internal/settings.lua index f6692d5..03543c1 100644 --- a/lua/libtmux/_internal/settings.lua +++ b/lua/libtmux/_internal/settings.lua @@ -651,11 +651,26 @@ end ---@alias libtmux.OptionInput string|number|boolean|libtmux.HookProgram|libtmux.OptionArrayInput +--- What every option and hook operation accepts. Each operation's own class +--- adds the fields it reads; anything else fails with `invalid_options`. ---@class libtmux.SettingOptions ---@field scope? 'server'|'session'|'window'|'pane'|'global_session'|'global_window' +---@field process? libtmux.CreationProcessOptions + +---@class libtmux.SettingListOptions: libtmux.SettingOptions ---@field inherit? boolean Read fallback values; defaults to true. + +---@class libtmux.SettingGetOptions: libtmux.SettingListOptions ---@field index? integer Array slot; reads still inspect the whole array. + +---@class libtmux.SettingUnsetOptions: libtmux.SettingOptions +---@field index? integer Array slot. + +---@class libtmux.SettingSetOptions: libtmux.SettingUnsetOptions ---@field append? boolean String concatenation or unindexed built-in hook append. + +--- Running a hook reads only its handle's own scope. +---@class libtmux.RunHookOptions ---@field process? libtmux.CreationProcessOptions ---@class libtmux.OptionRecord