├── version.txt ├── .github ├── ISSUE_TEMPLATE │ ├── config.yml │ ├── 1-missing_types.yml │ ├── 2-feature_request.yml │ └── 3-lazydev-bug.yml ├── CODEOWNERS ├── pull_request_template.md └── workflows │ ├── luarocks.yml │ ├── greetings.yml │ ├── stylua.yml │ └── release.yml ├── .gitignore ├── lua └── wezterm │ └── types │ ├── events │ ├── gui.lua │ ├── multiplexer.lua │ └── window.lua │ ├── enum.lua │ ├── events.lua │ ├── objects.lua │ ├── objects │ ├── tab-information.lua │ ├── tls-domain-server.lua │ ├── ssh-domain.lua │ ├── local-process-info.lua │ ├── exec-domain.lua │ ├── pane-information.lua │ ├── wsl-domain.lua │ ├── spawn-command.lua │ ├── time.lua │ ├── tls-domain-client.lua │ ├── mux-domain.lua │ ├── mux-tab.lua │ ├── mux-window.lua │ ├── color.lua │ ├── window.lua │ └── pane.lua │ ├── wezterm │ ├── procinfo.lua │ ├── time.lua │ ├── serde.lua │ ├── url.lua │ ├── plugin.lua │ ├── gui.lua │ ├── mux.lua │ └── color.lua │ ├── enum │ ├── copy-mode-assignment.lua │ └── key-assignment.lua │ └── colorschemes.lua ├── .editorconfig ├── stylua.toml ├── .taplo.toml ├── .pre-commit-config.yaml ├── CREDITS.md ├── .luarc.json ├── LICENSE ├── README.md └── scripts └── ensure_eof_comment.py /version.txt: -------------------------------------------------------------------------------- 1 | v1.0.0-1 2 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: true 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Config file 2 | /wezterm.lua 3 | 4 | # Python Stuff 5 | .mypy_cache/ 6 | .ropeproject/ 7 | -------------------------------------------------------------------------------- /lua/wezterm/types/events/gui.lua: -------------------------------------------------------------------------------- 1 | ---@meta 2 | 3 | ---@alias GuiEvent "gui-attached"|"gui-startup" 4 | 5 | -- vim:ts=4:sts=4:sw=4:et:ai:si:sta: 6 | -------------------------------------------------------------------------------- /lua/wezterm/types/events/multiplexer.lua: -------------------------------------------------------------------------------- 1 | ---@meta 2 | 3 | ---@alias MultiplexerEvent "mux-is-process-stateful"|"mux-startup" 4 | 5 | -- vim:ts=4:sts=4:sw=4:et:ai:si:sta: 6 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | indent_size = 4 6 | tab_width = 4 7 | end_of_line = lf 8 | insert_final_newline = true 9 | max_line_length = 100 10 | -------------------------------------------------------------------------------- /lua/wezterm/types/enum.lua: -------------------------------------------------------------------------------- 1 | ---@meta 2 | 3 | ---@module "wezterm.types.enum.copy-mode-assignment" 4 | ---@module "wezterm.types.enum.key-assignment" 5 | 6 | -- vim:ts=4:sts=4:sw=4:et:ai:si:sta: 7 | -------------------------------------------------------------------------------- /lua/wezterm/types/events.lua: -------------------------------------------------------------------------------- 1 | ---@meta 2 | 3 | ---@module "wezterm.types.events.gui" 4 | ---@module "wezterm.types.events.multiplexer" 5 | ---@module "wezterm.types.events.window" 6 | 7 | -- vim:ts=4:sts=4:sw=4:et:ai:si:sta: 8 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @DrKJeff16 2 | /.github/CODEOWNERS @DrKJeff16 3 | /.github/workflows/stylua.yml @DrKJeff16 4 | /.github/ISSUE_TEMPLATE/1-missing_types.yml @DrKJeff16 5 | /.github/ISSUE_TEMPLATE/2-feature_request.yml @DrKJeff16 6 | /.github/ISSUE_TEMPLATE/3-lazydev-bug.yml @DrKJeff16 7 | /.github/ISSUE_TEMPLATE/config.yml @DrKJeff16 8 | /scripts/ @DrKJeff16 9 | -------------------------------------------------------------------------------- /lua/wezterm/types/events/window.lua: -------------------------------------------------------------------------------- 1 | ---@meta 2 | 3 | ---@alias WindowEvent 4 | ---|"augment-command-palette" 5 | ---|"bell" 6 | ---|"format-tab-title" 7 | ---|"format-window-title" 8 | ---|"new-tab-button-click" 9 | ---|"open-uri" 10 | ---|"update-status" 11 | ---|"user-var-changed" 12 | ---|"window-config-reloaded" 13 | ---|"window-focus-changed" 14 | ---|"window-resized" 15 | 16 | -- vim:ts=4:sts=4:sw=4:et:ai:si:sta: 17 | -------------------------------------------------------------------------------- /stylua.toml: -------------------------------------------------------------------------------- 1 | call_parentheses = "Always" 2 | collapse_simple_statement = "Never" 3 | column_width = 100 4 | indent_type = "Spaces" 5 | indent_width = 4 6 | line_endings = "Unix" 7 | quote_style = "AutoPreferDouble" 8 | space_after_function_names = "Never" 9 | syntax = 'Lua54' 10 | 11 | [sort_requires] 12 | enabled = false 13 | -------------------------------------------------------------------------------- /.taplo.toml: -------------------------------------------------------------------------------- 1 | [formatting] 2 | align_comments = true 3 | align_entries = true 4 | align_single_comments = true 5 | allowed_blank_lines = 1 6 | array_auto_expand = true 7 | array_trailing_comma = true 8 | column_width = 100 9 | compact_entries = false 10 | crlf = false 11 | indent_entries = false 12 | indent_tables = true 13 | reorder_arrays = true 14 | reorder_keys = true 15 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | ## Changes 2 | 3 | - Change no. 1 4 | - ... 5 | 6 | --- 7 | 8 | ## Source(s) 9 | 10 | If data types have been changed include either a source 11 | or an explanation of why data types have changed. 12 | 13 | --- 14 | 15 | ## Description (Optional) 16 | 17 | Include a summary of what was changed/added/removed. 18 | 19 | --- 20 | 21 | ## Screenshots Or Code Snippets (Optional) 22 | 23 | If relevant, include any screenshots/code snippets you could provide, as 24 | additional context. 25 | -------------------------------------------------------------------------------- /.pre-commit-config.yaml: -------------------------------------------------------------------------------- 1 | repos: 2 | - repo: https://github.com/pre-commit/pre-commit-hooks 3 | rev: v6.0.0 4 | hooks: 5 | - id: end-of-file-fixer 6 | - repo: https://github.com/Lucas-C/pre-commit-hooks 7 | rev: v1.5.5 8 | hooks: 9 | - id: remove-crlf 10 | - id: forbid-crlf 11 | - repo: local 12 | hooks: 13 | - id: stylua 14 | name: StyLua 15 | language: system 16 | entry: stylua 17 | types: [lua] 18 | verbose: true 19 | - id: check_eof 20 | name: Run EOF Comments Check 21 | language: system 22 | entry: python3 scripts/ensure_eof_comment.py lua -e lua 23 | types: [lua] 24 | verbose: true 25 | -------------------------------------------------------------------------------- /.github/workflows/luarocks.yml: -------------------------------------------------------------------------------- 1 | name: LuaRocks Release 2 | on: 3 | pull_request: 4 | workflow_dispatch: 5 | jobs: 6 | luarocks-release: 7 | runs-on: ubuntu-latest 8 | name: LuaRocks Upload 9 | steps: 10 | - name: Checkout 11 | uses: actions/checkout@v6 12 | - name: LuaRocks Upload 13 | uses: nvim-neorocks/luarocks-tag-release@v7.2.0 14 | with: 15 | version: "1.0.0" 16 | license: "MIT" 17 | detailed_description: | 18 | LuaCATS-like Lua Language Server type annotations for your WezTerm config. 19 | labels: | 20 | metalua 21 | neovim 22 | copy_directories: | 23 | {{ neovim.plugin.dirs }} 24 | env: 25 | LUAROCKS_API_KEY: ${{ secrets.LUAROCKS_API_KEY }} 26 | -------------------------------------------------------------------------------- /CREDITS.md: -------------------------------------------------------------------------------- 1 |
2 | 3 | # Credits 4 | 5 |
6 | 7 | ## Maintainers 8 | 9 | - [@DrKJeff16][DrKJeff16] - **Current owner** 10 | - [@justinsgithub][justinsgithub] - **Author** 11 | - [@gonstoll][gonstoll] 12 | 13 | --- 14 | 15 | ## Contributors 16 | 17 | Many thanks to these champs! 18 | 19 | - [@TheLeoP][theleop] 20 | - [@reegnz][reegenz] 21 | - [@Zuyoutoki][Zuyoutoki] 22 | - [@AtifChy][AtifChy] 23 | - [@chrisgrieser][chrisgrieser] 24 | 25 | [DrKJeff16]: https://github.com/DrKJeff16 26 | [justinsgithub]: https://github.com/justinsgithub 27 | [gonstoll]: https://github.com/gonstoll 28 | [theleop]: https://github.com/TheLeoP 29 | [reegenz]: https://github.com/reegnz 30 | [Zuyoutoki]: https://github.com/Zuyoutoki 31 | [AtifChy]: https://github.com/AtifChy 32 | [chrisgrieser]: https://github.com/chrisgrieser 33 | -------------------------------------------------------------------------------- /.github/workflows/greetings.yml: -------------------------------------------------------------------------------- 1 | name: Greetings 2 | on: 3 | pull_request: 4 | types: 5 | - opened 6 | issues: 7 | types: 8 | - opened 9 | jobs: 10 | greet: 11 | name: Greet First-Time Contributors 12 | runs-on: ubuntu-latest 13 | permissions: 14 | issues: write 15 | pull-requests: write 16 | steps: 17 | - uses: actions/first-interaction@v3.1.0 18 | with: 19 | repo-token: ${{ secrets.GITHUB_TOKEN }} 20 | issue-message: | 21 | ### Automated Greeting 22 | 23 | Thank you for your feedback! 24 | 25 | Your issue will be adressed **ASAP**. 26 | pr-message: | 27 | ### Automated Greeting 28 | 29 | Many many thanks for your contributions! 30 | 31 | Your PR will be checked **ASAP**. 32 | -------------------------------------------------------------------------------- /lua/wezterm/types/objects.lua: -------------------------------------------------------------------------------- 1 | ---@meta 2 | 3 | ---@module "wezterm.types.objects.color" 4 | ---@module "wezterm.types.objects.exec-domain" 5 | ---@module "wezterm.types.objects.local-process-info" 6 | ---@module "wezterm.types.objects.mux-domain" 7 | ---@module "wezterm.types.objects.mux-tab" 8 | ---@module "wezterm.types.objects.mux-window" 9 | ---@module "wezterm.types.objects.pane" 10 | ---@module "wezterm.types.objects.pane-information" 11 | ---@module "wezterm.types.objects.spawn-command" 12 | ---@module "wezterm.types.objects.ssh-domain" 13 | ---@module "wezterm.types.objects.tab-information" 14 | ---@module "wezterm.types.objects.time" 15 | ---@module "wezterm.types.objects.tls-domain-client" 16 | ---@module "wezterm.types.objects.tls-domain-server" 17 | ---@module "wezterm.types.objects.window" 18 | ---@module "wezterm.types.objects.wsl-domain" 19 | 20 | -- vim:ts=4:sts=4:sw=4:et:ai:si:sta: 21 | -------------------------------------------------------------------------------- /.github/workflows/stylua.yml: -------------------------------------------------------------------------------- 1 | name: Stylua 2 | on: 3 | push: 4 | paths: 5 | - lua/wezterm/types/*.lua 6 | - lua/wezterm/types/enum/*.lua 7 | - lua/wezterm/types/events/*.lua 8 | - lua/wezterm/types/objects/*.lua 9 | - lua/wezterm/types/wezterm/*.lua 10 | - .github/workflows/stylua.yml 11 | pull_request: 12 | types: 13 | - opened 14 | paths: 15 | - lua/wezterm/types/*.lua 16 | - lua/wezterm/types/enum/*.lua 17 | - lua/wezterm/types/events/*.lua 18 | - lua/wezterm/types/objects/*.lua 19 | - lua/wezterm/types/wezterm/*.lua 20 | - .github/workflows/stylua.yml 21 | jobs: 22 | stylua: 23 | runs-on: ubuntu-latest 24 | steps: 25 | - name: Checkout 26 | uses: actions/checkout@v6 27 | - name: Run stylua 28 | uses: JohnnyMorganz/stylua-action@v4.1.0 29 | with: 30 | token: ${{ secrets.GITHUB_TOKEN }} 31 | version: latest 32 | args: --check lua 33 | -------------------------------------------------------------------------------- /.luarc.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/LuaLS/vscode-lua/master/setting/schema.json", 3 | "hover": { 4 | "enable": true, 5 | "expandAlias": true, 6 | "enumsLimit": 50, 7 | "previewFields": 75 8 | }, 9 | "workspace": { 10 | "library": [ 11 | "./lua/wezterm/types" 12 | ], 13 | "preloadFileSize": 1000 14 | }, 15 | "runtime": { 16 | "version": "Lua 5.4", 17 | "path": [ 18 | "?.lua", 19 | "?/init.lua" 20 | ] 21 | }, 22 | "hint": { 23 | "enable": true, 24 | "setType": true, 25 | "paramName": "Literal", 26 | "paramType": true, 27 | "semicolon": "Disable" 28 | }, 29 | "completion": { 30 | "callSnippet": "Replace", 31 | "keywordSnippet": "Replace", 32 | "displayContext": 8, 33 | "enable": true, 34 | "showWord": "Enable", 35 | "workspaceWord": true 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Justin Angeles 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /lua/wezterm/types/objects/tab-information.lua: -------------------------------------------------------------------------------- 1 | ---@meta 2 | 3 | ---The `TabInformation` struct describes a tab. 4 | --- 5 | ---`TabInformation` is purely a snapshot of some of the 6 | ---key characteristics of the tab, intended for use 7 | ---in synchronous, fast event callbacks that format 8 | ---GUI elements such as the window and tab title bars. 9 | --- 10 | ---@class TabInformation 11 | ---The [`PaneInformation`](lua://PaneInformation) 12 | ---for the active pane in this tab. 13 | --- 14 | ---@field active_pane PaneInformation 15 | ---Is `true` if this tab is the active tab. 16 | --- 17 | ---@field is_active boolean 18 | ---Is `true` if this tab is the previously active tab. 19 | --- 20 | ---@field is_last_active boolean 21 | ---The identifier for the tab. 22 | --- 23 | ---@field tab_id integer 24 | ---The logical tab position within its containing window, 25 | ---with `0` indicating the leftmost tab. 26 | --- 27 | ---@field tab_index integer 28 | ---The title of the tab. 29 | --- 30 | ---@field tab_title string 31 | ---The ID of the window that contains this tab. 32 | --- 33 | ---@field window_id integer 34 | ---The title of the window that contains this tab. 35 | --- 36 | ---@field window_title string 37 | 38 | -- vim:ts=4:sts=4:sw=4:et:ai:si:sta: 39 | -------------------------------------------------------------------------------- /lua/wezterm/types/objects/tls-domain-server.lua: -------------------------------------------------------------------------------- 1 | ---@meta 2 | 3 | ---The `TlsDomainServer` struct specifies information about 4 | ---how to define the server side of a [TLS Domain](https://wezterm.org/multiplexing.html#tls-domains). 5 | --- 6 | ---@class TlsDomainServer 7 | ---The address:port combination on which the server 8 | ---will listen for client connections. 9 | --- 10 | ---@field bind_address string 11 | ---The path to an x509 PEM encoded CA chain file. 12 | --- 13 | ---You can omit this if your `tls_client` is using `bootstrap_via_ssh`. 14 | --- 15 | ---@field pem_ca? string 16 | ---The path to an x509 PEM encoded certificate file. 17 | --- 18 | ---You can omit this if your `tls_client` is using `bootstrap_via_ssh`. 19 | --- 20 | ---@field pem_cert? string 21 | ---The path to an x509 PEM encoded private key file. 22 | --- 23 | ---You can omit this if your `tls_client` is using `bootstrap_via_ssh`. 24 | --- 25 | ---@field pem_private_key? string 26 | ---A set of paths to load additional CA certificates. 27 | ---Each entry can be either the path to a directory 28 | ---or to a PEM encoded CA file. 29 | ---If an entry is a directory, then its contents 30 | ---will be loaded as CA certs and added to the trust store. 31 | --- 32 | ---You can omit this if your `tls_client` is using `bootstrap_via_ssh`. 33 | --- 34 | ---@field pem_root_certs? string[] 35 | 36 | -- vim:ts=4:sts=4:sw=4:et:ai:si:sta: 37 | -------------------------------------------------------------------------------- /lua/wezterm/types/wezterm/procinfo.lua: -------------------------------------------------------------------------------- 1 | ---@meta 2 | 3 | ---The `wezterm.procinfo` module exposes functions 4 | ---that allow querying information about processes 5 | ---that are running on the local system. 6 | --- 7 | ---@class Wezterm.ProcInfo 8 | local ProcInfo = {} 9 | 10 | ---Returns the current working directory 11 | ---for the specified process ID. 12 | --- 13 | ---This function may return `nil` if it was 14 | ---unable to return the info. 15 | --- 16 | ---@param pid integer 17 | ---@return string|nil dir 18 | function ProcInfo.current_working_dir_for_pid(pid) end 19 | 20 | ---Returns the path to the executable image 21 | ---for the specified process ID. 22 | --- 23 | ---This function may return `nil` if it was 24 | ---unable to return the info. 25 | --- 26 | ---@param pid integer 27 | ---@return string|nil path 28 | function ProcInfo.executable_path_for_pid(pid) end 29 | 30 | ---Returns a `LocalProcessInfo` object for 31 | ---the specified process ID. 32 | --- 33 | ---This function may return `nil` if it was 34 | ---unable to return the info. 35 | --- 36 | ---See: 37 | --- - [`LocalProcessInfo`](lua://LocalProcessInfo) 38 | --- 39 | ---@param pid integer 40 | ---@return LocalProcessInfo|nil info 41 | function ProcInfo.get_info_for_pid(pid) end 42 | 43 | ---Returns the process ID for the current process. 44 | --- 45 | ---@return integer pid 46 | function ProcInfo.pid() end 47 | 48 | -- vim:ts=4:sts=4:sw=4:et:ai:si:sta: 49 | -------------------------------------------------------------------------------- /lua/wezterm/types/objects/ssh-domain.lua: -------------------------------------------------------------------------------- 1 | ---@meta 2 | 3 | ---@class SshHost 4 | ---@field hostname string 5 | ---@field identityagent string 6 | ---@field identityfile string 7 | ---@field port string 8 | ---@field user string 9 | ---@field userknownhostsfile string 10 | 11 | ---The `SshDomain` struct specifies information 12 | ---about an individual [SSH Domain](https://wezterm.org/multiplexing.html#ssh-domains). 13 | --- 14 | ---@class SshDomain 15 | ---If `true`, connect to this domain automatically at startup. 16 | --- 17 | ---@field connect_automatically? boolean 18 | ---The name of this specific domain. 19 | --- 20 | ---Must be unique amongst all types of domain 21 | ---in the configuration file. 22 | --- 23 | ---@field name string 24 | ---Whether agent auth should be disabled. 25 | ---Set to true to disable it. 26 | --- 27 | ---@field no_agent_auth? boolean 28 | ---Identifies the host:port pair of the remote server. 29 | --- 30 | ---Can be a DNS name or an IP address with an optional 31 | ---`":"` at the end. 32 | --- 33 | ---@field remote_address string 34 | ---The path to the wezterm binary on the remote host. 35 | --- 36 | ---Primarily useful if it isn't installed in the `PATH` 37 | ---of the remote session. 38 | --- 39 | ---@field remote_wezterm_path? string 40 | ---Specifies an alternative read timeout. 41 | --- 42 | ---@field timeout? integer 43 | ---The username to use for authenticating with the remote host. 44 | --- 45 | ---@field username string 46 | 47 | -- vim:ts=4:sts=4:sw=4:et:ai:si:sta: 48 | -------------------------------------------------------------------------------- /lua/wezterm/types/objects/local-process-info.lua: -------------------------------------------------------------------------------- 1 | ---@meta 2 | 3 | ---@alias LocalProcessStatus "Idle"|"Run"|"Sleep"|"Stop"|"Zombie"|"Tracing"|"Dead"|"Wakekill"|"Waking"|"Parked"|"LockBlocked"|"Unknown" 4 | 5 | ---Represents a process running on the local machine. 6 | --- 7 | ---@class LocalProcessInfo 8 | ---A table holding the argument array for the process. 9 | --- 10 | ---@field argv string[] 11 | ---A table keyed by child process id and whose values are themselves. 12 | ---`LocalProcessInfo` objects that describe the child processes. 13 | --- 14 | ---@field children LocalProcessInfo[] 15 | ---The current working directory for the process (may be empty). 16 | --- 17 | ---@field cwd string|"" 18 | ---the full path to the executable image for the process (may be empty). 19 | --- 20 | ---@field executable string|"" 21 | ---A short name for the process. 22 | --- 23 | ---Due to platform limitations, this may be inaccurate and/or truncated; 24 | ---you should look at the `executable` or `argv` fields instead of this one. 25 | --- 26 | ---@field name string 27 | ---The process identifier (`PID`). 28 | --- 29 | ---@field pid integer 30 | ---The parent process identifier. 31 | --- 32 | ---@field ppid integer 33 | ---A string holding the status of the process. 34 | --- 35 | ---Possible values are: 36 | --- - `"Idle"` 37 | --- - `"Run"` 38 | --- - `"Sleep"` 39 | --- - `"Stop"` 40 | --- - `"Zombie"` 41 | --- - `"Tracing"` 42 | --- - `"Dead"` 43 | --- - `"Wakekill"` 44 | --- - `"Waking"` 45 | --- - `"Parked"` 46 | --- - `"LockBlocked"` 47 | --- - `"Unknown"` 48 | --- 49 | ---@field status LocalProcessStatus 50 | 51 | -- vim:ts=4:sts=4:sw=4:et:ai:si:sta: 52 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Action Release 2 | on: 3 | push: 4 | tags: 5 | - "v*.*.*" 6 | - "v*.*.*-*" 7 | merge_group: 8 | branches: 9 | - main 10 | release: 11 | types: 12 | - created 13 | jobs: 14 | build: 15 | runs-on: ubuntu-latest 16 | steps: 17 | - name: Checkout 18 | uses: actions/checkout@v6 19 | - name: Build Project Assets 20 | run: | 21 | mkdir -pv wezterm-types 22 | cp -rv lua README.md CREDITS.md LICENSE wezterm-types 23 | zip -r -9 wezterm-types.zip wezterm-types 24 | tar cvJf wezterm-types.tar.xz wezterm-types 25 | sha512sum wezterm-types.zip wezterm-types.tar.xz >| sha512sums.txt 26 | md5sum wezterm-types.zip wezterm-types.tar.xz >| md5sums.txt 27 | rm -rfv wezterm-types 28 | - name: Get Release 29 | uses: joutvhu/get-release@v1.0.3 30 | with: 31 | latest: true 32 | prerelease: true 33 | pattern: '^v.*' 34 | debug: true 35 | throwing: true 36 | env: 37 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 38 | - name: Build Release File 39 | run: | 40 | echo ${{ github.sha }} > Release.txt 41 | cat Release.txt 42 | - name: Release 43 | uses: softprops/action-gh-release@v2.5.0 44 | if: github.ref_type == 'tag' 45 | with: 46 | files: | 47 | Release.txt 48 | wezterm-types.tar.xz 49 | wezterm-types.zip 50 | md5sums.txt 51 | sha512sums.txt 52 | token: ${{ secrets.GITHUB_TOKEN }} 53 | -------------------------------------------------------------------------------- /lua/wezterm/types/wezterm/time.lua: -------------------------------------------------------------------------------- 1 | ---@meta 2 | 3 | ---The `wezterm.time` module exposes functions that 4 | ---allow working with time. 5 | --- 6 | ---@class Wezterm.Time 7 | local Time = {} 8 | 9 | ---Arranges to call your callback function after the specified 10 | ---number of seconds have elapsed. 11 | --- 12 | ---You can use fractional seconds to delay by more precise intervals. 13 | --- 14 | ---@param interval number 15 | ---@param callback function 16 | function Time.call_after(interval, callback) end 17 | 18 | ---Returns a `Time` object representing the time 19 | ---at which this function is called. 20 | --- 21 | ---See [`Time`](lua://Time). 22 | --- 23 | ---@return Time current 24 | function Time.now() end 25 | 26 | ---Parses a string that is formatted according to the supplied format string: 27 | --- 28 | ---```lua 29 | ---wezterm.time.parse("1983 Apr 13 12:09:14.274 +0000", "%Y %b %d %H:%M:%S%.3f %z") 30 | ------ "Time(utc: 1983-04-13T12:09:14.274+00:00)" 31 | ---``` 32 | --- 33 | ---The format string supports the set of formatting placeholders 34 | ---described [here](https://docs.rs/chrono/latest/chrono/format/strftime/index.html). 35 | --- 36 | ---@param str string 37 | ---@param format string 38 | ---@return Time parsed 39 | function Time.parse(str, format) end 40 | 41 | ---Parses a string that is formatted according to `RFC 3339` 42 | ---and returns a `Time` object representing said time. 43 | --- 44 | ---Will raise an error if the input string cannot be parsed 45 | ---according to `RFC 3339`. 46 | --- 47 | ---@param str string 48 | ---@return Time parsed 49 | function Time.parse_rfc3339(str) end 50 | 51 | -- vim:ts=4:sts=4:sw=4:et:ai:si:sta: 52 | -------------------------------------------------------------------------------- /lua/wezterm/types/wezterm/serde.lua: -------------------------------------------------------------------------------- 1 | ---@meta 2 | 3 | ---The `wezterm.serde` module provides functions for parsing the given string as 4 | ---JSON, YAML, or TOML, returning the corresponding Lua values, and vice versa. 5 | --- 6 | ---@class Wezterm.Serde 7 | local Serde = {} 8 | 9 | ---Parses the supplied string as JSON and returns the equivalent Lua values. 10 | --- 11 | ---@param value string 12 | ---@return table data 13 | function Serde.json_decode(value) end 14 | 15 | ---Encodes the supplied Lua value as JSON. 16 | --- 17 | ---@param value table 18 | ---@return string data 19 | function Serde.json_encode(value) end 20 | 21 | ---Encodes the supplied Lua value as a pretty-printed string of JSON. 22 | --- 23 | ---@param value table 24 | ---@return string data 25 | function Serde.json_encode_pretty(value) end 26 | 27 | ---Parses the supplied string as TOML and returns the equivalent Lua values. 28 | --- 29 | ---@param value string 30 | ---@return table data 31 | function Serde.toml_decode(value) end 32 | 33 | ---Encodes the supplied Lua value as TOML. 34 | --- 35 | ---@param value table 36 | ---@return string data 37 | function Serde.toml_encode(value) end 38 | 39 | ---Encodes the supplied Lua value as a pretty-printed string of TOML. 40 | --- 41 | ---@param value table 42 | ---@return string data 43 | function Serde.toml_encode_pretty(value) end 44 | 45 | ---Parses the supplied string as YAML and returns the equivalent Lua values. 46 | --- 47 | ---@param value string 48 | ---@return table data 49 | function Serde.yaml_decode(value) end 50 | 51 | ---Encodes the supplied Lua value as YAML. 52 | --- 53 | ---@param value table 54 | ---@return string data 55 | function Serde.yaml_encode(value) end 56 | 57 | -- vim:ts=4:sts=4:sw=4:et:ai:si:sta: 58 | -------------------------------------------------------------------------------- /lua/wezterm/types/objects/exec-domain.lua: -------------------------------------------------------------------------------- 1 | ---@meta 2 | 3 | ---An `ExecDomain` defines a local-execution multiplexer domain. 4 | --- 5 | ---In simple terms, rather than directly executing 6 | ---the requested program, an `ExecDomain` allows you 7 | ---to wrap up that command invocation by passing it 8 | ---through some other process. 9 | --- 10 | ---For example, if you wanted to make it more convenient 11 | ---to work with tabs and panes inside a docker container, 12 | ---you might want to define an `ExecDomain` that causes 13 | ---the commands to be run via `docker exec`. 14 | ---While you could just ask wezterm to explicitly spawn a command 15 | ---that runs `docker exec` you would also need to adjust the default 16 | ---key assignments for splitting panes to know about that preference. 17 | --- 18 | ---Using an `ExecDomain` allows that preference to be associated with the pane 19 | ---so that things work more intuitively. 20 | --- 21 | ---@class ExecDomain 22 | local M = {} 23 | 24 | ---You must use the wezterm.exec_domain function to define a domain. 25 | --- 26 | ---It accepts the following parameters: 27 | --- 28 | --- - `name`: Uniquely identifies the domain. 29 | --- Must be different from any other multiplexer domains 30 | --- - `fixup`: A Lua function that will be called to fixup the requested command 31 | --- and return the revised command 32 | --- - `label` (optional): Can be either a `string` to serve as a label in the Launcher Menu, 33 | --- or a lua function that will return the label 34 | --- 35 | ---See `https://wezterm.org/config/lua/ExecDomain.html` for more info. 36 | --- 37 | ---@param name string 38 | ---@param fixup fun(cmd: SpawnCommand): SpawnCommand 39 | ---@param label? string|fun(): string 40 | ---@return ExecDomain new_domain 41 | function M.exec_domain(name, fixup, label) end 42 | 43 | -- vim:ts=4:sts=4:sw=4:et:ai:si:sta: 44 | -------------------------------------------------------------------------------- /lua/wezterm/types/objects/pane-information.lua: -------------------------------------------------------------------------------- 1 | ---@meta 2 | 3 | ---Describes a [`Pane`](lua://Pane). 4 | --- 5 | ---Unlike the `Pane` object, `PaneInformation` is a snapshot of 6 | ---some of the key characteristics of the pane, 7 | ---intended for use in synchronous, fast, event callbacks 8 | ---that format GUI elements such as the window and tab title bars. 9 | --- 10 | ---@class PaneInformation 11 | ---The height of the pane in cells. 12 | --- 13 | ---@field height number 14 | ---Is `true` if the pane is the active pane within its containing tab. 15 | --- 16 | ---@field is_active boolean 17 | ---Is `true` if the pane is in the zoomed state. 18 | --- 19 | ---@field is_zoomed boolean 20 | ---The cell `x` coordinate of the left edge of the pane. 21 | --- 22 | ---@field left number 23 | ---The height of the pane in pixels. 24 | --- 25 | ---@field pixel_height number 26 | ---The pane ID. 27 | --- 28 | ---@field pane_id integer 29 | ---The logical position of the pane within its containing layout. 30 | --- 31 | ---@field pane_index number 32 | ---The width of the pane in pixels. 33 | --- 34 | ---@field pixel_width number 35 | ---The progress state, 36 | ---per [`Pane:get_progress()`](lua://Pane.get_progress) 37 | ---at the time the pane information was captured. 38 | --- 39 | ---@field progress string 40 | ---The title of the pane, 41 | ---per [`Pane:get_title()`](lua://Pane.get_title) 42 | ---at the time the pane information was captured. 43 | --- 44 | ---@field title string 45 | ---The cell `y` coordinate of the top edge of the pane. 46 | --- 47 | ---@field top number 48 | ---The user variables defined for the pane, 49 | ---per [`Pane:get_user_vars()`](lua://Pane.get_user_vars) 50 | ---at the time the pane information was captured. 51 | --- 52 | ---@field user_vars table 53 | ---The width of the pane in cells. 54 | --- 55 | ---@field width number 56 | 57 | -- vim:ts=4:sts=4:sw=4:et:ai:si:sta: 58 | -------------------------------------------------------------------------------- /lua/wezterm/types/objects/wsl-domain.lua: -------------------------------------------------------------------------------- 1 | ---@meta 2 | 3 | ---The `WslDomain` struct specifies information about 4 | ---an individual `WslDomain`, which is used to tell wezterm 5 | ---how to interact with one of your locally installed 6 | ---[WSL](https://docs.microsoft.com/en-us/windows/wsl/about) distributions. 7 | --- 8 | ---By mapping a distribution to a multiplexing domain, 9 | ---wezterm is better able to support creating new tabs and panes 10 | ---with the same working directory as an existing tab/pane 11 | ---running in that same domain. 12 | --- 13 | ---By default, wezterm creates a list of `WslDomain` objects 14 | ---based on parsing the output from `wsl -l -v` and assigns that 15 | ---as the value of the following configuration option: 16 | --- -[`config.wsl_domains`](lua://Config.wsl_domains) 17 | --- 18 | ---@class WslDomain 19 | ---The current working directory to use when spawning commands, 20 | ---if the [`SpawnCommand`](lua://SpawnCommand) 21 | ---doesn't otherwise specify the directory. 22 | --- 23 | ---@field default_cwd? string 24 | ---The default command to run, if the 25 | ---[`SpawnCommand`](lua://SpawnCommand) 26 | ---doesn't otherwise override it. 27 | --- 28 | ---Note that you may prefer to use `chsh` to set the 29 | ---default shell for your user inside WSL to avoid needing to 30 | ---specify it here. 31 | --- 32 | ---@field default_prog? string[] 33 | ---The name of the distribution. 34 | ---This identifies the WSL distribution. 35 | --- 36 | ---It must match a valid distribution from your `wsl -l -v` output 37 | ---in order for the domain to be useful. 38 | --- 39 | ---@field distribution string 40 | ---The name of this specific domain. 41 | --- 42 | ---Must be unique amonst all types of domain 43 | ---in the configuration file. 44 | --- 45 | ---@field name string 46 | ---The username to use when spawning commands in the distribution. 47 | --- 48 | ---If omitted, the default user for that distribution will be used. 49 | --- 50 | ---@field username? string 51 | 52 | -- vim:ts=4:sts=4:sw=4:et:ai:si:sta: 53 | -------------------------------------------------------------------------------- /lua/wezterm/types/wezterm/url.lua: -------------------------------------------------------------------------------- 1 | ---@meta 2 | 3 | ---The `Url` object represents a parsed URL. 4 | --- 5 | ---An example: 6 | --- 7 | ---```lua 8 | ---local wezterm = require('wezterm') 9 | --- 10 | ---local url = wezterm.url.parse('file://myhost/some/path%20with%20spaces') 11 | ---assert(url.scheme == 'file') 12 | ---assert(url.file_path == '/some/path with spaces') 13 | --- 14 | ---local url = wezterm.url.parse('https://github.com/rust-lang/rust/issues?labels=E-easy&state=open') 15 | ---assert(url.scheme == 'https') 16 | ---assert(url.username == '') 17 | ---assert(url.password == nil) 18 | ---assert(url.host == 'github.com') 19 | ---assert(url.path == '/rust-lang/rust/issues') 20 | ---assert(url.query == 'labels=E-easy&state=open') 21 | ---``` 22 | --- 23 | ---@class Url 24 | ---The URL scheme such as `"file"`, or `"https"`. 25 | --- 26 | ---@field scheme string|"file"|"https"|"http"|nil 27 | ---Decodes the path field and interprets it as a file path. 28 | --- 29 | ---@field file_path string|nil 30 | ---The `username` portion of the URL, or an empty string 31 | ---if none is specified. 32 | --- 33 | ---@field username string|"" 34 | ---The password portion of the URL, or `nil` if none is specified. 35 | --- 36 | ---@field password string|nil 37 | ---The `hostname` portion of the URL, with IDNA decoded to UTF-8. 38 | --- 39 | ---@field host string|nil 40 | ---The `path` portion of the URL, complete with percent encoding. 41 | --- 42 | ---@field path string|nil 43 | ---The `fragment` portion of the URL. 44 | --- 45 | ---@field fragment string|nil 46 | ---The `query` portion of the URL. 47 | --- 48 | ---@field query string|nil 49 | 50 | ---The `wezterm.url` module exposes functions that 51 | ---allow working with URLs. 52 | --- 53 | ---@class Wezterm.Url 54 | ---The `Url` object represents a parsed URL. 55 | --- 56 | ---@field Url Url 57 | local M = {} 58 | 59 | ---Attempts to parse the provided URL_STRING as a URL. 60 | --- 61 | ---If successful, returns a `Url` object representing said URL. 62 | --- 63 | ---@param url_string string 64 | ---@return Url|nil data 65 | function M.parse(url_string) end 66 | 67 | -- vim:ts=4:sts=4:sw=4:et:ai:si:sta: 68 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/1-missing_types.yml: -------------------------------------------------------------------------------- 1 | name: "Missing or Bad Type" 2 | description: "A type is missing/badly implemented? Please tell us!" 3 | title: "[TYPE]: " 4 | labels: ["missing-types", "wrong-types"] 5 | assignees: 6 | - DrKJeff16 7 | body: 8 | - type: checkboxes 9 | attributes: 10 | label: "Conditions" 11 | description: "Make sure to read every checkbox and answer truthfully:" 12 | options: 13 | - label: "I have checked for existing issues related to this one, whether open or closed." 14 | required: true 15 | - label: "I have checked for existing PRs and none address this, whether open or closed." 16 | required: true 17 | - label: "I have read the [WezTerm Lua Reference](https://wezterm.org/config/lua/general.html) and can confirm this type is not deprecated." 18 | required: true 19 | - type: input 20 | attributes: 21 | label: "What version of WezTerm are you using? (`wezterm --version`)" 22 | placeholder: "wezterm 20250725-073938-dd6e5bd2" 23 | validations: 24 | required: true 25 | - type: input 26 | attributes: 27 | label: "What text editor are you using?" 28 | placeholder: "Neovim|VSCode|..." 29 | validations: 30 | required: false 31 | - type: input 32 | attributes: 33 | label: "Operating system and, if possible, what version?" 34 | placeholder: "Arch Linux, Linux 6.15.6-arch1-1" 35 | validations: 36 | required: true 37 | - type: textarea 38 | attributes: 39 | label: "Describe The Issue" 40 | description: "Write down what's wrong, as detailed as you can. Avoid irrelevant info." 41 | validations: 42 | required: true 43 | - type: textarea 44 | attributes: 45 | label: "Expected Types" 46 | description: "Describe what were you expecting to happen." 47 | validations: 48 | required: true 49 | - type: textarea 50 | attributes: 51 | label: "Additional Info and/or Screenshots" 52 | description: "If there's more info you could tell, please do. Screenshots too, if applicable." 53 | validations: 54 | required: false 55 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/2-feature_request.yml: -------------------------------------------------------------------------------- 1 | name: Feature request 2 | description: Suggest an idea for this project 3 | title: "[FEAT]: <TITLE>" 4 | labels: ["enhancement"] 5 | assignees: 6 | - DrKJeff16 7 | body: 8 | - type: checkboxes 9 | attributes: 10 | label: Did you check the docs and looked for existing issues? 11 | description: Tick all the checkboxes below to validate your issue 12 | options: 13 | - label: I have checked for existing issues related to this one, whether open or closed 14 | required: true 15 | - label: I have checked for existing PRs and none address this, whether open or closed 16 | required: true 17 | - type: textarea 18 | attributes: 19 | label: What suggestion do you have? 20 | description: Write down, as detailed as you can, about your suggestion 21 | validations: 22 | required: true 23 | - type: textarea 24 | attributes: 25 | label: How would this project improve? 26 | description: Describe clearly how would this project benefit from your suggestion 27 | validations: 28 | required: true 29 | - type: textarea 30 | attributes: 31 | label: Have you considered alternative solutions? 32 | description: Please describe any alternative solutions you have considered, if applicable 33 | validations: 34 | required: false 35 | - type: input 36 | attributes: 37 | label: "What's the text editor you're using?" 38 | placeholder: "nvim|vscode|..." 39 | validations: 40 | required: false 41 | - type: input 42 | attributes: 43 | label: "What version of WezTerm are you using? (`wezterm --version`)" 44 | placeholder: wezterm 20250725-073938-dd6e5bd2 45 | validations: 46 | required: false 47 | - type: input 48 | attributes: 49 | label: "Operating System and, if possible, what version?" 50 | placeholder: Arch Linux 6.15.6-arch1-1 51 | validations: 52 | required: false 53 | - type: textarea 54 | attributes: 55 | label: Additional Context 56 | description: If there's more info you could tell, please do. Screenshots too, if applicable 57 | validations: 58 | required: false 59 | -------------------------------------------------------------------------------- /lua/wezterm/types/wezterm/plugin.lua: -------------------------------------------------------------------------------- 1 | ---@meta 2 | 3 | ---@class PluginSpec 4 | ---The URL of the plugin repo, as provided to the 5 | ---[`wezterm.plugin.require`](lua://Wezterm.Plugin.require) 6 | ---function. 7 | --- 8 | ---@field url string 9 | ---The encoded name of the plugin, derived 10 | ---from the repo URL. 11 | --- 12 | ---@field component string 13 | ---The absolute location of the plugin checkout in the 14 | ---WezTerm runtime directory. 15 | --- 16 | ---Use this to set the plugin path if needed. 17 | ---@field plugin_dir string 18 | 19 | ---The `wezterm.plugin` module provides functions 20 | ---to manage WezTerm plugins. 21 | --- 22 | ---@class Wezterm.Plugin 23 | local Plugin = {} 24 | 25 | ---Will return a `PluginSpec` array listing all 26 | ---the plugin repos in the plugin directory. 27 | --- 28 | ---For info on the returned array, see: 29 | --- - [`PluginSpec`](lua://PluginSpec) 30 | --- 31 | ---@return PluginSpec[] list 32 | function Plugin.list() end 33 | 34 | ---Will clone the plugin repo if it doesn't 35 | ---already exist and store it in the runtime dir 36 | ---under `plugins/NAME` where `NAME` is derived 37 | ---from the repo URL. 38 | ---Once cloned, the repo is **NOT** automatically updated 39 | ---when `wezterm.plugin.require()` is called again. 40 | --- 41 | ---The function takes a single string parameter: 42 | --- 43 | --- - `url`: The Git repo URL. 44 | --- 45 | ---Only HTTP(S) or local filesystem repos are allowed 46 | ---for the Git URL. 47 | --- 48 | ---```lua 49 | ---local remote_plugin = wezterm.plugin.require 'https://github.com/owner/repo' 50 | ---local local_plugin = wezterm.plugin.require 'file:///Users/developer/projects/my.Plugin' 51 | ---``` 52 | --- 53 | ---@param url string 54 | ---@return unknown plugin 55 | function Plugin.require(url) end 56 | 57 | ---Attempt to fast-forward or run `git pull --rebase` 58 | ---for each of the repos in the plugin directory. 59 | --- 60 | ---Note: The configuration is not reloaded afterwards; 61 | ---the user will need to do that themselves. 62 | --- 63 | ---A useful way to reload the configuration is with: 64 | --- - [`wezterm.reload_configuration()`](lua://Wezterm.reload_configuration) 65 | --- 66 | function Plugin.update_all() end 67 | 68 | -- vim:ts=4:sts=4:sw=4:et:ai:si:sta: 69 | -------------------------------------------------------------------------------- /lua/wezterm/types/objects/spawn-command.lua: -------------------------------------------------------------------------------- 1 | ---@meta 2 | 3 | ---@class SpawnPosition 4 | ---@field origin? "ScreenCoordinateSystem"|"MainScreen"|"ActiveScreen"|{ Named: string } 5 | ---@field x? integer 6 | ---@field y? integer 7 | 8 | ---The `SpawnCommand` struct specifies information 9 | ---about a new command to be spawned. 10 | --- 11 | ---It is a Lua object with the following fields; 12 | ---all of the fields have reasonable defaults 13 | ---and can be omitted. 14 | --- 15 | ---@class SpawnCommand 16 | ---The argument array specifying the command 17 | ---and its arguments. 18 | --- 19 | ---If omitted, the default program for the target domain 20 | ---will be spawned. 21 | --- 22 | ---@field args? string[] 23 | ---The current working directory to set for the command. 24 | --- 25 | ---If omitted, wezterm will infer a value 26 | ---based on the active pane at the time 27 | ---this action is triggered. 28 | --- 29 | ---If the active pane matches the domain 30 | ---specified in this `SpawnCommand` instance 31 | ---then the current working directory of the active pane 32 | ---will be used. 33 | --- 34 | ---If the current working directory cannot be inferred 35 | ---then it will typically fall back to using 36 | ---the `$HOME` directory of the current user. 37 | --- 38 | ---@field cwd? string 39 | ---Specifies that the multiplexer domain 40 | ---of the currently active pane should be used 41 | ---to start this process. 42 | --- 43 | ---@field domain? "DefaultDomain" 44 | ---An optional label. 45 | --- 46 | ---The `label` is only used for `SpawnCommand` instances 47 | ---that are listed in the `launch_menu` configuration section. 48 | --- 49 | ---If `label` is omitted, a default will be produced based 50 | ---on the `args` field. 51 | --- 52 | ---@field label? string 53 | ---Specifies the initial position for a GUI window 54 | ---when this command is used in a context that will 55 | ---create a new window, such as with: 56 | --- 57 | --- - [`wezterm.mux.spawn_window()`](lua://Wezterm.Mux.spawn_window) 58 | --- - `SpawnCommandInNewWindow` 59 | --- 60 | ---@field position? SpawnPosition 61 | ---Sets additional environment variables in the environment for 62 | ---this command invocation. 63 | --- 64 | ---@field set_environment_variables? table<string, any> 65 | 66 | -- vim:ts=4:sts=4:sw=4:et:ai:si:sta: 67 | -------------------------------------------------------------------------------- /lua/wezterm/types/objects/time.lua: -------------------------------------------------------------------------------- 1 | ---@meta 2 | 3 | ---@class Time.SunTimes 4 | ---@field progression number 5 | ---@field rise? Time 6 | ---@field set? Time 7 | ---@field up boolean 8 | 9 | ---Represents a date and time that is tracked internally 10 | ---as UTC. 11 | --- 12 | ---Using `tostring()` on a Time object will show 13 | ---the internally tracked UTC time information. 14 | --- 15 | ---@class Time 16 | local M = {} 17 | 18 | ---Formats the time object as a string, 19 | ---using the local date/time representation of the time. 20 | --- 21 | ---The format string supports the 22 | ---[set of formatting placeholders described here](https://docs.rs/chrono/latest/chrono/format/strftime/index.html). 23 | --- 24 | ---@param self Time 25 | ---@param format string 26 | ---@return string date 27 | function M:format(format) end 28 | 29 | ---Formats the time object as a string, 30 | ---using UTC date/time representation of the time. 31 | --- 32 | ---The format string supports the 33 | ---[set of formatting placeholders described here](https://docs.rs/chrono/latest/chrono/format/strftime/index.html). 34 | --- 35 | ---@param self Time 36 | ---@param format string 37 | ---@return string date 38 | function M:format_utc(format) end 39 | 40 | ---For the date component of the time object, 41 | ---compute the times of the sun rise 42 | ---and sun set for the given latitude and longitude. 43 | --- 44 | ---For the time component of the time object, 45 | ---compute whether the sun is currently up, 46 | ---and the progression of the sun through 47 | ---either the day or night. 48 | --- 49 | ---Returns that information as a 50 | ---[`Time.SunTimes`](lua://Time.SunTimes) table. 51 | --- 52 | ---This information is potentially useful 53 | ---if you want to vary color scheme 54 | ---or other configuration based on the time of day. 55 | --- 56 | ---If the provided `latitude` and `longitude` specify 57 | ---a location at one of the poles, then the day or night 58 | ---may be longer than 24 hours. 59 | ---In that case the `rise` and `set` values will be `nil`, 60 | ---`progression` will be `0` and `up` will indicate either 61 | ---if it is polar daytime (`true`) or polar night time (`false`). 62 | --- 63 | ---@param self Time 64 | ---@param lat number 65 | ---@param lon number 66 | ---@return Time.SunTimes sun_times 67 | function M:sun_times(lat, lon) end 68 | 69 | -- vim:ts=4:sts=4:sw=4:et:ai:si:sta: 70 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/3-lazydev-bug.yml: -------------------------------------------------------------------------------- 1 | name: Neovim Bug 2 | description: Is there anything wrong with the Neovim plugin? Tell us! 3 | title: "[NVIM]: <TITLE>" 4 | labels: ["bug", "neovim"] 5 | assignees: 6 | - DrKJeff16 7 | body: 8 | - type: checkboxes 9 | attributes: 10 | label: Before we begin... 11 | description: "Make sure to read every checkbox and answer truthfully:" 12 | options: 13 | - label: I have checked for existing issues related to this one, whether open or closed 14 | required: true 15 | - label: I have checked for existing PRs and none address this, whether open or closed 16 | required: true 17 | - label: I have read the WezTerm Lua Reference and can confirm nothing should be wrong 18 | required: true 19 | - label: I have read the `lazydev.nvim` docs and my plugin manager's, respectively 20 | required: true 21 | - type: input 22 | attributes: 23 | label: "What version of Neovim are you using? (`nvim -v`)" 24 | placeholder: NVIM v0.12.0-dev-918+g1240d29f8f 25 | validations: 26 | required: true 27 | - type: input 28 | attributes: 29 | label: "Operating system and, if possible, what version?" 30 | placeholder: Arch Linux 6.15.6-arch1-1 31 | validations: 32 | required: true 33 | - type: textarea 34 | attributes: 35 | label: Describe the issue 36 | description: Write down what's wrong, as detailed as you can. Avoid irrelevant info 37 | validations: 38 | required: true 39 | - type: textarea 40 | attributes: 41 | label: Expected Behavior 42 | description: Describe what were you expecting to happen 43 | validations: 44 | required: true 45 | - type: textarea 46 | attributes: 47 | label: Steps To Reproduce 48 | description: Steps to reproduce the behavior 49 | placeholder: | 50 | 1. 51 | 2. 52 | 3. 53 | validations: 54 | required: true 55 | - type: textarea 56 | attributes: 57 | label: How did you setup the plugin? 58 | description: Paste the relevant code snippet of how you configured this plugin 59 | value: | 60 | require('lazy').setup({ 61 | spec = { 62 | { 63 | 'folke/lazydev.nvim', 64 | ft = 'lua', 65 | dependencies = { 66 | { 'justinsgithub/wezterm-types', lazy = true }, 67 | }, 68 | opts = { 69 | library = { 70 | -- Other library configs... 71 | { path = 'wezterm-types', mods = { 'wezterm' } }, 72 | }, 73 | }, 74 | }, 75 | }, 76 | }) 77 | render: lua 78 | validations: 79 | required: true 80 | - type: textarea 81 | attributes: 82 | label: Additional Info and/or Screenshots 83 | description: If there's more info you could tell, please do. Screenshots too, if applicable 84 | validations: 85 | required: false 86 | -------------------------------------------------------------------------------- /lua/wezterm/types/objects/tls-domain-client.lua: -------------------------------------------------------------------------------- 1 | ---The TlsDomainClient struct specifies information 2 | ---about how to connect to a [TLS Domain](https://wezterm.org/multiplexing.html#tls-domains). 3 | --- 4 | ---@class TlsDomainClient 5 | ---Explicitly controls whether the client checks that the certificate 6 | ---presented by the server matches the hostname portion of 7 | ---`remote_address`. 8 | --- 9 | ---The default is `true`. 10 | --- 11 | ---This option is made available for troubleshooting purposes 12 | ---and should not be used outside of a controlled environment 13 | ---as it weakens the security of the TLS channel. 14 | --- 15 | ---@field accept_invalid_hostnames? boolean 16 | ---If set, use `ssh` to connect, start the server, and obtain 17 | ---a certificate. 18 | --- 19 | ---The value is `"user@host:port"`, just like 20 | ---what `wezterm ssh` accepts. 21 | --- 22 | ---@field bootstrap_via_ssh string 23 | ---The name of this specific domain. 24 | --- 25 | ---Must be unique amongst all types of domain 26 | ---in the configuration file. 27 | --- 28 | ---@field name string 29 | ---The path to an x509 PEM encoded CA chain file. 30 | --- 31 | ---Omit this if you are using `bootstrap_via_ssh`. 32 | --- 33 | ---@field pem_ca? string 34 | ---The path to an x509 PEM encoded certificate file 35 | --- 36 | ---Omit this if you are using `bootstrap_via_ssh`. 37 | --- 38 | ---@field pem_cert? string 39 | ---The path to an x509 PEM encoded private key file. 40 | --- 41 | ---Omit this if you are using `bootstrap_via_ssh`. 42 | --- 43 | ---@field pem_private_key? string 44 | ---A set of paths to load additional CA certificates. 45 | --- 46 | ---Each entry can be either the path to a directory 47 | ---or to a PEM encoded CA file. 48 | ---If an entry is a directory, then its contents will be 49 | ---loaded as CA certs and added to the trust store. 50 | --- 51 | ---Omit this if you are using `bootstrap_via_ssh`. 52 | --- 53 | ---@field pem_root_certs? string[] 54 | ---Identifies the `host:port` pair of the remote server. 55 | --- 56 | ---@field remote_address string 57 | ---The hostname string that we expect to match against the common name 58 | ---field in the certificate presented by the server. 59 | --- 60 | ---This defaults to the hostname portion of the `remote_address` 61 | ---configuration. 62 | --- 63 | ---**You should not normally need to override this value**. 64 | --- 65 | ---@field expected_cn? string 66 | ---If `true`, connect to this domain automatically at startup. 67 | --- 68 | ---@field connect_automatically? boolean 69 | ---If true, connect to this domain automatically at startup. 70 | --- 71 | ---@field read_timeout? integer 72 | ---@field write_timeout? integer 73 | ---The path to the wezterm binary on the remote host. 74 | --- 75 | ---@field remote_wezterm_path? string 76 | ---Specifies the round-trip latency threshold for enabling predictive 77 | ---local echo. 78 | --- 79 | ---@field local_echo_threshold_ms? integer 80 | ---If you prefer to have the information overlaid on the content area, 81 | ---then you can this to `true`, but note that this may be dropped in the future. 82 | --- 83 | ---@field overlay_lag_indicator boolean 84 | 85 | -- vim:ts=4:sts=4:sw=4:et:ai:si:sta: 86 | -------------------------------------------------------------------------------- /lua/wezterm/types/objects/mux-domain.lua: -------------------------------------------------------------------------------- 1 | ---@meta 2 | 3 | ---Represents a domain that is managed by the multiplexer. 4 | --- 5 | ---@class MuxDomain 6 | local M = {} 7 | 8 | ---Attempts to attach the domain. 9 | --- 10 | ---Attaching a domain will attempt to import the windows, 11 | ---tabs and panes from the remote system into those 12 | ---of the local GUI. 13 | --- 14 | ---Unlike the `AttachDomain` key assignment, 15 | ---calling `MuxDomain:attach()` will not implicitly spawn 16 | ---a new pane into the domain if the domain contains no panes. 17 | ---This is to provide flexibility when used in the `gui-startup` event. 18 | --- 19 | ---If the domain is already attached, 20 | ---calling this method again has no effect. 21 | --- 22 | ---@param self MuxDomain 23 | function M:attach() end 24 | 25 | ---Attempts to detach the domain. 26 | --- 27 | ---Detaching a domain causes it to disconnect and remove 28 | ---its set of windows, tabs and panes from the local GUI. 29 | ---Detaching does not cause those panes to close; 30 | ---if or when you later attach to the domain, 31 | ---they'll still be there. 32 | --- 33 | ---Note that not every domain supports detaching, 34 | ---and will log an error to the error log/debug overlay. 35 | --- 36 | ---@param self MuxDomain 37 | function M:detach() end 38 | 39 | ---Returns the domain ID. 40 | --- 41 | ---@param self MuxDomain 42 | ---@return integer id 43 | function M:domain_id() end 44 | 45 | ---Returns `true` if the mux has any panes that belong 46 | ---to this domain. 47 | --- 48 | ---This can be useful when deciding whether to spawn 49 | ---additional panes after attaching to a domain. 50 | --- 51 | ---@param self MuxDomain 52 | ---@return boolean has_panes 53 | function M:has_any_panes() end 54 | 55 | ---Returns `false` if this domain will never be able to spawn 56 | ---a new pane/tab/window, `true` otherwise. 57 | --- 58 | ---Serial ports are represented by a serial domain 59 | ---that is not spawnable. 60 | --- 61 | ---@param self MuxDomain 62 | ---@return boolean spawnable 63 | function M:is_spawnable() end 64 | 65 | ---Computes a label describing the `name` and `state` of the domain. 66 | ---The label can change depending on the `state` of the domain. 67 | --- 68 | ---See also: 69 | --- - [`MuxDomain:name()`](lua://MuxDomain.name) 70 | --- 71 | ---@param self MuxDomain 72 | ---@return string label 73 | function M:label() end 74 | 75 | ---Returns the name of the domain. 76 | ---Domain names are unique; no two domains can have the same name, 77 | ---and the name is fixed for the lifetime of the domain. 78 | --- 79 | ---See also: 80 | --- - [`MuxDomain:label()`](lua://MuxDomain.label) 81 | --- 82 | ---@param self MuxDomain 83 | ---@return string name 84 | function M:name() end 85 | 86 | ---Returns whether the domain is attached or not. 87 | --- 88 | ---The result is a string that is either: 89 | --- 90 | --- - `"Attached"`: the domain is attached 91 | --- - `"Detached"`: the domain is not attached 92 | --- 93 | ---See also: 94 | --- - [`MuxDomain:attach()`](lua://MuxDomain.attach) 95 | --- - [`MuxDomain:detach()`](lua://MuxDomain.detach) 96 | --- 97 | ---@param self MuxDomain 98 | ---@return "Attached"|"Detached" state 99 | function M:state() end 100 | 101 | -- vim:ts=4:sts=4:sw=4:et:ai:si:sta: 102 | -------------------------------------------------------------------------------- /lua/wezterm/types/objects/mux-tab.lua: -------------------------------------------------------------------------------- 1 | ---@meta 2 | 3 | ---@class MuxSize 4 | ---@field rows integer 5 | ---@field cols integer 6 | ---@field pixel_width integer 7 | ---@field pixel_height integer 8 | ---@field dpi number 9 | 10 | ---`MuxTab` represents a tab that is managed 11 | ---by the multiplexer. 12 | --- 13 | ---@class MuxTab 14 | local M = {} 15 | 16 | ---Activates (focuses) the tab. 17 | --- 18 | ---@param self MuxTab 19 | function M:activate() end 20 | 21 | ---A convenience accessor for returning the active pane 22 | ---in the tab. 23 | --- 24 | ---@param self MuxTab 25 | ---@return Pane active_pane 26 | function M:active_pane() end 27 | 28 | ---Returns the pane adjacent to the active pane 29 | ---of the current tab, in the `direction` direction. 30 | --- 31 | ---See [`ActivatePaneDirection`](https://wezterm.org/config/lua/keyassignment/ActivatePaneDirection.html) for more information 32 | ---about how panes are selected given direction. 33 | --- 34 | ---@param self MuxTab 35 | ---@param direction "Down"|"Left"|"Next"|"Prev"|"Right"|"Up" 36 | ---@return Pane adjacent_pane 37 | function M:get_pane_direction(direction) end 38 | 39 | ---Returns the overall size of the tab, 40 | ---taking into account all of the contained panes. 41 | --- 42 | ---See: 43 | --- - [`MuxSize`](lua://MuxSize) 44 | --- 45 | ---@param self MuxTab 46 | ---@return MuxSize size 47 | function M:get_size() end 48 | 49 | ---Returns the tab title as set by 50 | ---[`MuxTab:set_title()`](lua://MuxTab.set_title). 51 | --- 52 | ---@param self MuxTab 53 | ---@return string title 54 | function M:get_title() end 55 | 56 | ---Returns an array table containing the set of 57 | ---[`Pane`](lua://Pane) objects 58 | ---contained by this tab. 59 | --- 60 | ---@param self MuxTab 61 | ---@return Pane[] panes 62 | function M:panes() end 63 | 64 | ---Returns an array table containing an extended info entry 65 | ---for each of the panes contained by this tab. 66 | --- 67 | ---See: 68 | --- - [`PaneInformation`](lua://PaneInformation) 69 | --- 70 | ---@param self MuxTab 71 | ---@return PaneInformation[] info_panes 72 | function M:panes_with_info() end 73 | 74 | ---Rotates the panes in the clockwise direction. 75 | --- 76 | ---@param self MuxTab 77 | function M:rotate_clockwise() end 78 | 79 | ---Rotates the panes in the counter-clockwise direction. 80 | --- 81 | ---@param self MuxTab 82 | function M:rotate_counter_clockwise() end 83 | 84 | ---Sets the tab title to the provided string. 85 | --- 86 | ---@param self MuxTab 87 | ---@param title string 88 | function M:set_title(title) end 89 | 90 | ---Sets the zoomed state for the active pane 91 | ---within the current tab. 92 | --- 93 | ---A zoomed pane takes up all available space 94 | ---in the tab, hiding all other panes 95 | ---while it is zoomed. 96 | --- 97 | --- - Switching its zoom state off will restore the prior split arrangement 98 | --- - Setting the zoom state to `true` zooms the pane if it wasn't already zoomed 99 | --- - Setting the zoom state to `false` un-zooms the pane if it was zoomed 100 | --- 101 | ---Returns the prior zoom state. 102 | --- 103 | ---@param self MuxTab 104 | ---@param state boolean 105 | ---@return boolean previous_state 106 | function M:set_zoomed(state) end 107 | 108 | ---Returns the tab ID. 109 | --- 110 | ---@param self MuxTab 111 | ---@return integer id 112 | function M:tab_id() end 113 | 114 | ---Returns the `MuxWindow` bject that contains this tab. 115 | --- 116 | ---@param self MuxTab 117 | ---@return MuxWindow window 118 | function M:window() end 119 | 120 | -- vim:ts=4:sts=4:sw=4:et:ai:si:sta: 121 | -------------------------------------------------------------------------------- /lua/wezterm/types/wezterm/gui.lua: -------------------------------------------------------------------------------- 1 | ---@meta 2 | 3 | ---The `wezterm.gui` module exposes functions that operate on the GUI layer. 4 | --- 5 | ---The multiplexer may not be connected to a GUI, so attempting to 6 | ---resolve this module from the mux server will return `nil`. 7 | --- 8 | ---You will typically use something like: 9 | --- 10 | ---```lua 11 | ---local wezterm = require 'wezterm' 12 | ---local gui = wezterm.gui 13 | --- 14 | ---if gui then 15 | --- -- do something that depends on the GUI layer 16 | ---end 17 | ---```` 18 | --- 19 | ---@class Wezterm.Gui 20 | local GUI = {} 21 | 22 | ---Returns a table holding the effective default set of `key_tables`. 23 | ---That is the set of keys that is used as a base 24 | ---if there was no configuration file. 25 | --- 26 | ---This is useful in cases where you want to override a 27 | ---key table assignment without replacing the entire set 28 | ---of key tables. 29 | --- 30 | ---This example shows how to add a key assignment for `Backspace` 31 | ---to `copy_mode`, without having to manually specify 32 | ---the entire key table: 33 | --- 34 | ---```lua 35 | ---local wezterm = require 'wezterm' 36 | ---local act = wezterm.action 37 | --- 38 | ---local copy_mode = nil 39 | --- 40 | ---if wezterm.gui then 41 | --- copy_mode = wezterm.gui.default_key_tables().copy_mode 42 | --- table.insert( 43 | --- copy_mode, 44 | --- { key = 'Backspace', mods = 'NONE', action = act.CopyMode 'MoveLeft' } 45 | --- ) 46 | ---end 47 | --- 48 | ---return { 49 | --- key_tables = { 50 | --- copy_mode = copy_mode, 51 | --- }, 52 | ---} 53 | ---``` 54 | --- 55 | ---@return Key[]|{ copy_mode: Key[], search_mode: Key[] } 56 | function GUI.default_key_tables() end 57 | 58 | ---Returns a table holding the effective default values 59 | ---for key assignments. 60 | ---That is the set of keys that is used as a base 61 | ---if there was no configuration file. 62 | --- 63 | ---@return Key[] 64 | function GUI.default_keys() end 65 | 66 | ---Returns the list of available GPUs supported by WebGpu. 67 | --- 68 | ---[`config.webgpu_preferred_adapter`](lua://Config.webgpu_preferred_adapter) 69 | ---is useful in conjunction with this function. 70 | --- 71 | ---@return GpuInfo[] 72 | function GUI.enumerate_gpus() end 73 | 74 | ---This function returns the appearance of the window environment. 75 | --- 76 | ---The appearance can be one of the following 4 values: 77 | --- 78 | --- - `"Dark"`: Dark mode with predominantly dark colors 79 | --- - `"Light"`: The normal appearance, with dark text on a light background 80 | --- lower contrasting, text color on a dark background 81 | --- - `"DarkHighContrast"`: Dark mode but with high contrast colors 82 | --- (not reported on all systems) 83 | --- - `"LightHighContrast"`: Light mode but with high contrast colors 84 | --- (not reported on all systems) 85 | --- 86 | ---WezTerm is able to detect when the appearance has changed and 87 | ---will reload the configuration when that happens. 88 | --- 89 | ---@return "Dark"|"DarkHighContrast"|"Light"|"LightHighContrast" 90 | function GUI.get_appearance() end 91 | 92 | ---Attempts to resolve a mux window to its corresponding GUI Window. 93 | --- 94 | ---This may not succeed for a couple of reasons: 95 | --- 96 | --- - If called by the multiplexer daemon, there is no GUI, 97 | --- so this will never succeed 98 | --- - If the mux window is part of a workspace that is not 99 | --- the active workspace 100 | --- 101 | ---@param window_id integer 102 | ---@return userdata 103 | function GUI.gui_window_for_mux_window(window_id) end 104 | 105 | ---Returns an array table listing all `GUI Window` objects 106 | ---in a stable/consistent order. 107 | --- 108 | ---@return Window[] 109 | function GUI.gui_windows() end 110 | 111 | ---Returns information about the screens connected to the system. 112 | --- 113 | ---@return GuiScreensInfo 114 | function GUI.screens() end 115 | 116 | -- vim:ts=4:sts=4:sw=4:et:ai:si:sta: 117 | -------------------------------------------------------------------------------- /lua/wezterm/types/objects/mux-window.lua: -------------------------------------------------------------------------------- 1 | ---@meta 2 | 3 | ---@class MuxWindow.TabInfo 4 | ---The 0-based tab index. 5 | --- 6 | ---@field index integer 7 | ---A `boolean` indicating whether this is 8 | ---the active tab within the window. 9 | --- 10 | ---@field is_active boolean 11 | ---A `MuxTab` object. 12 | --- 13 | ---@field tab MuxTab 14 | 15 | ---@class SpawnTab 16 | ---Specifies the argument array for the command that should be spawned. 17 | --- 18 | ---If omitted the default program for the domain will be spawned. 19 | --- 20 | ---@field args? string[] 21 | ---Specifies the current working directory that should be 22 | ---used for the program. 23 | --- 24 | ---If unspecified, it'll follow the spec from 25 | ---[`config.default_cwd`](lua://Config.default_cwd). 26 | --- 27 | ---@field cwd? string 28 | ---Specifies the multiplexer domain into which the program 29 | ---should be spawned. 30 | --- 31 | ---The default value is assumed to be `"CurrentPaneDomain"`, 32 | ---which causes the domain from the currently active pane to be used. 33 | --- 34 | ---@field domain? "DefaultDomain"|"CurrentPaneDomain"|{ DomainName: string } 35 | ---Sets additional environment variables in the environment 36 | ---for this command invocation. 37 | --- 38 | ---@field set_environment_variables? table<string, any> 39 | 40 | ---`MuxWindow` represents a window that is managed by the multiplexer. 41 | --- 42 | ---@class MuxWindow 43 | local M = {} 44 | 45 | ---A convenience accessor for returning 46 | ---the active pane in the active tab of the window. 47 | --- 48 | ---@param self MuxWindow 49 | ---@return Pane pane 50 | function M:active_pane() end 51 | 52 | ---A convenience accessor for returning 53 | ---the active tab within the window. 54 | --- 55 | ---@param self MuxWindow 56 | ---@return MuxTab tab 57 | function M:active_tab() end 58 | 59 | ---Returns the window title as set by `OSC 0`, `OSC 2` 60 | ---in a contained pane, or through 61 | ---[`MuxWindow:set_title()`](lua://MuxWindow.set_title). 62 | --- 63 | ---@param self MuxWindow 64 | ---@return string title 65 | function M:get_title() end 66 | 67 | ---Returns the name of the workspace to which the window belongs. 68 | --- 69 | ---@param self MuxWindow 70 | function M:get_workspace() end 71 | 72 | ---Attempts to resolve this mux window to its corresponding `GUI Window`. 73 | --- 74 | ---This may not succeed for a couple of reasons: 75 | --- 76 | --- - If called by the multiplexer daemon, there is no GUI, so this will never succeed 77 | --- - If the mux window is part of a workspace that is not the active one 78 | --- 79 | ---This method is the inverse of `Window:mux_window()`. 80 | --- 81 | ---@param self MuxWindow 82 | ---@return Window window 83 | function M:gui_window() end 84 | 85 | ---Sets the window title to the provided string. 86 | --- 87 | ---Note that applications may subsequently change the title 88 | ---via escape sequences. 89 | --- 90 | ---@param self MuxWindow 91 | ---@param title string 92 | function M:set_title(title) end 93 | 94 | ---Changes the name of the workspace to which 95 | ---the window belongs to. 96 | --- 97 | ---@param self MuxWindow 98 | ---@param name string 99 | function M:set_workspace(name) end 100 | 101 | ---Spawns a program into a new tab within this window, 102 | ---returning the `MuxTab`, `Pane` and `MuxWindow` objects 103 | ---associated with it. 104 | --- 105 | ---When no arguments are passed, the default program is spawned. 106 | --- 107 | ---@param self MuxWindow 108 | ---@param args? SpawnTab 109 | ---@return MuxTab tab 110 | ---@return Pane pane 111 | ---@return MuxWindow window 112 | function M:spawn_tab(args) end 113 | 114 | ---Returns an array table holding each of the `MuxTab` objects 115 | ---contained within this window. 116 | --- 117 | ---@param self MuxWindow 118 | ---@return MuxTab[] tabs 119 | function M:tabs() end 120 | 121 | ---Returns an array table holding an extended info entry 122 | ---for each of the tabs contained within this window. 123 | --- 124 | ---@param self MuxWindow 125 | ---@return MuxWindow.TabInfo[] tabs 126 | function M:tabs_with_info() end 127 | 128 | ---Returns the window multiplexer ID. 129 | --- 130 | ---@param self MuxWindow 131 | ---@return integer id 132 | function M:window_id() end 133 | 134 | -- vim:ts=4:sts=4:sw=4:et:ai:si:sta: 135 | -------------------------------------------------------------------------------- /lua/wezterm/types/enum/copy-mode-assignment.lua: -------------------------------------------------------------------------------- 1 | ---@meta 2 | 3 | ---@alias SelectionMode 4 | ---|"Block" Selection expands to define a rectangular block using the starting point and current cursor position as the corners 5 | ---|"Cell" Selection expands a single cell at a time 6 | ---|"Line" Selection expands by a line at a time 7 | ---|"Word" Selection expands by a word at a time 8 | ---|"SemanticZone" Selection expands to the current semantic zone 9 | 10 | ---Represents a pre-defined function that can be applied to control `CopyMode` 11 | ---and [Search Mode](https://wezterm.org/scrollback.html#enabledisable-scrollbar) 12 | ---@alias CopyModeAssignment 13 | ---|"AcceptPattern" Takes `CopyMode` / `SearchMode` out of editing mode: keyboard input will no longer be directed to the search pattern editor 14 | ---|"ClearPattern" Clear the `CopyMode` / `SearchMode` search pattern 15 | ---|"ClearSelectionMode" Clears the current `CopyMode` selection mode without leaving `CopyMode` 16 | ---|"Close" Closes the copy mode 17 | ---|"CycleMatchType" Move the `CopyMode` / `SearchMode` cycle between `case-sensitive`, `case-insensitive` and `regular expression match types` 18 | ---|"EditPattern" Put `CopyMode` / `SearchMode` into editing mode: keyboard input will be directed to the search pattern editor 19 | ---|"MoveBackwardSemanticZone" Moves the `CopyMode` cursor position one semantic zone to the left 20 | ---|"MoveBackwardSemanticZoneOfType" Moves the `CopyMode` cursor position to the first semantic zone of the specified type that precedes the current zone 21 | ---|"MoveBackwardWord" Moves the `CopyMode` cursor position one word to the left 22 | ---|"MoveDown" Moves the `CopyMode` cursor position one cell down 23 | ---|"MoveForwardSemanticZone" Moves the `CopyMode` cursor position one semantic zone to the right 24 | ---|"MoveForwardSemanticZoneOfType" Moves the `CopyMode` cursor position to the next semantic zone of the specified type that follows the current zone 25 | ---|"MoveForwardWord" Moves the `CopyMode` cursor position one word to the right 26 | ---|"MoveForwardWordEnd" Moves the `CopyMode` cursor position forward to the end of word 27 | ---|"MoveLeft" Moves the `CopyMode` cursor position one cell to the left 28 | ---|"MoveRight" Moves the `CopyMode` cursor position one cell to the right 29 | ---|"MoveToEndOfLineContent" Moves the `CopyMode` cursor position to the last non-space cell in the current line 30 | ---|"MoveToScrollbackBottom" Moves the `CopyMode` cursor position to the bottom of the scrollback 31 | ---|"MoveToScrollbackTop" Moves the `CopyMode` cursor position to the top of the scrollback 32 | ---|"MoveToSelectionOtherEnd" Moves the `CopyMode` cursor position to the other end of the selection; if the cursor is at the top left corner and the starting point is the bottom right corner, then the cursor and starting point are swapped, with the cursor now positioned at the bottom right corner 33 | ---|"MoveToSelectionOtherEndHoriz" Moves the `CopyMode` cursor position to the other horizontal end of the selection without changing the y-coordinate; if the cursor at the left end and the starting point at the right end, then the cursor and starting point are swapped, with the cursor now positioned at the right end 34 | ---|"MoveToStartOfLine" Moves the `CopyMode` cursor position to the first cell in the current line 35 | ---|"MoveToStartOfLineContent" Moves the `CopyMode` cursor position to the first non-space cell in the current line 36 | ---|"MoveToStartOfNextLine" Moves the `CopyMode` cursor position to the first cell in the next line 37 | ---|"MoveToViewportBottom" Moves the `CopyMode` cursor position to the bottom of the viewport 38 | ---|"MoveToViewportMiddle" Moves the `CopyMode` cursor position to the middle of the viewport 39 | ---|"MoveToViewportTop" Moves the `CopyMode` cursor position to the top of the viewport 40 | ---|"MoveUp" Moves the `CopyMode` cursor position one cell up 41 | ---|"NextMatch" Move the `CopyMode` / `SearchMode` selection to the next matching text, if any 42 | ---|"NextMatchPage" Move the `CopyMode` / `SearchMode` selection to the next matching text on the next page of the screen, if any 43 | ---|"PriorMatch" Move the `CopyMode` / `SearchMode` selection to the previous matching text, if any 44 | ---|"PriorMatchPage" Move the `CopyMode` / `SearchMode` selection to the previous matching text on the previous page of the screen, if any 45 | ---|"SetSelectionMode" Sets the `CopyMode` selection mode 46 | ---|{ MoveBackwardSemanticZoneOfType: "Input"|"Output"|"Prompt" } 47 | ---|{ MoveForwardSemanticZoneOfType: "Input"|"Output"|"Prompt" } 48 | ---|{ SetSelectionMode: SelectionMode } 49 | 50 | -- vim:ts=4:sts=4:sw=4:et:ai:si:sta: 51 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | > [!IMPORTANT] 2 | > While this was made with an aim to be thorough, you should always double-check 3 | > the [WezTerm Lua Reference](https://wezterm.org/config/lua/general.html) for any missing or unclear types. 4 | 5 | # wezterm-types 6 | 7 | [![Mentioned in Awesome WezTerm](https://awesome.re/mentioned-badge.svg)](https://github.com/michaelbrusegard/awesome-wezterm) | [![Mentioned in Awesome Neovim](https://awesome.re/mentioned-badge.svg)](https://github.com/rockerBOO/awesome-neovim) 8 | 9 | [Credits](/CREDITS.md) | [Roadmap](https://github.com/DrKJeff16/wezterm-types/discussions/48) | [Discussions](https://github.com/DrKJeff16/wezterm-types/discussions) 10 | 11 | This project aims to provide [LuaCATS](https://github.com/LuaCATS)-like [Lua Language Server type annotations](https://luals.github.io/wiki/annotations/) 12 | for your [WezTerm](https://github.com/wezterm/wezterm) config. 13 | 14 | <details> 15 | <summary>Example in <a href="https://github.com/neovim/neovim">Neovim</a></summary> 16 | 17 | https://github.com/user-attachments/assets/02c261ac-5744-4f34-b767-48095386e21b 18 | 19 | </details> 20 | <details> 21 | <summary>Example in VSCodium/VSCode</summary> 22 | 23 | https://github.com/user-attachments/assets/3693aedf-b790-4618-b969-1b712010bd4f 24 | 25 | </details> 26 | 27 | --- 28 | 29 | ## Table of Contents 30 | 31 | - [Features](#features) 32 | - [Installation](#installation) 33 | - [Neovim](#neovim) 34 | - [LuaRocks](#luarocks) 35 | - [Usage](#usage) 36 | - [Structure](#structure) 37 | - [License](#license) 38 | 39 | --- 40 | 41 | ## Features 42 | 43 | - LuaCATS-like type annotations 44 | - [Built-in colorschemes included](./lua/wezterm/types/colorschemes.lua) (`config.color_scheme`) 45 | - Up-to-date descriptions 46 | - Function overrides (_e.g. `wezterm.on()`_) 47 | - Neovim support through [`folke/lazydev.nvim`](https://github.com/folke/lazydev.nvim) 48 | - VSCode/VSCodium support by cloning this into `~/.config/wezterm`, and editing your config in that directory 49 | 50 | --- 51 | 52 | ## Installation 53 | 54 | ### Neovim 55 | 56 | For [Neovim](https://github.com/neovim/neovim) users, we recommend using 57 | [`folke/lazy.nvim`](https://github.com/folke/lazy.nvim) as a package manager, to be used with [`folke/lazydev.nvim`](https://github.com/folke/lazydev.nvim): 58 | 59 | ```lua 60 | { 61 | 'folke/lazydev.nvim', 62 | ft = 'lua', 63 | dependencies = { 64 | { 65 | 'DrKJeff16/wezterm-types', 66 | lazy = true, 67 | version = false, -- Get the latest version 68 | }, 69 | }, 70 | opts = { 71 | library = { 72 | -- Other library configs... 73 | { path = 'wezterm-types', mods = { 'wezterm' } }, 74 | }, 75 | }, 76 | } 77 | ``` 78 | 79 | > [!TIP] 80 | > If you download this repo under a diferent name, you can use the following instead: 81 | > 82 | > ```lua 83 | > { 84 | > 'folke/lazydev.nvim', 85 | > ft = 'lua', 86 | > dependencies = { 87 | > { 88 | > 'DrKJeff16/wezterm-types', 89 | > lazy = true, 90 | > name = '<my_custom_name>', -- CUSTOM DIRECTORY NAME 91 | > version = false, -- Get the latest version 92 | > }, 93 | > }, 94 | > opts = { 95 | > library = { 96 | > -- Other library configs... 97 | > { path = '<my_custom_name>', mods = { 'wezterm' } }, -- MAKE SURE TO MATCH THE PLUGIN DIRECTORY'S NAME 98 | > }, 99 | > }, 100 | > } 101 | > ``` 102 | 103 | ### LuaRocks 104 | 105 | You can now install this with LuaRocks: 106 | 107 | ```bash 108 | luarocks install wezterm-types # Global install 109 | luarocks install --local wezterm-types # Local install 110 | ``` 111 | 112 | --- 113 | 114 | ## Usage 115 | 116 | After installing the types, add the type annotations to `wezterm` and `config` respectively 117 | when running `require("wezterm")` in your configuration. 118 | 119 | A useful example: 120 | 121 | ```lua 122 | local wezterm = require("wezterm") ---@type Wezterm 123 | 124 | local config = wezterm.config_builder() ---@type Config 125 | 126 | config.window_decorations = "RESIZE|MACOS_FORCE_DISABLE_SHADOW" 127 | 128 | return config 129 | ``` 130 | 131 | These annotations enable the **Lua Language Server** to provide 132 | proper type checking and autocompletion for WezTerm configuration options. 133 | 134 | --- 135 | 136 | ## License 137 | 138 | [MIT](./LICENSE) 139 | 140 | --- 141 | 142 | <a href="https://www.star-history.com/#DrKJeff16/wezterm-types&type=date&legend=bottom-right"> 143 | <picture> 144 | <source 145 | media="(prefers-color-scheme: dark)" 146 | srcset="https://api.star-history.com/svg?repos=DrKJeff16/wezterm-types&type=date&theme=dark&legend=bottom-right" 147 | /> 148 | <source 149 | media="(prefers-color-scheme: light)" 150 | srcset="https://api.star-history.com/svg?repos=DrKJeff16/wezterm-types&type=date&legend=bottom-right" 151 | /> 152 | <img 153 | alt="Star History Chart" 154 | src="https://api.star-history.com/svg?repos=DrKJeff16/wezterm-types&type=date&legend=bottom-right" 155 | /> 156 | </picture> 157 | </a> 158 | -------------------------------------------------------------------------------- /lua/wezterm/types/wezterm/mux.lua: -------------------------------------------------------------------------------- 1 | ---@meta 2 | 3 | ---The `wezterm.mux` module exposes functions that operate 4 | ---on the multiplexer layer. 5 | --- 6 | ---The multiplexer manages the set of running programs into 7 | ---panes, tabs, windows and workspaces. 8 | --- 9 | ---The multiplexer may not be connected to a GUI so 10 | ---certain operations that require a running 11 | ---Window management system are not present in the interface 12 | ---exposed by this module. 13 | --- 14 | ---You will typically use something like: 15 | --- 16 | ---```lua 17 | ---local wezterm = require 'wezterm' 18 | ---local mux = wezterm.mux 19 | ---``` 20 | --- 21 | ---at the top of your configuration file to access it. 22 | --- 23 | --- --- 24 | ---## Important Note 25 | --- 26 | ---You should avoid using, at the file scope in your config, 27 | ---mux functions that cause new splits, tabs or windows to be created. 28 | ---The configuration file can be evaluated multiple times in various contexts. 29 | ---If you want to spawn new programs when wezterm starts up, 30 | ---look at the [`gui-startup`](https://wezterm.org/config/lua/gui-events/gui-startup.html) and 31 | ---[`mux-startup`](https://wezterm.org/config/lua/mux-events/mux-startup.html) events. 32 | --- 33 | ---@class Wezterm.Mux 34 | local Mux = {} 35 | 36 | ---Returns an array table holding all of the known 37 | ---[`MuxDomain`](lua://MuxDomain) objects. 38 | --- 39 | ---@return MuxDomain[] domains 40 | function Mux.all_domains() end 41 | 42 | ---Returns an array table holding all of the known 43 | ---[`MuxWindow`](lua://MuxWindow) objects. 44 | --- 45 | ---@return MuxWindow[] windows 46 | function Mux.all_windows() end 47 | 48 | ---Returns the name of the active workspace. 49 | --- 50 | ---@return string name 51 | function Mux.get_active_workspace() end 52 | 53 | ---Resolves `name_or_id` to a domain and returns a 54 | ---[`MuxDomain`](lua://MuxDomain) object 55 | ---representation of it. 56 | --- 57 | ---`name_or_id` can be: 58 | --- 59 | --- - A domain name string to resolve the domain by name 60 | --- - A domain id to resolve the domain by id 61 | --- - `nil` or omitted to return the current default domain 62 | --- 63 | ---> Other lua types will generate a lua error 64 | --- 65 | ---If the name or id don't map to a valid domain, 66 | ---this function will return `nil`. 67 | --- 68 | ---@param name_or_id? string|integer|nil 69 | ---@return MuxDomain|nil domain 70 | function Mux.get_domain(name_or_id) end 71 | 72 | ---Given a pane ID, verifies that it is a valid pane 73 | ---known to the mux and returns a 74 | ---[`Pane`](lua://Pane) object that can be 75 | ---used to operate on the pane. 76 | --- 77 | ---This is useful for situations where you have 78 | ---obtained a pane id from some other source and 79 | ---want to use the various 80 | ---[`Pane`](lua://Pane) methods with it. 81 | --- 82 | ---@param PANE_ID integer 83 | ---@return Pane pane 84 | function Mux.get_pane(PANE_ID) end 85 | 86 | ---Given a tab ID, verifies that it is a valid tab 87 | ---known to the mux and returns a 88 | ---[`MuxTab`](lua://MuxTab) object that can 89 | ---be used to operate on the tab. 90 | --- 91 | ---This is useful for situations where you have obtained 92 | ---a tab id from some other source and want to use the various 93 | ---[`MuxTab`](lua://MuxTab) methods with it. 94 | --- 95 | ---@param TAB_ID integer 96 | ---@return MuxTab tab 97 | function Mux.get_tab(TAB_ID) end 98 | 99 | ---Given a window ID, verifies that it is a valid window 100 | ---known to the mux and returns a 101 | ---[`MuxWindow`](lua://MuxWindow) object 102 | ---that can be used to operate on the window. 103 | --- 104 | ---This is useful for situations where you have obtained 105 | ---a window id from some other source and want to use the various 106 | ---[`MuxWindow`](lua://MuxWindow) methods 107 | ---with it. 108 | --- 109 | ---@param id integer 110 | ---@return MuxWindow 111 | function Mux.get_window(id) end 112 | 113 | ---Returns a table containing the names of the workspaces 114 | ---known to the mux. 115 | --- 116 | ---@return string[] names 117 | function Mux.get_workspace_names() end 118 | 119 | ---Renames the workspace `old` to `new`. 120 | --- 121 | ---```lua 122 | ---local wezterm = require 'wezterm' 123 | ---local active = wezterm.mux.get_active_workspace() 124 | --- 125 | ---wezterm.mux.rename_workspace(active,'something different') 126 | ---``` 127 | --- 128 | ---@param old string 129 | ---@param new string 130 | function Mux.rename_workspace(old, new) end 131 | 132 | ---Sets the active workspace name. 133 | --- 134 | ---If the requested name doesn't correspond to an existing workspace, 135 | ---then an error is raised. 136 | --- 137 | ---@param WORKSPACE string 138 | function Mux.set_active_workspace(WORKSPACE) end 139 | 140 | ---Assign a new default domain in the mux. 141 | --- 142 | ---The domain that you assign here will override any configured 143 | ---[`config.default_domain`](lua://Config.default_domain) or 144 | ---the implicit assignment of the default domain that may 145 | ---have happened as a result of starting wezterm 146 | ---via `wezterm connect` or `wezterm serial`. 147 | --- 148 | ---@param domain MuxDomain 149 | function Mux.set_default_domain(domain) end 150 | 151 | ---Spawns a program into a new window, returning the 152 | ---associated objects: 153 | --- 154 | ---1. [`MuxTab`](lua://MuxTab) 155 | ---2. [`Pane`](lua://Pane) 156 | ---3. [`MuxWindow`](lua://MuxWindow) 157 | --- 158 | ---```lua 159 | ---local tab, pane, window = wezterm.mux.spawn_window {} 160 | ---``` 161 | --- 162 | ---When no arguments are passed, the default program is spawned. 163 | --- 164 | ---For the parameter fields, see: 165 | --- - [`SpawnCommand`](lua://SpawnCommand) 166 | --- 167 | ---@param T? SpawnCommand 168 | ---@return MuxTab tab 169 | ---@return Pane pane 170 | ---@return MuxWindow window 171 | function Mux.spawn_window(T) end 172 | 173 | -- vim:ts=4:sts=4:sw=4:et:ai:si:sta: 174 | -------------------------------------------------------------------------------- /lua/wezterm/types/objects/color.lua: -------------------------------------------------------------------------------- 1 | ---@meta 2 | 3 | ---`Color` objects can be created by calling 4 | ---[`wezterm.color.parse()`](lua://Wezterm.Color.parse) 5 | ---and may also be returned by various 6 | ---wezterm functions and methods. 7 | --- 8 | ---They represent a color that is internally stored 9 | ---in `SRGBA` format. 10 | --- 11 | ---@class Color 12 | local Color = {} 13 | 14 | ---Adjust the hue angle by the specified number of degrees. 15 | --- 16 | ---180 degrees gives the complementary color. 17 | ---Three colors separated by 120 degrees form the triad. 18 | ---Four colors separated by 90 degrees form the square. 19 | --- 20 | ---@param self Color 21 | ---@param degrees number 22 | ---@return Color adjusted_color 23 | function Color:adjust_hue_fixed(degrees) end 24 | 25 | ---Adjust the hue angle by the specified number of degrees. 26 | --- 27 | ---This method uses the `RYB` color model, 28 | ---which more closely matches how artists think of 29 | ---mixing colors and which is sometimes referred to 30 | ---as the _"artist's color wheel"_. 31 | --- 32 | ---180 degrees gives the complementary color. 33 | ---Three colors separated by 120 degrees form the triad. 34 | ---Four colors separated by 90 degrees form the square. 35 | --- 36 | ---@param self Color 37 | ---@param degrees number 38 | ---@return Color adjusted_color 39 | function Color:adjust_hue_fixed_ryb(degrees) end 40 | 41 | ---Returns the complement of the color. 42 | --- 43 | ---The complement is computed by converting to `HSL`, 44 | ---rotating by 180 degrees and converting back to `RGBA`. 45 | --- 46 | ---@param self Color 47 | ---@return Color complement 48 | function Color:complement() end 49 | 50 | ---Returns the complement of the color using 51 | ---the `RYB` color model, which more closely matches 52 | ---how artists think of mixing colors. 53 | --- 54 | ---The complement is computed by converting to `HSL`, 55 | ---converting the hue angle to the equivalent `RYB` angle, 56 | ---rotating by 180 degrees and and then converting back to `RGBA`. 57 | --- 58 | ---@param self Color 59 | ---@return Color ryb_complement 60 | function Color:complement_ryb() end 61 | 62 | ---Computes the contrast ratio between the two colors. 63 | --- 64 | ---The contrast ratio is computed by first 65 | ---converting to `HSL`, taking the `L` components, 66 | ---and dividing the lighter one by the darker one. 67 | --- 68 | ---A contrast ratio of `1` means _no contrast_. 69 | --- 70 | ---Note: The maximum possible contrast ratio is `21`. 71 | --- 72 | ---@param self Color 73 | ---@param other Color 74 | ---@return number ratio 75 | function Color:contrast_ratio(other) end 76 | 77 | ---Scales the color towards the minimum lightness 78 | ---by the provided factor, which should be 79 | ---in the range `0.0` through `1.0`. 80 | --- 81 | ---@param self Color 82 | ---@param amount number 83 | ---@return Color darker_color 84 | function Color:darken(amount) end 85 | 86 | ---Decrease the lightness by `amount`, 87 | ---a value ranging from `0.0` to `1.0`. 88 | --- 89 | ---@param self Color 90 | ---@param amount number 91 | ---@return Color darker_color 92 | function Color:darken_fixed(amount) end 93 | 94 | ---Computes the `CIEDE2000` `DeltaE` value 95 | ---representing the difference between 96 | ---the two colors. 97 | --- 98 | ---@param self Color 99 | ---@param other Color 100 | ---@return number value 101 | function Color:delta_e(other) end 102 | 103 | ---Scales the color towards the minimum saturation 104 | ---by the provided factor, which should be 105 | ---in the range `0.0` through `1.0`. 106 | --- 107 | ---@param self Color 108 | ---@param amount number 109 | ---@return Color desaturated 110 | function Color:desaturate(amount) end 111 | 112 | ---Decrease the saturation by `amount`, 113 | ---a value ranging from `0.0` to `1.0`. 114 | --- 115 | ---@param self Color 116 | ---@param amount number 117 | ---@return Color desaturated 118 | function Color:desaturate_fixed(amount) end 119 | 120 | ---Converts the color to the `HSL` colorspace and 121 | ---returns those values + `alpha`. 122 | --- 123 | ---@param self Color 124 | ---@return number h 125 | ---@return number s 126 | ---@return number l 127 | ---@return number alpha 128 | function Color:hsla() end 129 | 130 | ---Converts the color to the `LAB` colorspace and 131 | ---returns those values + `alpha`. 132 | --- 133 | ---@param self Color 134 | ---@return number l 135 | ---@return number a 136 | ---@return number b 137 | ---@return number alpha 138 | function Color:laba() end 139 | 140 | ---Scales the color towards the maximum lightness 141 | ---by the provided factor, which should be 142 | ---in the range `0.0` through `1.0`. 143 | --- 144 | ---@param self Color 145 | ---@param amount number 146 | ---@return Color lighter_color 147 | function Color:lighten(amount) end 148 | 149 | ---Increase the lightness by `amount`, a value 150 | ---ranging from `0.0` to `1.0`. 151 | --- 152 | ---@param self Color 153 | ---@param amount number 154 | ---@return Color lighter_color 155 | function Color:lighten_fixed(amount) end 156 | 157 | ---Returns a tuple of the colors converted to 158 | ---linear `RGBA` and expressed as 159 | ---floating point numbers in the range `0.0-1.0`. 160 | --- 161 | ---@param self Color 162 | ---@return number r 163 | ---@return number g 164 | ---@return number b 165 | ---@return number alpha 166 | function Color:linear_rgba() end 167 | 168 | ---Scales the color towards the maximum saturation 169 | ---by the provided factor, which should be 170 | ---in the range `0.0` through `1.0`. 171 | --- 172 | ---@param self Color 173 | ---@param amount number 174 | ---@return Color saturated 175 | function Color:saturate(amount) end 176 | 177 | ---Increase the saturation by amount, a value 178 | ---ranging from `0.0` to `1.0`. 179 | --- 180 | ---@param self Color 181 | ---@param amount number 182 | ---@return Color saturated 183 | function Color:saturate_fixed(amount) end 184 | 185 | ---Returns the other three colors that form a square. 186 | ---The other colors are `90` degrees apart 187 | ---on the `HSL` color wheel. 188 | --- 189 | ---@param self Color 190 | ---@return Color a 191 | ---@return Color b 192 | ---@return Color c 193 | function Color:square() end 194 | 195 | ---Returns a tuple of the internal `SRGBA` colors 196 | ---expressed as unsigned 8-bit integers in 197 | ---the range `0-255`. 198 | --- 199 | ---@param self Color 200 | ---@return integer r 201 | ---@return integer g 202 | ---@return integer b 203 | ---@return integer alpha 204 | function Color:srgb_u8() end 205 | 206 | ---Returns the other two colors that form a triad. 207 | --- 208 | ---The other colors are at +/- 120 degrees in the `HSL` color wheel. 209 | --- 210 | ---@param self Color 211 | ---@return Color a 212 | ---@return Color b 213 | function Color:triad() end 214 | 215 | -- vim:ts=4:sts=4:sw=4:et:ai:si:sta: 216 | -------------------------------------------------------------------------------- /lua/wezterm/types/wezterm/color.lua: -------------------------------------------------------------------------------- 1 | ---@meta 2 | 3 | ---@class ImageExtractorParams 4 | ---@field fuzziness? number 5 | ---@field num_colors? number 6 | ---@field max_width? number 7 | ---@field max_height? number 8 | ---@field min_brightness? number 9 | ---@field max_brightness? number 10 | ---@field threshold? number 11 | ---@field min_contrast? number 12 | 13 | ---The `wezterm.color` module exposes functions that work with colors. 14 | --- 15 | ---@class Wezterm.Color 16 | local C = {} 17 | 18 | ---This function loads an image from the specified filename 19 | ---and analyzes it to determine a set of distinct colors present 20 | ---in the image, ordered by how often a given color is found 21 | ---in the image, descending. 22 | --- 23 | ---For example, if an image is predominantly black with 24 | ---a bit of white, then `black` will be listed first 25 | ---in the returned array. 26 | --- 27 | ---This is potentially useful if you wish to generate 28 | ---a color scheme to match an image, for example. 29 | --- 30 | ---The default is to extract 16 colors from an image. 31 | --- 32 | ---For more info on the parameters you can use, see: 33 | --- - [`ImageExtractorParams`](lua://ImageExtractorParams) 34 | --- 35 | --- --- 36 | ---The analysis is relatively expensive and can take 37 | ---several seconds if used on a full 4K image file. 38 | ---To reduce the runtime, WezTerm will by default 39 | ---scale the image down and skip over nearby pixels. 40 | ---The results of the analysis will be cached to avoid 41 | ---repeating the same work each time the configuration 42 | ---is re-evaluated. 43 | --- 44 | ---You can find more examples [here](https://wezterm.org/config/lua/wezterm.color/extract_colors_from_image.html). 45 | --- 46 | ---@param filename string 47 | ---@param params? ImageExtractorParams 48 | ---@return string[] 49 | function C.extract_colors_from_image(filename, params) end 50 | 51 | ---Constructs a new 52 | ---[`Color`](lua://Color) object 53 | ---from values in the HSL colorspace, plus `alpha`. 54 | --- 55 | ---A useful source for info on parsing can be: 56 | --- - [`wezterm.color.parse()`](lua://Wezterm.Color.parse) 57 | --- 58 | ---@param h string|number 59 | ---@param s string|number 60 | ---@param l string|number 61 | ---@param a string|number 62 | ---@return Color 63 | function C.from_hsla(h, s, l, a) end 64 | 65 | ---Returns a Lua table keyed by color scheme name, 66 | ---whose values are the color scheme definition 67 | ---of the builtin color schemes. 68 | --- 69 | ---This is useful for programmatically deciding things 70 | ---about the scheme to use based on its color, 71 | ---or for taking a scheme and overriding a couple of entries 72 | ---just from your `wezterm.lua` configuration file. 73 | --- 74 | ---@return table<string, Palette> schemes 75 | function C.get_builtin_schemes() end 76 | 77 | ---Returns the set of colors that would be used by default. 78 | --- 79 | ---This is useful if you want to reference those colors 80 | ---in a color scheme definition. 81 | --- 82 | ---@return Palette colors 83 | function C.get_default_colors() end 84 | 85 | ---Given a gradient spec and a number of colors, 86 | ---returns a table holding that many colors spaced evenly 87 | ---across the range of the gradient. 88 | --- 89 | ---Returns an array of tables of type 90 | ---[`Color`](lua://Color). 91 | --- 92 | ---This is useful, for example, to generate colors for tabs 93 | ---or to do something fancy like interpolating colors 94 | ---across a gradient based on the time of the day. 95 | --- 96 | ---`gradient` is any [`Gradient`](lua://Gradient) 97 | ---allowed by the `config.window_background_gradient` option. 98 | --- 99 | ---See: 100 | --- - [`config.window_background_gradient`](lua://Config.window_background_gradient) 101 | --- 102 | ---@param gradient Gradient 103 | ---@param num_colors number 104 | ---@return Color[] colors 105 | function C.gradient(gradient, num_colors) end 106 | 107 | ---Loads a YAML file in `base16` format and returns it 108 | ---as a WezTerm color scheme. 109 | --- 110 | ---Note that wezterm ships with the `base16` color schemes 111 | ---that were referenced via [base16-schemes-source](https://github.com/chriskempson/base16-schemes-source) 112 | ---when the release was prepared, so this function is primarily useful 113 | ---if you want to import a `base16` color scheme that either 114 | ---isn't listed from the main list, or that was created 115 | ---after your version of wezterm was built. 116 | --- 117 | ---This function returns a tuple of the 118 | ---the color definitions and the metadata. 119 | --- 120 | ---@param file_name string 121 | ---@return Palette colors 122 | ---@return ColorSchemeMetaData metadata 123 | function C.load_base16_scheme(file_name) end 124 | 125 | ---Loads a wezterm color scheme from a TOML file. 126 | --- 127 | ---This function returns a tuple of the the color definitions 128 | ---and the metadata. 129 | --- 130 | ---See: 131 | --- - [`Palette`](lua://Palette) 132 | --- - [`ColorSchemeMetaData`](lua://ColorSchemeMetaData) 133 | --- 134 | ---@param file_name string 135 | ---@return Palette scheme 136 | ---@return ColorSchemeMetaData metadata 137 | function C.load_scheme(file_name) end 138 | 139 | ---Loads a json file exported from [`terminal.sexy`](https://terminal.sexy/) 140 | ---and returns it as a wezterm color scheme. 141 | --- 142 | ---Note that wezterm ships with all of the pre-defined `terminal.sexy` color schemes, 143 | ---so this function is primarily useful if you want to design a color scheme 144 | ---using `terminal.sexy` and then import it to wezterm. 145 | --- 146 | ---This function returns a tuple of the the color definitions and the metadata. 147 | --- 148 | ---See: 149 | --- - [`Palette`](lua://Palette) 150 | --- - [`ColorSchemeMetaData`](lua://ColorSchemeMetaData) 151 | --- 152 | ---@param file_name string 153 | ---@return Palette colors 154 | ---@return ColorSchemeMetaData metadata 155 | function C.load_terminal_sexy_scheme(file_name) end 156 | 157 | ---Parses the passed color and returns a 158 | ---[`Color`](lua://Color) object. 159 | --- 160 | ---`Color` objects evaluate as strings 161 | ---but have a number of methods that allow 162 | ---transforming and comparing colors. 163 | --- 164 | ---```lua 165 | ---local wezterm = require 'wezterm' 166 | --- 167 | ---local fg = wezterm.color.parse 'yellow' 168 | ---local bg = fg:complement_ryb():darken(0.2) 169 | --- 170 | ---return { 171 | --- colors = { 172 | --- foreground = fg, 173 | --- background = bg, 174 | --- }, 175 | ---} 176 | ---``` 177 | --- 178 | ---@param color_name string 179 | ---@return Color color 180 | function C.parse(color_name) end 181 | 182 | ---Saves a color scheme as a wezterm TOML file. 183 | --- 184 | ---This is useful when sharing your custom 185 | ---color scheme with others. 186 | --- 187 | ---While you could share the Lua representation 188 | ---of the scheme, the TOML file is recommended 189 | ---for sharing as it is purely declarative: 190 | ---no executable logic is present in the 191 | ---TOML color scheme which makes it safe 192 | ---to consume "random" schemes from the internet. 193 | --- 194 | ---You may find examples [here](https://wezterm.org/config/lua/wezterm.color/save_scheme.html). 195 | --- 196 | ---@param colors Palette 197 | ---@param metadata PaneMetadata 198 | ---@param file_name string 199 | function C.save_scheme(colors, metadata, file_name) end 200 | 201 | -- vim:ts=4:sts=4:sw=4:et:ai:si:sta: 202 | -------------------------------------------------------------------------------- /scripts/ensure_eof_comment.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | """Ensure EOF Vim comment in Lua files. 4 | 5 | Copyright (c) 2025 Guennadi Maximov C. All Rights Reserved. 6 | 7 | Usage: python3 ensure_eof_comment.py 8 | """ 9 | from argparse import ArgumentError, ArgumentParser, Namespace 10 | from io import TextIOWrapper 11 | from os import walk 12 | from os.path import isdir, join 13 | from sys import exit as Exit 14 | from sys import stderr as STDERR 15 | from sys import stdout as STDOUT 16 | from typing import Any, Dict, List, NoReturn, Tuple, Union 17 | 18 | COMMENTS: Dict[str, str] = { 19 | # C 20 | "c": "/// vim:ts=2:sts=2:sw=2:et:ai:si:sta:", 21 | "h": "/// vim:ts=2:sts=2:sw=2:et:ai:si:sta:", 22 | 23 | # C++ 24 | "cc": "/// vim:ts=2:sts=2:sw=2:et:ai:si:sta:", 25 | "c++": "/// vim:ts=2:sts=2:sw=2:et:ai:si:sta:", 26 | "cpp": "/// vim:ts=2:sts=2:sw=2:et:ai:si:sta:", 27 | "C": "/// vim:ts=2:sts=2:sw=2:et:ai:si:sta:", 28 | "hh": "/// vim:ts=2:sts=2:sw=2:et:ai:si:sta:", 29 | "h++": "/// vim:ts=2:sts=2:sw=2:et:ai:si:sta:", 30 | "hpp": "/// vim:ts=2:sts=2:sw=2:et:ai:si:sta:", 31 | "H": "/// vim:ts=2:sts=2:sw=2:et:ai:si:sta:", 32 | 33 | # Lua 34 | "lua": "-- vim:ts=4:sts=4:sw=4:et:ai:si:sta:", 35 | 36 | # Markdown 37 | "md": "<!--\nvim:ts=2:sts=2:sw=2:et:ai:si:sta:\n-->", 38 | "markdown": "<!--\nvim:ts=2:sts=2:sw=2:et:ai:si:sta:\n-->", 39 | 40 | # HTML 41 | "html": "<!--\nvim:ts=2:sts=2:sw=2:et:ai:si:sta:\n-->", 42 | "htm": "<!--\nvim:ts=2:sts=2:sw=2:et:ai:si:sta:\n-->", 43 | 44 | # CSS 45 | "css": "/* vim:ts=4:sts=4:sw=4:et:ai:si:sta: */", 46 | 47 | # Python 48 | "py": "# vim:ts=4:sts=4:sw=4:et:ai:si:sta:", 49 | "pyi": "# vim:ts=4:sts=4:sw=4:et:ai:si:sta:", 50 | 51 | # Shell 52 | "sh": "# vim:ts=4:sts=4:sw=4:et:ai:si:sta:", 53 | "bash": "# vim:ts=4:sts=4:sw=4:et:ai:si:sta:", 54 | "fish": "# vim:ts=4:sts=4:sw=4:et:ai:si:sta:", 55 | "zsh": "# vim:ts=4:sts=4:sw=4:et:ai:si:sta:", 56 | } 57 | 58 | 59 | def error(*msg, end: str = "\n", sep: str = " ", flush: bool = False) -> NoReturn: 60 | """Prints to stderr.""" 61 | try: 62 | end = str(end) 63 | except KeyboardInterrupt: 64 | Exit(1) 65 | except Exception: 66 | end = "\n" 67 | 68 | try: 69 | sep = str(sep) 70 | except KeyboardInterrupt: 71 | Exit(1) 72 | except Exception: 73 | sep = " " 74 | 75 | try: 76 | flush = bool(flush) 77 | except KeyboardInterrupt: 78 | Exit(1) 79 | except Exception: 80 | flush = False 81 | 82 | print(*msg, end=end, sep=sep, flush=flush, file=STDERR) 83 | 84 | 85 | def die(*msg, code: int = 0, end: str = "\n", sep: str = " ", flush: bool = False) -> NoReturn: 86 | """Kill program execution.""" 87 | try: 88 | code = int(code) 89 | except Exception: 90 | code = 1 91 | 92 | try: 93 | end = str(end) 94 | except Exception: 95 | end = "\n" 96 | code = 1 97 | 98 | try: 99 | sep = str(sep) 100 | except Exception: 101 | sep = " " 102 | code = 1 103 | 104 | try: 105 | flush = bool(flush) 106 | except Exception: 107 | flush = False 108 | code = 1 109 | 110 | if msg and len(msg) > 0: 111 | if code == 0: 112 | print(*msg, end=end, sep=sep, flush=flush) 113 | else: 114 | error(*msg, end=end, sep=sep, flush=flush) 115 | 116 | Exit(code) 117 | 118 | 119 | def bootstrap_paths(paths: Tuple[str], exts: Tuple[str]) -> Tuple[Tuple[str, str]]: 120 | """Bootstraps all the matching paths in current dir and below.""" 121 | result = list() 122 | for path in paths: 123 | if not isdir(path): 124 | continue 125 | 126 | for root, dirs, files in walk(path): 127 | for file in files: 128 | for ext in exts: 129 | if file.endswith(ext): 130 | result.append((join(root, file), ext)) 131 | 132 | return tuple(result) 133 | 134 | 135 | def open_batch_paths(paths: Tuple[Tuple[str, str]]) -> Dict[str, Tuple[TextIOWrapper, str]]: 136 | """Return a list of TextIO objects given file path strings.""" 137 | result = dict() 138 | for path in paths: 139 | try: 140 | result[path[0]] = (open(path[0], "r"), path[1]) 141 | except KeyboardInterrupt: 142 | die("\nProgram interrupted!", code=1) # Kills the program 143 | except FileNotFoundError: 144 | error(f"File `{path[0]}` is not available!") 145 | except Exception: 146 | error(f"Something went wrong while trying to open `{path[0]}`!") 147 | 148 | return result 149 | 150 | 151 | def get_last_line(file: TextIOWrapper) -> str: 152 | """Returns the last line of a file.""" 153 | result: str = file.read().split("\n")[-2] 154 | file.close() 155 | 156 | return result 157 | 158 | 159 | def eof_comment_search( 160 | files: Dict[str, Tuple[TextIOWrapper, str]] 161 | ) -> Dict[str, Tuple[Tuple[TextIOWrapper, bool], str]]: 162 | """Searches through opened files.""" 163 | result = dict() 164 | for path, file in files.items(): 165 | last_line = get_last_line(file[0]) 166 | comment = COMMENTS[file[1]] 167 | if last_line not in (COMMENTS[file[1]],): 168 | if last_line in ("-" + comment, comment.split(" "), "-" + "".join(comment.split(" "))): 169 | result[path] = ([open(path, "r"), True], file[1]) 170 | else: 171 | result[path] = ([open(path, "a"), False], file[1]) 172 | 173 | return result 174 | 175 | 176 | def modify_file(file: TextIOWrapper, ext: str) -> str: 177 | """Modifies a file containing a bad EOF comment.""" 178 | data = file.read().split("\n") 179 | data[-2] = COMMENTS[ext] 180 | data.insert(-2, "") # Newline 181 | 182 | return "\n".join(data) 183 | 184 | 185 | def append_eof_comment(files: Dict[str, Tuple[Tuple[TextIOWrapper, bool], str]]) -> NoReturn: 186 | """Append EOF comment to files missing it.""" 187 | for path, file in files.items(): 188 | txt = f"{COMMENTS[file[1]]}\n" 189 | if file[0][1]: 190 | txt = modify_file(file[0][0], file[1]) 191 | file[0][0] = open(path, "w") 192 | 193 | file[0][0].write(txt) 194 | file[0][0].close() 195 | 196 | 197 | def bootstrap_args( 198 | parser: ArgumentParser, 199 | specs: Tuple[Tuple[List[str], Dict[str, Any]]] 200 | ) -> Namespace: 201 | """Bootstraps the program arguments.""" 202 | for spec in specs: 203 | parser.add_argument(*spec[0], **spec[1]) 204 | 205 | try: 206 | namespace = parser.parse_args() 207 | except KeyboardInterrupt: 208 | die(code=130) 209 | except ArgumentError: 210 | parser.print_help(STDOUT) 211 | die(code=1) 212 | 213 | return namespace 214 | 215 | 216 | def arg_parser_init() -> Tuple[ArgumentParser, Namespace]: 217 | """Generates the argparse namespace.""" 218 | parser = ArgumentParser( 219 | prog="ensure_eof_comment.py", 220 | description="Checks for Vim EOF comments in all matching files in specific directories", 221 | exit_on_error=False 222 | ) 223 | spec = [ 224 | ( 225 | ["directories"], 226 | { 227 | "nargs": "+", 228 | "help": "The target directories to be checked", 229 | "metavar": "/path/to/directory", 230 | }, 231 | ), 232 | ( 233 | ["-e", "--file-extensions"], 234 | { 235 | "required": True, 236 | "metavar": "EXT1[,EXT2[,EXT3[,...]]]", 237 | "help": "A comma-separated list of file extensions (e.g. \"lua,c,cpp,cc,c++\")", 238 | "dest": "exts", 239 | } 240 | ), 241 | ] 242 | 243 | return parser, bootstrap_args(parser, spec) 244 | 245 | 246 | def main() -> int: 247 | """Execute main workflow.""" 248 | parser, namespace = arg_parser_init() 249 | 250 | dirs: Tuple[str] = tuple(namespace.directories) 251 | exts: Tuple[str] = tuple(namespace.exts.split(",")) 252 | 253 | files = open_batch_paths(bootstrap_paths(dirs, exts)) 254 | if len(files) == 0: 255 | error("No matching files found!") 256 | return 1 257 | 258 | results = eof_comment_search(files) 259 | if len(results) > 0: 260 | append_eof_comment(results) 261 | 262 | return 0 263 | 264 | 265 | if __name__ == "__main__": 266 | Exit(main()) 267 | -------------------------------------------------------------------------------- /lua/wezterm/types/objects/window.lua: -------------------------------------------------------------------------------- 1 | ---@meta 2 | 3 | ---@class WindowDimensions 4 | ---@field pixel_width number 5 | ---@field pixel_height number 6 | ---@field dpi number 7 | ---@field is_full_screen boolean 8 | 9 | ---A `Window` object cannot be created in Lua code; 10 | ---it is typically passed to the user code via an event callback. 11 | ---It is a handle to a GUI `TermWindow` running 12 | ---in the wezterm process. 13 | --- 14 | ---@class Window 15 | local M = {} 16 | 17 | ---A convenience accessor for returning the active pane 18 | ---in the active tab of the GUI window. 19 | --- 20 | ---This is similar to 21 | ---[`MuxWindow:active_pane()`](lua://MuxWindow.active_pane) 22 | ---but, because it operates at the GUI layer, it can return 23 | ---[`Pane`](lua://Pane) objects 24 | ---for special overlay panes that are not visible 25 | ---to the mux layer of the API. 26 | --- 27 | ---@param self Window 28 | ---@return Pane pane 29 | function M:active_pane() end 30 | 31 | ---A convenience accessor for returning the active 32 | ---`tab` within the window. 33 | --- 34 | ---@param self Window 35 | ---@return MuxTab tab 36 | function M:active_tab() end 37 | 38 | ---Returns the name of the active workspace. 39 | --- 40 | ---@param self Window 41 | ---@return string name 42 | function M:active_workspace() end 43 | 44 | ---Returns either a string holding the current dead key 45 | ---or IME composition text, or `nil` if the input layer 46 | ---is not in a composition state. 47 | --- 48 | ---This is the same text that is shown 49 | ---at the cursor position when composing. 50 | --- 51 | ---@param self Window 52 | ---@return string|nil status 53 | function M:composition_status() end 54 | 55 | ---Puts text into the specified clipboard. 56 | --- 57 | ---@param self Window 58 | ---@param text string 59 | ---@param target? "Clipboard"|"PrimarySelection"|"ClipboardAndPrimarySelection" 60 | function M:copy_to_clipboard(text, target) end 61 | 62 | ---Returns the current event. 63 | --- 64 | ---For now this is only implemented for mouse events. 65 | --- 66 | ---@param self Window 67 | ---@return WindowEvent event 68 | function M:current_event() end 69 | 70 | ---Returns a Lua table representing the effective configuration 71 | ---for the `Window`. 72 | --- 73 | ---The table is in the same format as that used to specify 74 | ---the config in the `wezterm.lua` file, but represents 75 | ---the fully-populated state of the configuration, 76 | ---including any CLI or per-window configuration overrides. 77 | --- 78 | ---Note that changing the config table will NOT change 79 | ---the effective window config; it's just 80 | ---a copy of that information. 81 | --- 82 | ---@param self Window 83 | ---@return Config effective_cfg 84 | function M:effective_config() end 85 | 86 | ---Attempts to focus and activate the window. 87 | --- 88 | ---@param self Window 89 | function M:focus() end 90 | 91 | ---Returns the appearance of the window environment. 92 | --- 93 | ---@param self Window 94 | ---@return ("Light"|"Dark"|"LightHighContrast"|"DarkHighContrast") appearance 95 | function M:get_appearance() end 96 | 97 | ---Returns a copy of the current set of configuration overrides 98 | ---that is in effect for the window. 99 | --- 100 | ---For examples, see: 101 | --- - [`set_config_overrides`](lua://Window.set_config_overrides) 102 | --- 103 | ---@param self Window 104 | ---@return Config config 105 | function M:get_config_overrides() end 106 | 107 | ---Returns a Lua table representing the dimensions for the `Window`. 108 | --- 109 | ---@param self Window 110 | ---@return WindowDimensions dimensions 111 | function M:get_dimensions() end 112 | 113 | ---Returns the text that is currently selected 114 | ---within the specified pane, within the specified window 115 | ---formatted with the escape sequences 116 | ---necessary to reproduce the same colors and styling. 117 | --- 118 | ---This is the same text that 119 | ---[`window:get_selection_text_for_pane()`](lua://Window.get_selection_text_for_pane) 120 | ---would return, except that it includes escape sequences. 121 | --- 122 | ---@param self Window 123 | ---@return string text 124 | function M:get_selection_escapes_for_pane() end 125 | 126 | ---Returns the text that is currently selected 127 | ---within the specified `Pane`, within the specified window. 128 | --- 129 | ---This is the same text that would be copied to the clipboard 130 | ---if the `CopyTo` action were to be performed. 131 | --- 132 | ---@param self Window 133 | ---@param pane Pane 134 | ---@return string text 135 | function M:get_selection_text_for_pane(pane) end 136 | 137 | ---Returns `true` if the window has focus. 138 | --- 139 | ---The `"update-status"` event is fired when 140 | ---the focus state changes. 141 | --- 142 | ---@param self Window 143 | ---@return boolean focused 144 | function M:is_focused() end 145 | 146 | ---Returns two values; the keyboard `modifiers` 147 | ---and the key status `leds`. 148 | --- 149 | ---Note that macOS doesn't have a num lock concept. 150 | --- 151 | ---@param self Window 152 | ---@return string mods 153 | ---@return "CAPS_LOCK"|"NUM_LOCK"|"CAPS_LOCK|NUM_LOCK" leds 154 | function M:keyboard_modifiers() end 155 | 156 | ---Returns `true` if the Leader Key is active in the window, 157 | ---or `false` otherwise. 158 | --- 159 | ---@param self Window 160 | ---@return boolean active 161 | function M:leader_is_active() end 162 | 163 | ---Puts the window into the maximized state. 164 | --- 165 | ---To return to the normal/non-maximized state 166 | ---use [`window:restore()`](lua://Window.restore). 167 | --- 168 | ---@param self Window 169 | function M:maximize() end 170 | 171 | ---Returns the 172 | ---[`MuxWindow`](lua://MuxWindow) 173 | ---representation of this window. 174 | --- 175 | ---@param self Window 176 | ---@return MuxWindow mux_win 177 | function M:mux_window() end 178 | 179 | ---Performs a key assignment against the window and pane. 180 | ---There are a number of actions that can be performed 181 | ---against a pane in a window when configured via the keys 182 | ---and mouse configuration options. 183 | --- 184 | ---@param self Window 185 | ---@param key_assignment Action 186 | ---@param pane Pane 187 | function M:perform_action(key_assignment, pane) end 188 | 189 | ---Restores the window from the maximized state. 190 | --- 191 | ---See [`Window:maximize()`](lua://Window.maximize). 192 | --- 193 | ---@param self Window 194 | function M:restore() end 195 | 196 | ---Changes the set of configuration overrides for the window. 197 | --- 198 | ---The config file is re-evaLuated and any CLI overrides are applied, 199 | ---followed by the keys and values from the overrides parameter. 200 | ---This can be used to override configuration on a per-window basis; 201 | ---this is only useful for options that apply to the GUI window, 202 | ---such as rendering the GUI. 203 | --- 204 | ---Each call to `window:set_config_overrides()` will emit 205 | ---the `"window-config-reloaded"` event for the window. 206 | --- 207 | ---If you are calling this method from inside the handler 208 | ---for `"window-config-reloaded"` you should take care to 209 | ---only call `window:set_config_overrides()` if the actual 210 | ---override values have changed to avoid a loop. 211 | --- 212 | ---@param self Window 213 | ---@param overrides Config 214 | function M:set_config_overrides(overrides) end 215 | 216 | ---Resizes the inner portion of the window 217 | ---(excluding any window decorations) 218 | ---to the specified width and height. 219 | --- 220 | ---@param self Window 221 | ---@param width number 222 | ---@param height number 223 | function M:set_inner_size(width, height) end 224 | 225 | ---This method can be used to change the content 226 | ---that is displayed in the tab bar, to the left of 227 | ---the tabs and new tab button. 228 | --- 229 | ---The content is left-aligned and will be clipped 230 | ---from the right edge to fit in the available space. 231 | --- 232 | ---The parameter is a string that can contain 233 | ---escape sequences that change presentation. 234 | ---To compose the string, it is recommended that you use 235 | ---[`wezterm.format()`](lua://Wezterm.format). 236 | --- 237 | ---@param self Window 238 | ---@param str string 239 | function M:set_left_status(str) end 240 | 241 | ---Repositions the top-left corner of the window 242 | ---to the specified `x` and `y` coordinates. 243 | --- 244 | ---Note that Wayland does not allow applications to directly control 245 | ---their window placement, so this method has no effect on Wayland. 246 | --- 247 | ---@param self Window 248 | ---@param x number 249 | ---@param y number 250 | function M:set_position(x, y) end 251 | 252 | ---This method can be used to change the content 253 | ---that is displayed in the tab bar, to the right of 254 | ---the tabs and new tab button. 255 | --- 256 | ---The content is right-aligned and will be clipped 257 | ---from the left edge to fit in the available space. 258 | --- 259 | ---The parameter is a string that can contain 260 | ---escape sequences that change presentation. 261 | --- 262 | ---To compose the string, it is recommended that you use 263 | ---[`wezterm.format()`](lua://Wezterm.format). 264 | --- 265 | ---@param self Window 266 | ---@param str string 267 | function M:set_right_status(str) end 268 | 269 | ---Generates a desktop "toast notification" with 270 | ---the specified `title` and `message`. 271 | --- 272 | ---An optional `url` parameter can be provided; 273 | ---clicking on the notification will open that URL. 274 | --- 275 | ---An optional `timeout` parameter can be provided; 276 | ---if so, it specifies how long the notification will remain 277 | ---prominently displayed in milliseconds. 278 | --- 279 | ---To specify a `timeout` without specifying a `url`, 280 | ---set the `url` parameter to `nil`. 281 | --- 282 | ---The timeout you specify may not be respected by the system, 283 | ---particularly in X11/Wayland environments, and Windows will always use 284 | ---a fixed, unspecified, duration. 285 | --- 286 | ---The notification will persist on screen until dismissed or clicked, 287 | ---or until its timeout duration elapses. 288 | --- 289 | ---@param self Window 290 | ---@param title string 291 | ---@param message string 292 | ---@param url? string|nil 293 | ---@param timeout? integer 294 | function M:toast_notification(title, message, url, timeout) end 295 | 296 | ---Toggles full screen mode for the window. 297 | --- 298 | ---@param self Window 299 | function M:toggle_fullscreen() end 300 | 301 | ---Returns the ID number for the window. 302 | --- 303 | ---The ID is used to identify the window within 304 | ---the internal multiplexer and can be used 305 | ---when making API calls via wezterm CLI 306 | ---to indicate the subject of manipulation. 307 | --- 308 | ---@param self Window 309 | ---@return integer id 310 | function M:window_id() end 311 | 312 | ---Returns a string holding the top of the current key table activation stack, 313 | ---or `nil` if the stack is empty. 314 | --- 315 | ---See [Key Tables](https://wezterm.org/config/key-tables.html) for a detailed example. 316 | --- 317 | ---@param self Window 318 | ---@return string|nil stack 319 | function M:active_key_table() end 320 | 321 | -- vim:ts=4:sts=4:sw=4:et:ai:si:sta: 322 | -------------------------------------------------------------------------------- /lua/wezterm/types/enum/key-assignment.lua: -------------------------------------------------------------------------------- 1 | ---@meta 2 | 3 | ---TODO: Make key and mods more specific 4 | 5 | ---@alias CharSelect 6 | ---|"RecentlyUsed" 7 | ---|"SmileysAndEmotion" 8 | ---|"PeopleAndBody" 9 | ---|"AnimalsAndNature" 10 | ---|"FoodAndDrink" 11 | ---|"TravelAndPlaces" 12 | ---|"Activities" 13 | ---|"Objects" 14 | ---|"Symbols" 15 | ---|"Flags" 16 | ---|"NerdFonts" 17 | ---|"UnicodeNames" 18 | 19 | ---@alias CopyTo "Clipboard"|"ClipboardAndPrimarySelection"|"PrimarySelection" 20 | ---@alias CopyMode 21 | ---|"AcceptPattern" 22 | ---|"ClearPattern" 23 | ---|"ClearSelectionMode" 24 | ---|"Close" 25 | ---|"CycleMatchType" 26 | ---|"EditPattern" 27 | ---|"JumpReverse" 28 | ---|"MoveBackwardSemanticZone" 29 | ---|"MoveBackwardWord" 30 | ---|"MoveBackwardWordEnd" 31 | ---|"MoveDown" 32 | ---|"MoveForwardSemanticZone" 33 | ---|"MoveForwardWord" 34 | ---|"MoveForwardWordEnd" 35 | ---|"MoveLeft" 36 | ---|"MoveRight" 37 | ---|"MoveToEndOfLineContent" 38 | ---|"MoveToScrollbackBottom" 39 | ---|"MoveToScrollbackTop" 40 | ---|"MoveToSelectionOtherEnd" 41 | ---|"MoveToSelectionOtherEndHoriz" 42 | ---|"MoveToStartOfLine" 43 | ---|"MoveToStartOfLineContent" 44 | ---|"MoveToStartOfNextLine" 45 | ---|"MoveToViewportBottom" 46 | ---|"MoveToViewportMiddle" 47 | ---|"MoveToViewportTop" 48 | ---|"MoveUp" 49 | ---|"NextMatch" 50 | ---|"NextMatchPage" 51 | ---|"PageDown" 52 | ---|"PageUp" 53 | ---|"PriorMatch" 54 | ---|"PriorMatchPage" 55 | ---|"ScrollToBottom" 56 | ---|{ JumpBackward: { prev_char: boolean } } 57 | ---|{ JumpForward: { prev_char: boolean } } 58 | ---|{ MoveBackwardSemanticZoneOfType: "Input"|"Output"|"Prompt" } 59 | ---|{ MoveByPage: number } 60 | ---|{ MoveForwardSemanticZoneOfType: "Input"|"Output"|"Prompt" } 61 | ---|{ SetSelectionMode: SelectionMode|"SemanticZone" } 62 | 63 | ---@alias SendKey Key 64 | ---@alias KeyAssignment 65 | ---|"ActivateCommandPalette" 66 | ---|"ActivateCopyMode" 67 | ---|"ActivateKeyTable" 68 | ---|"ActivateLastTab" 69 | ---|"ActivatePaneByIndex" 70 | ---|"ActivatePaneDirection" 71 | ---|"ActivateTab" 72 | ---|"ActivateTabRelative" 73 | ---|"ActivateTabRelativeNoWrap" 74 | ---|"ActivateWindow" 75 | ---|"ActivateWindowRelative" 76 | ---|"ActivateWindowRelativeNoWrap" 77 | ---|"AdjustPaneSize" 78 | ---|"AttachDomain" 79 | ---|"CharSelect" 80 | ---|"ClearKeyTableStack" 81 | ---|"ClearScrollback" 82 | ---|"ClearSelection" 83 | ---|"CloseCurrentPane" 84 | ---|"CloseCurrentTab" 85 | ---|"CompleteSelection" 86 | ---|"CompleteSelectionOrOpenLinkAtMouseCursor" 87 | ---|"Copy" 88 | ---|"CopyMode" 89 | ---|"CopyTo" 90 | ---|"DecreaseFontSize" 91 | ---|"DetachDomain" 92 | ---|"DisableDefaultAssignment" 93 | ---|"EmitEvent" 94 | ---|"ExtendSelectionToMouseCursor" 95 | ---|"Hide" 96 | ---|"HideApplication" 97 | ---|"IncreaseFontSize" 98 | ---|"InputSelector" 99 | ---|"MoveTab" 100 | ---|"MoveTabRelative" 101 | ---|"Multiple" 102 | ---|"Nop" 103 | ---|"OpenLinkAtMouseCursor" 104 | ---|"PaneSelect" 105 | ---|"Paste" 106 | ---|"PasteFrom" 107 | ---|"PastePrimarySelection" 108 | ---|"PopKeyTable" 109 | ---|"PromptInputLine" 110 | ---|"QuickSelect" 111 | ---|"QuickSelectArgs" 112 | ---|"QuitApplication" 113 | ---|"ReloadConfiguration" 114 | ---|"ResetFontAndWindowSize" 115 | ---|"ResetFontSize" 116 | ---|"ResetTerminal" 117 | ---|"RotatePanes" 118 | ---|"ScrollByCurrentEventWheelDelta" 119 | ---|"ScrollByLine" 120 | ---|"ScrollByPage" 121 | ---|"ScrollToBottom" 122 | ---|"ScrollToPrompt" 123 | ---|"ScrollToTop" 124 | ---|"Search" 125 | ---|"SelectTextAtMouseCursor" 126 | ---|"SendKey" 127 | ---|"SendString" 128 | ---|"SetPaneZoomState" 129 | ---|"Show" 130 | ---|"ShowDebugOverlay" 131 | ---|"ShowLauncher" 132 | ---|"ShowLauncherArgs" 133 | ---|"ShowTabNavigator" 134 | ---|"SpawnCommandInNewTab" 135 | ---|"SpawnCommandInNewWindow" 136 | ---|"SpawnTab" 137 | ---|"SpawnWindow" 138 | ---|"SplitHorizontal" 139 | ---|"SplitPane" 140 | ---|"SplitVertical" 141 | ---|"StartWindowDrag" 142 | ---|"SwitchToWorkspace" 143 | ---|"SwitchWorkspaceRelative" 144 | ---|"ToggleFullScreen" 145 | ---|"TogglePaneZoomState" 146 | 147 | ---@class Key 148 | ---A single unicode character, like 'A' or 'a'. Pay attention to the case of the text that you use 149 | ---and the state of the SHIFT modifier, as this matters whether 'A' or 'a' is matched. 150 | --- 151 | ---Alternatively you can use on the following keycode identifiers, although note that not all of 152 | ---these are meaningful on all platforms: 153 | --- 154 | --- - `Add` 155 | --- - `Alt` 156 | --- - `ApplicationDownArrow` 157 | --- - `ApplicationLeftArrow` 158 | --- - `ApplicationRightArrow` 159 | --- - `ApplicationUpArrow` 160 | --- - `Applications` 161 | --- - `Backspace` 162 | --- - `BrowserBack` 163 | --- - `BrowserFavorites` 164 | --- - `BrowserForward` 165 | --- - `BrowserHome` 166 | --- - `BrowserRefresh` 167 | --- - `BrowserSearch` 168 | --- - `BrowserStop` 169 | --- - `Cancel` 170 | --- - `CapsLock` 171 | --- - `Clear` 172 | --- - `Control` 173 | --- - `Decimal` 174 | --- - `Delete` 175 | --- - `Divide` 176 | --- - `DownArrow` 177 | --- - `End` 178 | --- - `Enter` 179 | --- - `Escape` 180 | --- - `Execute` 181 | --- - `F1` 182 | --- - `F2` 183 | --- - `F3` 184 | --- - `F4` 185 | --- - `F5` 186 | --- - `F6` 187 | --- - `F7` 188 | --- - `F8` 189 | --- - `F9` 190 | --- - `F10` 191 | --- - `F11` 192 | --- - `F12` 193 | --- - `F13` 194 | --- - `F14` 195 | --- - `F15` 196 | --- - `F16` 197 | --- - `F17` 198 | --- - `F18` 199 | --- - `F19` 200 | --- - `F20` 201 | --- - `F21` 202 | --- - `F22` 203 | --- - `F23` 204 | --- - `F24` 205 | --- - `Help` 206 | --- - `Home` 207 | --- - `Hyper` 208 | --- - `Insert` 209 | --- - `LeftAlt` 210 | --- - `LeftArrow` 211 | --- - `LeftControl` 212 | --- - `LeftMenu` 213 | --- - `LeftShift` 214 | --- - `LeftWindows` 215 | --- - `MediaNextTrack` 216 | --- - `MediaPlayPause` 217 | --- - `MediaPrevTrack` 218 | --- - `MediaStop` 219 | --- - `Menu` 220 | --- - `Meta` 221 | --- - `Multiply` 222 | --- - `NumLock` 223 | --- - `Numpad0` 224 | --- - `Numpad1` 225 | --- - `Numpad2` 226 | --- - `Numpad3` 227 | --- - `Numpad4` 228 | --- - `Numpad5` 229 | --- - `Numpad6` 230 | --- - `Numpad7` 231 | --- - `Numpad8` 232 | --- - `Numpad9` 233 | --- - `PageDown` 234 | --- - `PageUp` 235 | --- - `Pause` 236 | --- - `Print` 237 | --- - `PrintScreen` 238 | --- - `RightAlt` 239 | --- - `RightArrow` 240 | --- - `RightControl` 241 | --- - `RightMenu` 242 | --- - `RightShift` 243 | --- - `RightWindows` 244 | --- - `ScrollLock` 245 | --- - `Select` 246 | --- - `Separator` 247 | --- - `Shift` 248 | --- - `Sleep` 249 | --- - `Subtract` 250 | --- - `Super` 251 | --- - `Tab` 252 | --- - `UpArrow` 253 | --- - `VoidSymbol` 254 | --- - `VolumeDown` 255 | --- - `VolumeMute` 256 | --- - `VolumeUp` 257 | --- 258 | ---The key value can refer either to the physical position of a key on an ANSI US keyboard or to the 259 | ---post-keyboard-layout-mapped value produced by a key press. 260 | --- 261 | ---You can explicitly assign using the physical position by adding a phys: prefix to the value, for 262 | ---example: `key="phys:A"`. This will match key presses for the key that would be in the position of 263 | ---the A key on an ANSI US keyboard. 264 | --- 265 | ---You can explicitly assign the mapped key by adding a mapped: 266 | ---prefix to the value, for example: key="mapped:a" will match a 267 | ---key press where the OS keyboard layout produces a, regardless of 268 | ---its physical position. 269 | --- 270 | ---If you omit an explicit prefix, wezterm will assume phys: and use the physical position of the 271 | ---specified key. 272 | --- 273 | ---The default key assignments listed above use `phys:`. In previous releases there was no physical 274 | ---position support and those assignments were all `mapped:`. 275 | --- 276 | ---When upgrading from earlier releases, if you had `{key="N", mods="CMD", ..}` in your config, you 277 | ---will need to change it to either `{key="N", mods="CMD|SHIFT", ..}` or `{ key="mapped:N", 278 | ---mods="CMD", ..}` in order to continue to respect the SHIFT modifier. 279 | --- 280 | ---The `key_map_preference` option controls how keys without an explicit `phys:` or `mapped:` prefix 281 | ---are treated. If `key_map_preference = "Mapped"` (the default), then `mapped:` is assumed. If 282 | ---`key_map_preference = "Physical"` then `phys:` is assumed. 283 | --- 284 | ---The default key assignments will respect `key_map_preference`. 285 | --- 286 | ---In some cases, wezterm may not know how to represent a key event in either its phys: or mapped: 287 | ---forms. In that case, you may wish to define an assignment in terms of the underlying operating 288 | ---system key code, using a `raw: prefix`. 289 | --- 290 | ---Similar in concept to the `phys:` mapping described above, the `raw:` mapping is independent of 291 | ---the OS keyboard layout. Raw codes are hardware and windowing system dependent, so there is no 292 | ---portable way to list which key does what. 293 | --- 294 | ---To discover these values, you can set `debug_key_events = true` and press the keys of interest. 295 | --- 296 | ---You can specify a raw key value of 123 by using `key="raw:123"` in your config rather than one of 297 | ---the other key values. 298 | --- 299 | ---@field key string 300 | ---Possible Modifier labels are: 301 | --- 302 | --- - `SUPER`, `CMD`, `WIN`: These are all equivalent: on macOS the `Command` key, 303 | --- on Windows the `WIN`, 304 | --- on Linux this can also be the `Super` or `Hyper` key. 305 | --- Left and right are equivalent 306 | --- - `CTRL`: The control key. 307 | --- Left and right are equivalent 308 | --- - `SHIFT`: The shift key. 309 | --- Left and right are equivalent 310 | --- - `ALT`, `OPT`, `META`: These are all equivalent. 311 | --- on macOS the Option key, on 312 | --- other systems the Alt or Meta key. 313 | --- Left and right are equivalent 314 | --- - `LEADER`: A special modal modifier state managed by WezTerm 315 | --- - `VoidSymbol`: This keycode is emitted in special cases where 316 | --- the original function of the key has been removed. 317 | --- Such as in Linux and using `setxkbmap -option caps:none`. 318 | --- 319 | ---The `CapsLock` will no longer function as before in all applications, 320 | ---instead emitting `VoidSymbol`. 321 | ---You can also combine modifiers using the `|` symbol, like `"CMD|CTRL"`. 322 | --- 323 | ---@field mods? string 324 | ---@field action? KeyAssignment|Action 325 | 326 | ---@class ActionClass 327 | ---@field ActivateCommandPalette any 328 | ---@field ActivateCopyMode any 329 | ---@field ActivateKeyTable any 330 | ---@field ActivateLastTab any 331 | ---@field ActivatePaneByIndex any 332 | ---@field ActivatePaneDirection any 333 | ---@field ActivateTab any 334 | ---@field ActivateTabRelative any 335 | ---@field ActivateTabRelativeNoWrap any 336 | ---@field ActivateWindow any 337 | ---@field ActivateWindowRelative any 338 | ---@field ActivateWindowRelativeNoWrap any 339 | ---@field AdjustPaneSize any 340 | ---@field AttachDomain any 341 | ---@field CharSelect any 342 | ---@field ClearKeyTableStack any 343 | ---@field ClearScrollback any 344 | ---@field ClearSelection any 345 | ---@field CloseCurrentPane any 346 | ---@field CloseCurrentTab any 347 | ---@field CompleteSelection any 348 | ---@field CompleteSelectionOrOpenLinkAtMouseCursor any 349 | ---@field Copy any 350 | ---@field CopyMode CopyMode 351 | ---@field CopyTo CopyTo 352 | ---@field DecreaseFontSize any 353 | ---@field DetachDomain any 354 | ---@field DisableDefaultAssignment any 355 | ---@field EmitEvent any 356 | ---@field ExtendSelectionToMouseCursor any 357 | ---@field Hide any 358 | ---@field HideApplication any 359 | ---@field IncreaseFontSize any 360 | ---@field InputSelector any 361 | ---@field MoveTab any 362 | ---@field MoveTabRelative any 363 | ---Performs a sequence of multiple assignments. 364 | --- 365 | ---This is useful when you want a single key press to trigger multiple actions. 366 | --- 367 | ---@field Multiple ActionClass[]|ActionFuncClass[] 368 | ---@field Nop any 369 | ---@field OpenLinkAtMouseCursor any 370 | ---@field PaneSelect any 371 | ---@field Paste any 372 | ---@field PasteFrom any 373 | ---@field PastePrimarySelection any 374 | ---@field PopKeyTable any 375 | ---@field PromptInputLine any 376 | ---@field QuickSelect any 377 | ---@field QuickSelectArgs any 378 | ---@field QuitApplication any 379 | ---@field ReloadConfiguration any 380 | ---@field ResetFontAndWindowSize any 381 | ---@field ResetFontSize any 382 | ---@field ResetTerminal any 383 | ---@field RotatePanes any 384 | ---@field ScrollByCurrentEventWheelDelta any 385 | ---@field ScrollByLine any 386 | ---@field ScrollByPage any 387 | ---@field ScrollToBottom any 388 | ---@field ScrollToPrompt any 389 | ---@field ScrollToTop any 390 | ---@field Search any 391 | ---@field SelectTextAtMouseCursor any 392 | ---@field SendKey SendKey 393 | ---@field SendString string 394 | ---@field SetPaneZoomState any 395 | ---@field Show any 396 | ---@field ShowDebugOverlay any 397 | ---@field ShowLauncher any 398 | ---@field ShowLauncherArgs any 399 | ---@field ShowTabNavigator any 400 | ---@field SpawnCommandInNewTab any 401 | ---@field SpawnCommandInNewWindow any 402 | ---@field SpawnTab any 403 | ---@field SpawnWindow any 404 | ---@field SplitHorizontal any 405 | ---@field SplitPane any 406 | ---@field SplitVertical any 407 | ---@field StartWindowDrag any 408 | ---@field SwitchToWorkspace any 409 | ---@field SwitchWorkspaceRelative any 410 | ---@field ToggleFullScreen any 411 | ---@field TogglePaneZoomState any 412 | 413 | ---@alias KeyAssignFunction fun(param: any): Action 414 | 415 | ---Can also be called as function like older versions of wezterm did. 416 | --- 417 | ---@class ActionFuncClass 418 | ---@field ActivateCommandPalette KeyAssignFunction 419 | ---@field ActivateCopyMode KeyAssignFunction 420 | ---@field ActivateKeyTable KeyAssignFunction 421 | ---@field ActivateLastTab KeyAssignFunction 422 | ---@field ActivatePaneByIndex KeyAssignFunction 423 | ---@field ActivatePaneDirection KeyAssignFunction 424 | ---@field ActivateTab KeyAssignFunction 425 | ---@field ActivateTabRelative KeyAssignFunction 426 | ---@field ActivateTabRelativeNoWrap KeyAssignFunction 427 | ---@field ActivateWindow KeyAssignFunction 428 | ---@field ActivateWindowRelative KeyAssignFunction 429 | ---@field ActivateWindowRelativeNoWrap KeyAssignFunction 430 | ---@field AdjustPaneSize KeyAssignFunction 431 | ---@field AttachDomain KeyAssignFunction 432 | ---@field CharSelect KeyAssignFunction 433 | ---@field ClearKeyTableStack KeyAssignFunction 434 | ---@field ClearScrollback KeyAssignFunction 435 | ---@field ClearSelection KeyAssignFunction 436 | ---@field CloseCurrentPane KeyAssignFunction 437 | ---@field CloseCurrentTab KeyAssignFunction 438 | ---@field CompleteSelection KeyAssignFunction 439 | ---@field CompleteSelectionOrOpenLinkAtMouseCursor KeyAssignFunction 440 | ---@field Copy KeyAssignFunction 441 | ---@field DecreaseFontSize KeyAssignFunction 442 | ---@field DetachDomain KeyAssignFunction 443 | ---@field DisableDefaultAssignment KeyAssignFunction 444 | ---@field EmitEvent KeyAssignFunction 445 | ---@field ExtendSelectionToMouseCursor KeyAssignFunction 446 | ---@field Hide KeyAssignFunction 447 | ---@field HideApplication KeyAssignFunction 448 | ---@field IncreaseFontSize KeyAssignFunction 449 | ---@field InputSelector KeyAssignFunction 450 | ---@field MoveTab KeyAssignFunction 451 | ---@field MoveTabRelative KeyAssignFunction 452 | ---@field OpenLinkAtMouseCursor KeyAssignFunction 453 | ---@field PaneSelect KeyAssignFunction 454 | ---@field Paste KeyAssignFunction 455 | ---@field PasteFrom KeyAssignFunction 456 | ---@field PastePrimarySelection KeyAssignFunction 457 | ---@field PopKeyTable KeyAssignFunction 458 | ---@field PromptInputLine KeyAssignFunction 459 | ---@field QuickSelect KeyAssignFunction 460 | ---@field QuickSelectArgs KeyAssignFunction 461 | ---@field QuitApplication KeyAssignFunction 462 | ---@field ReloadConfiguration KeyAssignFunction 463 | ---@field ResetFontAndWindowSize KeyAssignFunction 464 | ---@field ResetFontSize KeyAssignFunction 465 | ---@field ResetTerminal KeyAssignFunction 466 | ---@field RotatePanes KeyAssignFunction 467 | ---@field ScrollByCurrentEventWheelDelta KeyAssignFunction 468 | ---@field ScrollByLine KeyAssignFunction 469 | ---@field ScrollByPage KeyAssignFunction 470 | ---@field ScrollToBottom KeyAssignFunction 471 | ---@field ScrollToPrompt KeyAssignFunction 472 | ---@field ScrollToTop KeyAssignFunction 473 | ---@field Search KeyAssignFunction 474 | ---@field SetPaneZoomState KeyAssignFunction 475 | ---@field Show KeyAssignFunction 476 | ---@field ShowDebugOverlay KeyAssignFunction 477 | ---@field ShowLauncher KeyAssignFunction 478 | ---@field ShowLauncherArgs KeyAssignFunction 479 | ---@field ShowTabNavigator KeyAssignFunction 480 | ---@field SpawnCommandInNewTab KeyAssignFunction 481 | ---@field SpawnCommandInNewWindow KeyAssignFunction 482 | ---@field SpawnTab KeyAssignFunction 483 | ---@field SpawnWindow KeyAssignFunction 484 | ---@field SplitHorizontal KeyAssignFunction 485 | ---@field SplitPane KeyAssignFunction 486 | ---@field SplitVertical KeyAssignFunction 487 | ---@field StartWindowDrag KeyAssignFunction 488 | ---@field SwitchToWorkspace KeyAssignFunction 489 | ---@field SwitchWorkspaceRelative KeyAssignFunction 490 | ---@field ToggleFullScreen KeyAssignFunction 491 | ---@field TogglePaneZoomState KeyAssignFunction 492 | local ActionFunc = {} 493 | 494 | ---Causes the key press to have no effect; it behaves as though those keys were not pressed. 495 | --- 496 | ---If instead of this you want the key presses to pass through to the terminal, 497 | ---look at [`DisableDefaultAssignment`](https://wezterm.org/config/lua/keyassignment/DisableDefaultAssignment.html). 498 | --- 499 | ---@return Action nop 500 | function ActionFunc.Nop() end 501 | 502 | ---@param s "Line"|"Word"|"Cell"|"Block"|"SemanticZone" 503 | ---@return Action select_text_at_mouse_cursor 504 | function ActionFunc.SelectTextAtMouseCursor(s) end 505 | 506 | ---@param s string 507 | ---@return Action send_string 508 | function ActionFunc.SendString(s) end 509 | 510 | ---@param param SendKey 511 | ---@return Action send_key 512 | function ActionFunc.SendKey(param) end 513 | 514 | ---@param act CopyMode 515 | ---@return Action copy_mode 516 | function ActionFunc.CopyMode(act) end 517 | 518 | ---@param destination CopyTo 519 | ---@return Action copy_to 520 | function ActionFunc.CopyTo(destination) end 521 | 522 | ---Performs a sequence of multiple assignments. 523 | --- 524 | ---This is useful when you want a single key press to trigger multiple actions. 525 | --- 526 | ---@param action ActionClass[] 527 | function ActionFunc.Multiple(action) end 528 | 529 | ---Performs a sequence of multiple assignments. 530 | --- 531 | ---This is useful when you want a single key press to trigger multiple actions. 532 | --- 533 | ---@param action ActionFuncClass[] 534 | function ActionFunc.Multiple(action) end 535 | 536 | ---Helper for defining key assignment actions in your configuration file. 537 | ---This is really just sugar for the underlying Lua -> Rust deserialation mapping 538 | ---that makes it a bit easier to identify where syntax errors may exist 539 | ---in your configuration file 540 | ---@alias Action ActionFuncClass|ActionClass 541 | 542 | -- vim:ts=4:sts=4:sw=4:et:ai:si:sta: 543 | -------------------------------------------------------------------------------- /lua/wezterm/types/objects/pane.lua: -------------------------------------------------------------------------------- 1 | ---@meta 2 | 3 | ---@class SpawnSplit: SpawnTab 4 | ---@field direction? "Right"|"Left"|"Top"|"Bottom" 5 | ---@field top_level? boolean 6 | ---@field size? number 7 | 8 | ---@class PaneMetadata 9 | ---A boolean value that is populated only for local panes. 10 | ---It is set to `true` if it appears as though the local PTY is configured 11 | ---for password entry (local echo disabled, canonical input mode enabled). 12 | --- 13 | ---@field password_input boolean 14 | ---A boolean value that is populated only for multiplexer client panes. 15 | ---It is set to `true` if wezterm is waiting for a response 16 | ---from the multiplexer server. 17 | --- 18 | ---This can be used in conjunction with: 19 | --- - [`PaneMetaData.since_last_response_ms`](lua://PaneMetadata.since_last_response_ms) 20 | --- 21 | ---@field is_tardy boolean 22 | ---An integer value that is populated only for multiplexer client panes. 23 | ---It is set to the number of elapsed milliseconds since the most recent 24 | ---response from the multiplexer server. 25 | --- 26 | ---@field since_last_response_ms integer 27 | 28 | ---@class RenderableDimensions 29 | ---The number of columns. 30 | --- 31 | ---@field cols number 32 | ---The top of the physical non-scrollback screen expressed as a stable index. 33 | --- 34 | ---@field physical_top integer 35 | ---The total number of lines in the scrollback and viewport. 36 | --- 37 | ---@field scrollback_rows number 38 | ---The top of the scrollback; the earliest row remembered by wezterm. 39 | --- 40 | ---@field scrollback_top integer 41 | ---The number of vertical cells in the visible portion of the window. 42 | --- 43 | ---@field viewport_rows number 44 | 45 | ---A handle to a live instance of a Pane that is known to the wezterm process. 46 | --- 47 | ---It tracks the pseudo terminal (or real serial terminal) and 48 | ---associated process(es) and the parsed screen and scrollback. 49 | ---Also,it's typically passed to your code via an event callback. 50 | --- 51 | ---A `Pane` object can be used to send input to the associated processes 52 | ---and introspect the state of the terminal emulation for that pane. 53 | --- 54 | ---In previous releases there were separate `MuxPane` and `Pane` objects 55 | ---created by the mux and GUI layers, respectively. 56 | ---This is no longer the case: there is now just the underlying mux pane 57 | ---which is referred to in these docs as `Pane` for the sake of simplicity. 58 | --- 59 | ---@class Pane 60 | local M = {} 61 | 62 | ---Activates (focuses) the pane and its containing tab. 63 | --- 64 | ---@param self Pane 65 | function M:activate() end 66 | 67 | ---~Returns the current working directory of the pane, if known.~ 68 | ---This method now returns a `Url` object which provides 69 | ---a convenient way to decode and operate on said URL. 70 | --- 71 | --- --- 72 | --- 73 | ---The current directory can be specified 74 | ---by an application sending `OSC 7`. 75 | --- 76 | ---If `OSC 7` was never sent to a pane, 77 | ---and the pane represents a locally spawned process, 78 | ---then wezterm will: 79 | --- 80 | --- - On UNIX systems: determie the process group leader attached to the PTY 81 | --- - On Windows systems: use heuristics to infer an equivalent to the foreground process 82 | --- 83 | ---With the process identified, wezterm will then try to determine 84 | ---the current working directory using operating system dependent code. 85 | --- 86 | ---If the current working directory is not known then 87 | ---this method returns `nil`. 88 | ---Otherwise, it returns the current working directory 89 | ---as a `URL` string. 90 | --- 91 | ---Note that while the current working directory 92 | ---is usually a file path, it is possible for an application 93 | ---to set it to an FTP URL or some other kind of URL, 94 | ---which is why this method doesn't simply return a file path string 95 | --- 96 | ---@param self Pane 97 | ---@return Url|nil cwd 98 | function M:get_current_working_dir() end 99 | 100 | ---Returns a Lua representation of the `StableCursorPosition` struct 101 | ---that identifies the cursor's position, visibility and shape. 102 | --- 103 | ---@param self Pane 104 | ---@return StableCursorPosition position 105 | function M:get_cursor_position() end 106 | 107 | ---Returns a Lua representation of the `RenderableDimensions` struct 108 | ---that identifies the dimensions and position of the viewport 109 | ---as well as the scrollback for the pane. 110 | --- 111 | ---@param self Pane 112 | ---@return RenderableDimensions dimensions 113 | function M:get_dimensions() end 114 | 115 | ---Returns the name of the domain with which the pane instance 116 | ---is associated to. 117 | --- 118 | ---@param self Pane 119 | ---@return string domain_name 120 | function M:get_domain_name() end 121 | 122 | ---Returns a `LocalProcessInfo` object corresponding 123 | ---to the current foreground process that is running in the pane. 124 | --- 125 | ---This method has some restrictions and caveats: 126 | --- 127 | --- - This information is only available for local panes. 128 | --- Multiplexer panes do not report this information. 129 | --- Similarly, if you are using eg: ssh to connect to a remote host, 130 | --- you won't be able to access the name of the remote process 131 | --- that is running 132 | --- - On UNIX systems, the process group leader 133 | --- (the foreground process) will be queried, 134 | --- but that concept doesn't exist on Windows, so instead, 135 | --- the process tree of the originally spawned program is examined, 136 | --- and the most recently spawned descendant is assumed to be 137 | --- the foreground process 138 | --- - On Linux, macOS and Windows, the process can be queried 139 | --- to determine this path. 140 | --- Other operating systems (notably, FreeBSD and other UNIX systems) 141 | --- are not currently supported 142 | --- - Querying the path may fail for a variety of reasons outside of the control of WezTerm 143 | --- - Querying process information has some runtime overhead, 144 | --- which may cause wezterm to slow down if over-used 145 | --- 146 | ---If the process cannot be determined then this method returns `nil`. 147 | --- 148 | ---@param self Pane 149 | ---@return LocalProcessInfo|nil proc_info 150 | function M:get_foreground_process_info() end 151 | 152 | ---Returns the path to the executable image for the pane. 153 | --- 154 | ---This method has some restrictions and caveats: 155 | --- 156 | --- - This information is only available for local panes. 157 | --- Multiplexer panes do not report this information. 158 | --- Similarly, if you are using e.g. `ssh` to connect to a remote host, 159 | --- you won't be able to access the name of 160 | --- the remote process that is running 161 | --- - On UNIX systems, the process group leader (the foreground process) 162 | --- will be queried, but that concept doesn't exist on Windows, so instead, 163 | --- the process tree of the originally spawned program is examined, 164 | --- and the most recently spawned descendant is assumed to be 165 | --- the foreground process 166 | --- - On Linux, macOS and Windows, the process can be queried to determine this path. 167 | --- Other operating systems (notably, FreeBSD and other UNIX systems) 168 | --- are not currently supported 169 | --- - Querying the path may fail for a variety of reasons outside of 170 | --- the control of WezTerm 171 | --- - Querying process information has some runtime overhead, 172 | --- which may cause wezterm to slow down if over-used 173 | --- 174 | ---If the path is not known then this method returns `nil`. 175 | --- 176 | ---@param self Pane 177 | ---@return string|nil name 178 | function M:get_foreground_process_name() end 179 | 180 | ---Returns the textual representation 181 | ---(including color and other attributes) 182 | ---of the physical lines of text in the viewport 183 | ---as a string with embedded ANSI escape sequences 184 | ---to preserve the color and style of the text. 185 | --- 186 | ---A physical line is a possibly-wrapped line that composes a row 187 | ---in the terminal display matrix. 188 | --- 189 | ---If the optional `nlines` argument is specified then 190 | ---it is used to determine how many lines of text 191 | ---should be retrieved. 192 | ---The default (if `nlines` is not specified) is 193 | ---to retrieve the number of lines in the viewport 194 | ---(the height of the pane). 195 | --- 196 | ---To obtain the entire scrollback, you can do something like this: 197 | --- 198 | ---```lua 199 | ---pane:get_lines_as_escapes(pane:get_dimensions().scrollback_rows) 200 | ---``` 201 | --- 202 | ---@param self Pane 203 | ---@param nlines? integer 204 | ---@return string output 205 | function M:get_lines_as_escapes(nlines) end 206 | 207 | ---Returns the textual representation 208 | ---(not including color or other attributes) 209 | ---of the physical lines of text in the viewport as a string. 210 | --- 211 | ---A physical line is a possibly-wrapped line that composes a row 212 | ---in the terminal display matrix. 213 | ---If you'd rather operate on logical lines, 214 | ---see `pane:get_logical_lines_as_text()`. 215 | --- 216 | ---If the optional `nlines` argument is specified 217 | ---then it is used to determine how many lines of text 218 | ---should be retrieved. 219 | ---The default (if `nlines` is not specified) is 220 | ---to retrieve the number of lines in the viewport 221 | ---(the height of the pane). 222 | --- 223 | ---The lines have trailing space removed from each line. 224 | ---They will be joined together in the returned string 225 | ---separated by a `\n` character. 226 | ---Trailing blank lines are stripped, which may result in 227 | ---fewer lines being returned 228 | ---than you might expect if the pane only had 229 | ---a couple of lines of output. 230 | --- 231 | ---@param self Pane 232 | ---@param nlines? integer 233 | ---@return string text 234 | function M:get_lines_as_text(nlines) end 235 | 236 | ---Returns the textual representation (not including color or other attributes) 237 | ---of the logical lines of text in the viewport as a string. 238 | --- 239 | ---A logical line is an original input line prior to being wrapped into physical lines 240 | ---to composes rows in the terminal display matrix. 241 | ---WezTerm doesn't store logical lines, but can recompute them from metadata stored 242 | ---in physical lines. 243 | ---Excessively long logical lines are force-wrapped to constrain the cost of rewrapping 244 | ---on resize and selection operations. 245 | --- 246 | ---If you'd rather operate on physical lines, see `pane:get_lines_as_text()`. 247 | --- 248 | ---If the optional `nlines` argument is specified then it is used to determine 249 | ---how many lines of text should be retrieved. 250 | ---The default (if `nlines` is not specified) is to retrieve the number of lines 251 | ---in the viewport (the height of the pane). 252 | --- 253 | ---The lines have trailing space removed from each line. 254 | ---They will be joined together in the returned string separated by a `\n` character. 255 | ---Trailing blank lines are stripped, which may result in fewer lines being returned 256 | ---than you might expect if the pane only had a couple of lines of output. 257 | --- 258 | ---To obtain the entire scrollback, you can do something like this: 259 | --- 260 | ---```lua 261 | ---pane:get_logical_lines_as_text(pane:get_dimensions().scrollback_rows) 262 | ---``` 263 | --- 264 | ---@param self Pane 265 | ---@param nlines? integer 266 | ---@return string text 267 | function M:get_logical_lines_as_text(nlines) end 268 | 269 | ---Returns metadata about a pane. 270 | --- 271 | ---The return value depends on the instance of the underlying pane. 272 | ---If the pane doesn't support this method, `nil` will be returned. 273 | ---Otherwise, the value is a Lua table with the metadata 274 | ---contained in table fields. 275 | --- 276 | ---To consume this value, it is recommend to use logic like this 277 | ---to obtain a table value even if the pane doesn't 278 | ---support this method: 279 | --- 280 | ---```lua 281 | ---local meta = pane:get_metadata() or {} 282 | ---``` 283 | --- 284 | ---@param self Pane 285 | ---@return PaneMetadata|nil metadata 286 | function M:get_metadata() end 287 | 288 | ---Returns the progress state associated with the pane. 289 | --- 290 | ---By default, when the terminal is reset, the progress state 291 | ---will be `"None"` to indicate that 292 | ---no progress has been reported. 293 | --- 294 | ---@param self Pane 295 | ---@return string|"None" progress 296 | function M:get_progress() end 297 | 298 | ---Resolves the semantic zone that encapsulates 299 | ---the supplied `x` and `y` coordinates. 300 | --- 301 | ---`x` is the cell column index, where `0` is the left-most column 302 | ---`y` is the stable row index 303 | --- 304 | ---Use `pane:get_dimensions()` to retrieve the 305 | ---currently valid stable index values 306 | ---for the top of scrollback and top of viewport. 307 | --- 308 | ---@param self Pane 309 | ---@param x integer 310 | ---@param y integer 311 | ---@return table zone 312 | function M:get_semantic_zone_at(x, y) end 313 | 314 | ---When `zone_type` is omitted, returns the list of 315 | ---all semantic zones defined in the pane. 316 | --- 317 | ---When `zone_type` is supplied, returns the list of 318 | ---all semantic zones of the matching type. 319 | --- 320 | ---Valid values for `zone_type` are: 321 | --- 322 | --- - `"Input"` 323 | --- - `"Output"` 324 | --- - `"Prompt"` 325 | --- 326 | ---@param self Pane 327 | ---@param zone_type? "Input"|"Output"|"Prompt" 328 | ---@return table zones 329 | function M:get_semantic_zones(zone_type) end 330 | 331 | ---Returns the text from the specified region. 332 | --- 333 | --- - `start_x` and `end_x` are the starting and ending cell column, 334 | --- where `0` is the left-most cell 335 | --- - `start_y` and `end_y` are the starting and ending row, 336 | --- expressed as a stable row index 337 | --- 338 | ---Use `pane:get_dimensions()` to retrieve the currently valid 339 | ---stable index values for the top of scrollback and top of viewport 340 | --- 341 | ---The text within the region is unwrapped to its logical 342 | ---line representation, rather than the 343 | ---_wrapped-to-physical-display-width_. 344 | --- 345 | ---@param self Pane 346 | ---@param start_x integer 347 | ---@param start_y integer 348 | ---@param end_x integer 349 | ---@param end_y integer 350 | ---@return string text 351 | function M:get_text_from_region(start_x, start_y, end_x, end_y) end 352 | 353 | ---This is a convenience method that calls 354 | ---`Pane:get_text_from_region()` on the supplied zone parameter. 355 | --- 356 | ---Use `Pane:get_semantic_zone_at()` or `Pane:get_semantic_zones()` 357 | ---to obtain a zone. 358 | --- 359 | ---@param self Pane 360 | ---@param zone table 361 | ---@return any text 362 | function M:get_text_from_semantic_zone(zone) end 363 | 364 | ---Returns the title of the pane. 365 | --- 366 | ---This will typically be wezterm by default but 367 | ---can be modified by applications that send `OSC 1` 368 | ---(Icon/Tab title changing) and/or `OSC 2` (Window title changing) 369 | ---escape sequences. 370 | --- 371 | ---The value returned by this method is the same as that used to 372 | ---display the tab title if this pane were the only pane in the tab; 373 | ---if `OSC 1` was used to set a non-empty string then 374 | ---that string will be returned. 375 | ---Otherwise the value for `OSC 2` will be returned. 376 | --- 377 | ---Note that on Windows the default behavior of the OS level PTY 378 | ---is to implicitly send `OSC 2` sequences to the terminal 379 | ---as new programs attach to the console. 380 | --- 381 | ---If the title text is `"wezterm"` and the pane is a local pane, 382 | ---then wezterm will attempt to resolve the executable path 383 | ---of the foreground process that is associated with the pane 384 | ---and will use that instead of `wezterm`. 385 | --- 386 | ---@param self Pane 387 | ---@return string title 388 | function M:get_title() end 389 | 390 | ---Returns the tty device name, or `nil` if the name is unavailable. 391 | --- 392 | --- - This information is only available for local panes. 393 | --- Multiplexer panes do not report this information. 394 | --- Similarly, if you are using e.g. `ssh` to connect to a remote host, 395 | --- you won't be able to access the name of the remote process 396 | --- that is running 397 | --- - This information is only available on UNIX systems. 398 | --- Windows systems do not have an equivalent concept 399 | --- 400 | ---@param self Pane 401 | ---@return string|nil name 402 | function M:get_tty_name() end 403 | 404 | ---Returns a table holding the user variables that have been 405 | ---assigned to this `Pane` instance. 406 | --- 407 | ---User variables are set using an escape sequence defined by `iterm2`, 408 | ---but also recognized by wezterm. 409 | --- 410 | ---@param self Pane 411 | ---@return table<string, string> env 412 | function M:get_user_vars() end 413 | 414 | ---Returns `true` if there has been output in the pane 415 | ---since the last time the pane was focused. 416 | --- 417 | ---See also `PaneInformation.has_unseen_output` for an example 418 | ---using equivalent information to color tabs based on this state. 419 | --- 420 | ---@param self Pane 421 | ---@return boolean unseen 422 | function M:has_unseen_output() end 423 | 424 | ---Sends text, which may include escape sequences, 425 | ---to the output side of the current pane. 426 | --- 427 | ---The text will be evaluated by the terminal emulator 428 | ---and can thus be used to inject/force the terminal 429 | ---to process escape sequences that adjust the current mode, 430 | ---as well as sending human readable output to the terminal. 431 | --- 432 | ---Note that if you move the cursor position as a result 433 | ---of using this method, you should expect the display to change 434 | ---and for text UI programs to get confused. 435 | --- 436 | ---@param self Pane 437 | ---@param text string 438 | function M:inject_output(text) end 439 | 440 | ---Returns whether the alternate screen is active for the pane. 441 | --- 442 | ---The alternate screen is a secondary screen that is activated 443 | ---by certain escape codes. 444 | ---It has no scrollback, which makes it ideal for a "full-screen" 445 | ---terminal program (e.g. `vim` or `less`) to do whatever they want 446 | ---on the screen without fear of destroying the user's scrollback. 447 | ---Those programs emit escape codes to return to the normal screen 448 | ---when they exit. 449 | --- 450 | ---@param self Pane 451 | ---@return boolean active 452 | function M:is_alt_screen_active() end 453 | 454 | ---Creates a new tab in the window that contains a pane, 455 | ---and moves the current pane into that tab. 456 | --- 457 | ---Returns a tuple of the newly created: 458 | --- 1. [`MuxTab`](lua://MuxTab) 459 | --- 2. [`MuxWindow`](MuxWindow) 460 | --- 461 | ---@param self Pane 462 | ---@return MuxTab tab 463 | ---@return MuxWindow window 464 | function M:move_to_new_tab() end 465 | 466 | ---Creates a window and moves pane into that window. 467 | --- 468 | ---The `workspace` parameter is optional; 469 | ---if specified, it will be used as the name of the workspace 470 | ---that should be associated with the new window. 471 | ---Otherwise, the current active workspace will be used. 472 | --- 473 | ---Returns a tuple of the newly created: 474 | --- 1. [`MuxTab`](lua://MuxTab) 475 | --- 2. [`MuxWindow`](MuxWindow) 476 | --- 477 | ---@param self Pane 478 | ---@param workspace? string 479 | ---@return MuxTab tab 480 | ---@return MuxWindow window 481 | function M:move_to_new_window(workspace) end 482 | 483 | ---Returns the id number for the pane. 484 | --- 485 | ---The Id is used to identify the pane within the internal multiplexer 486 | ---and can be used when making API calls via wezterm CLI 487 | ---to indicate the subject of manipulation. 488 | --- 489 | ---@param self Pane 490 | ---@return integer id 491 | function M:pane_id() end 492 | 493 | ---Alias of `Pane:send_paste()` for backwards 494 | ---compatibility with prior releases. 495 | --- 496 | ---@param self Pane 497 | ---@param text string 498 | function M:paste(text) end 499 | 500 | ---Sends the supplied text string to the input of the pane 501 | ---as if it were pasted from the clipboard, 502 | ---except that the clipboard is not involved. 503 | --- 504 | ---Newlines are rewritten according to: 505 | --- - [`config.canonicalize_pasted_newlines`](lua://Config.canonicalize_pasted_newlines) 506 | --- 507 | ---If the terminal attached to the pane is set to bracketed paste mode 508 | ---then the text will be sent as a bracketed paste, 509 | ---and newlines will not be rewritten. 510 | --- 511 | ---@param self Pane 512 | ---@param text string 513 | function M:send_paste(text) end 514 | 515 | ---Sends text to the pane as-is. 516 | --- 517 | ---@param self Pane 518 | ---@param text string 519 | function M:send_text(text) end 520 | 521 | ---Splits the `Pane` instance and spawns a program into said split, 522 | ---returning the `Pane` object associated with it. 523 | --- 524 | ---When no arguments are passed, the pane is split in half left/right 525 | ---and the right half has the default program spawned into it. 526 | --- 527 | ---For available args, see: 528 | --- - [`SpawnSplit`](lua://SpawnSplit) 529 | --- 530 | ---@param self Pane 531 | ---@param args? SpawnSplit 532 | ---@return Pane split_pane 533 | function M:split(args) end 534 | 535 | ---Returns the `MuxTab` that contains this pane. 536 | --- 537 | ---Note that this method can return `nil` when the pane is 538 | ---a GUI-managed overlay pane (such as the debug overlay), 539 | ---because those panes are not managed by the mux layer. 540 | --- 541 | ---@param self Pane 542 | ---@return MuxTab? tab 543 | function M:tab() end 544 | 545 | ---Returns 546 | ---the [`MuxWindow`](lua://MuxWindow) 547 | ---that contains the tab this pane is in. 548 | --- 549 | ---@param self Pane 550 | ---@return MuxWindow window 551 | function M:window() end 552 | 553 | -- vim:ts=4:sts=4:sw=4:et:ai:si:sta: 554 | -------------------------------------------------------------------------------- /lua/wezterm/types/colorschemes.lua: -------------------------------------------------------------------------------- 1 | ---@meta 2 | 3 | ---@alias Colorschemes 4 | ---|"3024 (base16)" 5 | ---|"3024 (dark) (terminal.sexy)" 6 | ---|"3024 (light) (terminal.sexy)" 7 | ---|"3024 Day (Gogh)" 8 | ---|"3024 Day" 9 | ---|"3024 Night (Gogh)" 10 | ---|"3024 Night" 11 | ---|"Aardvark Blue" 12 | ---|"Abernathy" 13 | ---|"Aci (Gogh)" 14 | ---|"Aco (Gogh)" 15 | ---|"Adventure Time (Gogh)" 16 | ---|"Adventure" 17 | ---|"AdventureTime" 18 | ---|"Afterglow (Gogh)" 19 | ---|"Afterglow" 20 | ---|"Alabaster" 21 | ---|"Alien Blood (Gogh)" 22 | ---|"AlienBlood" 23 | ---|"Andromeda" 24 | ---|"Apathy (base16)" 25 | ---|"Apple Classic" 26 | ---|"Apple System Colors" 27 | ---|"Apprentice (Gogh)" 28 | ---|"Apprentice (base16)" 29 | ---|"Argonaut (Gogh)" 30 | ---|"Argonaut" 31 | ---|"Arthur (Gogh)" 32 | ---|"Arthur" 33 | ---|"Ashes (base16)" 34 | ---|"Ashes (dark) (terminal.sexy)" 35 | ---|"Ashes (light) (terminal.sexy)" 36 | ---|"Astrodark (Gogh)" 37 | ---|"Atelier Cave (base16)" 38 | ---|"Atelier Cave Light (base16)" 39 | ---|"Atelier Dune (base16)" 40 | ---|"Atelier Dune Light (base16)" 41 | ---|"Atelier Estuary (base16)" 42 | ---|"Atelier Estuary Light (base16)" 43 | ---|"Atelier Forest (base16)" 44 | ---|"Atelier Forest Light (base16)" 45 | ---|"Atelier Heath (base16)" 46 | ---|"Atelier Heath Light (base16)" 47 | ---|"Atelier Lakeside (base16)" 48 | ---|"Atelier Lakeside Light (base16)" 49 | ---|"Atelier Plateau (base16)" 50 | ---|"Atelier Plateau Light (base16)" 51 | ---|"Atelier Savanna (base16)" 52 | ---|"Atelier Savanna Light (base16)" 53 | ---|"Atelier Seaside (base16)" 54 | ---|"Atelier Seaside Light (base16)" 55 | ---|"Atelier Sulphurpool (base16)" 56 | ---|"Atelier Sulphurpool Light (base16)" 57 | ---|"AtelierSulphurpool" 58 | ---|"Atelierdune (dark) (terminal.sexy)" 59 | ---|"Atelierdune (light) (terminal.sexy)" 60 | ---|"Atelierforest (dark) (terminal.sexy)" 61 | ---|"Atelierforest (light) (terminal.sexy)" 62 | ---|"Atelierheath (dark) (terminal.sexy)" 63 | ---|"Atelierheath (light) (terminal.sexy)" 64 | ---|"Atelierlakeside (dark) (terminal.sexy)" 65 | ---|"Atelierlakeside (light) (terminal.sexy)" 66 | ---|"Atelierseaside (dark) (terminal.sexy)" 67 | ---|"Atelierseaside (light) (terminal.sexy)" 68 | ---|"Atlas (base16)" 69 | ---|"Atom (Gogh)" 70 | ---|"Atom" 71 | ---|"AtomOneLight" 72 | ---|"Aura (Gogh)" 73 | ---|"Aurora" 74 | ---|"Ayu Dark (Gogh)" 75 | ---|"Ayu Light (Gogh)" 76 | ---|"Ayu Mirage (Gogh)" 77 | ---|"Ayu Mirage" 78 | ---|"Azu (Gogh)" 79 | ---|"Bamboo Light" 80 | ---|"Bamboo Multiplex" 81 | ---|"Bamboo" 82 | ---|"Banana Blueberry" 83 | ---|"Batman" 84 | ---|"Belafonte Day (Gogh)" 85 | ---|"Belafonte Day" 86 | ---|"Belafonte Night (Gogh)" 87 | ---|"Belafonte Night" 88 | ---|"Belge (terminal.sexy)" 89 | ---|"Bespin (base16)" 90 | ---|"Bespin (dark) (terminal.sexy)" 91 | ---|"Bespin (light) (terminal.sexy)" 92 | ---|"Bim (Gogh)" 93 | ---|"Birds Of Paradise (Gogh)" 94 | ---|"BirdsOfParadise" 95 | ---|"Bitmute (terminal.sexy)" 96 | ---|"Black Metal (Bathory) (base16)" 97 | ---|"Black Metal (Burzum) (base16)" 98 | ---|"Black Metal (Dark Funeral) (base16)" 99 | ---|"Black Metal (Gorgoroth) (base16)" 100 | ---|"Black Metal (Immortal) (base16)" 101 | ---|"Black Metal (Khold) (base16)" 102 | ---|"Black Metal (Marduk) (base16)" 103 | ---|"Black Metal (Mayhem) (base16)" 104 | ---|"Black Metal (Nile) (base16)" 105 | ---|"Black Metal (Venom) (base16)" 106 | ---|"Black Metal (base16)" 107 | ---|"Blazer (Gogh)" 108 | ---|"Blazer" 109 | ---|"Bleh-1 (terminal.sexy)" 110 | ---|"Blue Dolphin (Gogh)" 111 | ---|"Blue Matrix" 112 | ---|"BlueBerryPie" 113 | ---|"BlueDolphin" 114 | ---|"Bluloco Light (Gogh)" 115 | ---|"Bluloco Zsh Light (Gogh)" 116 | ---|"BlulocoDark" 117 | ---|"BlulocoLight" 118 | ---|"Borland (Gogh)" 119 | ---|"Borland" 120 | ---|"Breadog (Gogh)" 121 | ---|"Breath (Gogh)" 122 | ---|"Breath Darker (Gogh)" 123 | ---|"Breath Light (Gogh)" 124 | ---|"Breath Silverfox (Gogh)" 125 | ---|"Breeze (Gogh)" 126 | ---|"Breeze" 127 | ---|"Brewer (base16)" 128 | ---|"Brewer (dark) (terminal.sexy)" 129 | ---|"Brewer (light) (terminal.sexy)" 130 | ---|"Bright (base16)" 131 | ---|"Bright Lights" 132 | ---|"Broadcast (Gogh)" 133 | ---|"Broadcast" 134 | ---|"Brogrammer (Gogh)" 135 | ---|"Brogrammer (base16)" 136 | ---|"Brogrammer" 137 | ---|"Brush Trees (base16)" 138 | ---|"Brush Trees Dark (base16)" 139 | ---|"Builtin Dark" 140 | ---|"Builtin Light" 141 | ---|"Builtin Pastel Dark" 142 | ---|"Builtin Solarized Dark" 143 | ---|"Builtin Solarized Light" 144 | ---|"Builtin Tango Dark" 145 | ---|"Builtin Tango Light" 146 | ---|"Butrin (Gogh)" 147 | ---|"C64 (Gogh)" 148 | ---|"C64" 149 | ---|"CGA" 150 | ---|"CLRS" 151 | ---|"Cai (Gogh)" 152 | ---|"Calamity" 153 | ---|"Campbell (Gogh)" 154 | ---|"Canvased Pastel (terminal.sexy)" 155 | ---|"Catch Me If You Can (terminal.sexy)" 156 | ---|"Catppuccin Frappe" 157 | ---|"Catppuccin Frappé (Gogh)" 158 | ---|"Catppuccin Latte (Gogh)" 159 | ---|"Catppuccin Latte" 160 | ---|"Catppuccin Macchiato (Gogh)" 161 | ---|"Catppuccin Macchiato" 162 | ---|"Catppuccin Mocha (Gogh)" 163 | ---|"Catppuccin Mocha" 164 | ---|"Chalk (Gogh)" 165 | ---|"Chalk (base16)" 166 | ---|"Chalk (dark) (terminal.sexy)" 167 | ---|"Chalk (light) (terminal.sexy)" 168 | ---|"Chalk" 169 | ---|"Chalkboard (Gogh)" 170 | ---|"Chalkboard" 171 | ---|"ChallengerDeep" 172 | ---|"Chameleon (Gogh)" 173 | ---|"Chester" 174 | ---|"Ciapre (Gogh)" 175 | ---|"Ciapre" 176 | ---|"Circus (base16)" 177 | ---|"City Lights (Gogh)" 178 | ---|"City Streets (terminal.sexy)" 179 | ---|"Classic Dark (base16)" 180 | ---|"Classic Light (base16)" 181 | ---|"Clone Of Ubuntu (Gogh)" 182 | ---|"Cloud (terminal.sexy)" 183 | ---|"Clrs (Gogh)" 184 | ---|"Cobalt 2 (Gogh)" 185 | ---|"Cobalt Neon (Gogh)" 186 | ---|"Cobalt Neon" 187 | ---|"Cobalt2" 188 | ---|"Codeschool (base16)" 189 | ---|"Codeschool (dark) (terminal.sexy)" 190 | ---|"Codeschool (light) (terminal.sexy)" 191 | ---|"Color Star (terminal.sexy)" 192 | ---|"Colorcli (Gogh)" 193 | ---|"Colorful Colors (terminal.sexy)" 194 | ---|"Colors (base16)" 195 | ---|"Count Von Count (terminal.sexy)" 196 | ---|"Crayon Pony Fish (Gogh)" 197 | ---|"CrayonPonyFish" 198 | ---|"Cupcake (base16)" 199 | ---|"Cupertino (base16)" 200 | ---|"CutiePro" 201 | ---|"Cyberdyne" 202 | ---|"DWM rob (terminal.sexy)" 203 | ---|"DanQing (base16)" 204 | ---|"DanQing Light (base16)" 205 | ---|"Darcula (base16)" 206 | ---|"Dark Ocean (terminal.sexy)" 207 | ---|"Dark Pastel (Gogh)" 208 | ---|"Dark Pastel" 209 | ---|"Dark Violet (base16)" 210 | ---|"Dark+" 211 | ---|"Darkside (Gogh)" 212 | ---|"Darkside" 213 | ---|"Darktooth (base16)" 214 | ---|"Dawn (terminal.sexy)" 215 | ---|"Deafened (terminal.sexy)" 216 | ---|"Decaf (base16)" 217 | ---|"Default (dark) (terminal.sexy)" 218 | ---|"Default (light) (terminal.sexy)" 219 | ---|"Default Dark (base16)" 220 | ---|"Default Light (base16)" 221 | ---|"Dehydration (Gogh)" 222 | ---|"Derp (terminal.sexy)" 223 | ---|"Desert (Gogh)" 224 | ---|"Desert" 225 | ---|"Digerati (terminal.sexy)" 226 | ---|"Dimmed Monokai (Gogh)" 227 | ---|"DimmedMonokai" 228 | ---|"Dissonance (Gogh)" 229 | ---|"Django" 230 | ---|"DjangoRebornAgain" 231 | ---|"DjangoSmooth" 232 | ---|"Doom Peacock" 233 | ---|"DoomOne" 234 | ---|"DotGov" 235 | ---|"Dotshare (terminal.sexy)" 236 | ---|"Dracula (Gogh)" 237 | ---|"Dracula (Official)" 238 | ---|"Dracula (base16)" 239 | ---|"Dracula" 240 | ---|"Dracula+" 241 | ---|"Duotone Dark" 242 | ---|"ENCOM" 243 | ---|"Earthsong (Gogh)" 244 | ---|"Earthsong" 245 | ---|"Edge Dark (base16)" 246 | ---|"Edge Light (base16)" 247 | ---|"Ef-Arbutus" 248 | ---|"Ef-Autumn" 249 | ---|"Ef-Bio" 250 | ---|"Ef-Cherie" 251 | ---|"Ef-Cyprus" 252 | ---|"Ef-Dark" 253 | ---|"Ef-Day" 254 | ---|"Ef-Deuteranopia-Dark" 255 | ---|"Ef-Deuteranopia-Light" 256 | ---|"Ef-Dream" 257 | ---|"Ef-Duo-Dark" 258 | ---|"Ef-Duo-Light" 259 | ---|"Ef-Elea-Dark" 260 | ---|"Ef-Elea-Light" 261 | ---|"Ef-Frost" 262 | ---|"Ef-Kassio" 263 | ---|"Ef-Light" 264 | ---|"Ef-Maris-Dark" 265 | ---|"Ef-Maris-Light" 266 | ---|"Ef-Melissa-Dark" 267 | ---|"Ef-Melissa-Light" 268 | ---|"Ef-Night" 269 | ---|"Ef-Reverie" 270 | ---|"Ef-Rosa" 271 | ---|"Ef-Spring" 272 | ---|"Ef-Summer" 273 | ---|"Ef-Symbiosis" 274 | ---|"Ef-Trio-Dark" 275 | ---|"Ef-Trio-Light" 276 | ---|"Ef-Tritanopia-Dark" 277 | ---|"Ef-Tritanopia-Light" 278 | ---|"Ef-Winter" 279 | ---|"Eighties (base16)" 280 | ---|"Eighties (dark) (terminal.sexy)" 281 | ---|"Eighties (light) (terminal.sexy)" 282 | ---|"Eldorado dark (terminal.sexy)" 283 | ---|"Eldritch" 284 | ---|"Elemental (Gogh)" 285 | ---|"Elemental" 286 | ---|"Elementary (Gogh)" 287 | ---|"Elementary" 288 | ---|"Elic (Gogh)" 289 | ---|"Elio (Gogh)" 290 | ---|"Embers (base16)" 291 | ---|"Embers (dark) (terminal.sexy)" 292 | ---|"Embers (light) (terminal.sexy)" 293 | ---|"Epiphany (terminal.sexy)" 294 | ---|"Eqie6 (terminal.sexy)" 295 | ---|"Equilibrium Dark (base16)" 296 | ---|"Equilibrium Gray Dark (base16)" 297 | ---|"Equilibrium Gray Light (base16)" 298 | ---|"Equilibrium Light (base16)" 299 | ---|"Erebus (terminal.sexy)" 300 | ---|"Espresso (Gogh)" 301 | ---|"Espresso (base16)" 302 | ---|"Espresso Libre (Gogh)" 303 | ---|"Espresso Libre" 304 | ---|"Espresso" 305 | ---|"Euphrasia (terminal.sexy)" 306 | ---|"Eva (base16)" 307 | ---|"Eva Dim (base16)" 308 | ---|"Everblush (Gogh)" 309 | ---|"Everblush" 310 | ---|"Everforest Dark (Gogh)" 311 | ---|"Everforest Dark Hard (Gogh)" 312 | ---|"Everforest Dark Medium (Gogh)" 313 | ---|"Everforest Dark Soft (Gogh)" 314 | ---|"Everforest Light (Gogh)" 315 | ---|"Everforest Light Hard (Gogh)" 316 | ---|"Everforest Light Medium (Gogh)" 317 | ---|"Everforest Light Soft (Gogh)" 318 | ---|"Fahrenheit" 319 | ---|"Fairy Floss (Gogh)" 320 | ---|"Fairy Floss Dark (Gogh)" 321 | ---|"Fairyfloss" 322 | ---|"FarSide (terminal.sexy)" 323 | ---|"Fideloper" 324 | ---|"Firefly Traditional" 325 | ---|"FirefoxDev" 326 | ---|"Firewatch" 327 | ---|"FishTank" 328 | ---|"Fishbone (terminal.sexy)" 329 | ---|"Fishtank (Gogh)" 330 | ---|"Flat (Gogh)" 331 | ---|"Flat (base16)" 332 | ---|"Flat Remix (Gogh)" 333 | ---|"Flat" 334 | ---|"Flatland (Gogh)" 335 | ---|"Flatland" 336 | ---|"Floraverse" 337 | ---|"ForestBlue" 338 | ---|"Foxnightly (Gogh)" 339 | ---|"Framer (base16)" 340 | ---|"Framer" 341 | ---|"Freya (Gogh)" 342 | ---|"FrontEndDelight" 343 | ---|"Frontend Delight (Gogh)" 344 | ---|"Frontend Fun Forrest (Gogh)" 345 | ---|"Frontend Galaxy (Gogh)" 346 | ---|"Fruit Soda (base16)" 347 | ---|"FunForrest" 348 | ---|"GJM (terminal.sexy)" 349 | ---|"Galaxy" 350 | ---|"Galizur" 351 | ---|"Geohot (Gogh)" 352 | ---|"Gigavolt (base16)" 353 | ---|"GitHub Dark" 354 | ---|"Github (Gogh)" 355 | ---|"Github (base16)" 356 | ---|"Github Dark (Gogh)" 357 | ---|"Github Light (Gogh)" 358 | ---|"Github" 359 | ---|"Glacier" 360 | ---|"Gnometerm (terminal.sexy)" 361 | ---|"Gogh (Gogh)" 362 | ---|"Gooey (Gogh)" 363 | ---|"Google (dark) (terminal.sexy)" 364 | ---|"Google (light) (terminal.sexy)" 365 | ---|"Google Dark (Gogh)" 366 | ---|"Google Dark (base16)" 367 | ---|"Google Light (Gogh)" 368 | ---|"Google Light (base16)" 369 | ---|"Gotham (Gogh)" 370 | ---|"Gotham (terminal.sexy)" 371 | ---|"Grandshell (terminal.sexy)" 372 | ---|"Grape (Gogh)" 373 | ---|"Grape" 374 | ---|"Grass (Gogh)" 375 | ---|"Grass" 376 | ---|"Grayscale (dark) (terminal.sexy)" 377 | ---|"Grayscale (light) (terminal.sexy)" 378 | ---|"Grayscale Dark (base16)" 379 | ---|"Grayscale Light (base16)" 380 | ---|"Green Screen (base16)" 381 | ---|"Greenscreen (dark) (terminal.sexy)" 382 | ---|"Greenscreen (light) (terminal.sexy)" 383 | ---|"Grey-green" 384 | ---|"Gruber (base16)" 385 | ---|"Gruvbox (Gogh)" 386 | ---|"Gruvbox Dark (Gogh)" 387 | ---|"Gruvbox Material (Gogh)" 388 | ---|"Gruvbox dark, hard (base16)" 389 | ---|"Gruvbox dark, medium (base16)" 390 | ---|"Gruvbox dark, pale (base16)" 391 | ---|"Gruvbox dark, soft (base16)" 392 | ---|"Gruvbox light, hard (base16)" 393 | ---|"Gruvbox light, medium (base16)" 394 | ---|"Gruvbox light, soft (base16)" 395 | ---|"GruvboxDark" 396 | ---|"GruvboxDarkHard" 397 | ---|"GruvboxLight" 398 | ---|"Guezwhoz" 399 | ---|"HaX0R_BLUE" 400 | ---|"HaX0R_GR33N" 401 | ---|"HaX0R_R3D" 402 | ---|"Hacktober" 403 | ---|"Hardcore (Gogh)" 404 | ---|"Hardcore (base16)" 405 | ---|"Hardcore" 406 | ---|"Harmonic16 Dark (base16)" 407 | ---|"Harmonic16 Light (base16)" 408 | ---|"Harper (Gogh)" 409 | ---|"Harper" 410 | ---|"Heetch Dark (base16)" 411 | ---|"Heetch Light (base16)" 412 | ---|"Helios (base16)" 413 | ---|"Hemisu Dark (Gogh)" 414 | ---|"Hemisu Light (Gogh)" 415 | ---|"Highway (Gogh)" 416 | ---|"Highway" 417 | ---|"Hipster Green (Gogh)" 418 | ---|"Hipster Green" 419 | ---|"Hivacruz" 420 | ---|"Homebrew (Gogh)" 421 | ---|"Homebrew Light (Gogh)" 422 | ---|"Homebrew Ocean (Gogh)" 423 | ---|"Homebrew" 424 | ---|"Hopscotch (base16)" 425 | ---|"Hopscotch" 426 | ---|"Hopscotch.256" 427 | ---|"Horizon Bright (Gogh)" 428 | ---|"Horizon Dark (Gogh)" 429 | ---|"Horizon Dark (base16)" 430 | ---|"Horizon Light (base16)" 431 | ---|"Humanoid dark (base16)" 432 | ---|"Humanoid light (base16)" 433 | ---|"Hurtado (Gogh)" 434 | ---|"Hurtado" 435 | ---|"Hybrid (Gogh)" 436 | ---|"Hybrid (terminal.sexy)" 437 | ---|"Hybrid" 438 | ---|"IC_Green_PPL" 439 | ---|"IC_Orange_PPL" 440 | ---|"IR Black (base16)" 441 | ---|"IR_Black" 442 | ---|"Ibm 3270 (High Contrast) (Gogh)" 443 | ---|"Ibm3270 (Gogh)" 444 | ---|"Ic Green Ppl (Gogh)" 445 | ---|"Ic Orange Ppl (Gogh)" 446 | ---|"Iceberg (Gogh)" 447 | ---|"Icy Dark (base16)" 448 | ---|"Idle Toes (Gogh)" 449 | ---|"Iiamblack (terminal.sexy)" 450 | ---|"Insignificato (terminal.sexy)" 451 | ---|"Invisibone (terminal.sexy)" 452 | ---|"Ir Black (Gogh)" 453 | ---|"Isotope (base16)" 454 | ---|"Isotope (dark) (terminal.sexy)" 455 | ---|"Isotope (light) (terminal.sexy)" 456 | ---|"Ivory Dark (terminal.sexy)" 457 | ---|"Ivory Light (terminal.sexy)" 458 | ---|"JWR dark (terminal.sexy)" 459 | ---|"Jackie Brown (Gogh)" 460 | ---|"Jackie Brown" 461 | ---|"Japanesque (Gogh)" 462 | ---|"Japanesque" 463 | ---|"Jason Wryan (terminal.sexy)" 464 | ---|"Jellybeans (Gogh)" 465 | ---|"Jellybeans" 466 | ---|"JetBrains Darcula" 467 | ---|"Jup (Gogh)" 468 | ---|"Kanagawa (Gogh)" 469 | ---|"Kanagawa Dragon (Gogh)" 470 | ---|"Kasugano (terminal.sexy)" 471 | ---|"Kibble (Gogh)" 472 | ---|"Kibble" 473 | ---|"Kimber (base16)" 474 | ---|"Kokuban (Gogh)" 475 | ---|"Kolorit" 476 | ---|"Konsolas" 477 | ---|"Lab Fox" 478 | ---|"Laser" 479 | ---|"Laserwave (Gogh)" 480 | ---|"Later This Evening (Gogh)" 481 | ---|"Later This Evening" 482 | ---|"Lavandula (Gogh)" 483 | ---|"Lavandula" 484 | ---|"Light White (terminal.sexy)" 485 | ---|"Liquid Carbon (Gogh)" 486 | ---|"Liquid Carbon Transparent (Gogh)" 487 | ---|"LiquidCarbon" 488 | ---|"LiquidCarbonTransparent" 489 | ---|"LiquidCarbonTransparentInverse" 490 | ---|"London Tube (base16)" 491 | ---|"Londontube (dark) (terminal.sexy)" 492 | ---|"Londontube (light) (terminal.sexy)" 493 | ---|"Lost Woods (terminal.sexy)" 494 | ---|"Low Contrast (terminal.sexy)" 495 | ---|"Lumifoo (terminal.sexy)" 496 | ---|"Lunaria Dark (Gogh)" 497 | ---|"Lunaria Eclipse (Gogh)" 498 | ---|"Lunaria Light (Gogh)" 499 | ---|"Macintosh (base16)" 500 | ---|"Maia (Gogh)" 501 | ---|"Man Page (Gogh)" 502 | ---|"Man Page" 503 | ---|"Mar (Gogh)" 504 | ---|"Mariana" 505 | ---|"Marrakesh (base16)" 506 | ---|"Marrakesh (dark) (terminal.sexy)" 507 | ---|"Marrakesh (light) (terminal.sexy)" 508 | ---|"Mashup Colors (terminal.sexy)" 509 | ---|"Materia (base16)" 510 | ---|"Material (Gogh)" 511 | ---|"Material (base16)" 512 | ---|"Material (terminal.sexy)" 513 | ---|"Material Darker (base16)" 514 | ---|"Material Lighter (base16)" 515 | ---|"Material Palenight (base16)" 516 | ---|"Material Vivid (base16)" 517 | ---|"Material" 518 | ---|"MaterialDark" 519 | ---|"MaterialDarker" 520 | ---|"MaterialDesignColors" 521 | ---|"MaterialOcean" 522 | ---|"Mathias (Gogh)" 523 | ---|"Mathias" 524 | ---|"Matrix (terminal.sexy)" 525 | ---|"Medallion (Gogh)" 526 | ---|"Medallion" 527 | ---|"Mellifluous" 528 | ---|"Mellow Purple (base16)" 529 | ---|"Mexico Light (base16)" 530 | ---|"Mikado (terminal.sexy)" 531 | ---|"Mikazuki (terminal.sexy)" 532 | ---|"Mirage" 533 | ---|"Miramare (Gogh)" 534 | ---|"Misterioso (Gogh)" 535 | ---|"Misterioso" 536 | ---|"Mocha (base16)" 537 | ---|"Mocha (dark) (terminal.sexy)" 538 | ---|"Mocha (light) (terminal.sexy)" 539 | ---|"Modus Operandi (Gogh)" 540 | ---|"Modus Operandi Tinted (Gogh)" 541 | ---|"Modus Vivendi (Gogh)" 542 | ---|"Modus Vivendi Tinted (Gogh)" 543 | ---|"Modus-Operandi" 544 | ---|"Modus-Operandi-Deuteranopia" 545 | ---|"Modus-Operandi-Tinted" 546 | ---|"Modus-Vivendi" 547 | ---|"Modus-Vivendi-Deuteranopia" 548 | ---|"Modus-Vivendi-Tinted" 549 | ---|"Modus-Vivendi-Tritanopia" 550 | ---|"Molokai (Gogh)" 551 | ---|"Molokai" 552 | ---|"Mona Lisa (Gogh)" 553 | ---|"MonaLisa" 554 | ---|"Mono (terminal.sexy)" 555 | ---|"Mono Amber (Gogh)" 556 | ---|"Mono Cyan (Gogh)" 557 | ---|"Mono Green (Gogh)" 558 | ---|"Mono Red (Gogh)" 559 | ---|"Mono Theme (terminal.sexy)" 560 | ---|"Mono White (Gogh)" 561 | ---|"Mono Yellow (Gogh)" 562 | ---|"Monokai (base16)" 563 | ---|"Monokai (dark) (terminal.sexy)" 564 | ---|"Monokai (light) (terminal.sexy)" 565 | ---|"Monokai (terminal.sexy)" 566 | ---|"Monokai Dark (Gogh)" 567 | ---|"Monokai Pro (Gogh)" 568 | ---|"Monokai Pro Ristretto (Gogh)" 569 | ---|"Monokai Remastered" 570 | ---|"Monokai Soda (Gogh)" 571 | ---|"Monokai Soda" 572 | ---|"Monokai Vivid" 573 | ---|"Moonfly (Gogh)" 574 | ---|"Morada (Gogh)" 575 | ---|"Mostly Bright (terminal.sexy)" 576 | ---|"Muse (terminal.sexy)" 577 | ---|"N0Tch2K (Gogh)" 578 | ---|"N0tch2k" 579 | ---|"Nancy (terminal.sexy)" 580 | ---|"Nature Suede (terminal.sexy)" 581 | ---|"Navy and Ivory (terminal.sexy)" 582 | ---|"Nebula (base16)" 583 | ---|"Neon (terminal.sexy)" 584 | ---|"Neon Night (Gogh)" 585 | ---|"Neon" 586 | ---|"Neopolitan (Gogh)" 587 | ---|"Neopolitan" 588 | ---|"Nep (Gogh)" 589 | ---|"Neutron (Gogh)" 590 | ---|"Neutron" 591 | ---|"Night Owl (Gogh)" 592 | ---|"Night Owlish Light" 593 | ---|"NightLion v1" 594 | ---|"NightLion v2" 595 | ---|"Nightfly (Gogh)" 596 | ---|"Nightlion V1 (Gogh)" 597 | ---|"Nightlion V2 (Gogh)" 598 | ---|"Nighty (Gogh)" 599 | ---|"Nocturnal Winter" 600 | ---|"Nord (Gogh)" 601 | ---|"Nord (base16)" 602 | ---|"Nord Light (Gogh)" 603 | ---|"Nova (base16)" 604 | ---|"Novel (Gogh)" 605 | ---|"Novel" 606 | ---|"Nucolors (terminal.sexy)" 607 | ---|"Nudge (terminal.sexy)" 608 | ---|"Numix Darkest (terminal.sexy)" 609 | ---|"NvimDark" 610 | ---|"NvimLight" 611 | ---|"Obsidian (Gogh)" 612 | ---|"Obsidian" 613 | ---|"Ocean (base16)" 614 | ---|"Ocean (dark) (terminal.sexy)" 615 | ---|"Ocean (light) (terminal.sexy)" 616 | ---|"Ocean Dark (Gogh)" 617 | ---|"Ocean" 618 | ---|"Oceanic Next (Gogh)" 619 | ---|"Oceanic-Next" 620 | ---|"OceanicMaterial" 621 | ---|"OceanicNext (base16)" 622 | ---|"Ollie (Gogh)" 623 | ---|"Ollie" 624 | ---|"Omni (Gogh)" 625 | ---|"One Dark (Gogh)" 626 | ---|"One Half Black (Gogh)" 627 | ---|"One Light (Gogh)" 628 | ---|"One Light (base16)" 629 | ---|"OneDark (base16)" 630 | ---|"OneHalfDark" 631 | ---|"OneHalfLight" 632 | ---|"Operator Mono Dark" 633 | ---|"Orangish (terminal.sexy)" 634 | ---|"Outrun Dark (base16)" 635 | ---|"Overnight Slumber" 636 | ---|"Oxocarbon Dark (Gogh)" 637 | ---|"PaleNightHC" 638 | ---|"Palenight (Gogh)" 639 | ---|"Pali (Gogh)" 640 | ---|"Panda (Gogh)" 641 | ---|"Pandora" 642 | ---|"Panels (terminal.sexy)" 643 | ---|"Paper (Gogh)" 644 | ---|"PaperColor Dark (base16)" 645 | ---|"PaperColor Light (base16)" 646 | ---|"Papercolor Dark (Gogh)" 647 | ---|"Papercolor Light (Gogh)" 648 | ---|"Paraiso (base16)" 649 | ---|"Paraiso (dark) (terminal.sexy)" 650 | ---|"Paraiso (light) (terminal.sexy)" 651 | ---|"Paraiso Dark (Gogh)" 652 | ---|"Paraiso Dark" 653 | ---|"Parker Brothers (terminal.sexy)" 654 | ---|"Pasque (base16)" 655 | ---|"Pastel White (terminal.sexy)" 656 | ---|"Paul Millr (Gogh)" 657 | ---|"PaulMillr" 658 | ---|"Pencil Dark (Gogh)" 659 | ---|"Pencil Light (Gogh)" 660 | ---|"PencilDark" 661 | ---|"PencilLight" 662 | ---|"Peppermint (Gogh)" 663 | ---|"Peppermint" 664 | ---|"PhD (base16)" 665 | ---|"Phrak1 (terminal.sexy)" 666 | ---|"Piatto Light" 667 | ---|"Pico (base16)" 668 | ---|"Pixiefloss (Gogh)" 669 | ---|"Pnevma (Gogh)" 670 | ---|"Pnevma" 671 | ---|"Poimandres Storm" 672 | ---|"Poimandres" 673 | ---|"Pop (base16)" 674 | ---|"Popping and Locking" 675 | ---|"Porple (base16)" 676 | ---|"Powershell (Gogh)" 677 | ---|"Predawn (Gogh)" 678 | ---|"Pretty and Pastel (terminal.sexy)" 679 | ---|"Pro (Gogh)" 680 | ---|"Pro Light" 681 | ---|"Pro" 682 | ---|"Pulp (terminal.sexy)" 683 | ---|"Purple People Eater (Gogh)" 684 | ---|"Purple Rain" 685 | ---|"Purpledream (base16)" 686 | ---|"Qualia (base16)" 687 | ---|"Quiet (Gogh)" 688 | ---|"Railscasts (base16)" 689 | ---|"Railscasts (dark) (terminal.sexy)" 690 | ---|"Railscasts (light) (terminal.sexy)" 691 | ---|"Rapture" 692 | ---|"Rasi (terminal.sexy)" 693 | ---|"Raycast_Dark" 694 | ---|"Raycast_Light" 695 | ---|"Rebecca (base16)" 696 | ---|"Red Alert (Gogh)" 697 | ---|"Red Alert" 698 | ---|"Red Phoenix (terminal.sexy)" 699 | ---|"Red Planet" 700 | ---|"Red Sands (Gogh)" 701 | ---|"Red Sands" 702 | ---|"Relaxed (Gogh)" 703 | ---|"Relaxed" 704 | ---|"Retro" 705 | ---|"Rezza (terminal.sexy)" 706 | ---|"Rippedcasts (Gogh)" 707 | ---|"Rippedcasts" 708 | ---|"Rosé Pine (Gogh)" 709 | ---|"Rosé Pine (base16)" 710 | ---|"Rosé Pine Dawn (Gogh)" 711 | ---|"Rosé Pine Dawn (base16)" 712 | ---|"Rosé Pine Moon (Gogh)" 713 | ---|"Rosé Pine Moon (base16)" 714 | ---|"Rouge 2" 715 | ---|"Royal (Gogh)" 716 | ---|"Royal" 717 | ---|"Rydgel (terminal.sexy)" 718 | ---|"Ryuuko" 719 | ---|"SOS (terminal.sexy)" 720 | ---|"Sagelight (base16)" 721 | ---|"Sakura (base16)" 722 | ---|"Sakura" 723 | ---|"Sandcastle (base16)" 724 | ---|"Sat (Gogh)" 725 | ---|"Scarlet Protocol" 726 | ---|"Sea Shells (Gogh)" 727 | ---|"SeaShells" 728 | ---|"Seafoam Pastel (Gogh)" 729 | ---|"Seafoam Pastel" 730 | ---|"Selenized Black (Gogh)" 731 | ---|"Selenized Dark (Gogh)" 732 | ---|"Selenized Light (Gogh)" 733 | ---|"Selenized White (Gogh)" 734 | ---|"Seoul256 (Gogh)" 735 | ---|"Seoul256 Light (Gogh)" 736 | ---|"Sequoia Monochrome" 737 | ---|"Sequoia Moonlight" 738 | ---|"Seti (Gogh)" 739 | ---|"Seti UI (base16)" 740 | ---|"Seti" 741 | ---|"Sex Colors (terminal.sexy)" 742 | ---|"Shades of Purple (base16)" 743 | ---|"Shaman (Gogh)" 744 | ---|"Shaman" 745 | ---|"Shapeshifter (base16)" 746 | ---|"Shapeshifter (dark) (terminal.sexy)" 747 | ---|"Shapeshifter (light) (terminal.sexy)" 748 | ---|"Shel (Gogh)" 749 | ---|"Shic (terminal.sexy)" 750 | ---|"Silk Dark (base16)" 751 | ---|"Silk Light (base16)" 752 | ---|"Simple Rainbow (terminal.sexy)" 753 | ---|"Slate (Gogh)" 754 | ---|"Slate" 755 | ---|"SleepyHollow" 756 | ---|"Smyck (Gogh)" 757 | ---|"Smyck" 758 | ---|"Snazzy (Gogh)" 759 | ---|"Snazzy (base16)" 760 | ---|"Snazzy" 761 | ---|"Soft Server (Gogh)" 762 | ---|"SoftServer" 763 | ---|"Solar Flare (base16)" 764 | ---|"Solar Flare Light (base16)" 765 | ---|"Solarized (dark) (terminal.sexy)" 766 | ---|"Solarized (light) (terminal.sexy)" 767 | ---|"Solarized Darcula (Gogh)" 768 | ---|"Solarized Darcula" 769 | ---|"Solarized Dark (Gogh)" 770 | ---|"Solarized Dark - Patched" 771 | ---|"Solarized Dark Higher Contrast (Gogh)" 772 | ---|"Solarized Dark Higher Contrast" 773 | ---|"Solarized Light (Gogh)" 774 | ---|"Sonokai (Gogh)" 775 | ---|"SpaceGray Eighties Dull" 776 | ---|"SpaceGray Eighties" 777 | ---|"SpaceGray" 778 | ---|"Spacedust (Gogh)" 779 | ---|"Spacedust" 780 | ---|"Spacegray (Gogh)" 781 | ---|"Spacegray Eighties (Gogh)" 782 | ---|"Spacegray Eighties Dull (Gogh)" 783 | ---|"Spacemacs (base16)" 784 | ---|"Sparky (Gogh)" 785 | ---|"Spiderman" 786 | ---|"Splurge (terminal.sexy)" 787 | ---|"Spring (Gogh)" 788 | ---|"Spring" 789 | ---|"Square (Gogh)" 790 | ---|"Square" 791 | ---|"Srcery (Gogh)" 792 | ---|"Sublette" 793 | ---|"Subliminal" 794 | ---|"Sugarplum" 795 | ---|"Summer Pop (Gogh)" 796 | ---|"Summerfruit Dark (base16)" 797 | ---|"Summerfruit Light (base16)" 798 | ---|"Sundried (Gogh)" 799 | ---|"Sundried" 800 | ---|"Swayr (terminal.sexy)" 801 | ---|"Sweet Eliverlara (Gogh)" 802 | ---|"Sweet Love (terminal.sexy)" 803 | ---|"Sweet Terminal (Gogh)" 804 | ---|"Symfonic" 805 | ---|"Symphonic (Gogh)" 806 | ---|"Synth Midnight Terminal Dark (base16)" 807 | ---|"Synth Midnight Terminal Light (base16)" 808 | ---|"Synthwave (Gogh)" 809 | ---|"Synthwave Alpha (Gogh)" 810 | ---|"SynthwaveAlpha" 811 | ---|"Tango (base16)" 812 | ---|"Tango (terminal.sexy)" 813 | ---|"Tango Adapted" 814 | ---|"Tango Half Adapted" 815 | ---|"Tangoesque (terminal.sexy)" 816 | ---|"Tartan (terminal.sexy)" 817 | ---|"Teerb (Gogh)" 818 | ---|"Teerb" 819 | ---|"Tender (Gogh)" 820 | ---|"Terminal Basic (Gogh)" 821 | ---|"Terminal Basic" 822 | ---|"Terminix Dark (Gogh)" 823 | ---|"Teva (terminal.sexy)" 824 | ---|"Thayer Bright (Gogh)" 825 | ---|"Thayer Bright" 826 | ---|"The Hulk" 827 | ---|"Tin (Gogh)" 828 | ---|"Tinacious Design (Dark)" 829 | ---|"Tinacious Design (Light)" 830 | ---|"Tokyo Night (Gogh)" 831 | ---|"Tokyo Night Day" 832 | ---|"Tokyo Night Light (Gogh)" 833 | ---|"Tokyo Night Moon" 834 | ---|"Tokyo Night Storm (Gogh)" 835 | ---|"Tokyo Night Storm" 836 | ---|"Tokyo Night" 837 | ---|"Tomorrow (Gogh)" 838 | ---|"Tomorrow (dark) (terminal.sexy)" 839 | ---|"Tomorrow (light) (terminal.sexy)" 840 | ---|"Tomorrow Night (Gogh)" 841 | ---|"Tomorrow Night Blue (Gogh)" 842 | ---|"Tomorrow Night Blue" 843 | ---|"Tomorrow Night Bright (Gogh)" 844 | ---|"Tomorrow Night Bright" 845 | ---|"Tomorrow Night Burns" 846 | ---|"Tomorrow Night Eighties (Gogh)" 847 | ---|"Tomorrow Night Eighties" 848 | ---|"Tomorrow Night" 849 | ---|"Tomorrow" 850 | ---|"Toy Chest (Gogh)" 851 | ---|"ToyChest" 852 | ---|"Treehouse (Gogh)" 853 | ---|"Treehouse" 854 | ---|"Trim Yer Beard (terminal.sexy)" 855 | ---|"Twilight (Gogh)" 856 | ---|"Twilight (base16)" 857 | ---|"Twilight (dark) (terminal.sexy)" 858 | ---|"Twilight (light) (terminal.sexy)" 859 | ---|"Twilight" 860 | ---|"Ubuntu" 861 | ---|"UltraDark" 862 | ---|"UltraViolent" 863 | ---|"UnderTheSea" 864 | ---|"Unikitty Dark (base16)" 865 | ---|"Unikitty Light (base16)" 866 | ---|"Unikitty Reversible (base16)" 867 | ---|"Unikitty" 868 | ---|"Unsifted Wheat (terminal.sexy)" 869 | ---|"Ura (Gogh)" 870 | ---|"Urple (Gogh)" 871 | ---|"Urple" 872 | ---|"VWbug (terminal.sexy)" 873 | ---|"Vacuous 2 (terminal.sexy)" 874 | ---|"Vag (Gogh)" 875 | ---|"Vaughn (Gogh)" 876 | ---|"Vaughn" 877 | ---|"Vesper" 878 | ---|"Vibrant Ink (Gogh)" 879 | ---|"VibrantInk" 880 | ---|"Vice Alt (base16)" 881 | ---|"Vice Dark (base16)" 882 | ---|"Violet Dark" 883 | ---|"Violet Light" 884 | ---|"VisiBlue (terminal.sexy)" 885 | ---|"VisiBone (terminal.sexy)" 886 | ---|"Visibone Alt. 2 (terminal.sexy)" 887 | ---|"Vs Code Dark+ (Gogh)" 888 | ---|"Vs Code Light+ (Gogh)" 889 | ---|"Warm Neon (Gogh)" 890 | ---|"WarmNeon" 891 | ---|"Website (Gogh)" 892 | ---|"Wez (Gogh)" 893 | ---|"Wez" 894 | ---|"Whimsy" 895 | ---|"Wild Cherry (Gogh)" 896 | ---|"WildCherry" 897 | ---|"Windows 10 (base16)" 898 | ---|"Windows 10 Light (base16)" 899 | ---|"Windows 95 (base16)" 900 | ---|"Windows 95 Light (base16)" 901 | ---|"Windows High Contrast (base16)" 902 | ---|"Windows High Contrast Light (base16)" 903 | ---|"Windows NT (base16)" 904 | ---|"Windows NT Light (base16)" 905 | ---|"Wombat (Gogh)" 906 | ---|"Wombat" 907 | ---|"Woodland (base16)" 908 | ---|"Wryan (Gogh)" 909 | ---|"Wryan" 910 | ---|"Wzoreck (Gogh)" 911 | ---|"X::DotShare (terminal.sexy)" 912 | ---|"X::Erosion (terminal.sexy)" 913 | ---|"XCode Dusk (base16)" 914 | ---|"Yousai (terminal.sexy)" 915 | ---|"Zenburn (Gogh)" 916 | ---|"Zenburn (base16)" 917 | ---|"Zenburn" 918 | ---|"aikofog (terminal.sexy)" 919 | ---|"arcoiris" 920 | ---|"astromouse (terminal.sexy)" 921 | ---|"ayu" 922 | ---|"ayu_light" 923 | ---|"carbonfox" 924 | ---|"catppuccin-frappe" 925 | ---|"catppuccin-latte" 926 | ---|"catppuccin-macchiato" 927 | ---|"catppuccin-mocha" 928 | ---|"coffee_theme" 929 | ---|"cyberpunk" 930 | ---|"darkermatrix" 931 | ---|"darkmatrix" 932 | ---|"darkmoss (base16)" 933 | ---|"dawnfox" 934 | ---|"dayfox" 935 | ---|"deep" 936 | ---|"dirtysea (base16)" 937 | ---|"duckbones" 938 | ---|"duskfox" 939 | ---|"farmhouse-dark" 940 | ---|"farmhouse-light" 941 | ---|"flexoki-dark" 942 | ---|"flexoki-light" 943 | ---|"hardhacker" 944 | ---|"hund (terminal.sexy)" 945 | ---|"iTerm2 Dark Background" 946 | ---|"iTerm2 Default" 947 | ---|"iTerm2 Light Background" 948 | ---|"iTerm2 Pastel Dark Background" 949 | ---|"iTerm2 Smoooooth" 950 | ---|"iTerm2 Tango Dark" 951 | ---|"iTerm2 Tango Light" 952 | ---|"iceberg-dark" 953 | ---|"iceberg-light" 954 | ---|"idea" 955 | ---|"idleToes" 956 | ---|"jmbi (terminal.sexy)" 957 | ---|"jubi" 958 | ---|"kanagawabones" 959 | ---|"kurokula" 960 | ---|"lovelace" 961 | ---|"matrix" 962 | ---|"midnight-in-mojave" 963 | ---|"neobones_dark" 964 | ---|"neobones_light" 965 | ---|"nightfox" 966 | ---|"niji" 967 | ---|"nord" 968 | ---|"nord-light" 969 | ---|"nordfox" 970 | ---|"pinky (base16)" 971 | ---|"primary" 972 | ---|"purplepeter" 973 | ---|"rebecca" 974 | ---|"rose-pine" 975 | ---|"rose-pine-dawn" 976 | ---|"rose-pine-moon" 977 | ---|"s3r0 modified (terminal.sexy)" 978 | ---|"seoulbones_dark" 979 | ---|"seoulbones_light" 980 | ---|"shades-of-purple" 981 | ---|"summercamp (base16)" 982 | ---|"synthwave" 983 | ---|"synthwave-everything" 984 | ---|"tender (base16)" 985 | ---|"terafox" 986 | ---|"theme2 (terminal.sexy)" 987 | ---|"thwump (terminal.sexy)" 988 | ---|"tlh (terminal.sexy)" 989 | ---|"tokyonight" 990 | ---|"tokyonight-day" 991 | ---|"tokyonight-storm" 992 | ---|"tokyonight_day" 993 | ---|"tokyonight_moon" 994 | ---|"tokyonight_night" 995 | ---|"tokyonight_storm" 996 | ---|"vimbones" 997 | ---|"vulcan (base16)" 998 | ---|"wilmersdorf" 999 | ---|"zenbones" 1000 | ---|"zenbones_dark" 1001 | ---|"zenburn (terminal.sexy)" 1002 | ---|"zenburned" 1003 | ---|"zenwritten_dark" 1004 | ---|"zenwritten_light" 1005 | 1006 | -- vim:ts=4:sts=4:sw=4:et:ai:si:sta: 1007 | --------------------------------------------------------------------------------