(()=>{var e={28:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const i=n(2341),a={trigger:(e,t)=>0===e.length||0===t.length&&e.length>0,custom:async(e,t)=>{const n=e[e.length-1];if(0===n.length)return[];const{stdout:i}=await t({command:"apt",args:["list"]});return i.trim().split("\n").filter(e=>e.startsWith(n)).map(e=>e.replace(/\/.*/,"")).map(e=>({name:e,description:"Package",icon:"📦",priority:50}))}},s={script:["apt","list","--installed"],postProcess:function(e){return e.trim().split("\n").map(e=>({name:e.substring(0,e.indexOf("/")),description:"Package",icon:"📦"}))}},o=[{name:"-y",description:"Assume yes to all prompts",exclusiveOn:["--assume-no"]},{name:"--assume-no",description:"Assume no to all prompts",exclusiveOn:["-y"]}],r=[{name:["-d","--download-only"],description:"For any operation that would download packages, download them, but do nothing else"},{name:"--no-download",description:"Do not download packages, attempt to use already downloaded packages"}],c=[{name:["-s","--simulate"],description:"Simulate running this command and show it's output, without actually changing anything"}],l={name:"apt",description:"Package manager for Debian-based Linux distributions",subcommands:[{name:"update",description:"Update the package database",options:[...o]},{name:"upgrade",description:"Install all available upgrades",args:{name:"package",description:"Package(s) to upgrade",isVariadic:!0,isOptional:!0,generators:{script:["apt","list","--upgradable"],postProcess:function(e){return e.trim().split("\n").map(e=>({name:e.substring(0,e.indexOf("/")),description:"Package",icon:"📦"}))}}},options:[...r,...o,...c]},{name:"full-upgrade",description:"Install available upgrades, removing currently installed packages if needed to upgrade the system as a whole",options:[...r,...o,...c]},{name:"install",description:"Install package(s)",args:{name:"package",description:"The package you want to install",isVariadic:!0,generators:[a,(0,i.filepaths)({extensions:["deb"]})]},options:[...r,...o,...c,{name:"--reinstall",description:"Reinstall the package if it is already installed"},{name:["-f","--fix-broken"],description:"Attempt to fix broken packages"}]},{name:"reinstall",description:"Reinstall package(s)",args:{name:"package",description:"The package you want to reinstall",isVariadic:!0,generators:s},options:[...o,...c]},{name:"remove",description:"Remove package(s)",args:{name:"package",description:"The package you want to remove",isVariadic:!0,generators:s},options:[...o,...c,{name:["-f","--fix-broken"],description:"Attempt to fix broken packages"}]},{name:"purge",description:"Remove package(s) and their configuration files",args:{name:"package",description:"The package you want to purge",isVariadic:!0,generators:s},options:[...o,...c]},{name:["autoremove","auto-remove"],description:"Remove unused packages",options:[...o,...c]},{name:"list",description:"List packages",options:[{name:"--installed",description:"List installed packages"},{name:"--upgradable",description:"List upgradable packages"}]},{name:"search",description:"Search for packages",args:{name:"query",description:"The query to search for"},options:[...o]},{name:"show",description:"Show package details",args:{name:"package",description:"The package you want to show",generators:a}},{name:"satisfy",description:"Satisfy package dependencies",args:{name:"package",description:"The package you want to satisfy",isVariadic:!0,generators:a},options:[...r,...o,...c]},{name:"clean",description:"Remove downloaded package files",options:[...o,...c]},{name:"edit-sources",description:"Edit the list of package sources",options:[...o]},{name:"source",description:"Fetch package source files",args:{name:"package",description:"The package you want to get source files for",isVariadic:!0,generators:a},options:[...r,...o,...c,{name:"--compile",description:"Compile the package to a binary using dpkg-buildpackage"},{name:"--only-source"},{name:"--host-architecture",description:"The architecture to build for",args:{name:"architecture",description:"The architecture to build for"}}]},{name:"build-dep",description:"Install/remove packages in an attempt to satisfy the build dependencies for a source package",args:{name:"package",description:"The package you want to build dependencies for",generators:a},options:[...r,...o,...c,{name:"--host-architecture",description:"The architecture to build for",args:{name:"architecture",description:"The architecture to build for"}},{name:"--only-source"}]},{name:"download",description:"Download package binary into the current directory",args:{name:"package",description:"The package you want to download",generators:a},options:[...r,...o]},{name:["autoclean","auto-clean"],description:"Like clean, but only removes package files that can no longer be downloaded",options:[...r,...o,...c]},{name:"changelog",description:"Show the changelog for a package",args:{name:"package",description:"The package you want to show the changelog for",generators:a,isVariadic:!0},options:[...r,...o]}],options:[{name:["-h","--help"],description:"Print help message and exit",isPersistent:!0,priority:40},{name:["-v","--version"],description:"Print version information and exit",isPersistent:!0,priority:40}]};t.default=l},70:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=e=>"docker"===e[0]?["docker","compose"]:["docker-compose"],i=e=>{const t=[];for(let n=0;n["-f",e])},a={script:e=>[...n(e),...i(e),"config","--services"],splitOn:"\n"},s={name:"docker-compose",description:"Define and run multi-container applications with Docker",subcommands:[{name:"build",description:"Build or rebuild services",args:{name:"services",isVariadic:!0,isOptional:!0,generators:a},options:[{name:"--build-arg",description:"Set build-time variables for services",isRepeatable:!0,args:{name:"key=value",generators:a}},{name:"--compress",description:"Compress the build context using gzip. DEPRECATED",hidden:!0,deprecated:!0},{name:"--force-rm",description:"Always remove intermediate containers. DEPRECATED",hidden:!0,deprecated:!0},{name:["--memory","-m"],description:"Set memory limit for the build container. Not supported on buildkit yet",hidden:!0,args:{name:"memory"}},{name:"--no-cache",description:"Do not use cache when building the image"},{name:"--no-rm",description:"Do not remove intermediate containers after a successful build. DEPRECATED",hidden:!0,deprecated:!0},{name:"--parallel",description:"Build images in parallel. DEPRECATED",deprecated:!0,hidden:!0},{name:"--progress",description:"Set type of progress output (auto, tty, plain, quiet)",args:{name:"progress",default:"auto",suggestions:["auto","tty","plain","quiet"]}},{name:"--pull",description:"Always attempt to pull a newer version of the image"},{name:["--quiet","-q"],description:"Don't print anything to STDOUT"},{name:"--ssh",description:"Set SSH authentications used when building service images. (use 'default' for using your default SSH Agent)",args:{name:"ssh"}}]},{name:["config","convert"],description:"Converts the compose file to platform's canonical format",args:{name:"services",isVariadic:!0,generators:a},options:[{name:"--format",description:"Format the output. Values: [yaml | json]",args:{name:"format",default:"yaml",suggestions:["yaml","json"]}},{name:"--hash",description:"Print the service config hash, one per line",args:{name:"hash"}},{name:"--images",description:"Print the image names, one per line"},{name:"--no-interpolate",description:"Don't interpolate environment variables"},{name:"--no-normalize",description:"Don't normalize compose model"},{name:["--output","-o"],description:"Save to file (default to stdout)",args:{name:"output",template:"filepaths",suggestCurrentToken:!0}},{name:"--profiles",description:"Print the profile names, one per line"},{name:["--quiet","-q"],description:"Only validate the configuration, don't print anything"},{name:"--resolve-image-digests",description:"Pin image tags to digests"},{name:"--services",description:"Print the service names, one per line"},{name:"--volumes",description:"Print the volume names, one per line"}]},{name:"cp",description:"Copy files/folders between a service container and the local filesystem",args:[{name:"source path"},{name:"dest path"}],options:[{name:"--all",description:"Copy to all the containers of the service",hidden:!0},{name:["--archive","-a"],description:"Archive mode (copy all uid/gid information)"},{name:["--follow-link","-L"],description:"Always follow symbol link in SRC_PATH"},{name:"--index",description:"Index of the container if there are multiple instances of a service",args:{name:"index",default:"0"}}]},{name:"create",description:"Creates containers for a service",args:{name:"service",isVariadic:!0,isOptional:!0,generators:a},options:[{name:"--build",description:"Build images before starting containers"},{name:"--force-recreate",description:"Recreate containers even if their configuration and image haven't changed"},{name:"--no-build",description:"Don't build an image, even if it's missing"},{name:"--no-recreate",description:"If containers already exist, don't recreate them. Incompatible with --force-recreate"}]},{name:"down",description:"Stop and remove containers, networks",options:[{name:"--remove-orphans",description:"Remove containers for services not defined in the Compose file"},{name:"--rmi",description:'Remove images used by services. "local" remove only images that don\'t have a custom tag ("local"|"all")',args:{name:"rmi"}},{name:["--timeout","-t"],description:"Specify a shutdown timeout in seconds",args:{name:"timeout",default:"10"}},{name:["--volumes","-v"],description:"Remove named volumes declared in the `volumes` section of the Compose file and anonymous volumes attached to containers"}]},{name:"events",description:"Receive real time events from containers",args:{name:"service",isVariadic:!0,isOptional:!0,generators:a},options:[{name:"--json",description:"Output events as a stream of json objects"}]},{name:"exec",description:"Execute a command in a running container",args:[{name:"service",generators:a},{name:"command",isCommand:!0,isVariadic:!0}],options:[{name:["--detach","-d"],description:"Detached mode: Run command in the background"},{name:["--env","-e"],description:"Set environment variables",isRepeatable:!0,args:{name:"key=value"}},{name:"--index",description:"Index of the container if there are multiple instances of a service [default: 1]",args:{name:"index",default:"1"}},{name:["--interactive","-i"],description:"Keep STDIN open even if not attached",hidden:!0},{name:["--no-TTY","-T"],description:"Disable pseudo-TTY allocation. By default `docker compose exec` allocates a TTY"},{name:"--privileged",description:"Give extended privileges to the process"},{name:["--tty","-t"],description:"Allocate a pseudo-TTY",hidden:!0},{name:["--user","-u"],description:"Run the command as this user",args:{name:"user"}},{name:["--workdir","-w"],description:"Path to workdir directory for this command",args:{name:"workdir",template:"folders"}}]},{name:"images",description:"List images used by the created containers",args:{name:"service",isVariadic:!0,isOptional:!0,generators:a},options:[{name:["--quiet","-q"],description:"Only display IDs"}]},{name:"kill",description:"Force stop service containers",args:{name:"service",isVariadic:!0,isOptional:!0,generators:a},options:[{name:["--signal","-s"],description:"SIGNAL to send to the container",args:{name:"signal",default:"SIGKILL"}}]},{name:"logs",description:"View output from containers",args:{name:"service",isVariadic:!0,isOptional:!0,generators:a},options:[{name:["--follow","-f"],description:"Follow log output"},{name:"--no-color",description:"Produce monochrome output"},{name:"--no-log-prefix",description:"Don't print prefix in logs"},{name:"--since",description:"Show logs since timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)",args:{name:"since"}},{name:"--tail",description:"Number of lines to show from the end of the logs for each container",args:{name:"lines",suggestions:["all"],default:"all"}},{name:["--timestamps","-t"],description:"Show timestamps"},{name:"--until",description:"Show logs before a timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)",args:{name:"timestamp"}}]},{name:"ls",description:"List running compose projects",options:[{name:["--all","-a"],description:"Show all stopped Compose projects"},{name:"--filter",description:"Filter output based on conditions provided",args:{name:"filter"}},{name:"--format",description:"Format the output. Values: [pretty | json]",args:{name:"format",default:"pretty",suggestions:["pretty","json"]}},{name:["--quiet","-q"],description:"Only display IDs"}]},{name:"pause",description:"Pause services",args:{name:"service",isVariadic:!0,isOptional:!0,generators:a}},{name:"port",description:"Print the public port for a port binding",args:[{name:"service",generators:a},{name:"private_port"}],options:[{name:"--index",description:"Index of the container if service has multiple replicas",args:{name:"index",default:"1"}},{name:"--protocol",description:"Tcp or udp",args:{name:"protocol",default:"tcp",suggestions:["tcp","udp"]}}]},{name:"ps",description:"List containers",args:{name:"service",isVariadic:!0,isOptional:!0,generators:a},options:[{name:["--all","-a"],description:"Show all stopped containers (including those created by the run command)"},{name:"--filter",description:"Filter services by a property (supported filters: status)",args:{name:"filter"}},{name:"--format",description:"Format the output. Values: [pretty | json]",args:{name:"format",default:"pretty",suggestions:["pretty","json"]}},{name:["--quiet","-q"],description:"Only display IDs"},{name:"--services",description:"Display services"},{name:"--status",description:"Filter services by status. Values: [paused | restarting | removing | running | dead | created | exited]",isRepeatable:!0,args:{name:"status",suggestions:["paused","restarting","removing","running","dead","created","exited"]}}]},{name:"pull",description:"Pull service images",args:{name:"service",isVariadic:!0,isOptional:!0,generators:a},options:[{name:"--ignore-pull-failures",description:"Pull what it can and ignores images with pull failures"},{name:"--include-deps",description:"Also pull services declared as dependencies"},{name:"--no-parallel",description:"DEPRECATED disable parallel pulling",deprecated:!0,hidden:!0},{name:"--parallel",description:"DEPRECATED pull multiple images in parallel",deprecated:!0,hidden:!0},{name:["--quiet","-q"],description:"Pull without printing progress information"}]},{name:"push",description:"Push service images",args:{name:"service",isVariadic:!0,isOptional:!0,generators:a},options:[{name:"--ignore-push-failures",description:"Push what it can and ignores images with push failures"}]},{name:"restart",description:"Restart containers",options:[{name:["--timeout","-t"],description:"Specify a shutdown timeout in seconds",args:{name:"timeout",default:"10"}}],args:{name:"service",isVariadic:!0,isOptional:!0,generators:a}},{name:"rm",description:"Removes stopped service containers",args:{name:"service",isVariadic:!0,isOptional:!0,generators:a},options:[{name:["--all","-a"],description:"Deprecated - no effect",hidden:!0},{name:["--force","-f"],description:"Don't ask to confirm removal"},{name:["--stop","-s"],description:"Stop the containers, if required, before removing"},{name:["--volumes","-v"],description:"Remove any anonymous volumes attached to containers"}]},{name:"run",description:"Run a one-off command on a service",args:[{name:"service",generators:a},{name:"command",isCommand:!0}],options:[{name:["--detach","-d"],description:"Run container in background and print container ID"},{name:"--entrypoint",description:"Override the entrypoint of the image",args:{name:"entrypoint"}},{name:["--env","-e"],description:"Set environment variables",isRepeatable:!0,args:{name:"env"}},{name:["--interactive","-i"],description:"Keep STDIN open even if not attached"},{name:["--label","-l"],description:"Add or override a label",isRepeatable:!0,args:{name:"label"}},{name:"--name",description:"Assign a name to the container",args:{name:"name"}},{name:["--no-TTY","-T"],description:"Disable pseudo-TTY allocation (default: auto-detected)"},{name:"--no-deps",description:"Don't start linked services"},{name:["--publish","-p"],description:"Publish a container's port(s) to the host",isRepeatable:!0,args:{name:"publish"}},{name:"--quiet-pull",description:"Pull without printing progress information"},{name:"--rm",description:"Automatically remove the container when it exits"},{name:"--service-ports",description:"Run command with the service's ports enabled and mapped to the host"},{name:["--tty","-t"],description:"Allocate a pseudo-TTY",hidden:!0},{name:"--use-aliases",description:"Use the service's network useAliases in the network(s) the container connects to"},{name:["--user","-u"],description:"Run as specified username or uid",args:{name:"user"}},{name:["--volume","-v"],description:"Bind mount a volume",isRepeatable:!0,args:{name:"volume"}},{name:["--workdir","-w"],description:"Working directory inside the container",args:{name:"workdir",template:"folders"}}]},{name:"start",description:"Start services",args:{name:"service",isVariadic:!0,isOptional:!0,generators:a}},{name:"stop",description:"Stop services",args:{name:"service",isVariadic:!0,isOptional:!0,generators:a},options:[{name:["--timeout","-t"],description:"Specify a shutdown timeout in seconds",args:{name:"timeout",default:"10"}}]},{name:"top",description:"Display the running processes",args:{name:"service",isOptional:!0,isVariadic:!0,generators:a}},{name:"unpause",description:"Unpause services",args:{name:"service",isOptional:!0,isVariadic:!0,generators:a}},{name:"up",description:"Create and start containers",args:{name:"service",isVariadic:!0,isOptional:!0,generators:a},options:[{name:"--abort-on-container-exit",description:"Stops all containers if any container was stopped. Incompatible with -d"},{name:"--always-recreate-deps",description:"Recreate dependent containers. Incompatible with --no-recreate"},{name:"--attach",description:"Attach to service output",isRepeatable:!0,args:{name:"attach"}},{name:"--attach-dependencies",description:"Attach to dependent containers"},{name:"--build",description:"Build images before starting containers"},{name:["--detach","-d"],description:"Detached mode: Run containers in the background"},{name:"--exit-code-from",description:"Return the exit code of the selected service container. Implies --abort-on-container-exit",args:{name:"exit-code-from"}},{name:"--force-recreate",description:"Recreate containers even if their configuration and image haven't changed"},{name:"--no-build",description:"Don't build an image, even if it's missing"},{name:"--no-color",description:"Produce monochrome output"},{name:"--no-deps",description:"Don't start linked services"},{name:"--no-log-prefix",description:"Don't print prefix in logs"},{name:"--no-recreate",description:"If containers already exist, don't recreate them. Incompatible with --force-recreate"},{name:"--no-start",description:"Don't start the services after creating them"},{name:"--quiet-pull",description:"Pull without printing progress information"},{name:"--remove-orphans",description:"Remove containers for services not defined in the Compose file"},{name:["--renew-anon-volumes","-V"],description:"Recreate anonymous volumes instead of retrieving data from the previous containers"},{name:"--scale",description:"Scale SERVICE to NUM instances. Overrides the `scale` setting in the Compose file if present",isRepeatable:!0,args:{name:"scale"}},{name:["--timeout","-t"],description:"Use this timeout in seconds for container shutdown when attached or when containers are already running",args:{name:"timeout",default:"10"}},{name:"--wait",description:"Wait for services to be running|healthy. Implies detached mode"}]},{name:"version",description:"Show the Docker Compose version information",options:[{name:["--format","-f"],description:"Format the output. Values: [pretty | json]. (Default: pretty)",args:{name:"format",suggestions:["pretty","json"]}},{name:"--short",description:"Shows only Compose's version number"}]}],options:[{name:"--ansi",description:'Control when to print ANSI control characters ("never"|"always"|"auto")',args:{name:"ansi",default:"auto",suggestions:["never","always","auto"]}},{name:"--compatibility",description:"Run compose in backward compatibility mode"},{name:"--env-file",description:"Specify an alternate environment file",args:{name:"env-file",template:"filepaths"}},{name:["--file","-f"],description:"Compose configuration files",isRepeatable:!0,args:{name:"file",template:"filepaths"}},{name:"--no-ansi",description:"Do not print ANSI control characters (DEPRECATED)",deprecated:!0,hidden:!0},{name:"--profile",description:"Specify a profile to enable",isRepeatable:!0,args:{name:"profile",generators:{script:e=>[...n(e),...i(e),"config","--profiles"],splitOn:"\n"}}},{name:"--project-directory",description:"Specify an alternate working directory (default: the path of the, first specified, Compose file)",args:{name:"project-directory",template:"folders"}},{name:["--project-name","-p"],description:"Project name",args:{name:"project-name"}},{name:"--verbose",description:"Show more output",hidden:!0},{name:"--workdir",description:"DEPRECATED! USE --project-directory INSTEAD. Specify an alternate working directory (default: the path of the, first specified, Compose file)",deprecated:!0,hidden:!0,args:{name:"workdir"}}]};t.default=s},228:(e,t)=>{"use strict";var n;Object.defineProperty(t,"__esModule",{value:!0}),t.parse=t.printTree=t.createTextNode=t.NodeType=void 0,function(e){e.Program="program",e.AssignmentList="assignment_list",e.Assignment="assignment",e.VariableName="variable_name",e.Subscript="subscript",e.CompoundStatement="compound_statement",e.Subshell="subshell",e.Command="command",e.Pipeline="pipeline",e.List="list",e.ProcessSubstitution="process_substitution",e.Concatenation="concatenation",e.Word="word",e.String="string",e.Expansion="expansion",e.CommandSubstitution="command_substitution",e.RawString="raw_string",e.AnsiCString="ansi_c_string",e.SimpleExpansion="simple_expansion",e.SpecialExpansion="special_expansion",e.ArithmeticExpansion="arithmetic_expansion"}(n||(t.NodeType=n={}));const i=[";","&","&;","|","|&","&&","||"],a=(e,t)=>{const n=e.charAt(t);if(["&",";","|"].includes(n)){const a=e.slice(t,t+2);return i.includes(a)?a:n}return null},s=(e,t)=>{const i={startIndex:0,type:n.Word,endIndex:e.length,text:"",innerText:"",complete:!0,children:[],...t},a=e.slice(i.startIndex,i.endIndex),s=(e=>{const{children:t,type:i,complete:a,text:s}=e;if(i===n.Concatenation)return t.reduce((e,t)=>e+t.innerText,"");const o={[n.String]:['"','"'],[n.RawString]:["'","'"],[n.AnsiCString]:["$'","'"]}[i]??["",""],r=o[0],c=a?o[1]:"";let l="";for(let e=r.length;es(e,{startIndex:t,text:n,endIndex:t+n.length});const o=(e,t)=>{const n=e.slice(t).search(/\S/);return-1===n?-1:t+n};function r(e,t,i){const a="`"===e.charAt(t)?t+1:t+2,{statements:o,terminatorIndex:r}=f(e,a,i),c=-1!==r;return s(e,{startIndex:t,type:n.CommandSubstitution,complete:c&&0!==o.length,endIndex:c?r+1:e.length,children:o})}const c=u(n.String,'"','"'),l=u(n.RawString,"'","'"),d=u(n.Expansion,"${","}"),m=u(n.AnsiCString,"$'","'"),p=u(n.ArithmeticExpansion,"$((","))");function h(e,t,i,a){const o=[e.charAt(t),e.charAt(t+1),e.charAt(t+2)];switch(o[0]){case"$":return"("===o[1]?"("===o[2]?p(e,t):r(e,t,")"):"{"===o[1]?d(e,t):i||"'"!==o[1]?((e,t,i)=>{const a={startIndex:t,type:n.SimpleExpansion};if(e.length>t+1&&"*@?-$0_".includes(e.charAt(t+1)))return s(e,{...a,type:n.SpecialExpansion,endIndex:t+2});const o=["\t"," ","\n","$","\\",...i];let r=t+1;for(;r{const l=[];for(let d=c+t.length;d{const o=[];let r=[],c=-1;const l=t=>{if(-1!==c){const n=s(e,{startIndex:c,endIndex:t});r.push(n)}c=-1},d=t=>{l(t);let[i]=r;if(r.length>1){const t=r[r.length-1];i=s(e,{startIndex:r[0].startIndex,type:n.Concatenation,endIndex:t.endIndex,complete:t.complete,children:r})}i&&o.push(i),r=[]},m=["&","|",";","\n","'",'"',"`"];i&&m.push(i);let p=t;for(;p0,endIndex:r.length>0?c:e.length,children:r})}const y=(e,t)=>{const i=e.indexOf("=",t),a="+"===e.charAt(i-1)?"+=":"=",o="="===a?i:i-1,r=e.slice(t,o).indexOf("[");let c;const l=s(e,{type:n.VariableName,startIndex:t,endIndex:-1!==r?r:o});if(-1!==r){const i=s(e,{type:n.Word,startIndex:r+1,endIndex:o-1});c=s(e,{type:n.Subscript,name:l,startIndex:t,endIndex:i.endIndex+1,children:[i]})}else c=l;const{children:d,endIndex:m}=g(e,i+1," ");return s(e,{name:c,startIndex:t,endIndex:m,type:n.Assignment,operator:a,children:d,complete:d[d.length-1].complete})},w=(e,t,i)=>{const r=((e,t)=>{const n=[];let i=t;for(;i0){const c=r[r.length-1];let l;return!a(e,o(e,c.endIndex))&&c.complete&&c.endIndex!==e.length&&(l=b(e,c.endIndex,i)),s(e,{type:n.AssignmentList,startIndex:t,endIndex:l?l.endIndex:c.endIndex,hasCommand:!!l,children:l?[...r,l]:r})}return b(e,t,i)},v=(e,t,n,i)=>s(e,{type:i,startIndex:t.startIndex,children:n.type===i?[t,...n.children]:[t,n],endIndex:n.endIndex,complete:t.complete&&n.complete});function k(e,t,i){let r=o(e,t);r=-1===r?t:r;let c=null;if(["{","("].includes(e.charAt(r))){const t="{"===e.charAt(r),i=t?"}":")",{statements:a,terminatorIndex:o}=f(e,r+1,i,t),l=a.length>0,d=-1!==o;let m=o+1;d||(m=l?a[a.length-1].endIndex:e.length),c=s(e,{startIndex:r,type:t?n.CompoundStatement:n.Subshell,endIndex:m,complete:d&&l,children:a})}else c=w(e,r,i);r=c.endIndex;const l=o(e,r),d=-1!==l&&a(e,l);if(!d||";"===d||"&"===d||"&;"===d||-1!==l&&i&&e.charAt(l)===i)return c;const m=k(e,l+d.length,i);if("&&"===d||"||"===d)return v(e,c,m,n.List);if("|"===d||"|&"===d){if(m.type===n.List){const[t,...i]=m.children,a=v(e,c,t,n.Pipeline);return s(e,{type:n.List,startIndex:a.startIndex,children:[a,...i],endIndex:m.endIndex,complete:a.complete&&m.complete})}return v(e,c,m,n.Pipeline)}return c}t.printTree=e=>{const t=(e,n=0)=>{const i=" ".repeat(n);let a=`${i}${e.type} [${e.startIndex}, ${e.endIndex}] - ${e.text}`;const s=e.children.map(e=>t(e,n+1)).join("\n");return s&&(a+=`\n${s}`),e.complete||(a+=`\n${i}INCOMPLETE`),a};console.log(t(e))},t.parse=e=>s(e,{startIndex:0,type:n.Program,children:f(e,0,"").statements})},265:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.createGeneratorState=t.shellContextSelector=void 0;const i=n(3691),a=n(1121),s=n(6855);t.shellContextSelector=({figState:e})=>({currentWorkingDirectory:e.cwd||"",currentProcess:e.processUserIsIn||"",environmentVariables:e.environmentVariables,sshPrefix:""}),t.createGeneratorState=(e,n)=>({triggerGenerators:(n,o)=>{const{parserResult:{currentArg:r,searchTerm:c}}=e,{currentArg:l,searchTerm:d}=n,m=l?.generators??[],p=(e=>{const{command:n,parserResult:i}=e,{currentArg:a,searchTerm:s,annotations:o,commandIndex:r}=i,c=n?.tokens??[];return{...(0,t.shellContextSelector)(e),annotations:o.slice(r),tokenArray:c.slice(r).map(e=>e.text),isDangerous:Boolean(a?.isDangerous),searchTerm:s}})({...e,parserResult:n});return m.map((t,n)=>{const{trigger:m}=t,h=e.generatorStates[n];let u=!1;if(h&&l===r)if(void 0===m)u=Boolean(l?.debounce);else{let e;if("string"==typeof m)e=(e,t)=>e.lastIndexOf(m)!==t.lastIndexOf(m);else if("function"==typeof m)e=m;else switch(m.on){case"threshold":e=(e,t)=>e.length>m.length&&!(t.length>m.length);break;case"match":{const t="string"==typeof m.string?[m.string]:m.string;e=(e,n)=>t.findIndex(t=>t===e)!==t.findIndex(e=>e===n);break}default:e=(e,t)=>e!==t}try{u=e(d,c)}catch(e){u=!0}}else u=!0;if(!u)return h;const f={generator:t,context:p,result:h?.result||[],loading:!0};return l?.debounce?((0,a.sleep)("number"==typeof l.debounce&&l.debounce>0?l.debounce:200),f):((e,t)=>{const{generator:n,context:a}=e;let o;return o=n.template?Promise.resolve(void 0):n.script?(0,i.getScriptSuggestions)(n,a,void 0,t):(0,s.getCustomSuggestions)(n,a,t),{...e,loading:!0,request:o}})(f,o)})}})},346:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.default={name:"ls",description:"List directory contents",args:{isVariadic:!0,template:["filepaths","folders"],filterStrategy:"fuzzy"},options:[{name:"-@",description:"Display extended attribute keys and sizes in long (-l) output"},{name:"-1",description:"(The numeric digit ``one''.) Force output to be one entry per line. This is the default when output is not to a terminal"},{name:"-A",description:"List all entries except for . and ... Always set for the super-user"},{name:"-a",description:"Include directory entries whose names begin with a dot (.)"},{name:"-B",description:"Force printing of non-printable characters (as defined by ctype(3) and current locale settings) in file names as xxx, where xxx is the numeric value of the character in octal"},{name:"-b",description:"As -B, but use C escape codes whenever possible"},{name:"-C",description:"Force multi-column output; this is the default when output is to a terminal"},{name:"-c",description:"Use time when file status was last changed for sorting (-t) or long printing (-l)"},{name:"-d",description:"Directories are listed as plain files (not searched recursively)"},{name:"-e",description:"Print the Access Control List (ACL) associated with the file, if present, in long (-l) output"},{name:"-F",description:"Display a slash (/) immediately after each pathname that is a directory, an asterisk (*) after each that is executable, an at sign (@) after each symbolic link, an equals sign (=) after each socket, a percent sign (%) after each whiteout, and a vertical bar (|) after each that is a FIFO"},{name:"-f",description:"Output is not sorted. This option turns on the -a option"},{name:"-G",description:"Enable colorized output. This option is equivalent to defining CLICOLOR in the environment. (See below.)"},{name:"-g",description:"This option is only available for compatibility with POSIX; it is used to display the group name in the long (-l) format output (the owner name is suppressed)"},{name:"-H",description:"Symbolic links on the command line are followed. This option is assumed if none of the -F, -d, or -l options are specified"},{name:"-h",description:"When used with the -l option, use unit suffixes: Byte, Kilobyte, Megabyte, Gigabyte, Terabyte and Petabyte in order to reduce the number of digits to three or less using base 2 for sizes"},{name:"-i",description:"For each file, print the file's file serial number (inode number)"},{name:"-k",description:"If the -s option is specified, print the file size allocation in kilobytes, not blocks. This option overrides the environment variable BLOCKSIZE"},{name:"-L",description:"Follow all symbolic links to final target and list the file or directory the link references rather than the link itself. This option cancels the -P option"},{name:"-l",description:"(The lowercase letter ``ell''.) List in long format. (See below.) A total sum for all the file sizes is output on a line before the long listing"},{name:"-m",description:"Stream output format; list files across the page, separated by commas"},{name:"-n",description:"Display user and group IDs numerically, rather than converting to a user or group name in a long (-l) output. This option turns on the -l option"},{name:"-O",description:"Include the file flags in a long (-l) output"},{name:"-o",description:"List in long format, but omit the group id"},{name:"-P",description:"If argument is a symbolic link, list the link itself rather than the object the link references. This option cancels the -H and -L options"},{name:"-p",description:"Write a slash (`/') after each filename if that file is a directory"},{name:"-q",description:"Force printing of non-graphic characters in file names as the character `?'; this is the default when output is to a terminal"},{name:"-R",description:"Recursively list subdirectories encountered"},{name:"-r",description:"Reverse the order of the sort to get reverse lexicographical order or the oldest entries first (or largest files last, if combined with sort by size"},{name:"-S",description:"Sort files by size"},{name:"-s",description:"Display the number of file system blocks actually used by each file, in units of 512 bytes, where partial units are rounded up to the next integer value. If the output is to a terminal, a total sum for all the file sizes is output on a line before the listing. The environment variable BLOCKSIZE overrides the unit size of 512 bytes"},{name:"-T",description:"When used with the -l (lowercase letter ``ell'') option, display complete time information for the file, including month, day, hour, minute, second, and year"},{name:"-t",description:"Sort by time modified (most recently modified first) before sorting the operands by lexicographical order"},{name:"-u",description:"Use time of last access, instead of last modification of the file for sorting (-t) or long printing (-l)"},{name:"-U",description:"Use time of file creation, instead of last modification for sorting (-t) or long output (-l)"},{name:"-v",description:"Force unedited printing of non-graphic characters; this is the default when output is not to a terminal"},{name:"-W",description:"Display whiteouts when scanning directories. (-S) flag)"},{name:"-w",description:"Force raw printing of non-printable characters. This is the default when output is not to a terminal"},{name:"-x",description:"The same as -C, except that the multi-column output is produced with entries sorted across, rather than down, the columns"},{name:"-%",description:"Distinguish dataless files and directories with a '%' character in long (-l) output, and don't materialize dataless directories when listing them"},{name:"-,",description:"When the -l option is set, print file sizes grouped and separated by thousands using the non-monetary separator returned\nby localeconv(3), typically a comma or period. If no locale is set, or the locale does not have a non-monetary separator, this\noption has no effect. This option is not defined in IEEE Std 1003.1-2001 (“POSIX.1”)",dependsOn:["-l"]},{name:"--color",description:"Output colored escape sequences based on when, which may be set to either always, auto, or never",requiresSeparator:!0,args:{name:"when",suggestions:[{name:["always","yes","force"],description:"Will make ls always output color"},{name:"auto",description:"Will make ls output escape sequences based on termcap(5), but only if stdout is a tty and either the -G flag is specified or the COLORTERM environment variable is set and not empty"},{name:["never","no","none"],description:"Will disable color regardless of environment variables"}]}}]}},396:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.fishBuiltinsCommandDescriptionsCache=void 0,t.fishBuiltinsCommandDescriptionsCache={".":{shortDescription:"source - evaluate contents of file",description:"source evaluates the commands of the specified FILE in the current\nshell as a new block of code. This is different from starting a new\nprocess to perform the commands (i.e. fish < FILE) since the commands\nwill be evaluated by the current shell, which means that changes in\nshell variables will affect the current shell. If additional\narguments are specified after the file name, they will be inserted\ninto the argv variable. The argv variable will not include the name\nof the sourced file.\n\nfish will search the working directory to resolve relative paths but\nwill not search PATH .\n\nIf no file is specified and stdin is not the terminal, or if the file\nname - is used, stdin will be read.\n\nThe exit status of source is the exit status of the last job to\nexecute. If something goes wrong while opening or reading the file,\nsource exits with a non-zero status.\n\n. (a single period) is an alias for the source command. The use of .\nis deprecated in favour of source, and . will be removed in a future\nversion of fish.\n\nsource creates a new local scope; set --local within a sourced block\nwill not affect variables in the enclosing scope.\n\nThe -h or --help option displays help about using this command.\n\nEXAMPLE\n\n source ~/.config/fish/config.fish\n # Causes fish to re-read its initialization file.\n\nCAVEATS\nIn fish versions prior to 2.3.0, the argv variable would have a\nsingle element (the name of the sourced file) if no arguments are\npresent. Otherwise, it would contain arguments without the name of\nthe sourced file. That behavior was very confusing and unlike other\nshells such as bash and zsh.",args:"source FILE [ARGUMENTS ...]\nSOMECOMMAND | source"},":":{shortDescription:"No operation command",description:"The `:` command is a no-op (no operation) command that returns a successful (zero) exit status. It can be used as a placeholder in scripts where a command is syntactically required but no action is desired."},"[":{shortDescription:"Test if a statement is true",description:"Evaluate an expression and return a status of true (0) or false (non-zero). Unlike the `test` command, the `[` command requires a closing `]`.",args:"EXPRESSION ]"},_:{shortDescription:"",description:""},abbr:{shortDescription:"manage fish abbreviations",description:'abbr manages abbreviations - user-defined words that are replaced\nwith longer phrases when entered.\n\nNOTE:\n Only typed-in commands use abbreviations. Abbreviations are not\n expanded in scripts.\n\nFor example, a frequently-run command like git checkout can be\nabbreviated to gco. After entering gco and pressing Space or Enter,\nthe full text git checkout will appear in the command line. To avoid\nexpanding something that looks like an abbreviation, the default\nControl+Space binding inserts a space without expanding.\n\nAn abbreviation may match a literal word, or it may match a pattern\ngiven by a regular expression. When an abbreviation matches a word,\nthat word is replaced by new text, called its expansion. This\nexpansion may be a fixed new phrase, or it can be dynamically created\nvia a fish function. This expansion occurs after pressing space or\nenter.\n\nCombining these features, it is possible to create custom syntaxes,\nwhere a regular expression recognizes matching tokens, and the\nexpansion function interprets them. See the Examples section.\n\nChanged in version 3.6.0: Previous versions of this allowed saving\nabbreviations in universal variables. That\'s no longer possible.\nExisting variables will still be imported and abbr --erase will also\nerase the variables. We recommend adding abbreviations to\nconfig.fish by just adding the abbr --add command. When you run\nabbr, you will see output like this\n\n > abbr\n abbr -a -- foo bar # imported from a universal variable, see `help abbr`\n\nIn that case you should take the part before the # comment and save\nit in config.fish, then you can run abbr --erase to remove the\nuniversal variable:\n\n > abbr >> ~/.config/fish/config.fish\n > abbr --erase (abbr --list)\n\nADD SUBCOMMAND\nabbr [-a | --add] NAME [--position command | anywhere] [-r | --regex PATTERN]\n [--set-cursor[=MARKER]] ([-f | --function FUNCTION] | EXPANSION)\n\nabbr --add creates a new abbreviation. With no other options, the\nstring NAME is replaced by EXPANSION.\n\nWith --position command, the abbreviation will only expand when it is\npositioned as a command, not as an argument to another command. With\n--position anywhere the abbreviation may expand anywhere in the\ncommand line. The default is command.\n\nWith --regex, the abbreviation matches using the regular expression\ngiven by PATTERN, instead of the literal NAME. The pattern is\ninterpreted using PCRE2 syntax and must match the entire token. If\nmultiple abbreviations match the same token, the last abbreviation\nadded is used.\n\nWith --set-cursor=MARKER, the cursor is moved to the first occurrence\nof MARKER in the expansion. The MARKER value is erased. The MARKER\nmay be omitted (i.e. simply --set-cursor), in which case it defaults\nto %.\n\nWith -f FUNCTION or --function FUNCTION, FUNCTION is treated as the\nname of a fish function instead of a literal replacement. When the\nabbreviation matches, the function will be called with the matching\ntoken as an argument. If the function\'s exit status is 0 (success),\nthe token will be replaced by the function\'s output; otherwise the\ntoken will be left unchanged. No EXPANSION may be given separately.\n\n Examples\n\n abbr --add gco git checkout\n\nAdd a new abbreviation where gco will be replaced with git checkout.\n\n abbr -a --position anywhere -- -C --color\n\nAdd a new abbreviation where -C will be replaced with --color. The --\nallows -C to be treated as the name of the abbreviation, instead of\nan option.\n\n abbr -a L --position anywhere --set-cursor "% | less"\n\nAdd a new abbreviation where L will be replaced with | less, placing\nthe cursor before the pipe.\n\n function last_history_item\n echo $history[1]\n end\n abbr -a !! --position anywhere --function last_history_item\n\nThis first creates a function last_history_item which outputs the\nlast entered command. It then adds an abbreviation which replaces !!\nwith the result of calling this function. Taken together, this is\nsimilar to the !! history expansion feature of bash.\n\n function vim_edit\n echo vim $argv\n end\n abbr -a vim_edit_texts --position command --regex ".+\\.txt" --function vim_edit\n\nThis first creates a function vim_edit which prepends vim before its\nargument. It then adds an abbreviation which matches commands ending\nin .txt, and replaces the command with the result of calling this\nfunction. This allows text files to be "executed" as a command to\nopen them in vim, similar to the "suffix alias" feature in zsh.\n\n abbr 4DIRS --set-cursor=! "$(string join \\n -- \'for dir in */\' \'cd $dir\' \'!\' \'cd ..\' \'end\')"\n\nThis creates an abbreviation "4DIRS" which expands to a multi-line\nloop "template." The template enters each directory and then leaves\nit. The cursor is positioned ready to enter the command to run in\neach directory, at the location of the !, which is itself erased.\n\nOTHER SUBCOMMANDS\n\n abbr --rename OLD_NAME NEW_NAME\n\nRenames an abbreviation, from OLD_NAME to NEW_NAME\n\n abbr [-s | --show]\n\nShow all abbreviations in a manner suitable for import and export\n\n abbr [-l | --list]\n\nPrints the names of all abbreviation\n\n abbr [-e | --erase] NAME\n\nErases the abbreviation with the given name\n\n abbr -q or --query [NAME...]\n\nReturn 0 (true) if one of the NAME is an abbreviation.\n\n abbr -h or --help\n\nDisplays help for the abbr command.',args:"abbr --add NAME [--position command | anywhere] [-r | --regex PATTERN]\n[--set-cursor[=MARKER]] ([-f | --function FUNCTION] | EXPANSION)\nabbr --erase NAME ...\nabbr --rename OLD_WORD NEW_WORD\nabbr --show\nabbr --list\nabbr --query NAME ..."},and:{shortDescription:"conditionally execute a command",description:"and is used to execute a command if the previous command was\nsuccessful (returned a status of 0).\n\nand statements may be used as part of the condition in an while or if\nblock.\n\nand does not change the current exit status itself, but the command\nit runs most likely will. The exit status of the last foreground\ncommand to exit can always be accessed using the $status variable.\n\nThe -h or --help option displays help about using this command.\n\nEXAMPLE\nThe following code runs the make command to build a program. If the\nbuild succeeds, make's exit status is 0, and the program is\ninstalled. If either step fails, the exit status is 1, and make clean\nis run, which removes the files created by the build process.\n\n make; and make install; or make clean\n\nSEE ALSO\n\n• or command\n\n• not command",args:"PREVIOUS; and COMMAND"},argparse:{shortDescription:"parse options passed to a fish script or function",description:"This command makes it easy for fish scripts and functions to handle\narguments. You pass arguments that define the known options, followed\nby a literal --, then the arguments to be parsed (which might also\ninclude a literal --). argparse then sets variables to indicate the\npassed options with their values, and sets $argv to the remaining\narguments. See the usage section below.\n\nEach option specification (OPTION_SPEC) is written in the domain\nspecific language described below. All OPTION_SPECs must appear after\nany argparse flags and before the -- that separates them from the\narguments to be parsed.\n\nEach option that is seen in the ARG list will result in variables\nnamed _flag_X, where X is the short flag letter and the long flag\nname (if they are defined). For example a --help option could cause\nargparse to define one variable called _flag_h and another called\n_flag_help.\n\nThe variables will be set with local scope (i.e., as if the script\nhad done set -l _flag_X). If the flag is a boolean (that is, it just\nis passed or not, it doesn't have a value) the values are the short\nand long flags seen. If the option is not a boolean the values will\nbe zero or more values corresponding to the values collected when the\nARG list is processed. If the flag was not seen the flag variable\nwill not be set.\n\nOPTIONS\nThe following argparse options are available. They must appear before\nall OPTION_SPECs:\n\n-n or --name\n The command name for use in error messages. By default the\n current function name will be used, or argparse if run outside\n of a function.\n\n-x or --exclusive OPTIONS\n A comma separated list of options that are mutually exclusive.\n You can use this more than once to define multiple sets of\n mutually exclusive options. You give either the short or long\n version of each option, and you still need to otherwise define\n the options.\n\n-N or --min-args NUMBER\n The minimum number of acceptable non-option arguments. The\n default is zero.\n\n-X or --max-args NUMBER\n The maximum number of acceptable non-option arguments. The\n default is infinity.\n\n-i or --ignore-unknown\n Ignores unknown options, keeping them and their arguments in\n $argv instead.\n\n-s or --stop-nonopt\n Causes scanning the arguments to stop as soon as the first\n non-option argument is seen. Among other things, this is\n useful to implement subcommands that have their own options.\n\n-h or --help\n Displays help about using this command.\n\nUSAGE\nTo use this command, pass the option specifications (OPTION_SPEC), a\nmandatory --, and then the arguments to be parsed.\n\nA simple example:\n\n argparse --name=my_function 'h/help' 'n/name=' -- $argv\n or return\n\nIf $argv is empty then there is nothing to parse and argparse returns\nzero to indicate success. If $argv is not empty then it is checked\nfor flags -h, --help, -n and --name. If they are found they are\nremoved from the arguments and local variables called _flag_OPTION\nare set so the script can determine which options were seen. If $argv\ndoesn't have any errors, like a missing mandatory value for an\noption, then argparse exits with a status of zero. Otherwise it\nwrites appropriate error messages to stderr and exits with a status\nof one.\n\nThe or return means that the function returns argparse's status if it\nfailed, so if it goes on argparse succeeded.\n\nThe -- argument is required. You do not have to include any option\nspecifications or arguments after the -- but you must include the --.\nFor example, this is acceptable:\n\n set -l argv foo\n argparse 'h/help' 'n/name' -- $argv\n argparse --min-args=1 -- $argv\n\nBut this is not:\n\n set -l argv\n argparse 'h/help' 'n/name' $argv\n\nThe first -- seen is what allows the argparse command to reliably\nseparate the option specifications and options to argparse itself\n(like --ignore-unknown) from the command arguments, so it is\nrequired.\n\nOPTION SPECIFICATIONS\nEach option specification consists of:\n\n• An optional alphanumeric short flag character, followed by a / if\n the short flag can be used by someone invoking your command or, for\n backwards compatibility, a - if it should not be exposed as a valid\n short flag (in which case it will also not be exposed as a flag\n variable).\n\n• An optional long flag name, which if not present the short flag can\n be used, and if that is also not present, an error is reported\n\n• Nothing if the flag is a boolean that takes no argument or is an\n integer flag, or\n\n • = if it requires a value and only the last instance of the\n flag is saved, or\n\n • =? if it takes an optional value and only the last instance of\n the flag is saved, or\n\n • =+ if it requires a value and each instance of the flag is\n saved.\n\n• Optionally a ! followed by fish script to validate the value.\n Typically this will be a function to run. If the exit status is\n zero the value for the flag is valid. If non-zero the value is\n invalid. Any error messages should be written to stdout (not\n stderr). See the section on Flag Value Validation for more\n information.\n\nSee the fish_opt command for a friendlier but more verbose way to\ncreate option specifications.\n\nIf a flag is not seen when parsing the arguments then the\ncorresponding _flag_X var(s) will not be set.\n\nINTEGER FLAG\nSometimes commands take numbers directly as options, like foo -55. To\nallow this one option spec can have the # modifier so that any\ninteger will be understood as this flag, and the last number will be\ngiven as its value (as if = was used).\n\nThe # must follow the short flag letter (if any), and other modifiers\nlike = are not allowed, except for - (for backwards compatibility):\n\n m#maximum\n\nThis does not read numbers given as +NNN, only those that look like\nflags - -NNN.\n\nNOTE: OPTIONAL ARGUMENTS\nAn option defined with =? can take optional arguments. Optional\narguments have to be directly attached to the option they belong to.\n\nThat means the argument will only be used for the option if you use\nit like:\n\n cmd --flag=value\n # or\n cmd -fvalue\n\nbut not if used like:\n\n cmd --flag value\n # \"value\" here will be used as a positional argument\n # and \"--flag\" won't have an argument.\n\nIf this weren't the case, using an option without an optional\nargument would be difficult if you also wanted to use positional\narguments.\n\nFor example:\n\n grep --color auto\n # Here \"auto\" will be used as the search string,\n # \"color\" will not have an argument and will fall back to the default,\n # which also *happens to be* auto.\n grep --color always\n # Here grep will still only use color \"auto\"matically\n # and search for the string \"always\".\n\nThis isn't specific to argparse but common to all things using\ngetopt(3) (if they have optional arguments at all). That grep example\nis how GNU grep actually behaves.\n\nFLAG VALUE VALIDATION\nSometimes you need to validate the option values. For example, that\nit is a valid integer within a specific range, or an ip address, or\nsomething entirely different. You can always do this after argparse\nreturns but you can also request that argparse perform the validation\nby executing arbitrary fish script. To do so simply append an !\n(exclamation-mark) then the fish script to be run. When that code is\nexecuted three vars will be defined:\n\n• _argparse_cmd will be set to the value of the value of the argparse\n --name value.\n\n• _flag_name will be set to the short or long flag that being\n processed.\n\n• _flag_value will be set to the value associated with the flag being\n processed.\n\nThese variables are passed to the function as local exported\nvariables.\n\nThe script should write any error messages to stdout, not stderr. It\nshould return a status of zero if the flag value is valid otherwise a\nnon-zero status to indicate it is invalid.\n\nFish ships with a _validate_int function that accepts a --min and\n--max flag. Let's say your command accepts a -m or --max flag and the\nminimum allowable value is zero and the maximum is 5. You would\ndefine the option like this: m/max=!_validate_int --min 0 --max 5.\nThe default if you just call _validate_int without those flags is to\nsimply check that the value is a valid integer with no limits on the\nmin or max value allowed.\n\nHere are some examples of flag validations:\n\n # validate that a path is a directory\n argparse 'p/path=!test -d \"$_flag_value\"' -- --path $__fish_config_dir\n # validate that a function does not exist\n argparse 'f/func=!not functions -q \"$_flag_value\"' -- -f alias\n # validate that a string matches a regex\n argparse 'c/color=!string match -rq \\'^#?[0-9a-fA-F]{6}$\\' \"$_flag_value\"' -- -c 'c0ffee'\n # validate with a validator function\n argparse 'n/num=!_validate_int --min 0 --max 99' -- --num 42\n\nEXAMPLE OPTION_SPECS\nSome OPTION_SPEC examples:\n\n• h/help means that both -h and --help are valid. The flag is a\n boolean and can be used more than once. If either flag is used then\n _flag_h and _flag_help will be set to however either flag was seen,\n as many times as it was seen. So it could be set to -h, -h and\n --help, and count $_flag_h would yield \"3\".\n\n• help means that only --help is valid. The flag is a boolean and can\n be used more than once. If it is used then _flag_help will be set\n as above. Also h-help (with an arbitrary short letter) for\n backwards compatibility.\n\n• longonly= is a flag --longonly that requires an option, there is no\n short flag or even short flag variable.\n\n• n/name= means that both -n and --name are valid. It requires a\n value and can be used at most once. If the flag is seen then\n _flag_n and _flag_name will be set with the single mandatory value\n associated with the flag.\n\n• n/name=? means that both -n and --name are valid. It accepts an\n optional value and can be used at most once. If the flag is seen\n then _flag_n and _flag_name will be set with the value associated\n with the flag if one was provided else it will be set with no\n values.\n\n• name=+ means that only --name is valid. It requires a value and can\n be used more than once. If the flag is seen then _flag_name will be\n set with the values associated with each occurrence.\n\n• x means that only -x is valid. It is a boolean that can be used\n more than once. If it is seen then _flag_x will be set as above.\n\n• x=, x=?, and x=+ are similar to the n/name examples above but there\n is no long flag alternative to the short flag -x.\n\n• #max (or #-max) means that flags matching the regex \"^--?\\d+$\" are\n valid. When seen they are assigned to the variable _flag_max. This\n allows any valid positive or negative integer to be specified by\n prefixing it with a single \"-\". Many commands support this idiom.\n For example head -3 /a/file to emit only the first three lines of\n /a/file.\n\n• n#max means that flags matching the regex \"^--?\\d+$\" are valid.\n When seen they are assigned to the variables _flag_n and _flag_max.\n This allows any valid positive or negative integer to be specified\n by prefixing it with a single \"-\". Many commands support this\n idiom. For example head -3 /a/file to emit only the first three\n lines of /a/file. You can also specify the value using either flag:\n -n NNN or --max NNN in this example.\n\n• #longonly causes the last integer option to be stored in\n _flag_longonly.\n\nAfter parsing the arguments the argv variable is set with local scope\nto any values not already consumed during flag processing. If there\nare no unbound values the variable is set but count $argv will be\nzero.\n\nIf an error occurs during argparse processing it will exit with a\nnon-zero status and print error messages to stderr.\n\nEXAMPLES\nA simple use:\n\n argparse h/help -- $argv\n or return\n\n if set -q _flag_help\n # TODO: Print help here\n return 0\n end\n\nThis just wants one option - -h / --help. Any other option is an\nerror. If it is given it prints help and exits.\n\nHow fish_add_path - add to the path parses its args:\n\n argparse -x g,U -x P,U -x a,p g/global U/universal P/path p/prepend a/append h/help m/move v/verbose n/dry-run -- $argv\n\nThere are a variety of boolean flags, all with long and short\nversions. A few of these cannot be used together, and that is what\nthe -x flag is used for. -x g,U means that --global and --universal\nor their short equivalents conflict, and if they are used together\nyou get an error. In this case you only need to give the short or\nlong flag, not the full option specification.\n\nAfter this it figures out which variable it should operate on\naccording to the --path flag:\n\n set -l var fish_user_paths\n set -q _flag_path\n and set var PATH\n\nLIMITATIONS\nOne limitation with --ignore-unknown is that, if an unknown option is\ngiven in a group with known options, the entire group will be kept in\n$argv. argparse will not do any permutations here.\n\nFor instance:\n\n argparse --ignore-unknown h -- -ho\n echo $_flag_h # is -h, because -h was given\n echo $argv # is still -ho\n\nThis limitation may be lifted in future.\n\nAdditionally, it can only parse known options up to the first unknown\noption in the group - the unknown option could take options, so it\nisn't clear what any character after an unknown option means.",args:"argparse [OPTIONS] OPTION_SPEC ... -- [ARG ...]"},begin:{shortDescription:"start a new block of code",description:"begin is used to create a new block of code.\n\nA block allows the introduction of a new variable scope, redirection\nof the input or output of a set of commands as a group, or to specify\nprecedence when using the conditional commands like and.\n\nThe block is unconditionally executed. begin; ...; end is equivalent\nto if true; ...; end.\n\nbegin does not change the current exit status itself. After the block\nhas completed, $status will be set to the status returned by the most\nrecent command.\n\nThe -h or --help option displays help about using this command.\n\nEXAMPLE\nThe following code sets a number of variables inside of a block\nscope. Since the variables are set inside the block and have local\nscope, they will be automatically deleted when the block ends.\n\n begin\n set -l PIRATE Yarrr\n\n ...\n end\n\n echo $PIRATE\n # This will not output anything, since the PIRATE variable\n # went out of scope at the end of the block\n\nIn the following code, all output is redirected to the file out.html.\n\n begin\n echo $xml_header\n echo $html_header\n if test -e $file\n ...\n end\n ...\n end > out.html",args:"begin; [COMMANDS ...]; end"},bg:{shortDescription:"send jobs to background",description:'bg sends jobs to the background, resuming them if they are stopped.\n\nA background job is executed simultaneously with fish, and does not\nhave access to the keyboard. If no job is specified, the last job to\nbe used is put in the background. If PID is specified, the jobs\ncontaining the specified process IDs are put in the background.\n\nFor compatibility with other shells, job expansion syntax is\nsupported for bg. A PID of the format %1 will be interpreted as the\nPID of job 1. Job numbers can be seen in the output of jobs.\n\nWhen at least one of the arguments isn\'t a valid job specifier, bg\nwill print an error without backgrounding anything.\n\nWhen all arguments are valid job specifiers, bg will background all\nmatching jobs that exist.\n\nThe -h or --help option displays help about using this command.\n\nEXAMPLE\nbg 123 456 789 will background the jobs that contain processes 123,\n456 and 789.\n\nIf only 123 and 789 exist, it will still background them and print an\nerror about 456.\n\nbg 123 banana or bg banana 123 will complain that "banana" is not a\nvalid job specifier.\n\nbg %1 will background job 1.',args:"bg [PID ...]"},bind:{shortDescription:"handle fish key bindings",description:"bind manages bindings.\n\nIt can add bindings if given a SEQUENCE of characters to bind to.\nThese should be written as fish escape sequences. The most important\nof these are \\c for the control key, and \\e for escape, and because\nof historical reasons also the Alt key (sometimes also called\n\"Meta\").\n\nFor example, Alt+W can be written as \\ew, and Control+X (^X) can be\nwritten as \\cx. Note that Alt-based key bindings are case sensitive\nand Control-based key bindings are not. This is a constraint of\ntext-based terminals, not fish.\n\nThe generic key binding that matches if no other binding does can be\nset by specifying a SEQUENCE of the empty string (that is, '' ). For\nmost key bindings, it makes sense to bind this to the self-insert\nfunction (i.e. bind '' self-insert). This will insert any keystrokes\nnot specifically bound to into the editor. Non-printable characters\nare ignored by the editor, so this will not result in control\nsequences being inserted.\n\nIf the -k switch is used, the name of a key (such as 'down', 'up' or\n'backspace') is used instead of a sequence. The names used are the\nsame as the corresponding curses variables, but without the 'key'\nprefix. (See terminfo(5) for more information, or use bind\n--key-names for a list of all available named keys). Normally this\nwill print an error if the current $TERM entry doesn't have a given\nkey, unless the -s switch is given.\n\nTo find out what sequence a key combination sends, you can use\nfish_key_reader.\n\nCOMMAND can be any fish command, but it can also be one of a set of\nspecial input functions. These include functions for moving the\ncursor, operating on the kill-ring, performing tab completion, etc.\nUse bind --function-names for a complete list of these input\nfunctions.\n\nWhen COMMAND is a shellscript command, it is a good practice to put\nthe actual code into a function and simply bind to the function name.\nThis way it becomes significantly easier to test the function while\nediting, and the result is usually more readable as well.\n\nNOTE:\n Special input functions cannot be combined with ordinary shell\n script commands. The commands must be entirely a sequence of\n special input functions (from bind -f) or all shell script\n commands (i.e., valid fish script). To run special input functions\n from regular fish script, use commandline -f (see also\n commandline). If a script produces output, it should finish by\n calling commandline -f repaint to tell fish that a repaint is in\n order.\n\nIf no SEQUENCE is provided, all bindings (or just the bindings in the\ngiven MODE) are printed. If SEQUENCE is provided but no COMMAND, just\nthe binding matching that sequence is printed.\n\nTo save custom key bindings, put the bind statements into\nconfig.fish. Alternatively, fish also automatically executes a\nfunction called fish_user_key_bindings if it exists.\n\nKey bindings may use \"modes\", which mimics Vi's modal input behavior.\nThe default mode is \"default\". Every key binding applies to a single\nmode; you can specify which one with -M MODE. If the key binding\nshould change the mode, you can specify the new mode with -m\nNEW_MODE. The mode can be viewed and changed via the $fish_bind_mode\nvariable. If you want to change the mode from inside a fish function,\nuse set fish_bind_mode MODE.\n\nOPTIONS\nThe following options are available:\n\n-k or --key\n Specify a key name, such as 'left' or 'backspace' instead of a\n character sequence\n\n-K or --key-names\n Display a list of available key names. Specifying -a or --all\n includes keys that don't have a known mapping\n\n-f or --function-names\n Display a list of available input functions\n\n-L or --list-modes\n Display a list of defined bind modes\n\n-M MODE or --mode MODE\n Specify a bind mode that the bind is used in. Defaults to\n \"default\"\n\n-m NEW_MODE or --sets-mode NEW_MODE\n Change the current mode to NEW_MODE after this binding is\n executed\n\n-e or --erase\n Erase the binding with the given sequence and mode instead of\n defining a new one. Multiple sequences can be specified with\n this flag. Specifying -a or --all with -M or --mode erases\n all binds in the given mode regardless of sequence.\n Specifying -a or --all without -M or --mode erases all binds\n in all modes regardless of sequence.\n\n-a or --all\n See --erase and --key-names\n\n--preset and --user\n Specify if bind should operate on user or preset bindings.\n User bindings take precedence over preset bindings when fish\n looks up mappings. By default, all bind invocations work on\n the \"user\" level except for listing, which will show both\n levels. All invocations except for inserting new bindings can\n operate on both levels at the same time (if both --preset and\n --user are given). --preset should only be used in full\n binding sets (like when working on fish_vi_key_bindings).\n\n-s or --silent\n Silences some of the error messages, including for unknown key\n names and unbound sequences.\n\n-h or --help\n Displays help about using this command.\n\nSPECIAL INPUT FUNCTIONS\nThe following special input functions are available:\n\nand only execute the next function if the previous succeeded\n (note: only some functions report success)\n\naccept-autosuggestion\n accept the current autosuggestion\n\nbackward-char\n move one character to the left. If the completion pager is\n active, select the previous completion instead.\n\nbackward-bigword\n move one whitespace-delimited word to the left\n\nbackward-delete-char\n deletes one character of input to the left of the cursor\n\nbackward-kill-bigword\n move the whitespace-delimited word to the left of the cursor\n to the killring\n\nbackward-kill-line\n move everything from the beginning of the line to the cursor\n to the killring\n\nbackward-kill-path-component\n move one path component to the left of the cursor to the\n killring. A path component is everything likely to belong to a\n path component, i.e. not any of the following: /={,}'\":@\n |;<>&, plus newlines and tabs.\n\nbackward-kill-word\n move the word to the left of the cursor to the killring. The\n \"word\" here is everything up to punctuation or whitespace.\n\nbackward-word\n move one word to the left\n\nbeginning-of-buffer\n moves to the beginning of the buffer, i.e. the start of the\n first line\n\nbeginning-of-history\n move to the beginning of the history\n\nbeginning-of-line\n move to the beginning of the line\n\nbegin-selection\n start selecting text\n\ncancel cancel the current commandline and replace it with a new empty\n one\n\ncancel-commandline\n cancel the current commandline and replace it with a new empty\n one, leaving the old one in place with a marker to show that\n it was cancelled\n\ncapitalize-word\n make the current word begin with a capital letter\n\nclear-screen\n clears the screen and redraws the prompt. if the terminal\n doesn't support clearing the screen it is the same as repaint.\n\ncomplete\n guess the remainder of the current token\n\ncomplete-and-search\n invoke the searchable pager on completion options (for\n convenience, this also moves backwards in the completion\n pager)\n\ndelete-char\n delete one character to the right of the cursor\n\ndelete-or-exit\n delete one character to the right of the cursor, or exit the\n shell if the commandline is empty\n\ndown-line\n move down one line\n\ndowncase-word\n make the current word lowercase\n\nend-of-buffer\n moves to the end of the buffer, i.e. the end of the first line\n\nend-of-history\n move to the end of the history\n\nend-of-line\n move to the end of the line\n\nend-selection\n end selecting text\n\nexpand-abbr\n expands any abbreviation currently under the cursor\n\nexecute\n run the current commandline\n\nexit exit the shell\n\nforward-bigword\n move one whitespace-delimited word to the right\n\nforward-char\n move one character to the right; or if at the end of the\n commandline, accept the current autosuggestion. If the\n completion pager is active, select the next completion\n instead.\n\nforward-single-char\n move one character to the right; or if at the end of the\n commandline, accept a single char from the current\n autosuggestion.\n\nforward-word\n move one word to the right; or if at the end of the\n commandline, accept one word from the current autosuggestion.\n\nhistory-pager\n invoke the searchable pager on history (incremental search);\n or if the history pager is already active, search further\n backwards in time.\n\nhistory-pager-delete\n permanently delete the history item selected in the history\n pager\n\nhistory-search-backward\n search the history for the previous match\n\nhistory-search-forward\n search the history for the next match\n\nhistory-prefix-search-backward\n search the history for the previous prefix match\n\nhistory-prefix-search-forward\n search the history for the next prefix match\n\nhistory-token-search-backward\n search the history for the previous matching argument\n\nhistory-token-search-forward\n search the history for the next matching argument\n\nforward-jump and backward-jump\n read another character and jump to its next occurence\n after/before the cursor\n\nforward-jump-till and backward-jump-till\n jump to right before the next occurence\n\nrepeat-jump and repeat-jump-reverse\n redo the last jump in the same/opposite direction\n\nkill-bigword\n move the next whitespace-delimited word to the killring\n\nkill-line\n move everything from the cursor to the end of the line to the\n killring\n\nkill-selection\n move the selected text to the killring\n\nkill-whole-line\n move the line (including the following newline) to the\n killring. If the line is the last line, its preceeding newline\n is also removed\n\nkill-inner-line\n move the line (without the following newline) to the killring\n\nkill-word\n move the next word to the killring\n\nnextd-or-forward-word\n if the commandline is empty, then move forward in the\n directory history, otherwise move one word to the right; or if\n at the end of the commandline, accept one word from the\n current autosuggestion.\n\nor only execute the next function if the previous did not succeed\n (note: only some functions report failure)\n\npager-toggle-search\n toggles the search field if the completions pager is visible;\n or if used after history-pager, search forwards in time.\n\nprevd-or-backward-word\n if the commandline is empty, then move backward in the\n directory history, otherwise move one word to the left\n\nrepaint\n reexecutes the prompt functions and redraws the prompt (also\n force-repaint for backwards-compatibility)\n\nrepaint-mode\n reexecutes the fish_mode_prompt and redraws the prompt. This\n is useful for vi-mode. If no fish_mode_prompt exists or it\n prints nothing, it acts like a normal repaint.\n\nself-insert\n inserts the matching sequence into the command line\n\nself-insert-notfirst\n inserts the matching sequence into the command line, unless\n the cursor is at the beginning\n\nsuppress-autosuggestion\n remove the current autosuggestion. Returns true if there was a\n suggestion to remove.\n\nswap-selection-start-stop\n go to the other end of the highlighted text without changing\n the selection\n\ntranspose-chars\n transpose two characters to the left of the cursor\n\ntranspose-words\n transpose two words to the left of the cursor\n\ntogglecase-char\n toggle the capitalisation (case) of the character under the\n cursor\n\ntogglecase-selection\n toggle the capitalisation (case) of the selection\n\ninsert-line-under\n add a new line under the current line\n\ninsert-line-over\n add a new line over the current line\n\nup-line\n move up one line\n\nundo and redo\n revert or redo the most recent edits on the command line\n\nupcase-word\n make the current word uppercase\n\nyank insert the latest entry of the killring into the buffer\n\nyank-pop\n rotate to the previous entry of the killring\n\nADDITIONAL FUNCTIONS\nThe following functions are included as normal functions, but are\nparticularly useful for input editing:\n\nup-or-search and down-or-search\n move the cursor or search the history depending on the cursor\n position and current mode\n\nedit_command_buffer\n open the visual editor (controlled by the VISUAL or EDITOR\n environment variables) with the current command-line contents\n\nfish_clipboard_copy\n copy the current selection to the system clipboard\n\nfish_clipboard_paste\n paste the current selection from the system clipboard before\n the cursor\n\nfish_commandline_append\n append the argument to the command-line. If the command-line\n already ends with the argument, this removes the suffix\n instead. Starts with the last command from history if the\n command-line is empty.\n\nfish_commandline_prepend\n prepend the argument to the command-line. If the command-line\n already starts with the argument, this removes the prefix\n instead. Starts with the last command from history if the\n command-line is empty.\n\nEXAMPLES\nExit the shell when Control+D is pressed:\n\n bind \\cd 'exit'\n\nPerform a history search when Page Up is pressed:\n\n bind -k ppage history-search-backward\n\nTurn on Vi key bindings and rebind Control+C to clear the input line:\n\n set -g fish_key_bindings fish_vi_key_bindings\n bind -M insert \\cc kill-whole-line repaint\n\nLaunch git diff and repaint the commandline afterwards when Control+G\nis pressed:\n\n bind \\cg 'git diff; commandline -f repaint'\n\nTERMINAL LIMITATIONS\nUnix terminals, like the ones fish operates in, are at heart 70s\ntechnology. They have some limitations that applications running\ninside them can't workaround.\n\nFor instance, the control key modifies a character by setting the top\nthree bits to 0. This means:\n\n• Many characters + control are indistinguishable from other keys.\n Control+I is tab, Control+J is newline (\\n).\n\n• Control and shift don't work simultaneously\n\nOther keys don't have a direct encoding, and are sent as escape\nsequences. For example → (Right) often sends \\e\\[C. These can differ\nfrom terminal to terminal, and the mapping is typically available in\nterminfo(5). Sometimes however a terminal identifies as e.g.\nxterm-256color for compatibility, but then implements xterm's\nsequences incorrectly.\n\nSPECIAL CASE: THE ESCAPE CHARACTER\nThe escape key can be used standalone, for example, to switch from\ninsertion mode to normal mode when using Vi keybindings. Escape can\nalso be used as a \"meta\" key, to indicate the start of an escape\nsequence, like for function or arrow keys. Custom bindings can also\nbe defined that begin with an escape character.\n\nHolding alt and something else also typically sends escape, for\nexample holding alt+a will send an escape character and then an \"a\".\n\nfish waits for a period after receiving the escape character, to\ndetermine whether it is standalone or part of an escape sequence.\nWhile waiting, additional key presses make the escape key behave as a\nmeta key. If no other key presses come in, it is handled as a\nstandalone escape. The waiting period is set to 30 milliseconds (0.03\nseconds). It can be configured by setting the fish_escape_delay_ms\nvariable to a value between 10 and 5000 ms. This can be a universal\nvariable that you set once from an interactive session. So the\nescape character has its own timeout configured with\nfish_escape_delay_ms.\n\nSee also Key sequences.",args:"bind [(-M | --mode) MODE] [(-m | --sets-mode) NEW_MODE] [--preset | --user] [-s | --silent] [-k | --key] SEQUENCE COMMAND ...\nbind [(-M | --mode) MODE] [-k | --key] [--preset] [--user] SEQUENCE\nbind (-K | --key-names) [-a | --all] [--preset] [--user]\nbind (-f | --function-names)\nbind (-L | --list-modes)\nbind (-e | --erase) [(-M | --mode) MODE] [--preset] [--user] [-a | --all] | [-k | --key] SEQUENCE ..."},block:{shortDescription:"temporarily block delivery of events",description:"block prevents events triggered by fish or the emit command from\nbeing delivered and acted upon while the block is in place.\n\nIn functions, block can be useful while performing work that should\nnot be interrupted by the shell.\n\nThe block can be removed. Any events which triggered while the block\nwas in place will then be delivered.\n\nEvent blocks should not be confused with code blocks, which are\ncreated with begin, if, while or for\n\nWithout options, the block command acts with function scope.\n\nThe following options are available:\n\n-l or --local\n Release the block automatically at the end of the current\n innermost code block scope.\n\n-g or --global\n Never automatically release the lock.\n\n-e or --erase\n Release global block.\n\n-h or --help\n Displays help about using this command.\n\nEXAMPLE\n\n # Create a function that listens for events\n function --on-event foo foo; echo 'foo fired'; end\n\n # Block the delivery of events\n block -g\n\n emit foo\n # No output will be produced\n\n block -e\n # 'foo fired' will now be printed\n\nNOTES\nEvents are only received from the current fish process as there is no\nway to send events from one fish process to another (yet).",args:"block [(--local | --global)]\nblock --erase"},break:{shortDescription:"Exit the current loop",description:"Terminate the execution of the nearest enclosing `while` or `for` loop and proceed with the next command after the loop."},breakpoint:{shortDescription:"Launch debug mode",description:"Pause execution and launch an interactive debug prompt. This is useful for inspecting the state of a script at a specific point."},builtin:{shortDescription:"run a builtin command",description:"builtin forces the shell to use a builtin command named BUILTIN,\nrather than a function or external program.\n\nThe following options are available:\n\n-n or --names\n Lists the names of all defined builtins.\n\n-q or --query BUILTIN\n Tests if any of the specified builtins exist. If any exist, it\n returns 0, 1 otherwise.\n\n-h or --help\n Displays help about using this command.\n\nEXAMPLE\n\n builtin jobs\n # executes the jobs builtin, even if a function named jobs exists",args:"builtin [OPTIONS] BUILTINNAME\nbuiltin --query BUILTINNAME ...\nbuiltin --names"},case:{shortDescription:"Match a value against patterns",description:"Within a `switch` block, the `case` command specifies patterns to match against the given value, executing the associated block if a match is found.",args:"PATTERN..."},cd:{shortDescription:"change directory",description:"cd changes the current working directory.\n\nIf DIRECTORY is given, it will become the new directory. If no\nparameter is given, the HOME environment variable will be used.\n\nIf DIRECTORY is a relative path, all the paths in the CDPATH will be\ntried as prefixes for it, in addition to PWD. It is recommended to\nkeep . as the first element of CDPATH, or PWD will be tried last.\n\nFish will also try to change directory if given a command that looks\nlike a directory (starting with ., / or ~, or ending with /), without\nexplicitly requiring cd.\n\nFish also ships a wrapper function around the builtin cd that\nunderstands cd - as changing to the previous directory. See also\nprevd. This wrapper function maintains a history of the 25 most\nrecently visited directories in the $dirprev and $dirnext global\nvariables. If you make those universal variables your cd history is\nshared among all fish instances.\n\nAs a special case, cd . is equivalent to cd $PWD, which is useful in\ncases where a mountpoint has been recycled or a directory has been\nremoved and recreated.\n\nThe --help or -h option displays help about using this command, and\ndoes not change the directory.\n\nEXAMPLES\n\n cd\n # changes the working directory to your home directory.\n\n cd /usr/src/fish-shell\n # changes the working directory to /usr/src/fish-shell\n\nSEE ALSO\nNavigate directories using the directory history or the directory\nstack",args:"cd [DIRECTORY]"},command:{shortDescription:"run a program",description:"command forces the shell to execute the program COMMANDNAME and\nignore any functions or builtins with the same name.\n\nThe following options are available:\n\n-a or --all\n Prints all COMMAND found in PATH, in the order found.\n\n-q or --query\n Silence output and print nothing, setting only exit status.\n Implies --search. For compatibility, this is also --quiet\n (deprecated).\n\n-v (or -s or --search)\n Prints the external command that would be executed, or prints\n nothing if no file with the specified name could be found in\n PATH.\n\n-h or --help\n Displays help about using this command.\n\nWith the -v option, command treats every argument as a separate\ncommand to look up and sets the exit status to 0 if any of the\nspecified commands were found, or 127 if no commands could be found.\n--quiet used with -v prevents commands being printed, like type -q.\n\nEXAMPLES\ncommand ls executes the ls program, even if an ls function also exists.\ncommand -s ls prints the path to the ls program.\ncommand -q git; and command git log runs git log only if git exists.",args:"command [OPTIONS] [COMMANDNAME [ARG ...]]"},commandline:{shortDescription:"set or get the current command line buffer",description:'commandline can be used to set or get the current contents of the\ncommand line buffer.\n\nWith no parameters, commandline returns the current value of the\ncommand line.\n\nWith CMD specified, the command line buffer is erased and replaced\nwith the contents of CMD.\n\nThe following options are available:\n\n-C or --cursor\n Set or get the current cursor position, not the contents of\n the buffer. If no argument is given, the current cursor\n position is printed, otherwise the argument is interpreted as\n the new cursor position. If one of the options -j, -p or -t\n is given, the position is relative to the respective substring\n instead of the entire command line buffer.\n\n-B or --selection-start\n Get current position of the selection start in the buffer.\n\n-E or --selection-end\n Get current position of the selection end in the buffer.\n\n-f or --function\n Causes any additional arguments to be interpreted as input\n functions, and puts them into the queue, so that they will be\n read before any additional actual key presses are. This\n option cannot be combined with any other option. See bind for\n a list of input functions.\n\n-h or --help\n Displays help about using this command.\n\nThe following options change the way commandline updates the command\nline buffer:\n\n-a or --append\n Do not remove the current commandline, append the specified\n string at the end of it.\n\n-i or --insert\n Do not remove the current commandline, insert the specified\n string at the current cursor position\n\n-r or --replace\n Remove the current commandline and replace it with the\n specified string (default)\n\nThe following options change what part of the commandline is printed\nor updated:\n\n-b or --current-buffer\n Select the entire commandline, not including any displayed\n autosuggestion (default).\n\n-j or --current-job\n Select the current job - a job here is one pipeline. Stops at\n logical operators or terminators (;, &, and newlines).\n\n-p or --current-process\n Select the current process - a process here is one command.\n Stops at logical operators, terminators, and pipes.\n\n-s or --current-selection\n Selects the current selection\n\n-t or --current-token\n Selects the current token\n\nThe following options change the way commandline prints the current\ncommandline buffer:\n\n-c or --cut-at-cursor\n Only print selection up until the current cursor position. If\n combined with --tokenize, this will print up until the last\n completed token - excluding the token the cursor is in. This\n is typically what you would want for instance in completions.\n To get both, use both commandline --cut-at-cursor --tokenize;\n commandline --cut-at-cursor --current-token, or commandline\n -co; commandline -ct for short.\n\n-o or --tokenize\n Tokenize the selection and print one string-type token per\n line.\n\nIf commandline is called during a call to complete a given string\nusing complete -C STRING, commandline will consider the specified\nstring to be the current contents of the command line.\n\nThe following options output metadata about the commandline state:\n\n-L or --line\n Print the line that the cursor is on, with the topmost line\n starting at 1.\n\n-S or --search-mode\n Evaluates to true if the commandline is performing a history\n search.\n\n-P or --paging-mode\n Evaluates to true if the commandline is showing pager\n contents, such as tab completions.\n\n--paging-full-mode\n Evaluates to true if the commandline is showing pager\n contents, such as tab completions and all lines are shown (no\n " more rows" message).\n\n--is-valid\n Returns true when the commandline is syntactically valid and\n complete. If it is, it would be executed when the execute\n bind function is called. If the commandline is incomplete,\n return 2, if erroneus, return 1.\n\nEXAMPLE\ncommandline -j $history[3] replaces the job under the cursor with the\nthird item from the command line history.\n\nIf the commandline contains\n\n > echo $flounder >&2 | less; and echo $catfish\n\n(with the cursor on the "o" of "flounder")\n\nThe echo $flounder >& is the first process, less the second and and\necho $catfish the third.\n\necho $flounder >&2 | less is the first job, and echo $catfish the\nsecond.\n\n$flounder is the current token.\n\nThe most common use for something like completions is\n\n set -l tokens (commandline -opc)\n\nwhich gives the current process (what is being completed), tokenized\ninto separate entries, up to but excluding the currently being\ncompleted token\n\nIf you are then also interested in the in-progress token, add\n\n:: set -l current (commandline -ct)\n\nNote that this makes it easy to render fish\'s infix matching moot -\nif possible it\'s best if the completions just print all possibilities\nand leave the matching to the current token up to fish\'s logic.\n\nMore examples:\n\n > commandline -t\n $flounder\n > commandline -ct\n $fl\n > commandline -b # or just commandline\n echo $flounder >&2 | less; and echo $catfish\n > commandline -p\n echo $flounder >&2\n > commandline -j\n echo $flounder >&2 | less',args:"commandline [OPTIONS] [CMD]"},complete:{shortDescription:"edit command-specific tab-completions",description:'complete defines, removes or lists completions for a command.\n\nFor an introduction to writing your own completions, see Writing your\nown completions in the fish manual.\n\nThe following options are available:\n\n-c or --command COMMAND\n Specifies that COMMAND is the name of the command. If there is\n no -c or -p, one non-option argument will be used as the\n command.\n\n-p or --path COMMAND\n Specifies that COMMAND is the absolute path of the command\n (optionally containing wildcards).\n\n-e or --erase\n Deletes the specified completion.\n\n-s or --short-option SHORT_OPTION\n Adds a short option to the completions list.\n\n-l or --long-option LONG_OPTION\n Adds a GNU-style long option to the completions list.\n\n-o or --old-option OPTION\n Adds an old-style short or long option (see below for\n details).\n\n-a or --arguments ARGUMENTS\n Adds the specified option arguments to the completions list.\n\n-k or --keep-order\n Keeps the order of ARGUMENTS instead of sorting\n alphabetically. Multiple complete calls with -k result in\n arguments of the later ones displayed first.\n\n-f or --no-files\n This completion may not be followed by a filename.\n\n-F or --force-files\n This completion may be followed by a filename, even if another\n applicable complete specified --no-files.\n\n-r or --require-parameter\n This completion must have an option argument, i.e. may not be\n followed by another option.\n\n-x or --exclusive\n Short for -r and -f.\n\n-w or --wraps WRAPPED_COMMAND\n Causes the specified command to inherit completions from\n WRAPPED_COMMAND (see below for details).\n\n-n or --condition CONDITION\n This completion should only be used if the CONDITION (a shell\n command) returns 0. This makes it possible to specify\n completions that should only be used in some cases. If\n multiple conditions are specified, fish will try them in the\n order they are specified until one fails or all succeeded.\n\n-C or --do-complete STRING\n Makes complete try to find all possible completions for the\n specified string. If there is no STRING, the current\n commandline is used instead.\n\n--escape\n When used with -C, escape special characters in completions.\n\n-h or --help\n Displays help about using this command.\n\nCommand-specific tab-completions in fish are based on the notion of\noptions and arguments. An option is a parameter which begins with a\nhyphen, such as -h, -help or --help. Arguments are parameters that do\nnot begin with a hyphen. Fish recognizes three styles of options, the\nsame styles as the GNU getopt library. These styles are:\n\n• Short options, like -a. Short options are a single character long,\n are preceded by a single hyphen and can be grouped together (like\n -la, which is equivalent to -l -a). Option arguments may be\n specified by appending the option with the value (-w32), or, if\n --require-parameter is given, in the following parameter (-w 32).\n\n• Old-style options, long like -Wall or -name or even short like -a.\n Old-style options can be more than one character long, are preceded\n by a single hyphen and may not be grouped together. Option\n arguments are specified by default following a space (-foo null) or\n after = (-foo=null).\n\n• GNU-style long options, like --colors. GNU-style long options can\n be more than one character long, are preceded by two hyphens, and\n can\'t be grouped together. Option arguments may be specified after\n a = (--quoting-style=shell), or, if --require-parameter is given,\n in the following parameter (--quoting-style shell).\n\nMultiple commands and paths can be given in one call to define the\nsame completions for multiple commands.\n\nMultiple command switches and wrapped commands can also be given to\ndefine multiple completions in one call.\n\nInvoking complete multiple times for the same command adds the new\ndefinitions on top of any existing completions defined for the\ncommand.\n\nWhen -a or --arguments is specified in conjunction with long, short,\nor old-style options, the specified arguments are only completed as\narguments for any of the specified options. If -a or --arguments is\nspecified without any long, short, or old-style options, the\nspecified arguments are used when completing non-option arguments to\nthe command (except when completing an option argument that was\nspecified with -r or --require-parameter).\n\nCommand substitutions found in ARGUMENTS should return a\nnewline-separated list of arguments, and each argument may optionally\nhave a tab character followed by the argument description.\nDescription given this way override a description given with -d or\n--description.\n\nDescriptions given with --description are also used to group options\ngiven with -s, -o or -l. Options with the same (non-empty)\ndescription will be listed as one candidate, and one of them will be\npicked. If the description is empty or no description was given this\nis skipped.\n\nThe -w or --wraps options causes the specified command to inherit\ncompletions from another command, "wrapping" the other command. The\nwrapping command can also have additional completions. A command can\nwrap multiple commands, and wrapping is transitive: if A wraps B, and\nB wraps C, then A automatically inherits all of C\'s completions.\nWrapping can be removed using the -e or --erase options. Wrapping\nonly works for completions specified with -c or --command and are\nignored when specifying completions with -p or --path.\n\nWhen erasing completions, it is possible to either erase all\ncompletions for a specific command by specifying complete -c COMMAND\n-e, or by specifying a specific completion option to delete.\n\nWhen complete is called without anything that would define or erase\ncompletions (options, arguments, wrapping, ...), it shows matching\ncompletions instead. So complete without any arguments shows all\nloaded completions, complete -c foo shows all loaded completions for\nfoo. Since completions are autoloaded, you will have to trigger them\nfirst.\n\nEXAMPLES\nThe short-style option -o for the gcc command needs a file argument:\n\n complete -c gcc -s o -r\n\nThe short-style option -d for the grep command requires one of read,\nskip or recurse:\n\n complete -c grep -s d -x -a "read skip recurse"\n\nThe su command takes any username as an argument. Usernames are given\nas the first colon-separated field in the file /etc/passwd. This can\nbe specified as:\n\n complete -x -c su -d "Username" -a "(cat /etc/passwd | cut -d : -f 1)"\n\nThe rpm command has several different modes. If the -e or --erase\nflag has been specified, rpm should delete one or more packages, in\nwhich case several switches related to deleting packages are valid,\nlike the nodeps switch.\n\nThis can be written as:\n\n complete -c rpm -n "__fish_contains_opt -s e erase" -l nodeps -d "Don\'t check dependencies"\n\nwhere __fish_contains_opt is a function that checks the command line\nbuffer for the presence of a specified set of options.\n\nTo implement an alias, use the -w or --wraps option:\n\n complete -c hub -w git\n\nNow hub inherits all of the completions from git. Note this can also\nbe specified in a function declaration (function thing -w\notherthing).\n\n complete -c git\n\nShows all completions for git.\n\nAny command foo that doesn\'t support grouping multiple short options\nin one string (not supporting -xf as short for -x -f) or a short\noption and its value in one string (not supporting -d9 instead of -d\n9) should be specified as a single-character old-style option instead\nof as a short-style option; for example, complete -c foo -o s;\ncomplete -c foo -o v would never suggest foo -ov but rather foo -o\n-v.',args:"complete ((-c | --command) | (-p | --path)) COMMAND [OPTIONS]\ncomplete (-C | --do-complete) [--escape] STRING"},contains:{shortDescription:"test if a word is present in a list",description:"contains tests whether the set VALUES contains the string KEY. If\nso, contains exits with code 0; if not, it exits with code 1.\n\nThe following options are available:\n\n-i or --index\n Print the index (number of the element in the set) of the\n first matching element.\n\n-h or --help\n Displays help about using this command.\n\nNote that contains interprets all arguments starting with a - as an\noption to contains, until an -- argument is reached.\n\nSee the examples below.\n\nEXAMPLE\nIf animals is a list of animals, the following will test if animals\ncontains \"cat\":\n\n if contains cat $animals\n echo Your animal list is evil!\n end\n\nThis code will add some directories to PATH if they aren't yet\nincluded:\n\n for i in ~/bin /usr/local/bin\n if not contains $i $PATH\n set PATH $PATH $i\n end\n end\n\nWhile this will check if function hasargs is being ran with the -q\noption:\n\n function hasargs\n if contains -- -q $argv\n echo '$argv contains a -q option'\n end\n end\n\nThe -- here stops contains from treating -q to an option to itself.\nInstead it treats it as a normal string to check.",args:"contains [OPTIONS] KEY [VALUES ...]"},continue:{shortDescription:"Skip to the next iteration of a loop",description:"Within a `while` or `for` loop, `continue` skips the remaining commands in the current iteration and proceeds to the next iteration of the loop."},count:{shortDescription:"",description:""},disown:{shortDescription:"remove a process from the list of jobs",description:"disown removes the specified job from the list of jobs. The job\nitself continues to exist, but fish does not keep track of it any\nlonger.\n\nJobs in the list of jobs are sent a hang-up signal when fish\nterminates, which usually causes the job to terminate; disown allows\nthese processes to continue regardless.\n\nIf no process is specified, the most recently-used job is removed\n(like bg and fg). If one or more PIDs are specified, jobs with the\nspecified process IDs are removed from the job list. Invalid jobs are\nignored and a warning is printed.\n\nIf a job is stopped, it is sent a signal to continue running, and a\nwarning is printed. It is not possible to use the bg builtin to\ncontinue a job once it has been disowned.\n\ndisown returns 0 if all specified jobs were disowned successfully,\nand 1 if any problems were encountered.\n\nThe --help or -h option displays help about using this command.\n\nEXAMPLE\nfirefox &; disown will start the Firefox web browser in the\nbackground and remove it from the job list, meaning it will not be\nclosed when the fish process is closed.\n\ndisown (jobs -p) removes all jobs from the job list without\nterminating them.",args:"disown [PID ...]"},echo:{shortDescription:"",description:""},else:{shortDescription:"Execute commands if the previous condition was false",description:"In an `if` block, the `else` section contains commands that execute if none of the preceding `if` or `else if` conditions were true."},emit:{shortDescription:"emit a generic event",description:"emit emits, or fires, an event. Events are delivered to, or caught\nby, special functions called event handlers. The arguments are passed\nto the event handlers as function arguments.\n\nThe --help or -h option displays help about using this command.\n\nEXAMPLE\nThe following code first defines an event handler for the generic\nevent named 'test_event', and then emits an event of that type.\n\n function event_test --on-event test_event\n echo event test: $argv\n end\n\n emit test_event something\n\nNOTES\nNote that events are only sent to the current fish process as there\nis no way to send events from one fish process to another.",args:"emit EVENT_NAME [ARGUMENTS ...]"},end:{shortDescription:"Terminate a block of code",description:"Conclude a block of code initiated by constructs like `if`, `switch`, `while`, `for`, or `function`."},eval:{shortDescription:"Execute arguments as a command",description:"Concatenate all arguments into a single command and execute it. This allows for dynamic construction and execution of commands.",args:"COMMAND..."},exec:{shortDescription:"execute command in current process",description:"exec replaces the currently running shell with a new command. On\nsuccessful completion, exec never returns. exec cannot be used inside\na pipeline.\n\nThe --help or -h option displays help about using this command.\n\nEXAMPLE\nexec emacs starts up the emacs text editor, and exits fish. When\nemacs exits, the session will terminate.",args:"exec COMMAND"},exit:{shortDescription:"exit the shell",description:"exit is a special builtin that causes the shell to exit. Either 255\nor the CODE supplied is used, whichever is lesser. Otherwise, the\nexit status will be that of the last command executed.\n\nIf exit is called while sourcing a file (using the source builtin)\nthe rest of the file will be skipped, but the shell itself will not\nexit.\n\nThe --help or -h option displays help about using this command.",args:"exit [CODE]"},false:{shortDescription:"Return an unsuccessful result",description:"A command that returns a non-zero exit status, indicating failure. It is often used in scripts to represent a false condition."},fg:{shortDescription:"bring job to foreground",description:"The fg builtin brings the specified job to the foreground, resuming\nit if it is stopped. While a foreground job is executed, fish is\nsuspended. If no job is specified, the last job to be used is put in\nthe foreground. If PID is specified, the job containing a process\nwith the specified process ID is put in the foreground.\n\nFor compatibility with other shells, job expansion syntax is\nsupported for fg. A PID of the format %1 will foreground job 1. Job\nnumbers can be seen in the output of jobs.\n\nThe --help or -h option displays help about using this command.\n\nEXAMPLE\nfg will put the last job in the foreground.\n\nfg %3 will put job 3 into the foreground.",args:"fg [PID]"},for:{shortDescription:"perform a set of commands multiple times",description:"for is a loop construct. It will perform the commands specified by\nCOMMANDS multiple times. On each iteration, the local variable\nspecified by VARNAME is assigned a new value from VALUES. If VALUES\nis empty, COMMANDS will not be executed at all. The VARNAME is\nvisible when the loop terminates and will contain the last value\nassigned to it. If VARNAME does not already exist it will be set in\nthe local scope. For our purposes if the for block is inside a\nfunction there must be a local variable with the same name. If the\nfor block is not nested inside a function then global and universal\nvariables of the same name will be used if they exist.\n\nMuch like set, for does not modify $status, but the evaluation of its\nsubordinate commands can.\n\nThe -h or --help option displays help about using this command.\n\nEXAMPLE\n\n for i in foo bar baz; echo $i; end\n\n # would output:\n foo\n bar\n baz\n\nNOTES\nThe VARNAME was local to the for block in releases prior to 3.0.0.\nThis means that if you did something like this:\n\n for var in a b c\n if break_from_loop\n break\n end\n end\n echo $var\n\nThe last value assigned to var when the loop terminated would not be\navailable outside the loop. What echo $var would write depended on\nwhat it was set to before the loop was run. Likely nothing.",args:"for VARNAME in [VALUES ...]; COMMANDS ...; end"},function:{shortDescription:"create a function",description:'function creates a new function NAME with the body BODY.\n\nA function is a list of commands that will be executed when the name\nof the function is given as a command.\n\nThe following options are available:\n\n-a NAMES or --argument-names NAMES\n Assigns the value of successive command-line arguments to the\n names given in NAMES. These are the same arguments given in\n argv, and are still available there. See also Argument\n Handling.\n\n-d DESCRIPTION or --description DESCRIPTION\n A description of what the function does, suitable as a\n completion description.\n\n-w WRAPPED_COMMAND or --wraps WRAPPED_COMMAND\n Inherit completions from the given WRAPPED_COMMAND. See the\n documentation for complete for more information.\n\n-e EVENT_NAME or --on-event EVENT_NAME\n Run this function when the specified named event is emitted.\n Fish internally generates named events, for example, when\n showing the prompt. Custom events can be emitted using the\n emit command.\n\n-v VARIABLE_NAME or --on-variable VARIABLE_NAME\n Run this function when the variable VARIABLE_NAME changes\n value. Note that fish makes no guarantees on any particular\n timing or even that the function will be run for every single\n set. Rather it will be run when the variable has been set at\n least once, possibly skipping some values or being run when\n the variable has been set to the same value (except for\n universal variables set in other shells - only changes in the\n value will be picked up for those).\n\n-j PID or --on-job-exit PID\n Run this function when the job containing a child process with\n the given process identifier PID exits. Instead of a PID, the\n string \'caller\' can be specified. This is only allowed when in\n a command substitution, and will result in the handler being\n triggered by the exit of the job which created this command\n substitution.\n\n-p PID or --on-process-exit PID\n Run this function when the fish child process with process ID\n PID exits. Instead of a PID, for backward compatibility,\n "%self" can be specified as an alias for $fish_pid, and the\n function will be run when the current fish instance exits.\n\n-s SIGSPEC or --on-signal SIGSPEC\n Run this function when the signal SIGSPEC is delivered.\n SIGSPEC can be a signal number, or the signal name, such as\n SIGHUP (or just HUP). Note that the signal must have been\n delivered to fish; for example, Ctrl-C sends SIGINT to the\n foreground process group, which will not be fish if you are\n running another command at the time. Observing a signal will\n prevent fish from exiting in response to that signal.\n\n-S or --no-scope-shadowing\n Allows the function to access the variables of calling\n functions. Normally, any variables inside the function that\n have the same name as variables from the calling function are\n "shadowed", and their contents are independent of the calling\n function.\n\n It\'s important to note that this does not capture referenced\n variables or the scope at the time of function declaration! At\n this time, fish does not have any concept of closures, and\n variable lifetimes are never extended. In other words, by\n using --no-scope-shadowing the scope of the function each time\n it is run is shared with the scope it was called from rather\n than the scope it was defined in.\n\n-V or --inherit-variable NAME\n Snapshots the value of the variable NAME and defines a local\n variable with that same name and value when the function is\n defined. This is similar to a closure in other languages like\n Python but a bit different. Note the word "snapshot" in the\n first sentence. If you change the value of the variable after\n defining the function, even if you do so in the same scope\n (typically another function) the new value will not be used by\n the function you just created using this option. See the\n function notify example below for how this might be used.\n\nThe event handler switches (on-event, on-variable, on-job-exit,\non-process-exit and on-signal) cause a function to run automatically\nat specific events. New named events for --on-event can be fired\nusing the emit builtin. Fish already generates a few events, see\nEvent handlers for more.\n\nFunctions may not be named the same as a reserved keyword. These are\nelements of fish syntax or builtin commands which are essential for\nthe operations of the shell. Current reserved words are [, , and,\nargparse, begin, break, builtin, case, command, continue, else, end,\neval, exec, for, function, if, not, or, read, return, set, status,\nstring, switch, test, time, and while.\n\nEXAMPLE\n\n function ll\n ls -l $argv\n end\n\nwill run the ls command, using the -l option, while passing on any\nadditional files and switches to ls.\n\n function mkdir -d "Create a directory and set CWD"\n command mkdir $argv\n if test $status = 0\n switch $argv[(count $argv)]\n case \'-*\'\n\n case \'*\'\n cd $argv[(count $argv)]\n return\n end\n end\n end\n\nThis will run the mkdir command, and if it is successful, change the\ncurrent working directory to the one just created.\n\n function notify\n set -l job (jobs -l -g)\n or begin; echo "There are no jobs" >&2; return 1; end\n\n function _notify_job$job --on-job-exit $job --inherit-variable job\n echo -n \\a # beep\n functions -e _notify_job$job\n end\n end\n\nThis will beep when the most recent job completes.\n\nNOTES\nEvents are only received from the current fish process as there is no\nway to send events from one fish process to another.\n\nSEE MORE\nFor more explanation of how functions fit into fish, see Functions.',args:"function NAME [OPTIONS]; BODY; end"},functions:{shortDescription:"print or erase functions",description:"functions prints or erases functions.\n\nThe following options are available:\n\n-a or --all\n Lists all functions, even those whose name starts with an\n underscore.\n\n-c or --copy OLDNAME NEWNAME\n Creates a new function named NEWNAME, using the definition of\n the OLDNAME function.\n\n-d or --description DESCRIPTION\n Changes the description of this function.\n\n-e or --erase\n Causes the specified functions to be erased. This also means\n that it is prevented from autoloading in the current session.\n Use funcsave to remove the saved copy.\n\n-D or --details\n Reports the path name where the specified function is defined\n or could be autoloaded, stdin if the function was defined\n interactively or on the command line or by reading standard\n input, - if the function was created via source, and n/a if\n the function isn't available. (Functions created via alias\n will return -, because alias uses source internally.) If the\n --verbose option is also specified then five lines are\n written:\n\n • the pathname as already described,\n\n • autoloaded, not-autoloaded or n/a,\n\n • the line number within the file or zero if not applicable,\n\n • scope-shadowing if the function shadows the vars in the\n calling function (the normal case if it wasn't defined with\n --no-scope-shadowing), else no-scope-shadowing, or n/a if\n the function isn't defined,\n\n • the function description minimally escaped so it is a single\n line, or n/a if the function isn't defined or has no\n description.\n\n You should not assume that only five lines will be written\n since we may add additional information to the output in the\n future.\n\n--no-details\n Turns off function path reporting, so just the definition will\n be printed.\n\n-n or --names\n Lists the names of all defined functions.\n\n-q or --query\n Tests if the specified functions exist.\n\n-v or --verbose\n Make some output more verbose.\n\n-H or --handlers\n Show all event handlers.\n\n-t or --handlers-type TYPE\n Show all event handlers matching the given TYPE.\n\n-h or --help\n Displays help about using this command.\n\nThe default behavior of functions, when called with no arguments, is\nto print the names of all defined functions. Unless the -a option is\ngiven, no functions starting with underscores are included in the\noutput.\n\nIf any non-option parameters are given, the definition of the\nspecified functions are printed.\n\nCopying a function using -c copies only the body of the function, and\ndoes not attach any event notifications from the original function.\n\nOnly one function's description can be changed in a single invocation\nof functions -d.\n\nThe exit status of functions is the number of functions specified in\nthe argument list that do not exist, which can be used in concert\nwith the -q option.\n\nEXAMPLES\n\n functions -n\n # Displays a list of currently-defined functions\n\n functions -c foo bar\n # Copies the 'foo' function to a new function called 'bar'\n\n functions -e bar\n # Erases the function ``bar``\n\nSEE MORE\nFor more explanation of how functions fit into fish, see Functions.",args:"functions [-a | --all] [-n | --names]\nfunctions [-D | --details] [-v] FUNCTION\nfunctions -c OLDNAME NEWNAME\nfunctions -d DESCRIPTION FUNCTION\nfunctions [-e | -q] FUNCTION ..."},history:{shortDescription:"show and manipulate command history",description:'history is used to search, delete, and otherwise manipulate the\nhistory of interactive commands.\n\nThe following operations (sub-commands) are available:\n\nsearch Returns history items matching the search string. If no search\n string is provided it returns all history items. This is the\n default operation if no other operation is specified. You only\n have to explicitly say history search if you wish to search\n for one of the subcommands. The --contains search option will\n be used if you don\'t specify a different search option.\n Entries are ordered newest to oldest unless you use the\n --reverse flag. If stdout is attached to a tty the output will\n be piped through your pager by the history function. The\n history builtin simply writes the results to stdout.\n\ndelete Deletes history items. The --contains search option will be\n used if you don\'t specify a different search option. If you\n don\'t specify --exact a prompt will be displayed before any\n items are deleted asking you which entries are to be deleted.\n You can enter the word "all" to delete all matching entries.\n You can enter a single ID (the number in square brackets) to\n delete just that single entry. You can enter more than one ID,\n or an ID range separated by a space to delete multiple\n entries. Just press [enter] to not delete anything. Note that\n the interactive delete behavior is a feature of the history\n function. The history builtin only supports --exact\n --case-sensitive deletion.\n\nmerge Immediately incorporates history changes from other sessions.\n Ordinarily fish ignores history changes from sessions started\n after the current one. This command applies those changes\n immediately.\n\nsave Immediately writes all changes to the history file. The shell\n automatically saves the history file; this option is provided\n for internal use and should not normally need to be used by\n the user.\n\nclear Clears the history file. A prompt is displayed before the\n history is erased asking you to confirm you really want to\n clear all history unless builtin history is used.\n\nclear-session\n Clears the history file from all activity of the current\n session. Note: If history merge or builtin history merge is\n run in a session, only the history after this will be erased.\n\nThe following options are available:\n\nThese flags can appear before or immediately after one of the\nsub-commands listed above.\n\n-C or --case-sensitive\n Does a case-sensitive search. The default is case-insensitive.\n Note that prior to fish 2.4.0 the default was case-sensitive.\n\n-c or --contains\n Searches items in the history that contain the specified text\n string. This is the default for the --search flag. This is not\n currently supported by the delete subcommand.\n\n-e or --exact\n Searches or deletes items in the history that exactly match\n the specified text string. This is the default for the delete\n subcommand. Note that the match is case-insensitive by\n default. If you really want an exact match, including letter\n case, you must use the -C or --case-sensitive flag.\n\n-p or --prefix\n Searches items in the history that begin with the specified\n text string. This is not currently supported by the delete\n subcommand.\n\n-t or --show-time\n Prepends each history entry with the date and time the entry\n was recorded. By default it uses the strftime format # %c%n.\n You can specify another format; e.g., --show-time="%Y-%m-%d\n %H:%M:%S " or --show-time="%a%I%p". The short option, -t,\n doesn\'t accept a strftime format string; it only uses the\n default format. Any strftime format is allowed, including %s\n to get the raw UNIX seconds since the epoch.\n\n-z or --null\n Causes history entries written by the search operations to be\n terminated by a NUL character rather than a newline. This\n allows the output to be processed by read -z to correctly\n handle multiline history entries.\n\n-*NUMBER* -n NUMBER or --max NUMBER\n Limits the matched history items to the first NUMBER matching\n entries. This is only valid for history search.\n\n-R or --reverse\n Causes the history search results to be ordered oldest to\n newest. Which is the order used by most shells. The default is\n newest to oldest.\n\n-h or --help\n Displays help for this command.\n\nEXAMPLE\n\n history clear\n # Deletes all history items\n\n history search --contains "foo"\n # Outputs a list of all previous commands containing the string "foo".\n\n history delete --prefix "foo"\n # Interactively deletes commands which start with "foo" from the history.\n # You can select more than one entry by entering their IDs separated by a space.\n\nCUSTOMIZING THE NAME OF THE HISTORY FILE\nBy default interactive commands are logged to\n$XDG_DATA_HOME/fish/fish_history (typically\n~/.local/share/fish/fish_history).\n\nYou can set the fish_history variable to another name for the current\nshell session. The default value (when the variable is unset) is fish\nwhich corresponds to $XDG_DATA_HOME/fish/fish_history. If you set it\nto e.g. fun, the history would be written to\n$XDG_DATA_HOME/fish/fun_history. An empty string means history will\nnot be stored at all. This is similar to the private session features\nin web browsers.\n\nYou can change fish_history at any time (by using set -x fish_history\n"session_name") and it will take effect right away. If you set it to\n"default", it will use the default session name (which is "fish").\n\nOther shells such as bash and zsh use a variable named HISTFILE for a\nsimilar purpose. Fish uses a different name to avoid conflicts and\nsignal that the behavior is different (session name instead of a file\npath). Also, if you set the var to anything other than fish or\ndefault it will inhibit importing the bash history. That\'s because\nthe most common use case for this feature is to avoid leaking private\nor sensitive history when giving a presentation.\n\nNOTES\nIf you specify both --prefix and --contains the last flag seen is\nused.\n\nNote that for backwards compatibility each subcommand can also be\nspecified as a long option. For example, rather than history search\nyou can type history --search. Those long options are deprecated and\nwill be removed in a future release.',args:"history [search] [--show-time] [--case-sensitive]\n[--exact | --prefix | --contains] [--max N] [--null] [--reverse]\n [SEARCH_STRING ...]\nhistory delete [--case-sensitive]\n [--exact | --prefix | --contains] SEARCH_STRING ...\nhistory merge\nhistory save\nhistory clear\nhistory clear-session"},if:{shortDescription:"conditionally execute a command",description:'if will execute the command CONDITION. If the condition\'s exit status\nis 0, the commands COMMANDS_TRUE will execute. If the exit status is\nnot 0 and else is given, COMMANDS_FALSE will be executed.\n\nYou can use and or or in the condition. See the second example below.\n\nThe exit status of the last foreground command to exit can always be\naccessed using the $status variable.\n\nThe -h or --help option displays help about using this command.\n\nEXAMPLE\nThe following code will print foo.txt exists if the file foo.txt\nexists and is a regular file, otherwise it will print bar.txt exists\nif the file bar.txt exists and is a regular file, otherwise it will\nprint foo.txt and bar.txt do not exist.\n\n if test -f foo.txt\n echo foo.txt exists\n else if test -f bar.txt\n echo bar.txt exists\n else\n echo foo.txt and bar.txt do not exist\n end\n\nThe following code will print "foo.txt exists and is readable" if\nfoo.txt is a regular file and readable\n\n if test -f foo.txt\n and test -r foo.txt\n echo "foo.txt exists and is readable"\n end',args:"if CONDITION; COMMANDS_TRUE ...;\n[else if CONDITION2; COMMANDS_TRUE2 ...;]\n[else; COMMANDS_FALSE ...;]\nend"},jobs:{shortDescription:"print currently running jobs",description:"jobs prints a list of the currently running jobs and their status.\n\njobs accepts the following options:\n\n-c or --command\n Prints the command name for each process in jobs.\n\n-g or --group\n Only prints the group ID of each job.\n\n-l or --last\n Prints only the last job to be started.\n\n-p or --pid\n Prints the process ID for each process in all jobs.\n\n-q or --query\n Prints no output for evaluation of jobs by exit status only.\n For compatibility with old fish versions this is also --quiet\n (but this is deprecated).\n\n-h or --help\n Displays help about using this command.\n\nOn systems that support this feature, jobs will print the CPU usage\nof each job since the last command was executed. The CPU usage is\nexpressed as a percentage of full CPU activity. Note that on\nmultiprocessor systems, the total activity may be more than 100%.\n\nArguments of the form PID or %JOBID restrict the output to jobs with\nthe selected process identifiers or job numbers respectively.\n\nIf the output of jobs is redirected or if it is part of a command\nsubstitution, the column header that is usually printed is omitted,\nmaking it easier to parse.\n\nThe exit status of jobs is 0 if there are running background jobs and\n1 otherwise.\n\nEXAMPLE\njobs outputs a summary of the current jobs, such as two long-running\ntasks in this example:\n\n Job Group State Command\n 2 26012 running nc -l 55232 < /dev/random &\n 1 26011 running python tests/test_11.py &",args:"jobs [OPTIONS] [PID | %JOBID]"},math:{shortDescription:"perform mathematics calculations",description:'math performs mathematical calculations. It supports simple\noperations such as addition, subtraction, and so on, as well as\nfunctions like abs(), sqrt() and ln().\n\nBy default, the output shows up to 6 decimal places. To change the\nnumber of decimal places, use the --scale option, including --scale=0\nfor integer output. Trailing zeroes will always be trimmed.\n\nKeep in mind that parameter expansion happens before expressions are\nevaluated. This can be very useful in order to perform calculations\ninvolving shell variables or the output of command substitutions, but\nit also means that parenthesis (()) and the asterisk (*) glob\ncharacter have to be escaped or quoted. x can also be used to denote\nmultiplication, but it needs to be followed by whitespace to\ndistinguish it from hexadecimal numbers.\n\nParentheses for functions are optional - math sin pi prints 0.\nHowever, a comma will bind to the inner function, so math pow sin 3,\n5 is an error because it tries to give sin the arguments 3 and 5.\nWhen in doubt, use parentheses.\n\nmath ignores whitespace between arguments and takes its input as\nmultiple arguments (internally joined with a space), so math 2 +2 and\nmath "2 + 2" work the same. math 2 2 is an error.\n\nThe following options are available:\n\n-s N or --scale N\n Sets the scale of the result. N must be an integer or the\n word "max" for the maximum scale. A scale of zero causes\n results to be truncated, not rounded. Any non-integer\n component is thrown away. So 3/2 returns 1 rather than 2\n which 1.5 would normally round to. This is for compatibility\n with bc which was the basis for this command prior to fish\n 3.0.0. Scale values greater than zero causes the result to be\n rounded using the usual rules to the specified number of\n decimal places.\n\n-b BASE or --base BASE\n Sets the numeric base used for output (math always understands\n hexadecimal numbers as input). It currently understands "hex"\n or "16" for hexadecimal and "octal" or "8" for octal and\n implies a scale of 0 (other scales cause an error), so it will\n truncate the result down to an integer. This might change in\n the future. Hex numbers will be printed with a 0x prefix.\n Octal numbers will have a prefix of 0 but aren\'t understood by\n math as input.\n\n-h or --help\n Displays help about using this command.\n\nRETURN VALUES\nIf the expression is successfully evaluated and doesn\'t\nover/underflow or return NaN the return status is zero (success) else\none.\n\nSYNTAX\nmath knows some operators, constants, functions and can (obviously)\nread numbers.\n\nFor numbers, . is always the radix character regardless of locale -\n2.5, not 2,5. Scientific notation (10e5) and hexadecimal (0xFF) are\nalso available.\n\nmath allows you to use underscores as visual separators for digit\ngrouping. For example, you can write 1_000_000, 0x_89_AB_CD_EF, and\n1.234_567_e89.\n\nOPERATORS\nmath knows the following operators:\n\n+ for addition\n\n- for subtraction\n\n* or x for multiplication. * is the glob character and needs to be\n quoted or escaped, x needs to be followed by whitespace or it\n looks like 0x hexadecimal notation.\n\n/ for division\n\n^ for exponentiation\n\n% for modulo\n\n( or ) for grouping. These need to be quoted or escaped because ()\n denotes a command substitution.\n\nThey are all used in an infix manner - 5 + 2, not + 5 2.\n\nCONSTANTS\nmath knows the following constants:\n\ne Euler\'s number\n\npi π, you know this one. Half of Tau\n\ntau Equivalent to 2π, or the number of radians in a circle\n\nUse them without a leading $ - pi - 3 should be about 0.\n\nFUNCTIONS\nmath supports the following functions:\n\nabs the absolute value, with positive sign\n\nacos arc cosine\n\nasin arc sine\n\natan arc tangent\n\natan2 arc tangent of two variables\n\nbitand, bitor and bitxor\n perform bitwise operations. These will throw away any\n non-integer parts and interpret the rest as an int.\n\n Note: bitnot and bitnand don\'t exist. This is because numbers\n in math don\'t really have a width in terms of bits, and these\n operations necessarily care about leading zeroes.\n\n If you need to negate a specific number you can do it with an\n xor with a mask, e.g.:\n\n > math --base=hex bitxor 0x0F, 0xFF\n 0xF0\n\n > math --base=hex bitxor 0x2, 0x3\n # Here we mask with 0x3 == 0b111, so our number is 3 bits wide\n # Only the 1 bit isn\'t set.\n 0x1\n\nceil round number up to the nearest integer\n\ncos the cosine\n\ncosh hyperbolic cosine\n\nexp the base-e exponential function\n\nfac factorial - also known as x! (x * (x - 1) * (x - 2) * ... * 1)\n\nfloor round number down to the nearest integer\n\nln the base-e logarithm\n\nlog or log10\n the base-10 logarithm\n\nlog2 the base-2 logarithm\n\nmax returns the largest of the given numbers - this takes an\n arbitrary number of arguments (but at least one)\n\nmin returns the smallest of the given numbers - this takes an\n arbitrary number of arguments (but at least one)\n\nncr "from n choose r" combination function - how many subsets of\n size r can be taken from n (order doesn\'t matter)\n\nnpr the number of subsets of size r that can be taken from a set\n of n elements (including different order)\n\npow(x,y)\n returns x to the y (and can be written as x ^ y)\n\nround rounds to the nearest integer, away from 0\n\nsin the sine function\n\nsinh the hyperbolic sine\n\nsqrt the square root - (can also be written as x ^ 0.5)\n\ntan the tangent\n\ntanh the hyperbolic tangent\n\nAll of the trigonometric functions use radians (the pi-based scale,\nnot 360°).\n\nEXAMPLES\nmath 1+1 outputs 2.\n\nmath $status - 128 outputs the numerical exit status of the last\ncommand minus 128.\n\nmath 10 / 6 outputs 1.666667.\n\nmath -s0 10.0 / 6.0 outputs 1.\n\nmath -s3 10 / 6 outputs 1.666.\n\nmath "sin(pi)" outputs 0.\n\nmath 5 \\* 2 or math "5 * 2" or math 5 "*" 2 all output 10.\n\nmath 0xFF outputs 255, math 0 x 3 outputs 0 (because it computes 0\nmultiplied by 3).\n\nmath bitand 0xFE, 0x2e outputs 46.\n\nmath "bitor(9,2)" outputs 11.\n\nmath --base=hex 192 prints 0xc0.\n\nmath \'ncr(49,6)\' prints 13983816 - that\'s the number of possible\npicks in 6-from-49 lotto.\n\nmath max 5,2,3,1 prints 5.\n\nCOMPATIBILITY NOTES\nFish 1.x and 2.x releases relied on the bc command for handling math\nexpressions. Starting with fish 3.0.0 fish uses the tinyexpr library\nand evaluates the expression without the involvement of any external\ncommands.\n\nYou don\'t need to use -- before the expression, even if it begins\nwith a minus sign which might otherwise be interpreted as an invalid\noption. If you do insert -- before the expression, it will cause\noption scanning to stop just like for every other command and it\nwon\'t be part of the expression.',args:"math [(-s | --scale) N] [(-b | --base) BASE] EXPRESSION ..."},not:{shortDescription:"negate the exit status of a job",description:"not negates the exit status of another command. If the exit status is\nzero, not returns 1. Otherwise, not returns 0.\n\nThe -h or --help option displays help about using this command.\n\nEXAMPLE\nThe following code reports an error and exits if no file named spoon\ncan be found.\n\n if not test -f spoon\n echo There is no spoon\n exit 1\n end",args:"not COMMAND [OPTIONS ...]"},or:{shortDescription:"conditionally execute a command",description:"or is used to execute a command if the previous command was not\nsuccessful (returned a status of something other than 0).\n\nor statements may be used as part of the condition in an if or while\nblock.\n\nor does not change the current exit status itself, but the command it\nruns most likely will. The exit status of the last foreground command\nto exit can always be accessed using the $status variable.\n\nThe -h or --help option displays help about using this command.\n\nEXAMPLE\nThe following code runs the make command to build a program. If the\nbuild succeeds, the program is installed. If either step fails, make\nclean is run, which removes the files created by the build process.\n\n make; and make install; or make clean\n\nSEE ALSO\n\n• and command",args:"COMMAND1; or COMMAND2"},path:{shortDescription:"manipulate and check paths",description:'path performs operations on paths.\n\nPATH arguments are taken from the command line unless standard input\nis connected to a pipe or a file, in which case they are read from\nstandard input, one PATH per line. It is an error to supply PATH\narguments on both the command line and on standard input.\n\nArguments starting with - are normally interpreted as switches; --\ncauses the following arguments not to be treated as switches even if\nthey begin with -. Switches and required arguments are recognized\nonly on the command line.\n\nWhen a path starts with -, path filter and path normalize will\nprepend ./ on output to avoid it being interpreted as an option\notherwise, so it\'s safe to pass path\'s output to other commands that\ncan handle relative paths.\n\nAll subcommands accept a -q or --quiet switch, which suppresses the\nusual output but exits with the documented status. In this case these\ncommands will quit early, without reading all of the available input.\n\nAll subcommands also accept a -Z or --null-out switch, which makes\nthem print output separated with NUL instead of newlines. This is for\nfurther processing, e.g. passing to another path, or xargs -0. This\nis not recommended when the output goes to the terminal or a command\nsubstitution.\n\nAll subcommands also accept a -z or --null-in switch, which makes\nthem accept arguments from stdin separated with NULL-bytes. Since\nUnix paths can\'t contain NULL, that makes it possible to handle all\npossible paths and read input from e.g. find -print0. If arguments\nare given on the commandline this has no effect. This should mostly\nbe unnecessary since path automatically starts splitting on NULL if\none appears in the first PATH_MAX bytes, PATH_MAX being the operating\nsystem\'s maximum length for a path plus a NULL byte.\n\nSome subcommands operate on the paths as strings and so work on\nnonexistent paths, while others need to access the paths themselves\nand so filter out nonexistent paths.\n\nThe following subcommands are available.\n\nBASENAME SUBCOMMAND\n\n path basename [-z | --null-in] [-Z | --null-out] [-q | --quiet] [PATH ...]\n\npath basename returns the last path component of the given path, by\nremoving the directory prefix and removing trailing slashes. In other\nwords, it is the part that is not the dirname. For files you might\ncall it the "filename".\n\nIt returns 0 if there was a basename, i.e. if the path wasn\'t empty\nor just slashes.\n\n Examples\n\n > path basename ./foo.mp4\n foo.mp4\n\n > path basename ../banana\n banana\n\n > path basename /usr/bin/\n bin\n\n > path basename /usr/bin/*\n # This prints all files in /usr/bin/\n # A selection:\n cp\n fish\n grep\n rm\n\nDIRNAME SUBCOMMAND\n\n path dirname [-z | --null-in] [-Z | --null-out] [-q | --quiet] [PATH ...]\n\npath dirname returns the dirname for the given path. This is the part\nbefore the last "/", discounting trailing slashes. In other words, it\nis the part that is not the basename (discounting superfluous\nslashes).\n\nIt returns 0 if there was a dirname, i.e. if the path wasn\'t empty or\njust slashes.\n\n Examples\n\n > path dirname ./foo.mp4\n .\n\n > path dirname ../banana\n ..\n\n > path dirname /usr/bin/\n /usr\n\nEXTENSION SUBCOMMAND\n\n path extension [-z | --null-in] [-Z | --null-out] [-q | --quiet] [PATH ...]\n\npath extension returns the extension of the given path. This is the\npart after (and including) the last ".", unless that "." followed a\n"/" or the basename is "." or "..", in which case there is no\nextension and an empty line is printed.\n\nIf the filename ends in a ".", only a "." is printed.\n\nIt returns 0 if there was an extension.\n\n Examples\n\n > path extension ./foo.mp4\n .mp4\n\n > path extension ../banana\n # an empty line, status 1\n\n > path extension ~/.config\n # an empty line, status 1\n\n > path extension ~/.config.d\n .d\n\n > path extension ~/.config.\n .\n\n > set -l path (path change-extension \'\' ./foo.mp4)\n > set -l extension (path extension ./foo.mp4)\n > echo $path$extension\n # reconstructs the original path again.\n ./foo.mp4\n\nFILTER SUBCOMMAND\n\n path filter [-z | --null-in] [-Z | --null-out] [-q | --quiet] \\\n [-d] [-f] [-l] [-r] [-w] [-x] \\\n [-v | --invert] [(-t | --type) TYPE] [(-p | --perm) PERMISSION] [PATH ...]\n\npath filter returns all of the given paths that match the given\nchecks. In all cases, the paths need to exist, nonexistent paths are\nalways filtered.\n\nThe available filters are:\n\n• -t or --type with the options: "dir", "file", "link", "block",\n "char", "fifo" and "socket", in which case the path needs to be a\n directory, file, link, block device, character device, named pipe\n or socket, respectively.\n\n• -d, -f and -l are short for --type=dir, --type=file and\n --type=link, respectively. There are no shortcuts for the other\n types.\n\n• -p or --perm with the options: "read", "write", and "exec", as well\n as "suid", "sgid", "user" (referring to the path owner) and "group"\n (referring to the path\'s group), in which case the path needs to\n have all of the given permissions for the current user.\n\n• -r, -w and -x are short for --perm=read, --perm=write and\n --perm=exec, respectively. There are no shortcuts for the other\n permissions.\n\nNote that the path needs to be any of the given types, but have all\nof the given permissions. This is because having a path that is both\nwritable and executable makes sense, but having a path that is both a\ndirectory and a file doesn\'t. Links will count as the type of the\nlinked-to file, so links to files count as files, links to\ndirectories count as directories.\n\nThe filter options can either be given as multiple options, or\ncomma-separated - path filter -t dir,file or path filter --type dir\n--type file are equivalent.\n\nWith --invert, the meaning of the filtering is inverted - any path\nthat wouldn\'t pass (including by not existing) passes, and any path\nthat would pass fails.\n\nWhen a path starts with -, path filter will prepend ./ to avoid it\nbeing interpreted as an option otherwise.\n\nIt returns 0 if at least one path passed the filter.\n\npath is is shorthand for path filter -q, i.e. just checking without\nproducing output, see The is subcommand.\n\n Examples\n\n > path filter /usr/bin /usr/argagagji\n # The (hopefully) nonexistent argagagji is filtered implicitly:\n /usr/bin\n\n > path filter --type file /usr/bin /usr/bin/fish\n # Only fish is a file\n /usr/bin/fish\n\n > path filter --type file,dir --perm exec,write /usr/bin/fish /home/me\n # fish is a file, which passes, and executable, which passes,\n # but probably not writable, which fails.\n #\n # $HOME is a directory and both writable and executable, typically.\n # So it passes.\n /home/me\n\n > path filter -fdxw /usr/bin/fish /home/me\n # This is the same as above: "-f" is "--type=file", "-d" is "--type=dir",\n # "-x" is short for "--perm=exec" and "-w" short for "--perm=write"!\n /home/me\n\n > path filter -fx $PATH/*\n # Prints all possible commands - the first entry of each name is what fish would execute!\n\nIS SUBCOMMAND\n\n path is [-z | --null-in] [-Z | --null-out] [-q | --quiet] \\\n [-d] [-f] [-l] [-r] [-w] [-x] \\\n [-v | --invert] [(-t | --type) TYPE] [(-p | --perm) PERMISSION] [PATH ...]\n\npath is is short for path filter -q. It returns true if any of the\ngiven files passes the filter, but does not produce any output.\n\n--quiet can still be passed for compatibility but is redundant. The\noptions are the same as for path filter.\n\n Examples\n\n > path is /usr/bin /usr/argagagji\n # /usr/bin exists, so this returns a status of 0 (true). It prints nothing.\n > path is /usr/argagagji\n # /usr/argagagji does not, so this returns a status of 1 (false). It also prints nothing.\n > path is -fx /bin/sh\n # /bin/sh is usually an executable file, so this returns true.\n\nMTIME SUBCOMMAND\n\n path mtime [-z | --null-in] [-Z | --null-out] [-q | --quiet] [-R | --relative] [PATH ...]\n\npath mtime returns the last modification time ("mtime" in unix\njargon) of the given paths, in seconds since the unix epoch (the\nbeginning of the 1st of January 1970).\n\nWith --relative (or -R), it prints the number of seconds since the\nmodification time. It only reads the current time once at start, so\nin case multiple paths are given the times are all relative to the\nstart of path mtime -R running.\n\nIf you want to know if a file is newer or older than another file,\nconsider using test -nt instead. See the test documentation.\n\nIt returns 0 if reading mtime for any path succeeded.\n\n Examples\n\n > date +%s\n # This prints the current time as seconds since the epoch\n 1657217847\n\n > path mtime /etc/\n 1657213796\n\n > path mtime -R /etc/\n 4078\n # So /etc/ on this system was last modified a little over an hour ago\n\n # This is the same as\n > math (date +%s) - (path mtime /etc/)\n\nNORMALIZE SUBCOMMAND\n\n path normalize [-z | --null-in] [-Z | --null-out] [-q | --quiet] [PATH ...]\n\npath normalize returns the normalized versions of all paths. That\nmeans it squashes duplicate "/" (except for two leading "//"),\ncollapses "../" with earlier components and removes "." components.\n\nUnlike realpath or path resolve, it does not make the paths absolute.\nIt also does not resolve any symlinks. As such it can operate on\nnon-existent paths.\n\nBecause it operates on paths as strings and doesn\'t resolve symlinks,\nit works sort of like pwd -L and cd. E.g. path normalize link/.. will\nreturn ., just like cd link; cd .. would return to the current\ndirectory. For a physical view of the filesystem, see path resolve.\n\nLeading "./" components are usually removed. But when a path starts\nwith -, path normalize will add it instead to avoid confusion with\noptions.\n\nIt returns 0 if any normalization was done, i.e. any given path\nwasn\'t in canonical form.\n\n Examples\n\n > path normalize /usr/bin//../../etc/fish\n # The "//" is squashed and the ".." components neutralize the components before\n /etc/fish\n\n > path normalize /bin//bash\n # The "//" is squashed, but /bin isn\'t resolved even if your system links it to /usr/bin.\n /bin/bash\n\n > path normalize ./my/subdirs/../sub2\n my/sub2\n\n > path normalize -- -/foo\n ./-/foo\n\nRESOLVE SUBCOMMAND\n\n path resolve [-z | --null-in] [-Z | --null-out] [-q | --quiet] [PATH ...]\n\npath resolve returns the normalized, physical and absolute versions\nof all paths. That means it resolves symlinks and does what path\nnormalize does: it squashes duplicate "/", collapses "../" with\nearlier components and removes "." components. Then it turns that\npath into the absolute path starting from the filesystem root "/".\n\nIt is similar to realpath, as it creates the "real", canonical\nversion of the path. However, for paths that can\'t be resolved, e.g.\nif they don\'t exist or form a symlink loop, it will resolve as far as\nit can and normalize the rest.\n\nBecause it resolves symlinks, it works sort of like pwd -P. E.g. path\nresolve link/.. will return the parent directory of what the link\npoints to, just like cd link; cd (pwd -P)/.. would go to it. For a\nlogical view of the filesystem, see path normalize.\n\nIt returns 0 if any normalization or resolution was done, i.e. any\ngiven path wasn\'t in canonical form.\n\n Examples\n\n > path resolve /bin//sh\n # The "//" is squashed, and /bin is resolved if your system links it to /usr/bin.\n # sh here is bash (this is common on linux systems)\n /usr/bin/bash\n\n > path resolve /bin/foo///bar/../baz\n # Assuming /bin exists and is a symlink to /usr/bin, but /bin/foo doesn\'t.\n # This resolves the /bin/ and normalizes the nonexistent rest:\n /usr/bin/foo/baz\n\nCHANGE-EXTENSION SUBCOMMAND\n\n path change-extension [-z | --null-in] [-Z | --null-out] \\\n [-q | --quiet] EXTENSION [PATH ...]\n\npath change-extension returns the given paths, with their extension\nchanged to the given new extension. The extension is the part after\n(and including) the last ".", unless that "." followed a "/" or the\nbasename is "." or "..", in which case there is no previous extension\nand the new one is simply added.\n\nIf the extension is empty, any previous extension is stripped, along\nwith the ".". This is, of course, the inverse of path extension.\n\nOne leading dot on the extension is ignored, so ".mp3" and "mp3" are\ntreated the same.\n\nIt returns 0 if it was given any paths.\n\n Examples\n\n > path change-extension mp4 ./foo.wmv\n ./foo.mp4\n\n > path change-extension .mp4 ./foo.wmv\n ./foo.mp4\n\n > path change-extension \'\' ../banana\n ../banana\n # but status 1, because there was no extension.\n\n > path change-extension \'\' ~/.config\n /home/alfa/.config\n # status 1\n\n > path change-extension \'\' ~/.config.d\n /home/alfa/.config\n # status 0\n\n > path change-extension \'\' ~/.config.\n /home/alfa/.config\n # status 0\n\nSORT SUBCOMMAND\n\n path sort [-z | --null-in] [-Z | --null-out] \\\n [-q | --quiet] [-r | --reverse] \\\n [--key=basename|dirname|path] [PATH ...]\n\npath sort returns the given paths in sorted order. They are sorted in\nthe same order as globs - alphabetically, but with runs of numerical\ndigits compared numerically.\n\nWith --reverse or -r the sort is reversed.\n\nWith --key= only the given part of the path is compared, e.g.\n--key=dirname causes only the dirname to be compared, --key=basename\nonly the basename and --key=path causes the entire path to be\ncompared (this is the default).\n\nWith --unique or -u the sort is deduplicated, meaning only the first\nof a run that have the same key is kept. So if you are sorting by\nbasename, then only the first of each basename is used.\n\nThe sort used is stable, so sorting first by basename and then by\ndirname works and causes the files to be grouped according to\ndirectory.\n\nIt currently returns 0 if it was given any paths.\n\n Examples\n\n > path sort 10-foo 2-bar\n 2-bar\n 10-foo\n\n > path sort --reverse 10-foo 2-bar\n 10-foo\n 2-bar\n\n > path sort --unique --key=basename $fish_function_path/*.fish\n # prints a list of all function files fish would use, sorted by name.\n\nCOMBINING PATH\npath is meant to be easy to combine with itself, other tools and\nfish.\n\nThis is why\n\n• path\'s output is automatically split by fish if it goes into a\n command substitution, so just doing (path ...) handles all paths,\n even those containing newlines, correctly\n\n• path has --null-in to handle null-delimited input (typically\n automatically detected!), and --null-out to pass on null-delimited\n output\n\nSome examples of combining path:\n\n # Expand all paths in the current directory, leave only executable files, and print their resolved path\n path filter -zZ -xf -- * | path resolve -z\n\n # The same thing, but using find (note -maxdepth needs to come first or find will scream)\n # (this also depends on your particular version of find)\n # Note the `-z` is unnecessary for any sensible version of find - if `path` sees a NULL,\n # it will split on NULL automatically.\n find . -maxdepth 1 -type f -executable -print0 | path resolve -z\n\n set -l paths (path filter -p exec $PATH/fish -Z | path resolve)',args:"path basename GENERAL_OPTIONS [PATH ...]\npath dirname GENERAL_OPTIONS [PATH ...]\npath extension GENERAL_OPTIONS [PATH ...]\npath filter GENERAL_OPTIONS [-v | --invert]\n [-d] [-f] [-l] [-r] [-w] [-x]\n [(-t | --type) TYPE] [(-p | --perm) PERMISSION] [PATH ...]\npath is GENERAL_OPTIONS [(-v | --invert)] [(-t | --type) TYPE]\n [-d] [-f] [-l] [-r] [-w] [-x]\n [(-p | --perm) PERMISSION] [PATH ...]\npath mtime GENERAL_OPTIONS [(-R | --relative)] [PATH ...]\npath normalize GENERAL_OPTIONS [PATH ...]\npath resolve GENERAL_OPTIONS [PATH ...]\npath change-extension GENERAL_OPTIONS EXTENSION [PATH ...]\npath sort GENERAL_OPTIONS [-r | --reverse]\n [-u | --unique] [--key=basename|dirname|path] [PATH ...]\n\nGENERAL_OPTIONS\n [-z | --null-in] [-Z | --null-out] [-q | --quiet]"},printf:{shortDescription:"Display formatted text",description:"The `printf` command formats and prints text according to a specified format string. Unlike `echo`, `printf` does not append a newline unless explicitly included in the format.",args:"FORMAT [ARGUMENT...]"},pwd:{shortDescription:"output the current working directory",description:"NOTE: This page documents the fish builtin pwd. To see the\ndocumentation on the pwd command you might have, use command man pwd.\n\npwd outputs (prints) the current working directory.\n\nThe following options are available:\n\n-L or --logical\n Output the logical working directory, without resolving\n symlinks (default behavior).\n\n-P or --physical\n Output the physical working directory, with symlinks resolved.\n\n-h or --help\n Displays help about using this command.\n\nSEE ALSO\nNavigate directories using the directory history or the directory\nstack",args:"pwd [-P | --physical]\npwd [-L | --logical]"},random:{shortDescription:"generate random number",description:"random generates a pseudo-random integer from a uniform distribution.\nThe range (inclusive) depends on the arguments.\n\nNo arguments indicate a range of 0 to 32767 (inclusive).\n\nIf one argument is specified, the internal engine will be seeded with\nthe argument for future invocations of random and no output will be\nproduced.\n\nTwo arguments indicate a range from START to END (both START and END\nincluded).\n\nThree arguments indicate a range from START to END with a spacing of\nSTEP between possible outputs.\n\nrandom choice will select one random item from the succeeding\narguments.\n\nThe -h or --help option displays help about using this command.\n\nNote that seeding the engine will NOT give the same result across\ndifferent systems.\n\nYou should not consider random cryptographically secure, or even\nstatistically accurate.\n\nEXAMPLE\nThe following code will count down from a random even number between\n10 and 20 to 1:\n\n for i in (seq (random 10 2 20) -1 1)\n echo $i\n end\n\nAnd this will open a random picture from any of the subdirectories:\n\n open (random choice **.jpg)\n\nOr, to only get even numbers from 2 to 20:\n\n random 2 2 20\n\nOr odd numbers from 1 to 3:\n\n random 1 2 3 # or 1 2 4",args:"random\nrandom SEED\nrandom START END\nrandom START STEP END\nrandom choice [ITEMS ...]"},read:{shortDescription:"read line of input into variables",description:"read reads from standard input and either writes the result back to\nstandard output (for use in command substitution), or stores the\nresult in one or more shell variables. By default, read reads a\nsingle line and splits it into variables on spaces or tabs.\nAlternatively, a null character or a maximum number of characters can\nbe used to terminate the input, and other delimiters can be given.\nUnlike other shells, there is no default variable (such as REPLY) for\nstoring the result - instead, it is printed on standard output.\n\nThe following options are available:\n\n-c CMD or --command CMD\n Sets the initial string in the interactive mode command buffer\n to CMD.\n\n-d or --delimiter DELIMITER\n Splits on DELIMITER. DELIMITER will be used as an entire\n string to split on, not a set of characters.\n\n-g or --global\n Makes the variables global.\n\n-s or --silent\n Masks characters written to the terminal, replacing them with\n asterisks. This is useful for reading things like passwords or\n other sensitive information.\n\n-f or --function\n Scopes the variable to the currently executing function. It is\n erased when the function ends.\n\n-l or --local\n Scopes the variable to the currently executing block. It is\n erased when the block ends. Outside of a block, this is the\n same as --function.\n\n-n or --nchars NCHARS\n Makes read return after reading NCHARS characters or the end\n of the line, whichever comes first.\n\n-p or --prompt PROMPT_CMD\n Uses the output of the shell command PROMPT_CMD as the prompt\n for the interactive mode. The default prompt command is\n set_color green; echo read; set_color normal; echo \"> \"\n\n-P or --prompt-str PROMPT_STR\n Uses the PROMPT_STR as the prompt for the interactive mode. It\n is equivalent to echo $PROMPT_STR and is provided solely to\n avoid the need to frame the prompt as a command. All special\n characters in the string are automatically escaped before\n being passed to the echo command.\n\n-R or --right-prompt RIGHT_PROMPT_CMD\n Uses the output of the shell command RIGHT_PROMPT_CMD as the\n right prompt for the interactive mode. There is no default\n right prompt command.\n\n-S or --shell\n Enables syntax highlighting, tab completions and command\n termination suitable for entering shellscript code in the\n interactive mode. NOTE: Prior to fish 3.0, the short opt for\n --shell was -s, but it has been changed for compatibility with\n bash's -s short opt for --silent.\n\n-t -or --tokenize\n Causes read to split the input into variables by the shell's\n tokenization rules. This means it will honor quotes and\n escaping. This option is of course incompatible with other\n options to control splitting like --delimiter and does not\n honor IFS (like fish's tokenizer). It saves the tokens in the\n manner they'd be passed to commands on the commandline, so\n e.g. a\\ b is stored as a b. Note that currently it leaves\n command substitutions intact along with the parentheses.\n\n-u or --unexport\n Prevents the variables from being exported to child processes\n (default behaviour).\n\n-U or --universal\n Causes the specified shell variable to be made universal.\n\n-x or --export\n Exports the variables to child processes.\n\n-a or --list\n Stores the result as a list in a single variable. This option\n is also available as --array for backwards compatibility.\n\n-z or --null\n Marks the end of the line with the NUL character, instead of\n newline. This also disables interactive mode.\n\n-L or --line\n Reads each line into successive variables, and stops after\n each variable has been filled. This cannot be combined with\n the --delimiter option.\n\nWithout the --line option, read reads a single line of input from\nstandard input, breaks it into tokens, and then assigns one token to\neach variable specified in VARIABLES. If there are more tokens than\nvariables, the complete remainder is assigned to the last variable.\n\nIf no option to determine how to split like --delimiter, --line or\n--tokenize is given, the variable IFS is used as a list of characters\nto split on. Relying on the use of IFS is deprecated and this\nbehaviour will be removed in future versions. The default value of\nIFS contains space, tab and newline characters. As a special case, if\nIFS is set to the empty string, each character of the input is\nconsidered a separate token.\n\nWith the --line option, read reads a line of input from standard\ninput into each provided variable, stopping when each variable has\nbeen filled. The line is not tokenized.\n\nIf no variable names are provided, read enters a special case that\nsimply provides redirection from standard input to standard output,\nuseful for command substitution. For instance, the fish shell command\nbelow can be used to read data that should be provided via a command\nline argument from the console instead of hardcoding it in the\ncommand itself, allowing the command to both be reused as-is in\nvarious contexts with different input values and preventing possibly\nsensitive text from being included in the shell history:\n\n mysql -uuser -p(read)\n\nWhen running in this mode, read does not split the input in any way\nand text is redirected to standard output without any further\nprocessing or manipulation.\n\nIf -a or --array is provided, only one variable name is allowed and\nthe tokens are stored as a list in this variable.\n\nSee the documentation for set for more details on the scoping rules\nfor variables.\n\nWhen read reaches the end-of-file (EOF) instead of the terminator,\nthe exit status is set to 1. Otherwise, it is set to 0.\n\nIn order to protect the shell from consuming too many system\nresources, read will only consume a maximum of 100 MiB (104857600\nbytes); if the terminator is not reached before this limit then\nVARIABLE is set to empty and the exit status is set to 122. This\nlimit can be altered with the fish_read_limit variable. If set to 0\n(zero), the limit is removed.\n\nEXAMPLE\nread has a few separate uses.\n\nThe following code stores the value 'hello' in the shell variable\nfoo.\n\n echo hello|read foo\n\nThe while command is a neat way to handle command output\nline-by-line:\n\n printf '%s\\n' line1 line2 line3 line4 | while read -l foo\n echo \"This is another line: $foo\"\n end\n\nDelimiters given via \"-d\" are taken as one string:\n\n echo a==b==c | read -d == -l a b c\n echo $a # a\n echo $b # b\n echo $c # c\n\n--tokenize honors quotes and escaping like the shell's argument\npassing:\n\n echo 'a\\ b' | read -t first second\n echo $first # outputs \"a b\", $second is empty\n\n echo 'a\"foo bar\"b (command echo wurst)*\" \"{a,b}' | read -lt -l a b c\n echo $a # outputs 'afoo barb' (without the quotes)\n echo $b # outputs '(command echo wurst)* {a,b}' (without the quotes)\n echo $c # nothing\n\nFor an example on interactive use, see Querying for user input.",args:"read [OPTIONS] [VARIABLE ...]"},realpath:{shortDescription:"Resolve and print the absolute path",description:"Convert each provided path to its absolute, canonical form by resolving symbolic links and relative path components.",args:"PATH..."},return:{shortDescription:"stop the current inner function",description:"return halts a currently running function. The exit status is set to\nN if it is given. If return is invoked outside of a function or dot\nscript it is equivalent to exit.\n\nIt is often added inside of a conditional block such as an if\nstatement or a switch statement to conditionally stop the executing\nfunction and return to the caller; it can also be used to specify the\nexit status of a function.\n\nIf at the top level of a script, it exits with the given status, like\nexit. If at the top level in an interactive session, it will set\nstatus, but not exit the shell.\n\nThe -h or --help option displays help about using this command.\n\nEXAMPLE\nAn implementation of the false command as a fish function:\n\n function false\n return 1\n end",args:"return [N]"},set:{shortDescription:"display and change shell variables",description:'set manipulates shell variables.\n\nIf both NAME and VALUE are provided, set assigns any values to\nvariable NAME. Variables in fish are lists, multiple values are\nallowed. One or more variable INDEX can be specified including\nranges (not for all options.)\n\nIf no VALUE is given, the variable will be set to the empty list.\n\nIf set is ran without arguments, it prints the names and values of\nall shell variables in sorted order. Passing scope or export flags\nallows filtering this to only matching variables, so set --local\nwould only show local variables.\n\nWith --erase and optionally a scope flag set will erase the matching\nvariable (or the variable of that name in the smallest possible\nscope).\n\nWith --show, set will describe the given variable names, explaining\nhow they have been defined - in which scope with which values and\noptions.\n\nThe following options control variable scope:\n\n-U or --universal\n Sets a universal variable. The variable will be immediately\n available to all the user\'s fish instances on the machine, and\n will be persisted across restarts of the shell.\n\n-f or --function\n Sets a variable scoped to the executing function. It is\n erased when the function ends.\n\n-l or --local\n Sets a locally-scoped variable in this block. It is erased\n when the block ends. Outside of a block, this is the same as\n --function.\n\n-g or --global\n Sets a globally-scoped variable. Global variables are\n available to all functions running in the same shell. They\n can be modified or erased.\n\nThese options modify how variables operate:\n\n--export or -x\n Causes the specified shell variable to be exported to child\n processes (making it an "environment variable").\n\n--unexport or -u\n Causes the specified shell variable to NOT be exported to\n child processes.\n\n--path Treat specified variable as a path variable; variable will be\n split on colons (:) and will be displayed joined by colons\n when quoted (echo "$PATH") or exported.\n\n--unpath\n Causes variable to no longer be treated as a path variable.\n Note: variables ending in "PATH" are automatically path\n variables.\n\nFurther options:\n\n-a or --append NAME VALUE ...\n Appends VALUES to the current set of values for variable NAME.\n Can be used with --prepend to both append and prepend at the\n same time. This cannot be used when assigning to a variable\n slice.\n\n-p or --prepend NAME VALUE ...\n Prepends VALUES to the current set of values for variable\n NAME. This can be used with --append to both append and\n prepend at the same time. This cannot be used when assigning\n to a variable slice.\n\n-e or --erase NAME*[*INDEX]\n Causes the specified shell variables to be erased. Supports\n erasing from multiple scopes at once. Individual items in a\n variable at INDEX in brackets can be specified.\n\n-q or --query NAME*[*INDEX]\n Test if the specified variable names are defined. If an INDEX\n is provided, check for items at that slot. Does not output\n anything, but the shell status is set to the number of\n variables specified that were not defined, up to a maximum of\n 255. If no variable was given, it also returns 255.\n\n-n or --names\n List only the names of all defined variables, not their value.\n The names are guaranteed to be sorted.\n\n-S or --show\n Shows information about the given variables. If no variable\n names are given then all variables are shown in sorted order.\n It shows the scopes the given variables are set in, along with\n the values in each and whether or not it is exported. No\n other flags can be used with this option.\n\n-L or --long\n Do not abbreviate long values when printing set variables.\n\n-h or --help\n Displays help about using this command.\n\nIf a variable is set to more than one value, the variable will be a\nlist with the specified elements. If a variable is set to zero\nelements, it will become a list with zero elements.\n\nIf the variable name is one or more list elements, such as PATH[1 3\n7], only those list elements specified will be changed. If you\nspecify a negative index when expanding or assigning to a list\nvariable, the index will be calculated from the end of the list. For\nexample, the index -1 means the last index of a list.\n\nThe scoping rules when creating or updating a variable are:\n\n• Variables may be explicitly set as universal, global, function, or\n local. Variables with the same name but in a different scope will\n not be changed.\n\n• If the scope of a variable is not explicitly set but a variable by\n that name has been previously defined, the scope of the existing\n variable is used. If the variable is already defined in multiple\n scopes, the variable with the narrowest scope will be updated.\n\n• If a variable\'s scope is not explicitly set and there is no\n existing variable by that name, the variable will be local to the\n currently executing function. Note that this is different from\n using the -l or --local flag, in which case the variable will be\n local to the most-inner currently executing block, while without\n them the variable will be local to the function as a whole. If no\n function is executing, the variable will be set in the global\n scope.\n\nThe exporting rules when creating or updating a variable are\nidentical to the scoping rules for variables:\n\n• Variables may be explicitly set to either exported or not exported.\n When an exported variable goes out of scope, it is unexported.\n\n• If a variable is not explicitly set to be exported or not exported,\n but has been previously defined, the previous exporting rule for\n the variable is kept.\n\n• If a variable is not explicitly set to be either exported or\n unexported and has never before been defined, the variable will not\n be exported.\n\nIn query mode, the scope to be examined can be specified. Whether\nthe variable has to be a path variable or exported can also be\nspecified.\n\nIn erase mode, if variable indices are specified, only the specified\nslices of the list variable will be erased.\n\nset requires all options to come before any other arguments. For\nexample, set flags -l will have the effect of setting the value of\nthe variable flags to \'-l\', not making the variable local.\n\nEXIT STATUS\nIn assignment mode, set does not modify the exit status, but passes\nalong whatever status was set, including by command substitutions.\nThis allows capturing the output and exit status of a subcommand,\nlike in if set output (command).\n\nIn query mode, the exit status is the number of variables that were\nnot found.\n\nIn erase mode, set exits with a zero exit status in case of success,\nwith a non-zero exit status if the commandline was invalid, if any of\nthe variables did not exist or was a special read-only variable.\n\nEXAMPLES\nPrint all global, exported variables:\n\n > set -gx\n\nSet the value of the variable $foo to be \'hi\'.:\n\n > set foo hi\n\nAppend the value "there" to the variable $foo:\n\n > set -a foo there\n\nRemove $smurf from the scope:\n\n > set -e smurf\n\nRemove $smurf from the global and universal scopes:\n\n > set -e -Ug smurf\n\nChange the fourth element of the $PATH list to ~/bin:\n\n > set PATH[4] ~/bin\n\nOutputs the path to Python if type -p returns true:\n\n if set python_path (type -p python)\n echo "Python is at $python_path"\n end\n\nSetting a variable doesn\'t modify $status; a command substitution\nstill will, though:\n\n > echo $status\n 0\n > false\n > set foo bar\n > echo $status\n 1\n > true\n > set foo banana (false)\n > echo $status\n 1\n\nVAR=VALUE command sets a variable for just one command, like other\nshells. This runs fish with a temporary home directory:\n\n > HOME=(mktemp -d) fish\n\n(which is essentially the same as):\n\n > begin; set -lx HOME (mktemp -d); fish; end\n\nNOTES\n\n• Fish versions prior to 3.0 supported the syntax set PATH[1] PATH[4]\n /bin /sbin, which worked like set PATH[1 4] /bin /sbin.',args:"set\nset (-f | --function) (-l | local) (-g | --global) (-U | --universal)\nset [-Uflg] NAME [VALUE ...]\nset [-Uflg] NAME[[INDEX ...]] [VALUE ...]\nset (-a | --append) [-flgU] NAME VALUE ...\nset (-q | --query) (-e | --erase) [-flgU] [NAME][[INDEX]] ...]\nset (-S | --show) [NAME ...]"},set_color:{shortDescription:"set the terminal color",description:'set_color is used to control the color and styling of text in the\nterminal. VALUE describes that styling. VALUE can be a reserved color\nname like red or an RGB color value given as 3 or 6 hexadecimal\ndigits ("F27" or "FF2277"). A special keyword normal resets text\nformatting to terminal defaults.\n\nValid colors include:\n\n • black, red, green, yellow, blue, magenta, cyan, white\n\n • brblack, brred, brgreen, bryellow, brblue, brmagenta, brcyan,\n brwhite\n\nThe br- (as in \'bright\') forms are full-brightness variants of the 8\nstandard-brightness colors on many terminals. brblack has higher\nbrightness than black - towards gray.\n\nAn RGB value with three or six hex digits, such as A0FF33 or f2f can\nbe used. Fish will choose the closest supported color. A three digit\nvalue is equivalent to specifying each digit twice; e.g., set_color\n2BC is the same as set_color 22BBCC. Hexadecimal RGB values can be in\nlower or uppercase. Depending on the capabilities of your terminal\n(and the level of support set_color has for it) the actual color may\nbe approximated by a nearby matching reserved color name or set_color\nmay not have an effect on color.\n\nA second color may be given as a desired fallback color. e.g.\nset_color 124212 brblue will instruct set_color to use brblue if a\nterminal is not capable of the exact shade of grey desired. This is\nvery useful when an 8 or 16 color terminal might otherwise not use a\ncolor.\n\nThe following options are available:\n\n-b or --background COLOR\n Sets the background color.\n\n-c or --print-colors\n Prints the given colors or a colored list of the 16 named\n colors.\n\n-o or --bold\n Sets bold mode.\n\n-d or --dim\n Sets dim mode.\n\n-i or --italics\n Sets italics mode.\n\n-r or --reverse\n Sets reverse mode.\n\n-u or --underline\n Sets underlined mode.\n\n-h or --help\n Displays help about using this command.\n\nUsing the normal keyword will reset foreground, background, and all\nformatting back to default.\n\nNOTES\n\n1. Using the normal keyword will reset both background and foreground\n colors to whatever is the default for the terminal.\n\n2. Setting the background color only affects subsequently written\n characters. Fish provides no way to set the background color for\n the entire terminal window. Configuring the window background\n color (and other attributes such as its opacity) has to be done\n using whatever mechanisms the terminal provides. Look for a config\n option.\n\n3. Some terminals use the --bold escape sequence to switch to a\n brighter color set rather than increasing the weight of text.\n\n4. set_color works by printing sequences of characters to standard\n output. If used in command substitution or a pipe, these\n characters will also be captured. This may or may not be\n desirable. Checking the exit status of isatty stdout before using\n set_color can be useful to decide not to colorize output in a\n script.\n\nEXAMPLES\n\n set_color red; echo "Roses are red"\n set_color blue; echo "Violets are blue"\n set_color 62A; echo "Eggplants are dark purple"\n set_color normal; echo "Normal is nice" # Resets the background too\n\nTERMINAL CAPABILITY DETECTION\nFish uses some heuristics to determine what colors a terminal\nsupports to avoid sending sequences that it won\'t understand.\n\nIn particular it will:\n\n• Enable 256 colors if TERM contains "xterm", except for known\n exceptions (like MacOS 10.6 Terminal.app)\n\n• Enable 24-bit ("true-color") even if the $TERM entry only reports\n 256 colors. This includes modern xterm, VTE-based terminals like\n Gnome Terminal, Konsole and iTerm2.\n\n• Detect support for italics, dim, reverse and other modes.\n\nIf terminfo reports 256 color support for a terminal, 256 color\nsupport will always be enabled.\n\nTo force true-color support on or off, set fish_term24bit to "1" for\non and 0 for off - set -g fish_term24bit 1.\n\nTo debug color palette problems, tput colors may be useful to see the\nnumber of colors in terminfo for a terminal. Fish launched as fish -d\nterm_support will include diagnostic messages that indicate the color\nsupport mode in use.\n\nThe set_color command uses the terminfo database to look up how to\nchange terminal colors on whatever terminal is in use. Some systems\nhave old and incomplete terminfo databases, and lack color\ninformation for terminals that support it. Fish assumes that all\nterminals can use the [ANSI\nX3.64](https://en.wikipedia.org/wiki/ANSI_escape_code) escape\nsequences if the terminfo definition indicates a color below 16 is\nnot supported.',args:"set_color [OPTIONS] VALUE"},source:{shortDescription:"evaluate contents of file",description:"source evaluates the commands of the specified FILE in the current\nshell as a new block of code. This is different from starting a new\nprocess to perform the commands (i.e. fish < FILE) since the commands\nwill be evaluated by the current shell, which means that changes in\nshell variables will affect the current shell. If additional\narguments are specified after the file name, they will be inserted\ninto the argv variable. The argv variable will not include the name\nof the sourced file.\n\nfish will search the working directory to resolve relative paths but\nwill not search PATH .\n\nIf no file is specified and stdin is not the terminal, or if the file\nname - is used, stdin will be read.\n\nThe exit status of source is the exit status of the last job to\nexecute. If something goes wrong while opening or reading the file,\nsource exits with a non-zero status.\n\n. (a single period) is an alias for the source command. The use of .\nis deprecated in favour of source, and . will be removed in a future\nversion of fish.\n\nsource creates a new local scope; set --local within a sourced block\nwill not affect variables in the enclosing scope.\n\nThe -h or --help option displays help about using this command.\n\nEXAMPLE\n\n source ~/.config/fish/config.fish\n # Causes fish to re-read its initialization file.\n\nCAVEATS\nIn fish versions prior to 2.3.0, the argv variable would have a\nsingle element (the name of the sourced file) if no arguments are\npresent. Otherwise, it would contain arguments without the name of\nthe sourced file. That behavior was very confusing and unlike other\nshells such as bash and zsh.",args:"source FILE [ARGUMENTS ...]\nSOMECOMMAND | source"},status:{shortDescription:"query fish runtime information",description:'With no arguments, status displays a summary of the current login and\njob control status of the shell.\n\nThe following operations (subcommands) are available:\n\nis-command-substitution, -c or --is-command-substitution\n Returns 0 if fish is currently executing a command\n substitution.\n\nis-block, -b or --is-block\n Returns 0 if fish is currently executing a block of code.\n\nis-breakpoint\n Returns 0 if fish is currently showing a prompt in the context\n of a breakpoint command. See also the fish_breakpoint_prompt\n function.\n\nis-interactive, -i or --is-interactive\n Returns 0 if fish is interactive - that is, connected to a\n keyboard.\n\nis-login, -l or --is-login\n Returns 0 if fish is a login shell - that is, if fish should\n perform login tasks such as setting up PATH.\n\nis-full-job-control or --is-full-job-control\n Returns 0 if full job control is enabled.\n\nis-interactive-job-control or --is-interactive-job-control\n Returns 0 if interactive job control is enabled.\n\nis-no-job-control or --is-no-job-control\n Returns 0 if no job control is enabled.\n\ncurrent-command\n Prints the name of the currently-running function or command,\n like the deprecated variable.\n\ncurrent-commandline\n Prints the entirety of the currently-running commandline,\n inclusive of all jobs and operators.\n\nfilename, current-filename, -f or --current-filename\n Prints the filename of the currently-running script. If the\n current script was called via a symlink, this will return the\n symlink. If the current script was received by piping into\n source, then this will return -.\n\nbasename\n Prints just the filename of the running script, without any\n path components before.\n\ndirname\n Prints just the path to the running script, without the actual\n filename itself. This can be relative to PWD (including just\n "."), depending on how the script was called. This is the same\n as passing the filename to dirname(3). It\'s useful if you want\n to use other files in the current script\'s directory or\n similar.\n\nfish-path\n Prints the absolute path to the currently executing instance\n of fish. This is a best-effort attempt and the exact output is\n down to what the platform gives fish. In some cases you might\n only get "fish".\n\nfunction or current-function\n Prints the name of the currently called function if able, when\n missing displays "Not a function" (or equivalent translated\n string).\n\nline-number, current-line-number, -n or --current-line-number\n Prints the line number of the currently running script.\n\nstack-trace, print-stack-trace, -t or --print-stack-trace\n Prints a stack trace of all function calls on the call stack.\n\njob-control, -j or --job-control CONTROL_TYPE\n Sets the job control type to CONTROL_TYPE, which can be none,\n full, or interactive.\n\nfeatures\n Lists all available feature flags.\n\ntest-feature FEATURE\n Returns 0 when FEATURE is enabled, 1 if it is disabled, and 2\n if it is not recognized.\n\nNOTES\nFor backwards compatibility most subcommands can also be specified as\na long or short option. For example, rather than status is-login you\ncan type status --is-login. The flag forms are deprecated and may be\nremoved in a future release (but not before fish 4.0).\n\nYou can only specify one subcommand per invocation even if you use\nthe flag form of the subcommand.',args:"status\nstatus is-login\nstatus is-interactive\nstatus is-block\nstatus is-breakpoint\nstatus is-command-substitution\nstatus is-no-job-control\nstatus is-full-job-control\nstatus is-interactive-job-control\nstatus current-command\nstatus current-commandline\nstatus filename\nstatus basename\nstatus dirname\nstatus fish-path\nstatus function\nstatus line-number\nstatus stack-trace\nstatus job-control CONTROL_TYPE\nstatus features\nstatus test-feature FEATURE"},string:{shortDescription:"manipulate strings",description:"string performs operations on strings.\n\nSTRING arguments are taken from the command line unless standard\ninput is connected to a pipe or a file, in which case they are read\nfrom standard input, one STRING per line. It is an error to supply\nSTRING arguments on the command line and on standard input.\n\nArguments beginning with - are normally interpreted as switches; --\ncauses the following arguments not to be treated as switches even if\nthey begin with -. Switches and required arguments are recognized\nonly on the command line.\n\nMost subcommands accept a -q or --quiet switch, which suppresses the\nusual output but exits with the documented status. In this case these\ncommands will quit early, without reading all of the available input.\n\nThe following subcommands are available.\n\nCOLLECT SUBCOMMAND\nstring collect [-a | --allow-empty] [-N | --no-trim-newlines] [STRING ...]\n\nstring collect collects its input into a single output argument,\nwithout splitting the output when used in a command substitution.\nThis is useful when trying to collect multiline output from another\ncommand into a variable. Exit status: 0 if any output argument is\nnon-empty, or 1 otherwise.\n\nA command like echo (cmd | string collect) is mostly equivalent to a\nquoted command substitution (echo \"$(cmd)\"). The main difference is\nthat the former evaluates to zero or one elements whereas the quoted\ncommand substitution always evaluates to one element due to string\ninterpolation.\n\nIf invoked with multiple arguments instead of input, string collect\npreserves each argument separately, where the number of output\narguments is equal to the number of arguments given to string\ncollect.\n\nAny trailing newlines on the input are trimmed, just as with \"$(cmd)\"\nsubstitution. Use --no-trim-newlines to disable this behavior, which\nmay be useful when running a command such as set contents (cat\nfilename | string collect -N).\n\nWith --allow-empty, string collect always prints one (empty)\nargument. This can be used to prevent an argument from disappearing.\n\n Examples\n\n > echo \"zero $(echo one\\ntwo\\nthree) four\"\n zero one\n two\n three four\n\n > echo \\\"(echo one\\ntwo\\nthree | string collect)\\\"\n \"one\n two\n three\"\n\n > echo \\\"(echo one\\ntwo\\nthree | string collect -N)\\\"\n \"one\n two\n three\n \"\n\n > echo foo(true | string collect --allow-empty)bar\n foobar\n\nESCAPE AND UNESCAPE SUBCOMMANDS\nstring escape [-n | --no-quoted] [--style=] [STRING ...]\nstring unescape [--style=] [STRING ...]\n\nstring escape escapes each STRING in one of three ways. The first is\n--style=script. This is the default. It alters the string such that\nit can be passed back to eval to produce the original argument again.\nBy default, all special characters are escaped, and quotes are used\nto simplify the output when possible. If -n or --no-quoted is given,\nthe simplifying quoted format is not used. Exit status: 0 if at least\none string was escaped, or 1 otherwise.\n\n--style=var ensures the string can be used as a variable name by hex\nencoding any non-alphanumeric characters. The string is first\nconverted to UTF-8 before being encoded.\n\n--style=url ensures the string can be used as a URL by hex encoding\nany character which is not legal in a URL. The string is first\nconverted to UTF-8 before being encoded.\n\n--style=regex escapes an input string for literal matching within a\nregex expression. The string is first converted to UTF-8 before being\nencoded.\n\nstring unescape performs the inverse of the string escape command. If\nthe string to be unescaped is not properly formatted it is ignored.\nFor example, doing string unescape --style=var (string escape\n--style=var $str) will return the original string. There is no\nsupport for unescaping --style=regex.\n\n Examples\n\n > echo \\x07 | string escape\n \\cg\n\n > string escape --style=var 'a1 b2'\\u6161\n a1_20_b2_E6_85_A1\n\nJOIN AND JOIN0 SUBCOMMANDS\nstring join [-q | --quiet] SEP [STRING ...]\nstring join0 [-q | --quiet] [STRING ...]\n\nstring join joins its STRING arguments into a single string separated\nby SEP, which can be an empty string. Exit status: 0 if at least one\njoin was performed, or 1 otherwise. If -n or --no-empty is specified,\nempty strings are excluded from consideration (e.g. string join -n +\na b \"\" c would expand to a+b+c not a+b++c).\n\nstring join0 joins its STRING arguments into a single string\nseparated by the zero byte (NUL), and adds a trailing NUL. This is\nmost useful in conjunction with tools that accept NUL-delimited\ninput, such as sort -z. Exit status: 0 if at least one join was\nperformed, or 1 otherwise.\n\nBecause Unix uses NUL as the string terminator, passing the output of\nstring join0 as an argument to a command (via a command substitution)\nwon't actually work. Fish will pass the correct bytes along, but the\ncommand won't be able to tell where the argument ends. This is a\nlimitation of Unix' argument passing.\n\n Examples\n\n > seq 3 | string join ...\n 1...2...3\n\n # Give a list of NUL-separated filenames to du (this is a GNU extension)\n > string join0 file1 file2 file\\nwith\\nmultiple\\nlines | du --files0-from=-\n\n # Just put the strings together without a separator\n > string join '' a b c\n abc\n\nLENGTH SUBCOMMAND\nstring length [-q | --quiet] [-V | --visible] [STRING ...]\n\nstring length reports the length of each string argument in\ncharacters. Exit status: 0 if at least one non-empty STRING was\ngiven, or 1 otherwise.\n\nWith -V or --visible, it uses the visible width of the arguments.\nThat means it will discount escape sequences fish knows about,\naccount for $fish_emoji_width and $fish_ambiguous_width. It will also\ncount each line (separated by \\n) on its own, and with a carriage\nreturn (\\r) count only the widest stretch on a line. The intent is to\nmeasure the number of columns the STRING would occupy in the current\nterminal.\n\n Examples\n\n > string length 'hello, world'\n 12\n\n > set str foo\n > string length -q $str; echo $status\n 0\n # Equivalent to test -n \"$str\"\n\n > string length --visible (set_color red)foobar\n # the set_color is discounted, so this is the width of \"foobar\"\n 6\n\n > string length --visible 🐟🐟🐟🐟\n # depending on $fish_emoji_width, this is either 4 or 8\n # in new terminals it should be\n 8\n\n > string length --visible abcdef\\r123\n # this displays as \"123def\", so the width is 6\n 6\n\n > string length --visible a\\nbc\n # counts \"a\" and \"bc\" as separate lines, so it prints width for each\n 1\n 2\n\nLOWER SUBCOMMAND\nstring lower [-q | --quiet] [STRING ...]\n\nstring lower converts each string argument to lowercase. Exit status:\n0 if at least one string was converted to lowercase, else 1. This\nmeans that in conjunction with the -q flag you can readily test\nwhether a string is already lowercase.\n\nMATCH SUBCOMMAND\nstring match [-a | --all] [-e | --entire] [-i | --ignore-case]\n [-g | --groups-only] [-r | --regex] [-n | --index]\n [-q | --quiet] [-v | --invert]\n PATTERN [STRING ...]\n\nstring match tests each STRING against PATTERN and prints matching\nsubstrings. Only the first match for each STRING is reported unless\n-a or --all is given, in which case all matches are reported.\n\nIf you specify the -e or --entire then each matching string is\nprinted including any prefix or suffix not matched by the pattern\n(equivalent to grep without the -o flag). You can, obviously, achieve\nthe same result by prepending and appending * or .* depending on\nwhether or not you have specified the --regex flag. The --entire flag\nis simply a way to avoid having to complicate the pattern in that\nfashion and make the intent of the string match clearer. Without\n--entire and --regex, a PATTERN will need to match the entire STRING\nbefore it will be reported.\n\nMatching can be made case-insensitive with --ignore-case or -i.\n\nIf --groups-only or -g is given, only the capturing groups will be\nreported - meaning the full match will be skipped. This is\nincompatible with --entire and --invert, and requires --regex. It is\nuseful as a simple cutting tool instead of string replace, so you can\nsimply choose \"this part\" of a string.\n\nIf --index or -n is given, each match is reported as a 1-based start\nposition and a length. By default, PATTERN is interpreted as a glob\npattern matched against each entire STRING argument. A glob pattern\nis only considered a valid match if it matches the entire STRING.\n\nIf --regex or -r is given, PATTERN is interpreted as a\nPerl-compatible regular expression, which does not have to match the\nentire STRING. For a regular expression containing capturing groups,\nmultiple items will be reported for each match, one for the entire\nmatch and one for each capturing group. With this, only the matching\npart of the STRING will be reported, unless --entire is given.\n\nWhen matching via regular expressions, string match automatically\nsets variables for all named capturing groups ((?expression)).\nIt will create a variable with the name of the group, in the default\nscope, for each named capturing group, and set it to the value of the\ncapturing group in the first matched argument. If a named capture\ngroup matched an empty string, the variable will be set to the empty\nstring (like set var \"\"). If it did not match, the variable will be\nset to nothing (like set var). When --regex is used with --all, this\nbehavior changes. Each named variable will contain a list of matches,\nwith the first match contained in the first element, the second match\nin the second, and so on. If the group was empty or did not match,\nthe corresponding element will be an empty string.\n\nIf --invert or -v is used the selected lines will be only those which\ndo not match the given glob pattern or regular expression.\n\nExit status: 0 if at least one match was found, or 1 otherwise.\n\n Match Glob Examples\n\n > string match '?' a\n a\n\n > string match 'a*b' axxb\n axxb\n\n > string match -i 'a??B' Axxb\n Axxb\n\n > string match -- '-*' -h foo --version bar\n # To match things that look like options, we need a `--`\n # to tell string its options end there.\n -h\n --version\n\n > echo 'ok?' | string match '*\\?'\n ok?\n\n # Note that only the second STRING will match here.\n > string match 'foo' 'foo1' 'foo' 'foo2'\n foo\n\n > string match -e 'foo' 'foo1' 'foo' 'foo2'\n foo1\n foo\n foo2\n\n > string match 'foo?' 'foo1' 'foo' 'foo2'\n foo1\n foo2\n\n Match Regex Examples\n\n > string match -r 'cat|dog|fish' 'nice dog'\n dog\n\n > string match -r -v \"c.*[12]\" {cat,dog}(seq 1 4)\n dog1\n dog2\n cat3\n dog3\n cat4\n dog4\n\n > string match -r -- '-.*' -h foo --version bar\n # To match things that look like options, we need a `--`\n # to tell string its options end there.\n -h\n --version\n\n > string match -r '(\\d\\d?):(\\d\\d):(\\d\\d)' 2:34:56\n 2:34:56\n 2\n 34\n 56\n\n > string match -r '^(\\w{2,4})\\1$' papa mud murmur\n papa\n pa\n murmur\n mur\n\n > string match -r -a -n at ratatat\n 2 2\n 4 2\n 6 2\n\n > string match -r -i '0x[0-9a-f]{1,8}' 'int magic = 0xBadC0de;'\n 0xBadC0de\n\n > echo $version\n 3.1.2-1575-ga2ff32d90\n > string match -rq '(?\\d+).(?\\d+).(?\\d+)' -- $version\n > echo \"You are using fish $major!\"\n You are using fish 3!\n\n > string match -raq ' *(?[^.!?]+)(?[.!?])?' \"hello, friend. goodbye\"\n > printf \"%s\\n\" -- $sentence\n hello, friend\n goodbye\n > printf \"%s\\n\" -- $punctuation\n .\n\n > string match -rq '(?hello)' 'hi'\n > count $word\n 0\n\nPAD AND SHORTEN SUBCOMMANDS\nstring pad [-r | --right] [(-c | --char) CHAR] [(-w | --width) INTEGER]\n [STRING ...]\n\nstring pad extends each STRING to the given visible width by adding\nCHAR to the left. That means the width of all visible characters\nadded together, excluding escape sequences and accounting for\nfish_emoji_width and fish_ambiguous_width. It is the amount of\ncolumns in a terminal the STRING occupies.\n\nThe escape sequences reflect what fish knows about, and how it\ncomputes its output. Your terminal might support more escapes, or not\nsupport escape sequences that fish knows about.\n\nIf -r or --right is given, add the padding after a string.\n\nIf -c or --char is given, pad with CHAR instead of whitespace.\n\nThe output is padded to the maximum width of all input strings. If -w\nor --width is given, use at least that.\n\n > string pad -w 10 abc abcdef\n abc\n abcdef\n\n > string pad --right --char=🐟 \"fish are pretty\" \"rich. \"\n fish are pretty\n rich. 🐟🐟🐟🐟\n\n > string pad -w$COLUMNS (date)\n # Prints the current time on the right edge of the screen.\n\nSEE ALSO\n\n• The printf command can do simple padding, for example printf %10s\\n\n works like string pad -w10.\n\n• string length with the --visible option can be used to show what\n fish thinks the width is.\nstring shorten [(-c | --char) CHARS] [(-m | --max) INTEGER]\n [-N | --no-newline] [-l | --left] [-q | --quiet] [STRING ...]\n\nstring shorten truncates each STRING to the given visible width and\nadds an ellipsis to indicate it. \"Visible width\" means the width of\nall visible characters added together, excluding escape sequences and\naccounting for fish_emoji_width and fish_ambiguous_width. It is the\namount of columns in a terminal the STRING occupies.\n\nThe escape sequences reflect what fish knows about, and how it\ncomputes its output. Your terminal might support more escapes, or not\nsupport escape sequences that fish knows about.\n\nIf -m or --max is given, truncate at the given width. Otherwise, the\nlowest non-zero width of all input strings is used. A max of 0 means\nno shortening takes place, all STRINGs are printed as-is.\n\nIf -N or --no-newline is given, only the first line (or last line\nwith --left) of each STRING is used, and an ellipsis is added if it\nwas multiline. This only works for STRINGs being given as arguments,\nmultiple lines given on stdin will be interpreted as separate STRINGs\ninstead.\n\nIf -c or --char is given, add CHAR instead of an ellipsis. This can\nalso be empty or more than one character.\n\nIf -l or --left is given, remove text from the left on instead, so\nthis prints the longest suffix of the string that fits. With\n--no-newline, this will take from the last line instead of the first.\n\nIf -q or --quiet is given, string shorten only runs for the return\nvalue - if anything would be shortened, it returns 0, else 1.\n\nThe default ellipsis is …. If fish thinks your system is incapable\nbecause of your locale, it will use ... instead.\n\nThe return value is 0 if any shortening occured, 1 otherwise.\n\n > string shorten foo foobar\n # No width was given, we infer, and \"foo\" is the shortest.\n foo\n fo…\n\n > string shorten --char=\"...\" foo foobar\n # The target width is 3 because of \"foo\",\n # and our ellipsis is 3 too, so we can't really show anything.\n # This is the default ellipsis if your locale doesn't allow \"…\".\n foo\n ...\n\n > string shorten --char=\"\" --max 4 abcdef 123456\n # Leaving the char empty makes us not add an ellipsis\n # So this truncates at 4 columns:\n abcd\n 1234\n\n > touch \"a multiline\"\\n\"file\"\n > for file in *; string shorten -N -- $file; end\n # Shorten the multiline file so we only show one line per file:\n a multiline…\n\n > ss -p | string shorten -m$COLUMNS -c \"\"\n # `ss` from Linux' iproute2 shows socket information, but prints extremely long lines.\n # This shortens input so it fits on the screen without overflowing lines.\n\n > git branch | string match -rg '^\\* (.*)' | string shorten -m20\n # Take the current git branch and shorten it at 20 columns.\n # Here the branch is \"builtin-path-with-expand\"\n builtin-path-with-e…\n\n > git branch | string match -rg '^\\* (.*)' | string shorten -m20 --left\n # Taking 20 columns from the right instead:\n …in-path-with-expand\n\nSEE ALSO\n\n• string's pad subcommand does the inverse of this command, adding\n padding to a specific width instead.\n\n• The printf command can do simple padding, for example printf %10s\\n\n works like string pad -w10.\n\n• string length with the --visible option can be used to show what\n fish thinks the width is.\n\nREPEAT SUBCOMMAND\nstring repeat [(-n | --count) COUNT] [(-m | --max) MAX] [-N | --no-newline]\n [-q | --quiet] [STRING ...]\n\nstring repeat repeats the STRING -n or --count times. The -m or --max\noption will limit the number of outputted characters (excluding the\nnewline). This option can be used by itself or in conjunction with\n--count. If both --count and --max are present, max char will be\noutputed unless the final repeated string size is less than max, in\nthat case, the string will repeat until count has been reached. Both\n--count and --max will accept a number greater than or equal to zero,\nin the case of zero, nothing will be outputed. If -N or --no-newline\nis given, the output won't contain a newline character at the end.\nExit status: 0 if yielded string is not empty, 1 otherwise.\n\n Examples\n Repeat Examples\n\n > string repeat -n 2 'foo '\n foo foo\n\n > echo foo | string repeat -n 2\n foofoo\n\n > string repeat -n 2 -m 5 'foo'\n foofo\n\n > string repeat -m 5 'foo'\n foofo\n\nREPLACE SUBCOMMAND\nstring replace [-a | --all] [-f | --filter] [-i | --ignore-case]\n [-r | --regex] [-q | --quiet] PATTERN REPLACEMENT [STRING ...]\n\nstring replace is similar to string match but replaces\nnon-overlapping matching substrings with a replacement string and\nprints the result. By default, PATTERN is treated as a literal\nsubstring to be matched.\n\nIf -r or --regex is given, PATTERN is interpreted as a\nPerl-compatible regular expression, and REPLACEMENT can contain\nC-style escape sequences like t as well as references to capturing\ngroups by number or name as $n or ${n}.\n\nIf you specify the -f or --filter flag then each input string is\nprinted only if a replacement was done. This is useful where you\nwould otherwise use this idiom: a_cmd | string match pattern | string\nreplace pattern new_pattern. You can instead just write a_cmd |\nstring replace --filter pattern new_pattern.\n\nExit status: 0 if at least one replacement was performed, or 1\notherwise.\n\n Replace Literal Examples\n\n > string replace is was 'blue is my favorite'\n blue was my favorite\n\n > string replace 3rd last 1st 2nd 3rd\n 1st\n 2nd\n last\n\n > string replace -a ' ' 'spaces to underscores'\n spaces_to_underscores\n\n Replace Regex Examples\n\n > string replace -r -a '[^\\d.]+' ' ' '0 one two 3.14 four 5x'\n 0 3.14 5\n\n > string replace -r '(\\w+)\\s+(\\w+)' '$2 $1 $$' 'left right'\n right left $\n\n > string replace -r '\\s*newline\\s*' '\\n' 'put a newline here'\n put a\n here\n\nSPLIT AND SPLIT0 SUBCOMMANDS\nstring split [(-f | --fields) FIELDS] [(-m | --max) MAX] [-n | --no-empty]\n [-q | --quiet] [-r | --right] SEP [STRING ...]\nstring split0 [(-f | --fields) FIELDS] [(-m | --max) MAX] [-n | --no-empty]\n [-q | --quiet] [-r | --right] [STRING ...]\n\nstring split splits each STRING on the separator SEP, which can be an\nempty string. If -m or --max is specified, at most MAX splits are\ndone on each STRING. If -r or --right is given, splitting is\nperformed right-to-left. This is useful in combination with -m or\n--max. With -n or --no-empty, empty results are excluded from\nconsideration (e.g. hello\\n\\nworld would expand to two strings and\nnot three). Exit status: 0 if at least one split was performed, or 1\notherwise.\n\nUse -f or --fields to print out specific fields. FIELDS is a\ncomma-separated string of field numbers and/or spans. Each field is\none-indexed, and will be printed on separate lines. If a given field\ndoes not exist, then the command exits with status 1 and does not\nprint anything, unless --allow-empty is used.\n\nSee also the --delimiter option of the read command.\n\nstring split0 splits each STRING on the zero byte (NUL). Options are\nthe same as string split except that no separator is given.\n\nsplit0 has the important property that its output is not further\nsplit when used in a command substitution, allowing for the command\nsubstitution to produce elements containing newlines. This is most\nuseful when used with Unix tools that produce zero bytes, such as\nfind -print0 or sort -z. See split0 examples below.\n\n Examples\n\n > string split . example.com\n example\n com\n\n > string split -r -m1 / /usr/local/bin/fish\n /usr/local/bin\n fish\n\n > string split '' abc\n a\n b\n c\n\n > string split --allow-empty -f1,3-4,5 '' abcd\n a\n c\n d\n\n NUL Delimited Examples\n\n > # Count files in a directory, without being confused by newlines.\n > count (find . -print0 | string split0)\n 42\n\n > # Sort a list of elements which may contain newlines\n > set foo beta alpha\\ngamma\n > set foo (string join0 $foo | sort -z | string split0)\n > string escape $foo[1]\n alpha\\ngamma\n\nSUB SUBCOMMAND\nstring sub [(-s | --start) START] [(-e | --end) END] [(-l | --length) LENGTH]\n [-q | --quiet] [STRING ...]\n\nstring sub prints a substring of each string argument. The start/end\nof the substring can be specified with -s/-e or --start/--end\nfollowed by a 1-based index value. Positive index values are relative\nto the start of the string and negative index values are relative to\nthe end of the string. The default start value is 1. The length of\nthe substring can be specified with -l or --length. If the length or\nend is not specified, the substring continues to the end of each\nSTRING. Exit status: 0 if at least one substring operation was\nperformed, 1 otherwise. --length is mutually exclusive with --end.\n\n Examples\n\n > string sub --length 2 abcde\n ab\n\n > string sub -s 2 -l 2 abcde\n bc\n\n > string sub --start=-2 abcde\n de\n\n > string sub --end=3 abcde\n abc\n\n > string sub -e -1 abcde\n abcd\n\n > string sub -s 2 -e -1 abcde\n bcd\n\n > string sub -s -3 -e -2 abcde\n c\n\nTRIM SUBCOMMAND\nstring trim [-l | --left] [-r | --right] [(-c | --chars) CHARS]\n [-q | --quiet] [STRING ...]\n\nstring trim removes leading and trailing whitespace from each STRING.\nIf -l or --left is given, only leading whitespace is removed. If -r\nor --right is given, only trailing whitespace is trimmed. The -c or\n--chars switch causes the characters in CHARS to be removed instead\nof whitespace. Exit status: 0 if at least one character was trimmed,\nor 1 otherwise.\n\n Examples\n\n > string trim ' abc '\n abc\n\n > string trim --right --chars=yz xyzzy zany\n x\n zan\n\nUPPER SUBCOMMAND\nstring upper [-q | --quiet] [STRING ...]\n\nstring upper converts each string argument to uppercase. Exit status:\n0 if at least one string was converted to uppercase, else 1. This\nmeans that in conjunction with the -q flag you can readily test\nwhether a string is already uppercase.\n\nREGULAR EXPRESSIONS\nBoth the match and replace subcommand support regular expressions\nwhen used with the -r or --regex option. The dialect is that of\nPCRE2.\n\nIn general, special characters are special by default, so a+ matches\none or more \"a\"s, while a\\+ matches an \"a\" and then a \"+\". (a+)\nmatches one or more \"a\"s in a capturing group ((?:XXXX) denotes a\nnon-capturing group). For the replacement parameter of replace, $n\nrefers to the n-th group of the match. In the match parameter, \\n\n(e.g. \\1) refers back to groups.\n\nSome features include repetitions:\n\n• * refers to 0 or more repetitions of the previous expression\n\n• + 1 or more\n\n• ? 0 or 1.\n\n• {n} to exactly n (where n is a number)\n\n• {n,m} at least n, no more than m.\n\n• {n,} n or more\n\nCharacter classes, some of the more important:\n\n• . any character except newline\n\n• \\d a decimal digit and \\D, not a decimal digit\n\n• \\s whitespace and \\S, not whitespace\n\n• \\w a \"word\" character and \\W, a \"non-word\" character\n\n• [...] (where \"...\" is some characters) is a character set\n\n• [^...] is the inverse of the given character set\n\n• [x-y] is the range of characters from x-y\n\n• [[:xxx:]] is a named character set\n\n• [[:^xxx:]] is the inverse of a named character set\n\n• [[:alnum:]] : \"alphanumeric\"\n\n• [[:alpha:]] : \"alphabetic\"\n\n• [[:ascii:]] : \"0-127\"\n\n• [[:blank:]] : \"space or tab\"\n\n• [[:cntrl:]] : \"control character\"\n\n• [[:digit:]] : \"decimal digit\"\n\n• [[:graph:]] : \"printing, excluding space\"\n\n• [[:lower:]] : \"lower case letter\"\n\n• [[:print:]] : \"printing, including space\"\n\n• [[:punct:]] : \"printing, excluding alphanumeric\"\n\n• [[:space:]] : \"white space\"\n\n• [[:upper:]] : \"upper case letter\"\n\n• [[:word:]] : \"same as w\"\n\n• [[:xdigit:]] : \"hexadecimal digit\"\n\nGroups:\n\n• (...) is a capturing group\n\n• (?:...) is a non-capturing group\n\n• \\n is a backreference (where n is the number of the group, starting\n with 1)\n\n• $n is a reference from the replacement expression to a group in the\n match expression.\n\nAnd some other things:\n\n• \\b denotes a word boundary, \\B is not a word boundary.\n\n• ^ is the start of the string or line, $ the end.\n\n• | is \"alternation\", i.e. the \"or\".\n\nCOMPARISON TO OTHER TOOLS\nMost operations string supports can also be done by external tools.\nSome of these include grep, sed and cut.\n\nIf you are familiar with these, it is useful to know how string\ndiffers from them.\n\nIn contrast to these classics, string reads input either from stdin\nor as arguments. string also does not deal with files, so it requires\nredirections to be used with them.\n\nIn contrast to grep, string's match defaults to glob-mode, while\nreplace defaults to literal matching. If set to regex-mode, they use\nPCRE regular expressions, which is comparable to grep's -P option.\nmatch defaults to printing just the match, which is like grep with -o\n(use --entire to enable grep-like behavior).\n\nLike sed's s/old/new/ command, string replace still prints strings\nthat don't match. sed's -n in combination with a /p modifier or\ncommand is like string replace -f.\n\nstring split somedelimiter is a replacement for tr somedelimiter \\n.",args:"string collect [-a | --allow-empty] [-N | --no-trim-newlines] [STRING ...]\nstring escape [-n | --no-quoted] [--style=] [STRING ...]\nstring join [-q | --quiet] [-n | --no-empty] SEP [STRING ...]\nstring join0 [-q | --quiet] [STRING ...]\nstring length [-q | --quiet] [STRING ...]\nstring lower [-q | --quiet] [STRING ...]\nstring match [-a | --all] [-e | --entire] [-i | --ignore-case]\n [-g | --groups-only] [-r | --regex] [-n | --index]\n [-q | --quiet] [-v | --invert]\n PATTERN [STRING ...]\nstring pad [-r | --right] [(-c | --char) CHAR] [(-w | --width) INTEGER]\n [STRING ...]\nstring repeat [(-n | --count) COUNT] [(-m | --max) MAX] [-N | --no-newline]\n [-q | --quiet] [STRING ...]\nstring replace [-a | --all] [-f | --filter] [-i | --ignore-case]\n [-r | --regex] [-q | --quiet] PATTERN REPLACE [STRING ...]\nstring shorten [(-c | --char) CHARS] [(-m | --max) INTEGER]\n [-N | --no-newline] [-l | --left] [-q | --quiet] [STRING ...]\nstring split [(-f | --fields) FIELDS] [(-m | --max) MAX] [-n | --no-empty]\n [-q | --quiet] [-r | --right] SEP [STRING ...]\nstring split0 [(-f | --fields) FIELDS] [(-m | --max) MAX] [-n | --no-empty]\n [-q | --quiet] [-r | --right] [STRING ...]\nstring sub [(-s | --start) START] [(-e | --end) END] [(-l | --length) LENGTH]\n [-q | --quiet] [STRING ...]\nstring trim [-l | --left] [-r | --right] [(-c | --chars) CHARS]\n [-q | --quiet] [STRING ...]\nstring unescape [--style=] [STRING ...]\nstring upper [-q | --quiet] [STRING ...]"},switch:{shortDescription:"conditionally execute a block of commands",description:"switch performs one of several blocks of commands, depending on\nwhether a specified value equals one of several globbed values. case\nis used together with the switch statement in order to determine\nwhich block should be executed.\n\nEach case command is given one or more parameters. The first case\ncommand with a parameter that matches the string specified in the\nswitch command will be evaluated. case parameters may contain globs.\nThese need to be escaped or quoted in order to avoid regular glob\nexpansion using filenames.\n\nNote that fish does not fall through on case statements. Only the\nfirst matching case is executed.\n\nNote that break cannot be used to exit a case/switch block early like\nin other languages. It can only be used in loops.\n\nNote that command substitutions in a case statement will be evaluated\neven if its body is not taken. All substitutions, including command\nsubstitutions, must be performed before the value can be compared\nagainst the parameter.\n\nEXAMPLE\nIf the variable $animal contains the name of an animal, the following\ncode would attempt to classify it:\n\n switch $animal\n case cat\n echo evil\n case wolf dog human moose dolphin whale\n echo mammal\n case duck goose albatross\n echo bird\n case shark trout stingray\n echo fish\n case '*'\n echo I have no idea what a $animal is\n end\n\nIf the above code was run with $animal set to whale, the output would\nbe mammal.",args:"switch VALUE; [case [GLOB ...]; [COMMANDS ...]; ...] end"},test:{shortDescription:"Evaluate conditional expressions",description:"The `test` command evaluates conditional expressions and sets the exit status to 0 if the expression is true, and 1 if it is false. It supports various operators to evaluate expressions related to strings, numbers, and file attributes.",args:"EXPRESSION"},time:{shortDescription:"measure how long a command or block takes",description:'NOTE: This page documents the fish keyword time. To see the\ndocumentation on the time command you might have, use command man\ntime.\n\ntime causes fish to measure how long a command takes and print the\nresults afterwards. The command can be a simple fish command or a\nblock. The results can not currently be redirected.\n\nFor checking timing after a command has completed, check\n$CMD_DURATION.\n\nYour system most likely also has a time command. To use that use\nsomething like command time, as in command time sleep 10. Because\nit\'s not inside fish, it won\'t have access to fish functions and\nwon\'t be able to time blocks and such.\n\nHOW TO INTERPRET THE OUTPUT\nTime outputs a few different values. Let\'s look at an example:\n\n > time string repeat -n 10000000 y\\n | command grep y >/dev/null\n _______________________________________________________\n Executed in 805.98 millis fish external\n usr time 798.88 millis 763.88 millis 34.99 millis\n sys time 141.22 millis 40.20 millis 101.02 millis\n\nThe time after "Executed in" is what is known as the "wall-clock\ntime". It is simply a measure of how long it took from the start of\nthe command until it finished. Typically it is reasonably close to\nCMD_DURATION, except for a slight skew because the two are taken at\nslightly different times.\n\nThe other times are all measures of CPU time. That means they measure\nhow long the CPU was used in this part, and they count multiple cores\nseparately. So a program with four threads using all CPU for a second\nwill have a time of 4 seconds.\n\nThe "usr" time is how much CPU time was spent inside the program\nitself, the "sys" time is how long was spent in the kernel on behalf\nof that program.\n\nThe "fish" time is how much CPU was spent in fish, the "external"\ntime how much was spent in external commands.\n\nSo in this example, since string is a builtin, everything that string\nrepeat did is accounted to fish. Any time it spends doing syscalls\nlike write() is accounted for in the fish/sys time.\n\nAnd grep here is explicitly invoked as an external command, so its\ntimes will be counted in the "external" column.\n\nNote that, as in this example, the CPU times can add up to more than\nthe execution time. This is because things can be done in parallel -\ngrep can match while string repeat writes.\n\nEXAMPLE\n(for obvious reasons exact results will vary on your system)\n\n > time sleep 1s\n\n _______________________________________________________\n Executed in 1,01 secs fish external\n usr time 2,32 millis 0,00 micros 2,32 millis\n sys time 0,88 millis 877,00 micros 0,00 millis\n\n > time for i in 1 2 3; sleep 1s; end\n\n _______________________________________________________\n Executed in 3,01 secs fish external\n usr time 9,16 millis 2,94 millis 6,23 millis\n sys time 0,23 millis 0,00 millis 0,23 millis\n\nInline variable assignments need to follow the time keyword:\n\n > time a_moment=1.5m sleep $a_moment\n\n _______________________________________________________\n Executed in 90.00 secs fish external\n usr time 4.62 millis 4.62 millis 0.00 millis\n sys time 2.35 millis 0.41 millis 1.95 millis',args:"time COMMAND"},true:{shortDescription:"Return a successful result",description:"The `true` command always returns a successful (zero) exit status. It is often used in scripts and conditional statements where an unconditional success result is needed."},type:{shortDescription:"locate a command and describe its type",description:"With no options, type indicates how each NAME would be interpreted if\nused as a command name.\n\nThe following options are available:\n\n-a or --all\n Prints all of possible definitions of the specified names.\n\n-s or --short\n Suppresses function expansion when used with no options or\n with -a/--all.\n\n-f or --no-functions\n Suppresses function and builtin lookup.\n\n-t or --type\n Prints function, builtin, or file if NAME is a shell function,\n builtin, or disk file, respectively.\n\n-p or --path\n Prints the path to NAME if NAME resolves to an executable file\n in PATH, the path to the script containing the definition of\n the function NAME if NAME resolves to a function loaded from a\n file on disk (i.e. not interactively defined at the prompt),\n or nothing otherwise.\n\n-P or --force-path\n Returns the path to the executable file NAME, presuming NAME\n is found in the PATH environment variable, or nothing\n otherwise. --force-path explicitly resolves only the path to\n executable files in PATH, regardless of whether NAME is\n shadowed by a function or builtin with the same name.\n\n-q or --query\n Suppresses all output; this is useful when testing the exit\n status. For compatibility with old fish versions this is also\n --quiet.\n\n-h or --help\n Displays help about using this command.\n\nThe -q, -p, -t and -P flags (and their long flag aliases) are\nmutually exclusive. Only one can be specified at a time.\n\ntype returns 0 if at least one entry was found, 1 otherwise, and 2\nfor invalid options or option combinations.\n\nEXAMPLE\n\n > type fg\n fg is a builtin",args:"type [OPTIONS] NAME [...]"},ulimit:{shortDescription:"set or get resource usage limits",description:"ulimit sets or outputs the resource usage limits of the shell and any\nprocesses spawned by it. If a new limit value is omitted, the current\nvalue of the limit of the resource is printed; otherwise, the\nspecified limit is set to the new value.\n\nUse one of the following switches to specify which resource limit to\nset or report:\n\n-b or --socket-buffers\n The maximum size of socket buffers.\n\n-c or --core-size\n The maximum size of core files created. By setting this limit\n to zero, core dumps can be disabled.\n\n-d or --data-size\n The maximum size of a process' data segment.\n\n-e or --nice\n Controls the maximum nice value; on Linux, this value is\n subtracted from 20 to give the effective value.\n\n-f or --file-size\n The maximum size of files created by a process.\n\n-i or --pending-signals\n The maximum number of signals that may be queued.\n\n-l or --lock-size\n The maximum size that may be locked into memory.\n\n-m or --resident-set-size\n The maximum resident set size.\n\n-n or --file-descriptor-count\n The maximum number of open file descriptors.\n\n-q or --queue-size\n The maximum size of data in POSIX message queues.\n\n-r or --realtime-priority\n The maximum realtime scheduling priority.\n\n-s or --stack-size\n The maximum stack size.\n\n-t or --cpu-time\n The maximum amount of CPU time in seconds.\n\n-u or --process-count\n The maximum number of processes available to the current user.\n\n-w or --swap-size\n The maximum swap space available to the current user.\n\n-v or --virtual-memory-size\n The maximum amount of virtual memory available to the shell.\n\n-y or --realtime-maxtime\n The maximum contiguous realtime CPU time in microseconds.\n\n-K or --kernel-queues\n The maximum number of kqueues (kernel queues) for the current\n user.\n\n-P or --ptys\n The maximum number of pseudo-terminals for the current user.\n\n-T or --threads\n The maximum number of simultaneous threads for the current\n user.\n\nNote that not all these limits are available in all operating\nsystems; consult the documentation for setrlimit in your operating\nsystem.\n\nThe value of limit can be a number in the unit specified for the\nresource or one of the special values hard, soft, or unlimited, which\nstand for the current hard limit, the current soft limit, and no\nlimit, respectively.\n\nIf limit is given, it is the new value of the specified resource. If\nno option is given, then -f is assumed. Values are in kilobytes,\nexcept for -t, which is in seconds and -n and -u, which are unscaled\nvalues. The exit status is 0 unless an invalid option or argument is\nsupplied, or an error occurs while setting a new limit.\n\nulimit also accepts the following options that determine what type of\nlimit to set:\n\n-H or --hard\n Sets hard resource limit.\n\n-S or --soft\n Sets soft resource limit.\n\nA hard limit can only be decreased. Once it is set it cannot be\nincreased; a soft limit may be increased up to the value of the hard\nlimit. If neither -H nor -S is specified, both the soft and hard\nlimits are updated when assigning a new limit value, and the soft\nlimit is used when reporting the current value.\n\nThe following additional options are also understood by ulimit:\n\n-a or --all\n Prints all current limits.\n\n-h or --help\n Displays help about using this command.\n\nThe fish implementation of ulimit should behave identically to the\nimplementation in bash, except for these differences:\n\n• Fish ulimit supports GNU-style long options for all switches.\n\n• Fish ulimit does not support the -p option for getting the pipe\n size. The bash implementation consists of a compile-time check that\n empirically guesses this number by writing to a pipe and waiting\n for SIGPIPE. Fish does not do this because this method of\n determining pipe size is unreliable. Depending on bash version,\n there may also be further additional limits to set in bash that do\n not exist in fish.\n\n• Fish ulimit does not support getting or setting multiple limits in\n one command, except reporting all values using the -a switch.\n\nEXAMPLE\nulimit -Hs 64 sets the hard stack size limit to 64 kB.",args:"ulimit [OPTIONS] [LIMIT]"},wait:{shortDescription:"wait for jobs to complete",description:"wait waits for child jobs to complete.\n\nIf a PID is specified, the command waits for the job that the process\nwith that process ID belongs to.\n\nIf a PROCESS_NAME is specified, the command waits for the jobs that\nthe matched processes belong to.\n\nIf neither a pid nor a process name is specified, the command waits\nfor all background jobs.\n\nIf the -n or --any flag is provided, the command returns as soon as\nthe first job completes. If it is not provided, it returns after all\njobs complete.\n\nThe -h or --help option displays help about using this command.\n\nEXAMPLE\n\n sleep 10 &\n wait $last_pid\n\nspawns sleep in the background, and then waits until it finishes.\n\n for i in (seq 1 5); sleep 10 &; end\n wait\n\nspawns five jobs in the background, and then waits until all of them\nfinishes.\n\n for i in (seq 1 5); sleep 10 &; end\n hoge &\n wait sleep\n\nspawns five jobs and hoge in the background, and then waits until all\nsleeps finish, and doesn't wait for hoge finishing.",args:"wait [-n | --any] [PID | PROCESS_NAME] ..."},while:{shortDescription:"perform a set of commands multiple times",description:"while repeatedly executes CONDITION, and if the exit status is 0,\nthen executes COMMANDS.\n\nThe exit status of the while loop is the exit status of the last\niteration of the COMMANDS executed, or 0 if none were executed. (This\nmatches other shells and is POSIX-compatible.)\n\nYou can use and or or for complex conditions. Even more complex\ncontrol can be achieved with while true containing a break.\n\nThe -h or --help option displays help about using this command.\n\nEXAMPLE\n\n while test -f foo.txt; or test -f bar.txt ; echo file exists; sleep 10; end\n # outputs 'file exists' at 10 second intervals,\n # as long as the file foo.txt or bar.txt exists.",args:"while CONDITION; COMMANDS; end"}}},457:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={name:"tee",description:"Duplicate standard input",options:[{name:"-a",description:"Append the output to the files rather than overwriting them"},{name:"-i",description:"Ignore the SIGINT signal"}],args:{name:"file",description:"Pathname of an output file",isVariadic:!0,template:"filepaths"}}},487:function(e,t,n){"use strict";var i,a=this&&this.__createBinding||(Object.create?function(e,t,n,i){void 0===i&&(i=n);var a=Object.getOwnPropertyDescriptor(t,n);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,i,a)}:function(e,t,n,i){void 0===i&&(i=n),e[i]=t[n]}),s=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||(i=function(e){return i=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},i(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=i(e),o=0;o{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={name:"du",description:"Display disk usage statistics",options:[{name:"-a",description:"Display an entry for each file in a file hierarchy",exclusiveOn:["-s","-d"]},{name:"-c",description:"Display a grand total"},{name:"-H",description:"Symbolic links on the command line are followed, symbolic links in file hierarchies are not followed",exclusiveOn:["-L","-P"]},{name:"-h",description:'"Human-readable" output. Use unit suffixes: Byte, Kilobyte, Megabyte, Gigabyte, Terabyte and Petabyte',exclusiveOn:["-k","-m","-g"]},{name:"-g",description:"Display block counts in 1073741824-byte (1-Gbyte) blocks",exclusiveOn:["-k","-m","-h"]},{name:"-k",description:"Display block counts in 1024-byte (1-Kbyte) blocks",exclusiveOn:["-g","-m","-h"]},{name:"-m",description:"Display block counts in 1048576-byte (1-Mbyte) blocks",exclusiveOn:["-g","-k","-h"]},{name:"-I",description:"Ignore files and directories matching the specified mask",args:{name:"mask"}},{name:"-L",description:"Symbolic links on the command line and in file hierarchies are followed",exclusiveOn:["-H","-P"]},{name:"-r",description:"Generate messages about directories that cannot be read, files that cannot be opened, and so on. This is the default case. This option exists solely for conformance with X/Open Portability Guide Issue 4 (``XPG4'')"},{name:"-P",description:"No symbolic links are followed. This is the default",exclusiveOn:["-H","-L"]},{name:"-d",description:"Display an entry for all files and directories depth directories deep",exclusiveOn:["-a","-s"],args:{name:"depth",suggestions:["0","1","2"]}},{name:"-s",description:"Display an entry for each specified file. (Equivalent to -d 0)",exclusiveOn:["-a","-d"]},{name:"-x",description:"Display an entry for each specified file. (Equivalent to -d 0)"}],args:{isOptional:!0,name:"files",isVariadic:!0,template:["filepaths","folders"]}}},785:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.default={name:"nl",description:"Line numbering filter",parserDirectives:{optionsMustPrecedeArguments:!0},options:[{name:"-b",description:"Specify the logical page body lines to be numbered",args:{name:"type",suggestions:[{name:"a",description:"Number all lines"},{name:"t",description:"Number only non-empty lines"},{name:"pexpr",description:"Only those lines that contain the basic regular expression specified by 'expr'"}],default:"t"}},{name:"-d",description:"Specify the delimiter characters used to indicate the\nstart of a logical page section in the input file. At most two\ncharacters may be specified; if only one character is specified,\nthe first character is replaced and the second character remains unchanged",args:{name:"delim",suggestions:["\\:"],default:"\\:"}},{name:"-f",description:"Specify the same as -b type except for logical page footer lines",args:{name:"type",suggestions:["n"],default:"n"}},{name:"-h",description:"Specify the same as -b type except for logical page header lines",args:{name:"type",suggestions:["n"],default:"n"}},{name:"-i",description:"Specify the increment value used to number logical page lines",args:{name:"incr",suggestions:["1"],default:"1"}},{name:"-l",description:"If numbering of all lines is specified for the current\nlogical section using the corresponding -b a, -f a or -h a option, specify\nthe number of adjacent blank lines to be considered as one. For example,\n-l 2 results in only the second adjacent blank line being numbered",args:{name:"num",suggestions:["1"],default:"1"}},{name:"-n",description:"Specify the line numbering output format",args:{name:"format",suggestions:[{name:"ln",description:"Left justified"},{name:"rn",description:"Right justified (leading zeros suppressed)"},{name:"rz",description:"Right justified (leading zeros kept)"}],default:"rz"}},{name:"-p",description:"Specify that line numbering should not be restarted at logical page delimiters"},{name:"-s",description:"Specify the characters used in separating the line\nnumber and the corresponding text line. The default\nsep setting is a single tab character",args:{name:"sep",suggestions:["\\t"],default:"\\t"}},{name:"-v",description:"Specify the initial value used to number logical page lines; see also the description of the -p option",args:{name:"startnum",suggestions:["1","2","3"],default:"1"}},{name:"-w",description:"Specify the number of characters to be occupied by the\nline number; in case the width is insufficient to hold the line number,\nit will be truncated to its width least significant digits",args:{name:"width",suggestions:["6","5","4","3","2","1"],default:"6"}}],args:{name:"file",description:"File(s) to number",template:"filepaths"}}},857:e=>{"use strict";e.exports=require("os")},1012:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={name:"top",description:"Display Linux tasks",options:[{name:["-h","-v"],description:"Show library version and usage prompt"},{name:"-b",description:"Starts top in Batch mode",args:{name:"operation"}},{name:"-c",description:"Starts top with last remembered c state reversed",args:{name:"toggle"}},{name:"-i",description:"Starts top with the last remembered 'i' state reversed. When this toggle is Off, tasks that are idled or zombied will not be displayed",args:{name:"toggle"}},{name:"-s",description:"Starts top with secure mode forced",args:{name:"delay"}},{name:"-pid",description:"Monitor pids",args:{name:"process ids",isVariadic:!0}}]}},1033:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=[{name:"a",description:"Any single character",priority:40},{name:"\\a",description:"Alert character",priority:39},{name:"\\b",description:"Backspace character",priority:39},{name:"\\f",description:"Form feed character",priority:39},{name:"\\n",description:"Newline character",priority:39},{name:"\\r",description:"Carriage return character",priority:39},{name:"\\t",description:"Tab character",priority:39},{name:"\\v",description:"Vertical tab character",priority:39},{name:"c-c",description:"For non-octal range endpoints represents the range of characters between the range endpoints, inclusive, in ascending order, as defined by the collation sequence",priority:38},{name:"[:alnum:]",description:"Alphanumeric characters",priority:37},{name:"[:alpha:]",description:"Alphabetic characters",priority:37},{name:"[:blank:]",description:"Blank characters",priority:37},{name:"[:cntrl:]",description:"Control characters",priority:37},{name:"[:digit:]",description:"Digit characters",priority:37},{name:"[:graph:]",description:"Graphic characters",priority:37},{name:"[:ideogram:]",description:"Ideographic characters",priority:37},{name:"[:lower:]",description:"Lower-case characters",priority:37},{name:"[:phonogram:]",description:"Phonographic characters",priority:37},{name:"[:print:]",description:"Printable characters",priority:37},{name:"[:punct:]",description:"Punctuation characters",priority:37},{name:"[:rune:]",description:"Valid characters",priority:37},{name:"[:space:]",description:"Space characters",priority:37},{name:"[:special:]",description:"Special characters",priority:37},{name:"[:upper:]",description:"Upper-case characters",priority:37},{name:"[:xdigit:]",description:"Hexadecimal characters",priority:37},{name:"[=equiv=]",description:"Represents all characters belonging to the same equivalence class as 'equiv', ordered by their encoded values",priority:36},{name:"[#*n]",description:"Represents 'n' repeated occurrences of the character represented by '#'",priority:35}],i={name:"tr",description:"Translate characters",parserDirectives:{optionsMustPrecedeArguments:!0},options:[{name:"-C",description:"Complement the set of characters in string1, that is '-C ab' includes every character except for 'a' and 'b'"},{name:"-c",description:"Same as '-C' but complement the set of values in string1"},{name:"-d",description:"Delete characters in string1 from the input"},{name:"-s",description:"Squeeze multiple occurrences of the characters listed in the last operand (either string1 or string2) in the input into a single instance of the character. This occurs after all deletion and translation is completed"},{name:"-u",description:"Guarantee that any output is unbuffered"}],args:[{name:"string1",description:"Candidate string",suggestions:n},{name:"string2",description:"Replacment string",isOptional:!0,suggestions:n}]};t.default=i},1056:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n={name:"version",description:"Node version",suggestions:[{name:"node",description:"The latest version of node"},{name:"iojs",description:"The latest version of io.js"},{name:"system",description:"System-installed version of node"}]},i={name:"name"},a={name:"--no-colors",description:"Suppress colored output"},s={name:"--silent",description:"Silences stdout/stderr output"},o={name:"--lts",description:"Uses automatic LTS (long-term support) alias `lts/*`, if available"},r={name:"--lts",description:"Uses automatic alias for provided LTS line, if available",args:{name:"LTS name"}},c={name:"nvm",description:"Node Package Manager",subcommands:[{name:"install",description:"Download and install a . Uses .nvmrc if available and version is omitted",args:{...n,isOptional:!0},options:[{name:"-s",description:"Skip binary download, install from source only"},{name:"--reinstall-packages-from",description:"When installing, reinstall packages installed in ",args:n},{...o,description:"When installing, only select from LTS (long-term support) versions"},{...r,description:"When installing, only select from versions for a specific LTS line"},{name:"--skip-default-packages",description:"When installing, skip the default-packages file if it exists"},{name:"--latest-npm",description:"After installing, attempt to upgrade to the latest working npm on the given node version"},{name:"--no-progress",description:"Disable the progress bar on any downloads"},{name:"--alias",description:"After installing, set the alias specified to the version specified. (same as: nvm alias )",args:i},{name:"--default",description:"After installing, set default alias to the version specified. (same as: nvm alias default )"}]},{name:"uninstall",description:"Uninstall a version",args:n,options:[{...o,description:"Uninstall using automatic LTS (long-term support) alias `lts/*`, if available"},{...r,description:"Uninstall using automatic alias for provided LTS line, if available"}]},{name:"use",description:"Modify PATH to use . Uses .nvmrc if available and version is omitted",args:{...n,isOptional:!0},options:[s,o,r]},{name:"exec",description:"Run on . Uses .nvmrc if available and version is omitted",args:[{...n,isOptional:!0},{name:"command",isVariadic:!0}],options:[s,o,r]},{name:"run",description:"Run `node` on with as arguments. Uses .nvmrc if available and version is omitted",args:[{...n,isOptional:!0},{name:"args",isVariadic:!0}],options:[s,o,r]},{name:"current",description:"Display currently activated version of Node"},{name:"ls",description:"List installed versions, matching a given if provided",args:n,options:[a,{name:"--no-alias",description:"Suppress `nvm alias` output"}]},{name:"ls-remote",description:"List remote versions available for install, matching a given if provided",args:n,options:[{...o,description:"When listing, only show LTS (long-term support) versions"},{...r,description:"When listing, only show versions for a specific LTS line"},a]},{name:"version",description:"Resolve the given description to a single local version",args:n},{name:"version-remote",description:"Resolve the given description to a single remote version",args:n,options:[{...o,description:"When listing, only show LTS (long-term support) versions"},{...r,description:"When listing, only show versions for a specific LTS line"}]},{name:"deactivate",description:"Undo effects of `nvm` on current shell",options:[s]},{name:"alias",description:"Show all aliases beginning with or Set an alias named pointing to ",args:[{name:"pattern or name",description:"Pattern or name"},{name:"version",isOptional:!0}]},{name:"unalias",description:"Deletes the alias named ",args:i},{name:"install-latest-npm",description:"Attempt to upgrade to the latest working `npm` on the current node version"},{name:"reinstall-packages",description:"Reinstall global `npm` packages contained in to current version",args:n},{name:"unload",description:"Unload `nvm` from shell"},{name:"which",description:"Display path to installed node version. Uses .nvmrc if available and version is omitted",args:{...n,isOptional:!0},subcommands:[{name:"current"}],options:[{...s,description:"Silences stdout/stderr output when a version is omitted"}]},{name:"cache",args:{suggestions:[{name:"dir",description:"Display path to the cache directory for nvm",type:"subcommand"},{name:"clear",description:"Empty cache directory for nvm",type:"subcommand"}]}},{name:"set-colors",description:'Set five text colors using format "yMeBg". Available when supported',args:{name:"color codes",description:'Using format "yMeBg"'}}],options:[{name:"--help",description:"Show help page"},{name:"--version",description:"Print out the installed version of nvm"},a]};t.default=c},1107:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={name:"dig",description:"Domain Information Groper",subcommands:[{name:"A",description:"Query Domain A Record",options:[{name:["+short",""],insertValue:"+short {cursor}",description:"Only print meaningful results",args:{}}]},{name:"MX",description:"Query Domain MX Record",options:[{name:["+short",""],insertValue:"+short {cursor}",description:"Only print meaningful results",args:{}}]},{name:"CNAME",description:"Query Domain CNAME Record",options:[{name:["+short",""],insertValue:"+short {cursor}",description:"Only print meaningful results",args:{}}]},{name:"TXT",description:"Query Domain TXT Record",options:[{name:["+short",""],insertValue:"+short {cursor}",description:"Only print meaningful results",args:{}}]},{name:"NS",description:"Query MX Record",options:[{name:["+short",""],insertValue:"+short {cursor}",description:"Only print meaningful results",args:{}}]},{name:"SOA",description:"Query SOA Record",options:[{name:["+short",""],insertValue:"+short {cursor}",description:"Only print meaningful results",args:{}}]},{name:"TTL",description:"Query TTL Record",options:[{name:["+short",""],insertValue:"+short {cursor}",description:"Only print meaningful results",args:{}}]},{name:"ANY +noall +answer",description:"Query ALL DNS Records"},{name:"+nocomments +noquestion +noauthority +noadditional +nostats",description:"Query only answer section"}]}},1121:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getCWDForFilesAndFolders=t.ensureTrailingSlash=t.splitPath=t.sleep=t.longestCommonPrefix=t.TimeoutError=t.SpecLocationSource=t.SuggestionFlag=void 0,t.makeArray=r,t.firstMatchingToken=function(e,t){for(const n of e)if(t.has(n))return n},t.makeArrayIfExists=function(e){return e?r(e):null},t.isOrHasValue=function(e,t){return Array.isArray(e)?e.includes(t):e===t},t.withTimeout=c,t.findLast=function(e,t){for(let n=e.length-1;n>=0;n-=1)if(t(e[n]))return e[n]},t.compareNamedObjectsAlphabetically=function(e,t){const n=e=>"string"==typeof e?e:r(e.name)[0]||"";return n(e).localeCompare(n(t))},t.memoizeOne=function(e,t){let n,i=[],a=!1;const s=t||((e,t)=>e.every((e,n)=>e===t[n]));return(...t)=>(a&&s(i,t)||(a=!0,i=[...t],n=e(...t)),n)},t.fieldsAreEqual=function e(t,n,i){return!!(t===n||d(t)&&d(n))||!!(i.length&&t&&n)&&i.every(i=>{const a=t[i],s=n[i];return typeof a==typeof s&&(l(a)&&l(s)?Object.keys(a).length===Object.keys(s).length&&e(a,s,Object.keys(a)):a===s)})},t.localProtocol=function(e,t){let n;return n="path"===e?"":e,(0,i.osIsWindows)()?`https://fig.${n}/${t}`:`fig://${n}/${t}`},t.exponentialBackoff=async function(e,t){let n=0,i=e.baseDelay;for(;n{setTimeout(e,i)})}throw new Error("Failed to execute function after all retries.")};const i=n(5761),a=n(4829);var s,o;function r(e){return Array.isArray(e)?e:[e]}async function c(e,n){let i;return Promise.race([n,new Promise((n,a)=>{i=setTimeout(()=>{a(new t.TimeoutError("Function timed out"))},e)})]).finally(()=>{clearTimeout(i)})}function l(e){return"object"==typeof e&&null!==e}function d(e){return l(e)&&0===Object.keys(e).length}!function(e){e[e.None=0]="None",e[e.Subcommands=1]="Subcommands",e[e.Options=2]="Options",e[e.Args=4]="Args",e[e.Any=7]="Any"}(s||(t.SuggestionFlag=s={})),function(e){e.GLOBAL="global",e.LOCAL="local"}(o||(t.SpecLocationSource=o={})),t.TimeoutError=(0,a.createErrorInstance)("TimeoutError"),t.longestCommonPrefix=e=>{const t=e.sort(),{0:n,[t.length-1]:i}=t,a=n.length;let s=0;for(;snew Promise(t=>{setTimeout(t,e)}),t.splitPath=e=>{const t=e.lastIndexOf("/")+1;return[e.slice(0,t),e.slice(t)]},t.ensureTrailingSlash=e=>e.endsWith("/")?e:`${e}/`,t.getCWDForFilesAndFolders=(e,n)=>{if(null===e)return"/";const[i]=(0,t.splitPath)(n);return""===i?(0,t.ensureTrailingSlash)(e):i.startsWith("~/")||i.startsWith("/")?i:`${e}/${i}`}},1219:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={name:"split",description:"The split utility reads the given file and breaks it up into files of 1000 lines each (if no options are specified), leaving the file unchanged. If file is a single dash ('-') or absent, split reads from the standard input",options:[{name:"-a",description:"Use suffix_length letters to form the suffix of the file name",args:{name:"suffix_length"}},{name:"-b",description:"Create split files byte_count bytes in length. If k or K is appended to the number, the file is split into byte_count kilobyte pieces. If m or M is appended to the number, the file is split into byte_count megabyte pieces. If g or G is appended to the number, the file is split into byte_count gigabyte pieces",args:{name:"byte_count",description:"N[K|k|M|m|G|g]"},exclusiveOn:["-p"]},{name:"-d",description:"Use a numeric suffix instead of a alphabetic suffix"},{name:"-l",description:"Create split files line_count lines in length",args:{name:"line_count"},exclusiveOn:["-p"]},{name:"-p",description:"The file is split whenever an input line matches pattern, which is interpreted as an extended regular expression. The matching line will be the first line of the next output file. This option is incompatible with the -b and -l options",args:{name:"pattern"},exclusiveOn:["-b","-l"]}],args:[{name:"file",description:"The file to split",template:"filepaths",isOptional:!0},{name:"prefix",description:"Prefix for the names of the files into which the file is split",suggestions:["x"],default:"x",isOptional:!0}]}},1334:function(e,t,n){"use strict";var i,a=this&&this.__createBinding||(Object.create?function(e,t,n,i){void 0===i&&(i=n);var a=Object.getOwnPropertyDescriptor(t,n);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,i,a)}:function(e,t,n,i){void 0===i&&(i=n),e[i]=t[n]}),s=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||(i=function(e){return i=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},i(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=i(e),o=0;o{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.parseArguments=t.initialParserState=t.getResultFromState=t.findSubcommand=t.findOption=t.isMandatoryOrVariadic=t.getCurrentArg=t.updateArgState=t.countEqualOptions=t.optionsAreEqual=t.flattenAnnotations=t.createArgState=t.TokenType=void 0;const i=n(1121),a=n(5927),s=n(7900),o=n(4482),r=n(5317);var c;!function(e){e.None="none",e.Subcommand="subcommand",e.Option="option",e.OptionArg="option_arg",e.SubcommandArg="subcommand_arg",e.Composite="composite"}(c||(t.TokenType=c={})),t.createArgState=e=>{const t=[];for(const n of e??[]){const e=new Set;for(let t=0;t0?t:null,index:0}},t.flattenAnnotations=e=>{const t=[];for(let n=0;ne.name.some(e=>t.name.includes(e)),t.countEqualOptions=(e,n)=>n.reduce((n,i)=>(0,t.optionsAreEqual)(e,i)?n+1:n,0),t.updateArgState=e=>{const{args:t,index:n,variadicCount:i}=e;return t&&t[n]&&t[n].isVariadic?{args:t,index:n,variadicCount:(i||0)+1}:t&&t[n]&&ne.args&&e.args[e.index]||null,t.isMandatoryOrVariadic=e=>!!e&&(e.isVariadic||!e.isOptional);const l=e=>(0,t.isMandatoryOrVariadic)((0,t.getCurrentArg)(e.optionArgState))||!(0,t.getCurrentArg)(e.subcommandArgState),d=e=>l(e)?e.optionArgState:e.subcommandArgState,m=e=>{const{subcommandArgState:n,optionArgState:i,isEndOfOptions:a,haveEnteredSubcommandArgs:s,completionObj:o}=e;if(s&&!0===o.parserDirectives?.optionsMustPrecedeArguments)return!1;if(a)return!1;const r=(0,t.getCurrentArg)(n),c=(0,t.getCurrentArg)(i);return(0,t.isMandatoryOrVariadic)((0,t.getCurrentArg)(i))?!(!c?.isVariadic||!i.variadicCount||!1===c.optionsCanBreakVariadicArg):!r||!n.variadicCount||!1!==r?.optionsCanBreakVariadicArg};t.findOption=(e,t)=>{const n=e.options[t]||e.persistentOptions[t];if(!n)throw new s.UpdateStateError(`Option not found: ${t}`);return n},t.findSubcommand=(e,t)=>{const n=e.subcommands[t];if(!n)throw new s.UpdateStateError("Subcommand not found");return n};const p=(e,n,i=!1)=>{const a=(0,t.findOption)(e.completionObj,n);let{isRepeatable:o}=a;if(!1===o&&(o=1),!0!==o&&void 0!==o){const n=(0,t.countEqualOptions)(a,e.passedOptions);if(n>=o)throw new s.UpdateStateError(`Cannot pass option again, already passed ${n} times, and can only be passed ${o} times`)}const r=[...e.annotations,{text:n,type:c.Option}];return i?{...e,annotations:r}:{...e,annotations:r,passedOptions:[...e.passedOptions,a],optionArgState:(0,t.createArgState)(a.args)}},h=(e,n,i=!1)=>{if(!(0,t.getCurrentArg)(e.optionArgState))throw new s.UpdateStateError("Cannot consume option arg.");const a=[...e.annotations,{text:n,type:c.OptionArg}];return i?{...e,annotations:a}:{...e,annotations:a,optionArgState:(0,t.updateArgState)(e.optionArgState)}},u=e=>!(0,t.isMandatoryOrVariadic)((0,t.getCurrentArg)(e.optionArgState))&&!e.haveEnteredSubcommandArgs;function f(e,n,a=!1){if(u(e))try{return((e,n,i=!1)=>{const{completionObj:a,haveEnteredSubcommandArgs:o}=e;if(!a.subcommands)throw new s.UpdateStateError("No subcommands");if(o)throw new s.UpdateStateError("Already entered subcommand args");const r=(0,t.findSubcommand)(e.completionObj,n),l=[...e.annotations,{text:n,type:c.Subcommand}];return i?{...e,annotations:l}:(!r.parserDirectives&&a.parserDirectives&&(r.parserDirectives=a.parserDirectives),Object.assign(r.persistentOptions,a.persistentOptions),{...e,annotations:l,completionObj:r,passedOptions:[],optionArgState:(0,t.createArgState)(),subcommandArgState:(0,t.createArgState)(r.args)})})(e,n,a)}catch(e){}if(m(e))try{return((e,n,a=!1)=>{if(a&&["-","--"].includes(n))throw new s.UpdateStateError("Final token, not consuming as option");if("--"===n)return{...e,isEndOfOptions:!0,annotations:[...e.annotations,{text:n,type:c.Option}],optionArgState:{args:null,index:0}};const{parserDirectives:o}=e.completionObj;if(o?.flagsArePosixNoncompliant||n.startsWith("--")||!n.startsWith("-")){const r=new Set(o?.optionArgSeparators||"="),l=(0,i.firstMatchingToken)(n,r);if(l){const t=l[0],[i,...o]=n.split(t),r=o.join(t),d=p(e,i);if((d.optionArgState.args?.length??0)>1)throw new s.UpdateStateError("Cannot pass argument with separator: option takes multiple args");return{...h(d,r,a),annotations:[...e.annotations,{type:c.Composite,text:n,subtokens:[{type:c.Option,text:`${i}${t}`,tokenName:i},{type:c.OptionArg,text:r}]}]}}const d=p(e,n,a),m=(0,t.findOption)(e.completionObj,n);return m.requiresEquals||m.requiresSeparator?{...d,optionArgState:{args:null,index:0}}:d}let r=e,l="";const d=[];let{passedOptions:m}=e;for(let e=1;e1){l=n.slice(e);break}throw t}if(d.push({type:c.Option,text:1===e?i:n[e],tokenName:i}),(0,t.isMandatoryOrVariadic)((0,t.getCurrentArg)(r.optionArgState))){l=a;break}}if(l){if((r.optionArgState.args?.length??0)>1)throw new s.UpdateStateError("Cannot chain option argument: option takes multiple args");r=h(r,l,a),m=r.passedOptions,d.push({type:c.OptionArg,text:l})}return{...r,annotations:[...e.annotations,{type:c.Composite,text:n,subtokens:d}],passedOptions:a?m:r.passedOptions}})(e,n,a)}catch(e){}if(l(e))try{return h(e,n,a)}catch(e){}return((e,n,i=!1)=>{if(!(0,t.getCurrentArg)(e.subcommandArgState))throw new s.UpdateStateError("Cannot consume subcommand arg.");const a=[...e.annotations,{text:n,type:c.SubcommandArg}];return i?{...e,annotations:a}:{...e,annotations:a,subcommandArgState:(0,t.updateArgState)(e.subcommandArgState),haveEnteredSubcommandArgs:!0}})(e,n,a)}const g=(e,n,i)=>({completionObj:e,passedOptions:[],annotations:n&&i?[{text:n,type:c.Subcommand,spec:e,specLocation:i}]:[],commandIndex:0,optionArgState:(0,t.createArgState)(),subcommandArgState:(0,t.createArgState)(e.args),haveEnteredSubcommandArgs:!1,isEndOfOptions:!1}),b=async()=>{throw new s.ParsingHistoryError("Cannot run shell command while parsing history")};t.getResultFromState=e=>{const{completionObj:n,passedOptions:a,commandIndex:s,annotations:o}=e,r=o[o.length-1];let l=d(e),p=r?.text??"",h=e.isEndOfOptions;if(r?.type===c.Composite){l=e.optionArgState;const t=r.subtokens[r.subtokens.length-1];t.type===c.OptionArg&&(p=t.text,h=!0)}const f=(0,t.getCurrentArg)(l);let g=i.SuggestionFlag.Args;return h||(u(e)&&(g|=i.SuggestionFlag.Subcommands),m(e)&&(g|=i.SuggestionFlag.Options)),{completionObj:n,passedOptions:a,commandIndex:s,annotations:o,currentArg:f,searchTerm:p,suggestionFlags:g}},t.initialParserState=(0,t.getResultFromState)(g({name:[""],subcommands:{},options:{},persistentOptions:{},parserDirectives:{},args:[]}));const y={name:["firstTokenSpec"],subcommands:{},options:{},persistentOptions:{},loadSpec:void 0,args:[{name:"command",generators:[{custom:async(e,t,n)=>{let i=[];n?.currentProcess.includes("fish")?i=(await w({command:'complete -C ""',executable:n.currentProcess})).split("\n").map(e=>{const t=e.indexOf("\t");return{name:e.slice(0,t+1),description:e.slice(t+1),type:"subcommand"}}):n?.currentProcess.includes("bash")?i=(await w({command:"compgen -c",executable:n.currentProcess})).split("\n").map(e=>({name:e,type:"subcommand"})):n?.currentProcess.includes("zsh")&&(i=(await w({command:"for key in ${(k)commands}; do echo $key; done && alias +r",executable:n.currentProcess})).split("\n").map(e=>({name:e,type:"subcommand"})));const a=new Set;return i.filter(e=>!a.has(e.name)&&(a.add(e.name),!0))},cache:{strategy:"stale-while-revalidate",ttl:1e4}}]}],parserDirectives:{}},w=async({command:e,executable:t})=>new Promise((n,i)=>{(0,r.exec)(`${t} -c "${e}"`,(e,t,a)=>{e?i(a):n(t)})});t.parseArguments=async(e,n,r,m,p=!1)=>{const h=e?.tokens??[];if(!e||0===h.length)throw new s.ParseArgumentsError("Invalid token array");if(1===h.length){const e=y;let n={name:"firstTokenSpec",type:i.SpecLocationSource.GLOBAL};return h[0].text.includes("/")&&(n="bin/console"===h[0].text?{name:"php/bin-console",type:i.SpecLocationSource.GLOBAL}:{name:"dotslash",type:i.SpecLocationSource.GLOBAL}),(0,t.getResultFromState)(g(e,h[0].text,n))}let u=await(async(e,n,i,r,m,p=0)=>{const h=function(e=!1,t){return e?b:t.executeCommand}(m,r);let u=e,y=u.tokens.slice(p);const w={type:"global",name:"fake"};if(!i||!w)throw new s.UpdateStateError("Failed loading spec");let v=g((0,o.convertSubcommand)(i,o.initializeDefault),y[0].text,w);const k=new Set;let x;for(let n=1;n{"use strict";function n(e){return e.trim().replace(/\w\S*/g,e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase())}Object.defineProperty(t,"__esModule",{value:!0});const i={name:"yo",description:"Yeoman generator",args:{name:"generator",generators:{script:["yo","--generators"],postProcess:function(e){try{return e.split("\n").filter(e=>e.trim()&&"Available Generators:"!==e).map(e=>({name:e.trim(),icon:void 0,displayName:n(e),description:`${n(e)} Generator`,priority:100,options:[{name:"--help",description:`Help of "${n(e)}" generator`}]}))}catch(e){return console.error(e),[]}}},suggestions:[{name:"doctor",description:"Running sanity checks on your system",icon:"fig://icon?type=alert"},{name:"completion",description:"To enable shell completion for the yo command",icon:"fig://icon?type=asterisk"}],isCommand:!0,isOptional:!0},options:[{name:"--help",description:"Print info and generator's options and usage"},{name:["-f","--force"],description:"Overwrite files that already exist",isDangerous:!0},{name:"--version",description:"Print version"},{name:"--no-color",description:"Disable color"},{name:"--insight",description:"Enable anonymous tracking"},{name:"--no-insight",description:"Disable anonymous tracking"},{name:"--generators",description:"Print available generators"},{name:"--local-only",description:"Disable lookup of globally-installed generators"}]};t.default=i},1375:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const i={name:"node",description:"Run the node interpreter",args:{name:"node script",isScript:!0,generators:(0,n(2341).filepaths)({extensions:["mjs","js","cjs"],editFileSuggestions:{priority:76}})},options:[{name:["-e","--eval=..."],insertValue:"-e '{cursor}'",description:"Evaluate script",args:{}},{name:"--watch",description:"Watch input files"},{name:"--watch-path",description:"Specify a watch directory or file",args:{name:"path",template:"filepaths"},isRepeatable:!0},{name:"--watch-preserve-output",description:"Disable the clearing of the console when watch mode restarts the process",dependsOn:["--watch","--watch-path"]},{name:"--env-file",description:"Specify a file containing environment variables",args:{name:"path",template:"filepaths"},isRepeatable:!0},{name:["-p","--print"],description:"Evaluate script and print result"},{name:["-c","--check"],description:"Syntax check script without executing"},{name:["-v","--version"],description:"Print Node.js version"},{name:["-i","--interactive"],description:"Always enter the REPL even if stdin does not appear to be a terminal"},{name:["-h","--help"],description:"Print node command line options (currently set)"},{name:"--inspect",requiresSeparator:!0,args:{name:"[host:]port",isOptional:!0},description:"Activate inspector on host:port (default: 127.0.0.1:9229)"},{name:"--preserve-symlinks",description:"Follows symlinks to directories when examining source code and templates for translation strings"}],generateSpec:async(e,t)=>{if(0===(await t({command:"bash",args:["-c","isAdonisJsonPresentCommand"]})).status)return{name:"node",subcommands:[{name:"ace",description:"Run AdonisJS command-line",options:[{name:["-h","--help"],description:"Display AdonisJS Ace help"},{name:["-v","--version"],description:"Display AdonisJS version"}],subcommands:[{name:"build",description:"Compile project from Typescript to Javascript. Also compiles the frontend assets if using webpack encore",options:[{name:["-prod","--production"],description:"Build for production"},{name:"--assets",description:"Build frontend assets when webpack encore is installed"},{name:"--no-assets",description:"Disable building assets"},{name:"--ignore-ts-errors",description:"Ignore typescript errors and complete the build process"},{name:"--tsconfig",description:"Path to the TypeScript project configuration file",args:{name:"path",description:"Path to tsconfig.json"}},{name:"--encore-args",requiresSeparator:!0,insertValue:"--encore-args='{cursor}'",description:"CLI options to pass to the encore command line"},{name:"--client",args:{name:"name"},description:"Select the package manager to decide which lock file to copy to the build folder"}]},{name:["configure","invoke"],description:"Configure a given AdonisJS package",args:{name:"name",description:"Name of the package you want to configure"},subcommands:[{name:"@adonisjs/auth",description:"Trigger auto configuring auth package"},{name:"@adonisjs/shield",description:"Trigger auto configuring shield package"},{name:"@adonisjs/redis",description:"Trigger auto configuring redis package"},{name:"@adonisjs/mail",description:"Trigger auto configuring mail package"}]},{name:"repl",description:"Start a new REPL session"},{name:"serve",description:"Start the AdonisJS HTTP server, along with the file watcher. Also starts the webpack dev server when webpack encore is installed",options:[{name:"--assets",description:"Start webpack dev server when encore is installed"},{name:"--no-assets",description:"Disable webpack dev server"},{name:["-w","--watch"],description:"Watch for file changes and re-start the HTTP server on change"},{name:["-p","--poll"],description:"Detect file changes by polling files instead of listening to filesystem events"},{name:"--node-args",requiresSeparator:!0,insertValue:"--node-args='{cursor}'",description:"CLI options to pass to the node command line"},{name:"--encore-args",requiresSeparator:!0,insertValue:"--encore-args='{cursor}'",description:"CLI options to pass to the encore command line"}]},{name:"db:seed",description:"Execute database seeder files",options:[{name:["-c","--connection"],description:"Define a custom database connection for the seeders",args:{name:"name"}},{name:["-i","--interactive"],description:"Run seeders in interactive mode"},{name:["-f","--files"],args:{name:"file",isVariadic:!0,template:"filepaths"},description:"Define a custom set of seeders files names to run"}]},{name:"dump:rcfile",description:"Dump contents of .adonisrc.json file along with defaults"},{name:"generate:key",description:"Generate a new APP_KEY secret"},{name:"generate:manifest",description:"Generate ace commands manifest file. Manifest file speeds up commands lookup"},{name:"list:routes",description:"List application routes"},{name:"make:command",description:"Make a new ace command"},{name:"make:controller",description:"Make a new HTTP controller",args:{name:"name",description:"Name of the controller class"},options:[{name:["-r","--resource"],description:"Add resourceful methods to the controller class"},{name:["-e","--exact"],description:"Create the controller with the exact name as provided"}]},{name:"make:exception",description:"Make a new custom exception class"},{name:"make:listener",description:"Make a new event listener class"},{name:"make:mailer",description:"Make a new mailer class",args:{name:"name",description:"Mailer class name"}},{name:"make:middleware",description:"Make a new middleware",args:{name:"name",description:"Middleware class name"}},{name:"make:migration",description:"Make a new migration file",args:{name:"name",description:"Name of the migration file"},options:[{name:"--connection",description:"The connection flag is used to lookup the directory for the migration file",args:{name:"name"}},{name:"--folder",description:"Pre-select a migration directory",args:{name:"name",template:"filepaths"}},{name:"--create",description:"Define the table name for creating a new table",args:{name:"name"}},{name:"--table",description:"Define the table name for altering an existing table",args:{name:"name"}}]},{name:"make:model",description:"Make a new Lucid model",args:{name:"name",description:"Name of the model class"},options:[{name:["-m","--migration"],description:"Generate the migration for the model"},{name:["-c","--controller"],description:"Generate the controller for the model"}]},{name:"make:prldfile",description:"Make a new preload file",subcommands:[{name:"events",description:"Make events preload file"}]},{name:"make:provider",description:"Make a new provider class"},{name:"make:seeder",description:"Make a new Seeder file",args:{name:"name",description:"Name of the seeder class"}},{name:"make:validator",description:"Make a new validator",args:{name:"name",description:"Name of the validator class"},options:[{name:["-e","--exact"],description:"Create the validator with the exact name as provided"}]},{name:"make:view",description:"Make a new view template",args:{name:"name",description:"Name of the view"},options:[{name:["-e","--exact"],description:"Create the template file with the exact name as provided"}]},{name:"migration:rollback",description:"Rollback migrations to a given batch number",options:[{name:["-c","--connection"],description:"Define a custom database connection",args:{name:"name"}},{name:"--force",description:"Explicitly force to run migrations in production",isDangerous:!0},{name:"--dry-run",description:"Print SQL queries, instead of running the migrations"},{name:"--batch",args:{name:"number",description:"Use 0 to rollback to initial state"},description:"Define custom batch number for rollback"}]},{name:"migration:run",description:"Run pending migrations",options:[{name:["-c","--connection"],description:"Define a custom database connection",args:{name:"name"}},{name:"--force",description:"Explicitly force to run migrations in production",isDangerous:!0},{name:"--dry-run",description:"Print SQL queries, instead of running the migrations"}]},{name:"migration:status",description:"Check migrations current status"}]}]}}};t.default=i},1380:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.default={name:"fmt",description:"Simple text formatter",parserDirectives:{optionsMustPrecedeArguments:!0},options:[{name:"-c",description:"Center the text, line by line. In this case, most of the other\noptions are ignored; no splitting or joining of lines is done"},{name:"-m",description:"Try to format mail header lines contained in the input\nsensibly"},{name:"-n",description:"Format lines beginning with a ‘.’ (dot) character"},{name:"-p",description:"Allow indented paragraphs. Without the -p flag, any change in\nthe amount of whitespace at the start of a line results in a\nnew paragraph being begun"},{name:"-s",description:"Collapse whitespace inside lines, so that multiple whitespace\ncharacters are turned into a single space. (Or, at the end of\na sentence, a double space.)"},{name:"-d",description:"Treat the chars (and no others) as sentence-ending characters.\nBy default the sentence-ending characters are full stop (‘.’),\nquestion mark (‘?’) and exclamation mark (‘!’). Remember that\nsome characters may need to be escaped to protect them from\nyour shell",args:{name:"chars",suggestions:[".","?","!"],default:"."}},{name:"-l",description:"Replace multiple spaces with tabs at the start of each output\nline, if possible. Each number spaces will be replaced with\none tab. The default is 8. If number is 0, spaces are\npreserved",args:{name:"number",suggestions:["8"],default:"8"}},{name:"-t",description:"Assume that the input files' tabs assume number spaces per tab\nstop. The default is 8",args:{name:"number",suggestions:["8"],default:"8"}}],args:{name:"file",description:"File(s) to format",isOptional:!0,isVariadic:!0,template:"filepaths"}}},1398:e=>{"use strict";e.exports=require("vscode")},1421:e=>{"use strict";e.exports=require("node:child_process")},1485:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={name:"nano",description:"Nano's ANOther editor, an enhanced free Pico clone",args:{template:"filepaths"}}},1525:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const i=void 0,a=[{name:"new",loadSpec:"dotnet/dotnet-new",icon:i},{name:"add",loadSpec:"dotnet/dotnet-add",icon:i},{name:"list",loadSpec:"dotnet/dotnet-list",icon:i},{name:"remove",loadSpec:"dotnet/dotnet-remove",icon:i},{name:"build",loadSpec:"dotnet/dotnet-build",icon:i},{name:"build-server",loadSpec:"dotnet/dotnet-build-server",icon:i},{name:"clean",loadSpec:"dotnet/dotnet-clean",icon:i},{name:"format",loadSpec:"dotnet/dotnet-format",icon:i},{name:"migrate",loadSpec:"dotnet/dotnet-migrate",icon:i},{name:"msbuild",loadSpec:"dotnet/dotnet-msbuild",icon:i},{name:"nuget",loadSpec:"dotnet/dotnet-nuget",icon:i},{name:"pack",loadSpec:"dotnet/dotnet-pack",icon:i},{name:"publish",loadSpec:"dotnet/dotnet-publish",icon:i},{name:"restore",loadSpec:"dotnet/dotnet-restore",icon:i},{name:"run",loadSpec:"dotnet/dotnet-run",icon:i},{name:"sln",loadSpec:"dotnet/dotnet-sln",icon:i},{name:"store",loadSpec:"dotnet/dotnet-store",icon:i},{name:"test",loadSpec:"dotnet/dotnet-test",icon:i},{name:"tool",loadSpec:"dotnet/dotnet-tool",icon:i}],s={name:"dotnet",description:"The dotnet cli",icon:i,args:{name:"command",isOptional:!0,generators:(0,n(2341).filepaths)({extensions:["dll"]})},options:[{name:"--version",description:"Prints out the version of the .NET SDK used by dotnet commands. Includes the effects of any global.json"},{name:"--info",description:"Prints out detailed information about a .NET installation and the machine environment, such as the current operating system, and commit SHA of the .NET version"},{name:"--list-runtimes",description:"Prints out a list of the installed .NET runtimes. An x86 version of the SDK lists only x86 runtimes, and an x64 version of the SDK lists only x64 runtimes"},{name:"--list-sdks",description:"Prints out a list of the installed .NET SDKs"},{name:["-?","-h","--help"],description:"Prints out a list of available commands"},{name:["-d","--diagnostics"],description:"Enables diagnostic output"},{name:["-v","--verbosity"],description:"Sets the verbosity level of the command. Allowed values are q[uiet], m[inimal], n[ormal], d[etailed], and diag[nostic]. Not supported in every command. See specific command page to determine if this option is available",args:{name:"verbosity",suggestions:["quiet","minimal","normal","detailed","diagnostic"]}},{name:"--additionalprobingpath",description:"Path containing probing policy and assemblies to probe",args:{name:"path",template:"folders"}},{name:"--additional-deps",description:"Path to an additional .deps.json file. A deps.json file contains a list of dependencies, compilation dependencies, and version information used to address assembly conflicts. For more information, see Runtime Configuration Files on GitHub",args:{name:"deps",template:"filepaths"}},{name:"-depsfile",description:"Path to the deps.json file. A deps.json file is a configuration file that contains information about dependencies necessary to run the application. This file is generated by the .NET SDK",args:{name:"deps",template:"filepaths"}},{name:"--runtimeconfig",description:"Path to a runtimeconfig.json file. A runtimeconfig.json file is a configuration file that contains run-time settings",args:{name:"path",template:"filepaths"}},{name:"--roll-forward",description:"Controls how roll forward is applied to the app. The SETTING can be one of the following values. If not specified, Minor is the default",args:{name:"setting",suggestions:["LatestPatch","Minor","Major","LatestMinor","LatestMajor","Disable"]}},{name:"--fx-version",description:"Version of the .NET runtime to use to run the application",args:{name:"version"}}],subcommands:a,async generateSpec(e,t){const n=/(([a-zA-Z \.\[\]#,/][^ ]{1,})+)/g,i=[],{stdout:a}=await t({command:"dotnet",args:["tool","list","--global"]}),s=a.split("\n").slice(2);for(const e of s){const[t,a,s]=e.match(n).map(e=>e.trim()),o=s.split(",").map(e=>({name:e.replace("dotnet-",""),description:e,args:{name:"args",isOptional:!0}}));i.push(...o)}return{name:"dotnet",subcommands:i}}};t.default=s},1577:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={name:"export",description:"Export variables",hidden:!0,args:{isVariadic:!0}}},1609:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.convertSubcommand=function e(t,n){const{subcommands:o,options:r,args:c}=t;return{...n.subcommand(t),name:(0,i.makeArray)(t.name),subcommands:a(o?.map(t=>e(t,n))),options:a(r?.filter(e=>!e.isPersistent)?.map(e=>s(e,n))),persistentOptions:a(r?.filter(e=>e.isPersistent)?.map(e=>s(e,n))),args:c?(0,i.makeArray)(c).map(n.arg):[]}};const i=n(5095),a=e=>{const t={};if(!e)return t;for(let n=0;n{t[i]=e[n]});return t};function s(e,t){return{...t.option(e),name:(0,i.makeArray)(e.name),args:e.args?(0,i.makeArray)(e.args).map(t.arg):[]}}},1616:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={name:"fdisk",description:"Manipulate disk partition table",options:[{name:["--help","-h"],description:"Show help for fdisk"},{name:["--version","-V"],description:"Show version for lsblk"},{name:["--sector-size","-b"],description:"Specify the sector size of the disk",args:{name:"mode",description:"Valid values are 512, 1024, 2048, and 4096",suggestions:["512","1024","2048","4096"]}},{name:["--protect-boot","-B"],description:"Don't erase the beginning of the first disk sector when creating a new disk label"},{name:["--compatibility","-c"],description:"Specify the compatibility mode, 'dos' or 'nondos'",args:{name:"mode",isOptional:!0,suggestions:["dos","nondos"]}},{name:["--color","-L"],description:"Colorize the output",args:{name:"when",isOptional:!0,suggestions:["always","never","auto"]}},{name:["--list","-l"],description:"List the partition tables for the specified devices and then exit"},{name:["--list-details","-x"],description:"Like --list, but provides more details"},{name:"--lock",description:"Use exclusive BSD lock for device or file it operates",args:{name:"mode",description:"Optional argument mode can be yes, no (or 1 and 0) or nonblock",isOptional:!0,suggestions:["yes","no","nonblock"]}},{name:["--noauto-pt","-n"],description:"Don't automatically create a default partition table on empty device"},{name:["--output","-o"],description:"Desc",args:{name:"list"}},{name:["--getsz","-s"],description:"Print the size in 512-byte sectors of each given block device. This option is DEPRECATED in favour of blockdev(8)",deprecated:{description:"This option is DEPRECATED in favour of blockdev(8)"}},{name:["--type","-t"],description:"Enable support only for disklabels of the specified type, and disable support for all other types",args:{name:"type"}},{name:["--units","-u"],description:"When listing partition tables, show sizes in 'sectors' or in 'cylinders'",args:{name:"unit",isOptional:!0,suggestions:["sectors","cylinders"]}},{name:["--cylinders","-C"],description:"Specify the number of cylinders of the disk",args:{name:"number"}},{name:["--heads","-H"],description:"Specify the number of heads of the disk. (Not the physical number, of course, but the number used for partition tables.)",args:{name:"number"}},{name:["--sectors","-S"],description:"Specify the number of sectors per track of the disk. (Not the physical number, of course, but the number used for partition tables.)"},{name:["--wipe","-w"],description:"Wipe filesystem, RAID and partition-table signatures from the device, in order to avoid possible collisions",args:{name:"when",description:"The argument when can be auto, never or always",suggestions:["auto","never","always"]}},{name:["--wipe-partitions","-W"],description:"Wipe filesystem, RAID and partition-table signatures from a newly created partitions, in order to avoid possible collisions",args:{name:"when",description:"The argument when can be auto, never or always"}}],args:{name:"device",description:"Device to list",isOptional:!0,template:"filepaths"}}},1636:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n={name:"killall",description:"Kill processes by name",args:{name:"process_name",isVariadic:!0,generators:{script:["bash","-c","ps -A -o comm | sort -u"],postProcess:e=>e.trim().split("\n").map(e=>{const t=e.indexOf(".app/"),n=-1!==t,i=e.slice(e.lastIndexOf("/")+1),a=new Set(i);return{name:i,description:e,priority:!["(","_","."].some(e=>a.has(e))&&n?51:40,icon:n?"fig://"+e.slice(0,t+4):"fig://icon?type=gear"}})}},options:[{name:"-d",description:"Be verbose (dry run) and display number of user processes"},{name:"-e",description:"Use the effective user ID instead of the real user ID for matching processes with -u"},{name:"-help",description:"Display help and exit"},{name:"-I",description:"Request confirmation before killing each process"},{name:"-l",description:"List the names of the available signals and exit"},{name:"-m",description:"Match the process name as a regular expression"},{name:"-v",description:"Be verbose"},{name:"-s",description:"Be verbose (dry run)"},...["hup","int","quit","ill","trap","abrt","emt","fpe","kill","bus","segv","sys","pipe","alrm","urg","stop","tstp","cont","chld","ttin","ttou","io","xcpu","xfsz","vtalrm","prof","winch","info","usr1","usr2"].map(e=>({name:"-SIG"+e.toUpperCase(),description:`Send ${e.toUpperCase()} instead of TERM`})),{name:"-u",description:"Limit potentially matching processes to those belonging to the user",args:{name:"user",generators:{script:["bash","-c","dscl . -list /Users | grep -v '^_'"],postProcess:e=>e.trim().split("\n").map(e=>({name:e,icon:"fig://template?badge=👤"}))}}},{name:"-t",description:"Limit matching processes to those running on the specified TTY",args:{name:"tty"}},{name:"-c",description:"Limit matching processes to those matching the given name",args:{name:"name"}},{name:"-q",description:"Suppress error message if no processes are matched"},{name:"-z",description:"Do not skip zombies"}]};t.default=n},1765:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=[{name:"source_file",template:["filepaths","folders"]},{name:"link_name or link_dirname",isOptional:!0}],i={name:"ln",description:"Create (default hard) symbolic links to files",args:n,options:[{name:"-s",description:"Create a symbolic link",args:n},{name:"-v",description:"Verbose"},{name:"-F",description:"If link name already exists replace it",args:n},{name:"-h",description:"Don't follow symbolic links"},{name:"-f",description:"If link name already exists unlink the old one before creating the new one",args:n},{name:"-i",description:"Prompt if proposed link already exists",args:n},{name:"-n",description:"Same as -h don't follow symbolic links"}]};t.default=i},1799:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={name:"uname",description:"Print operating system name",options:[{name:"-a",description:"Print all available system information"},{name:"-m",description:"Print the machine hardware name"},{name:"-n",description:"Print the system hostname"},{name:"-p",description:"Print the machine processor architecture name"},{name:"-r",description:"Print the operating system release"},{name:"-s",description:"Print the operating system name"},{name:"-v",description:"Print the operating system version"}]}},1822:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=["-A","-F","-G","-M","-P","-g","-p","-u"],i={name:"id",description:"The id utility displays the user and group names and numeric IDs, of the calling process, to the standard output. If the real and effective IDs are different, both are displayed, otherwise only the real ID is displayed. If a user (login name or user ID) is specified, the user and group IDs of that user are displayed. In this case, the real and effective IDs are assumed to be the same",options:[{name:"-A",description:"Display the process audit user ID and other process audit properties, which requires privilege",exclusiveOn:n},{name:"-F",description:"Display the full name of the user",exclusiveOn:n},{name:"-G",description:"Display the different group IDs (effective, real and supplementary) as white-space separated numbers, in no particular order",exclusiveOn:n},{name:"-M",description:"Display the MAC label of the current process",exclusiveOn:n},{name:"-P",description:"Display the id as a password file entry",exclusiveOn:n},{name:"-g",description:"Display the effective group ID as a number",exclusiveOn:n},{name:"-n",description:"Display the name of the user or group ID for the -G, -g and -u options instead of the number. If any of the ID numbers cannot be mapped into names the number will be displayed as usual",dependsOn:["-G","-g","-u"],exclusiveOn:n},{name:"-p",description:"Make the output human-readable",exclusiveOn:n},{name:"-u",description:"Display the effective user ID as a number",exclusiveOn:n}],args:{name:"user",isOptional:!0,generators:{script:["bash","-c","dscl . -list /Users | grep -v '^_'"],postProcess:e=>e.trim().split("\n").map(e=>({name:e,icon:"fig://template?badge=👤"}))}}};t.default=i},1847:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.zshBuiltinsCommandDescriptionsCache=void 0,t.zshBuiltinsCommandDescriptionsCache={".":{shortDescription:"Source a file",description:": Read commands from *file* and execute them in the current shell environment.\n\n If *file* does not contain a slash, or if **PATH_DIRS** is set, the shell looks in the components of **\\$path** to find the directory containing *file*. Files in the current directory are not read unless `**.**` appears somewhere in **\\$path**. If a file named `*file***.zwc**` is found, is newer than *file*, and is the compiled form (created with the **zcompile** builtin) of *file*, then commands are read from that file instead of *file*.\n\n If any arguments *arg* are given, they become the positional parameters; the old positional parameters are restored when the *file* is done executing. However, if no arguments are given, the positional parameters remain those of the calling context, and no restoring is done.\n\n If *file* was not found the return status is 127; if *file* was found but contained a syntax error the return status is 126; else the return status is the exit status of the last command executed.",args:". file [ arg ... ]"},":":{shortDescription:"No effect",description:": This command does nothing, although normal argument expansions is performed which may have effects on shell parameters. A zero exit status is returned.",args:": [ arg ... ]"},alias:{shortDescription:"Define or view aliases",description:": For each *name* with a corresponding *value*, define an alias with that value. A trailing space in *value* causes the next word to be checked for alias expansion. If the **-g** flag is present, define a global alias; global aliases are expanded even if they do not occur in command position:\n\n > % perldoc --help 2>&1 | grep 'built-in functions'\n > -f Search Perl built-in functions\n > % alias -g HG='--help 2>&1 | grep'\n > % perldoc HG 'built-in functions'\n > -f Search Perl built-in functions\n\n If the **-s** flag is present, define a suffix alias: if the command word on a command line is in the form `*text***.***name*`, where *text* is any non-empty string, it is replaced by the text `*value* *text***.***name*`. Note that *name* is treated as a literal string, not a pattern. A trailing space in *value* is not special in this case. For example,\n\n > alias -s ps='gv --'\n\n will cause the command `**\\*.ps**` to be expanded to `**gv \\-- \\*.ps**`. As alias expansion is carried out earlier than globbing, the `**\\*.ps**` will then be expanded. Suffix aliases constitute a different name space from other aliases (so in the above example it is still possible to create an alias for the command **ps**) and the two sets are never listed together.\n\n For each *name* with no *value*, print the value of *name*, if any. With no arguments, print all currently defined aliases other than suffix aliases. If the **-m** flag is given the arguments are taken as patterns (they should be quoted to preserve them from being interpreted as glob patterns), and the aliases matching these patterns are printed. When printing aliases and one of the **-g**, **-r** or **-s** flags is present, restrict the printing to global, regular or suffix aliases, respectively; a regular alias is one which is neither a global nor a suffix alias. Using `**+**` instead of `**-**`, or ending the option list with a single `**+**`, prevents the values of the aliases from being printed.\n\n If the **-L** flag is present, then print each alias in a manner suitable for putting in a startup script. The exit status is nonzero if a *name* (with no *value*) is given for which no alias has been defined.\n\n For more on aliases, include common problems, see the section ALIASING in *zshmisc*(1).",args:"alias [ {+|-}gmrsL ] [ name[=value] ... ]"},autoload:{shortDescription:"Autoload a function",description:": See the section `Autoloading Functions` in *zshmisc*(1) for full details. The **fpath** parameter will be searched to find the function definition when the function is first referenced.\n\n If *name* consists of an absolute path, the function is defined to load from the file given (searching as usual for dump files in the given location). The name of the function is the basename (non-directory part) of the file. It is normally an error if the function is not found in the given location; however, if the option **-d** is given, searching for the function defaults to **\\$fpath**. If a function is loaded by absolute path, any functions loaded from it that are marked for **autoload** without an absolute path have the load path of the parent function temporarily prepended to **\\$fpath**.\n\n If the option **-r** or **-R** is given, the function is searched for immediately and the location is recorded internally for use when the function is executed; a relative path is expanded using the value of **\\$PWD**. This protects against a change to **\\$fpath** after the call to **autoload**. With **-r**, if the function is not found, it is silently left unresolved until execution; with **-R**, an error message is printed and command processing aborted immediately the search fails, i.e. at the **autoload** command rather than at function execution..\n\n The flag **-X** may be used only inside a shell function. It causes the calling function to be marked for autoloading and then immediately loaded and executed, with the current array of positional parameters as arguments. This replaces the previous definition of the function. If no function definition is found, an error is printed and the function remains undefined and marked for autoloading. If an argument is given, it is used as a directory (i.e. it does not include the name of the function) in which the function is to be found; this may be combined with the **-d** option to allow the function search to default to **\\$fpath** if it is not in the given location.\n\n The flag **+X** attempts to load each *name* as an autoloaded function, but does *not* execute it. The exit status is zero (success) if the function was not previously defined *and* a definition for it was found. This does *not* replace any existing definition of the function. The exit status is nonzero (failure) if the function was already defined or when no definition was found. In the latter case the function remains undefined and marked for autoloading. If ksh-style autoloading is enabled, the function created will contain the contents of the file plus a call to the function itself appended to it, thus giving normal ksh autoloading behaviour on the first call to the function. If the **-m** flag is also given each *name* is treated as a pattern and all functions already marked for autoload that match the pattern are loaded.\n\n With the **-t** flag, turn on execution tracing; with **-T**, turn on execution tracing only for the current function, turning it off on entry to any called functions that do not also have tracing enabled.\n\n With the **-U** flag, alias expansion is suppressed when the function is loaded.\n\n With the **-w** flag, the *name*s are taken as names of files compiled with the **zcompile** builtin, and all functions defined in them are marked for autoloading.\n\n The flags **-z** and **-k** mark the function to be autoloaded using the zsh or ksh style, as if the option **KSH_AUTOLOAD** were unset or were set, respectively. The flags override the setting of the option at the time the function is loaded.\n\n Note that the **autoload** command makes no attempt to ensure the shell options set during the loading or execution of the file have any particular value. For this, the **emulate** command can be used:\n\n > emulate zsh -c 'autoload -Uz func'\n\n arranges that when *func is loaded the shell is in native* **zsh** emulation, and this emulation is also applied when *func is run.*\n\n Some of the functions of **autoload** *are also provided by* **functions** -u *or* **functions -U***, but* **autoload** *is a more comprehensive* interface.",args:"autoload [ {+|-}RTUXdkmrtWz ] [ -w ] [ name ... ]"},bg:{shortDescription:"Put a job in the background",description:"*job \\...* **&** Put each specified *job in the background,* or the current job if none is specified.",args:"bg [ job ... ]"},bindkey:{shortDescription:"Manipulate keymap names",description:": See the section `Zle Builtins` in *zshzle(1).*",args:"bindkey"},break:{shortDescription:"Exit from a loop",description:": Exit from an enclosing **for***,* **while***,* **until***,* **select** *or* **repeat** *loop. If an arithmetic expression n* is specified, then break *n levels instead of just one.*",args:"break [ n ]"},builtin:{shortDescription:"Executes a builtin",description:": Executes the builtin *name, with the given args.*",args:"builtin name [ args ... ]"},bye:{shortDescription:"Exit the shell",description:": Same as **exit***.*",args:"bye"},cap:{shortDescription:"Manipulating POSIX capability sets",description:": See the section `The zsh/cap Module` in *zshmodules(1).*",args:"cap"},cd:{shortDescription:"Change the current directory",description:"**cd** *\\[* **-qsLP** *\\] {***+***\\|***-***}n* Change the current directory. In the first form, change the current directory to *arg, or to the value of* **\\$HOME** *if* *arg is not specified. If arg is `***-***`, change to the* previous directory.\n\n> Otherwise, if *arg begins with a slash, attempt to change to the* directory given by *arg.*\n>\n> If *arg does not begin with a slash, the behaviour depends on whether* the current directory `**.***` occurs in the list of directories contained* in the shell parameter **cdpath***. If it does not, first attempt to change* to the directory *arg under the current directory, and if that fails* but **cdpath** *is set and contains at least one element attempt to change* to the directory *arg under each component of* **cdpath** *in turn until* successful. If `**.***` occurs in* **cdpath***, then* **cdpath** *is searched* strictly in order so that `**.***` is only tried at the appropriate point.*\n>\n> The order of testing **cdpath** *is modified if the option* **POSIX_CD** is set, as described in the documentation for the option.\n>\n> If no directory is found, the option **CDABLE_VARS** *is set, and a* parameter named *arg exists whose value begins with a slash, treat its* value as the directory. In that case, the parameter is added to the named directory hash table.\n>\n> The second form of **cd** *substitutes the string new* for the string *old in the name of the current directory,* and tries to change to this new directory.\n>\n> The third form of **cd** *extracts an entry from the directory* stack, and changes to that directory. An argument of the form `**+***n` identifies a stack entry by counting from the left* of the list shown by the **dirs** *command, starting with zero.* An argument of the form `**-***n` counts from the right.* If the **PUSHD_MINUS** *option is set, the meanings of `***+***`* and `**-***` in this context are swapped.* If the **POSIX_CD** *option is set, this form of* **cd** *is not recognised* and will be interpreted as the first form.\n>\n> If the **-q** *(quiet) option is specified, the hook function* **chpwd** and the functions in the array **chpwd_functions** *are not called.* This is useful for calls to **cd** *that do not change the environment* seen by an interactive user.\n>\n> If the **-s** *option is specified,* **cd** *refuses to change the current* directory if the given pathname contains symlinks. If the **-P** *option* is given or the **CHASE_LINKS** *option is set, symbolic links are resolved* to their true values. If the **-L** *option is given symbolic links are* retained in the directory (and not resolved) regardless of the state of the **CHASE_LINKS** *option.*",args:"cd [ -qsLP ] [ arg ]\n\ncd [ -qsLP ] old new"},chdir:{shortDescription:"Change the current directory",description:": Same as **cd***.*",args:"chdir"},clone:{shortDescription:"Clone shell onto another terminal",description:": See the section `The zsh/clone Module` in *zshmodules(1).*",args:"clone"},command:{shortDescription:"Execute a command",description:": The simple command argument is taken as an external command instead of a function or builtin and is executed. If the **POSIX_BUILTINS** *option* is set, builtins will also be executed but certain special properties of them are suppressed. The **-p** *flag causes a default path to be* searched instead of that in **\\$path***. With the* **-v** *flag,* **command** is similar to **whence** *and with* **-V***, it is equivalent to* **whence** -v*.*\n\n See also the section `Precommand Modifiers` in *zshmisc(1).*",args:"command [ -pvV ] simple command"},comparguments:{shortDescription:"Complete arguments",description:": See the section `The zsh/computil Module` in *zshmodules(1).*",args:"comparguments"},compcall:{shortDescription:"Complete call",description:": See the section `The zsh/compctl Module` in *zshmodules(1).*",args:"compcall"},compctl:{shortDescription:"Complete control",description:": See the section `The zsh/compctl Module` in *zshmodules(1).*",args:"compctl"},compdescribe:{shortDescription:"Complete describe",description:": See the section `The zsh/computil Module` in *zshmodules(1).*",args:"compdescribe"},compfiles:{shortDescription:"Complete files",description:": See the section `The zsh/computil Module` in *zshmodules(1).*",args:"compfiles"},compgroups:{shortDescription:"Complete groups",description:": See the section `The zsh/computil Module` in *zshmodules(1).*",args:"compgroups"},compquote:{shortDescription:"Complete quote",description:": See the section `The zsh/computil Module` in *zshmodules(1).*",args:"compquote"},comptags:{shortDescription:"Complete tags",description:": See the section `The zsh/computil Module` in *zshmodules(1).*",args:"comptags"},comptry:{shortDescription:"Complete try",description:": See the section `The zsh/computil Module` in *zshmodules(1).*",args:"comptry"},compvalues:{shortDescription:"Complete values",description:": See the section `The zsh/computil Module` in *zshmodules(1).*",args:"compvalues"},continue:{shortDescription:"Resume the next loop iteration",description:": Resume the next iteration of the enclosing **for***,* **while***,* **until***,* **select** *or* **repeat** *loop. If an arithmetic expression n is specified, break out of* *n-1 loops and resume at the nth enclosing loop.*",args:"continue [ n ]"},declare:{shortDescription:"Set or display parameter attributes/values",description:": Same as **typeset***.*",args:"declare"},dirs:{shortDescription:"Interact with directory stack",description:"**dirs** *\\[* **-lpv** *\\]* With no arguments, print the contents of the directory stack. Directories are added to this stack with the **pushd** *command,* and removed with the **cd** *or* **popd** *commands.* If arguments are specified, load them onto the directory stack, replacing anything that was there, and push the current directory onto the stack.\n\n> **-c** clear the directory stack.\n>\n> **-l**\n>\n> : print directory names in full instead of using of using **\\~** *expressions (see Dynamic and Static named directories in zshexpn(1)).*\n>\n> **-p**\n>\n> : print directory entries one per line.\n>\n> **-v**\n>\n> : number the directories in the stack when printing.",args:"dirs [ -c ] [ arg ... ]"},disable:{shortDescription:"Disable shell features",description:": Temporarily disable the *named hash table elements or patterns. The default* is to disable builtin commands. This allows you to use an external command with the same name as a builtin command. The **-a** *option* causes **disable** *to act on regular or global aliases. The* **-s** option causes **disable** *to act on suffix aliases. The* **-f** *option causes* **disable** *to act on shell functions. The* **-r** *options causes* **disable** *to act on reserved words. Without arguments all disabled* hash table elements from the corresponding hash table are printed. With the **-m** *flag the arguments are taken as patterns (which should be* quoted to prevent them from undergoing filename expansion), and all hash table elements from the corresponding hash table matching these patterns are disabled. Disabled objects can be enabled with the **enable** command.\n\n With the option **-p***, name \\... refer to elements of the* shell\\'s pattern syntax as described in the section `Filename Generation`. Certain elements can be disabled separately, as given below.\n\n Note that patterns not allowed by the current settings for the options **EXTENDED_GLOB***,* **KSH_GLOB** *and* **SH_GLOB** *are never enabled, regardless of the* setting here. For example, if **EXTENDED_GLOB** *is not active,* the pattern **\\^** *is ineffective even if `***disable -p \\\"\\^\\\"***` has* not been issued. The list below indicates any option settings that restrict the use of the pattern. It should be noted that setting **SH_GLOB** *has a wider effect than merely disabling patterns* as certain expressions, in particular those involving parentheses, are parsed differently.\n\n The following patterns may be disabled; all the strings need quoting on the command line to prevent them from being interpreted immediately as patterns and the patterns are shown below in single quotes as a reminder.\n\n **\\'?\\'** The pattern character **?** *wherever it occurs, including when preceding* a parenthesis with **KSH_GLOB***.*\n\n **\\'\\*\\'**\n\n : The pattern character **\\*** *wherever it occurs, including recursive* globbing and when preceding a parenthesis with **KSH_GLOB***.*\n\n **\\'\\[\\'**\n\n : Character classes.\n\n **\\'\\<\\'** *(***NO_SH_GLOB***)*\n\n : Numeric ranges.\n\n **\\'\\|\\'** *(***NO_SH_GLOB***)*\n\n : Alternation in grouped patterns, case statements, or KSH_GLOB parenthesised expressions.\n\n **\\'(\\'** *(***NO_SH_GLOB***)*\n\n : Grouping using single parentheses. Disabling this does not disable the use of parentheses for **KSH_GLOB** *where they are introduced by a* special character, nor for glob qualifiers (use `**setopt** NO_BARE_GLOB_QUAL*` to disable glob qualifiers that use parentheses* only).\n\n **\\'\\~\\'** *(***EXTENDED_GLOB***)*\n\n : Exclusion in the form *A***\\~***B.*\n\n **\\'\\^\\'** *(***EXTENDED_GLOB***)*\n\n : Exclusion in the form *A***\\^***B.*\n\n **\\'#\\'** *(***EXTENDED_GLOB***)*\n\n : The pattern character **\\#** *wherever it occurs, both for* repetition of a previous pattern and for indicating globbing flags.\n\n **\\'?(\\'** *(***KSH_GLOB***)*\n\n : The grouping form **?(***\\...***)***. Note this is also* disabled if **\\'?\\'** *is disabled.*\n\n **\\'\\*(\\'** *(***KSH_GLOB***)*\n\n : The grouping form **\\*(***\\...***)***. Note this is also* disabled if **\\'\\*\\'** *is disabled.*\n\n **\\'+(\\'** *(***KSH_GLOB***)*\n\n : The grouping form **+(***\\...***)***.*\n\n **\\'!(\\'** *(***KSH_GLOB***)*\n\n : The grouping form **!(***\\...***)***.*\n\n **\\'@(\\'** *(***KSH_GLOB***)*\n\n : The grouping form **@(***\\...***)***.*",args:"disable [ -afmprs ] name ..."},disown:{shortDescription:"Remove job from job table",description:"*job \\...* **&\\|**\n\n*job \\...* **&!** Remove the specified *jobs from the job table; the shell will* no longer report their status, and will not complain if you try to exit an interactive shell with them running or stopped. If no *job is specified, disown the current job.*\n\n> If the *jobs are currently stopped and the* **AUTO_CONTINUE** *option* is not set, a warning is printed containing information about how to make them running after they have been disowned. If one of the latter two forms is used, the *jobs will automatically be made running,* independent of the setting of the **AUTO_CONTINUE** *option.*",args:"disown [ job ... ]"},echo:{shortDescription:"Write on standard output",description:": Write each *arg on the standard output, with a space separating* each one. If the **-n** *flag is not present, print a newline at the end.* **echo** *recognizes the following escape sequences:*\n\n **\\\\a**\n\n : bell character\n\n **\\\\b**\n\n : backspace\n\n **\\\\c**\n\n : suppress subsequent characters and final newline\n\n **\\\\e**\n\n : escape\n\n **\\\\f**\n\n : form feed\n\n **\\\\n**\n\n : linefeed (newline)\n\n **\\\\r**\n\n : carriage return\n\n **\\\\t**\n\n : horizontal tab\n\n **\\\\v**\n\n : vertical tab\n\n **\\\\\\\\**\n\n : backslash\n\n **\\\\0***NNN*\n\n : character code in octal\n\n **\\\\x***NN*\n\n : character code in hexadecimal\n\n **\\\\u***NNNN*\n\n : unicode character code in hexadecimal\n\n **\\\\U***NNNNNNNN*\n\n : unicode character code in hexadecimal\n\n The **-E** *flag, or the* **BSD_ECHO** *option, can be used to disable* these escape sequences. In the latter case, **-e** *flag can be used to* enable them.\n\n Note that for standards compliance a double dash does not terminate option processing; instead, it is printed directly. However, a single dash does terminate option processing, so the first dash, possibly following options, is not printed, but everything following it is printed as an argument. The single dash behaviour is different from other shells. For a more portable way of printing text, see **printf***, and for a more controllable way of printing text within zsh,* see **print***.*",args:"echo [ -neE ] [ arg ... ]"},echotc:{shortDescription:"Echo terminal capabilities",description:": See the section `The zsh/termcap Module` in *zshmodules(1).*",args:"echotc"},echoti:{shortDescription:"Echo terminal info",description:": See the section `The zsh/terminfo Module` in *zshmodules(1).*",args:"echoti"},emulate:{shortDescription:"Emulate a shell",description:": Without any argument print current emulation mode.\n\n With single argument set up zsh options to emulate the specified shell as much as possible. **csh** *will never be fully emulated.* If the argument is not one of the shells listed above, **zsh** will be used as a default; more precisely, the tests performed on the argument are the same as those used to determine the emulation at startup based on the shell name, see the section COMPATIBILITY in *zsh(1)* . In addition to setting shell options, the command also restores the pristine state of pattern enables, as if all patterns had been enabled using **enable -p***.*\n\n If the **emulate** *command occurs inside a function that has been* marked for execution tracing with **functions -t** *then the* **xtrace** option will be turned on regardless of emulation mode or other options. Note that code executed inside the function by the **.***,* **source***, or* **eval** *commands is not considered to be running directly from the* function, hence does not provoke this behaviour.\n\n If the **-R** *switch is given, all settable options* are reset to their default value corresponding to the specified emulation mode, except for certain options describing the interactive environment; otherwise, only those options likely to cause portability problems in scripts and functions are altered. If the **-L** *switch is given,* the options **LOCAL_OPTIONS***,* **LOCAL_PATTERNS** *and* **LOCAL_TRAPS** will be set as well, causing the effects of the **emulate** *command and any* **setopt***,* **disable -p** *or* **enable -p***, and* **trap** *commands to be local to* the immediately surrounding shell function, if any; normally these options are turned off in all emulation modes except **ksh***. The* **-L** *switch is mutually exclusive with the* use of **-c** *in flags.*\n\n If there is a single argument and the **-l** *switch is given, the* options that would be set or unset (the latter indicated with the prefix `**no***`) are listed.* **-l** *can be combined with* **-L** *or* **-R** *and* the list will be modified in the appropriate way. Note the list does not depend on the current setting of options, i.e. it includes all options that may in principle change, not just those that would actually change.\n\n The *flags may be any of the invocation-time flags described in* the section INVOCATION in *zsh(1),* except that `**-o EMACS***` and `***-o VI***` may not be used. Flags such* as `**+r***`/`***+o RESTRICTED***` may be prohibited in some circumstances.*\n\n If **-c** *arg appears in flags, arg is evaluated while the* requested emulation is temporarily in effect. In this case the emulation mode and all options are restored to their previous values before **emulate** *returns. The* **-R** *switch may precede the name of the shell* to emulate; note this has a meaning distinct from including **-R** *in* *flags.*\n\n Use of **-c** *enables `sticky` emulation mode for functions defined* within the evaluated expression: the emulation mode is associated thereafter with the function so that whenever the function is executed the emulation (respecting the **-R** *switch, if present) and all* options are set (and pattern disables cleared) before entry to the function, and the state is restored after exit. If the function is called when the sticky emulation is already in effect, either within an `**emulate** *shell* **-c***` expression or* within another function with the same sticky emulation, entry and exit from the function do not cause options to be altered (except due to standard processing such as the **LOCAL_OPTIONS** *option). This also* applies to functions marked for autoload within the sticky emulation; the appropriate set of options will be applied at the point the function is loaded as well as when it is run.\n\n For example:\n\n > emulate sh -c 'fni() { setopt cshnullglob; }\n > fno() { fni; }'\n > fno\n\n The two functions **fni** *and* **fno** *are defined with sticky* **sh** emulation. **fno** *is then executed, causing options associated* with emulations to be set to their values in **sh***.* **fno** *then* calls **fni***; because* **fni** *is also marked for sticky* **sh** emulation, no option changes take place on entry to or exit from it. Hence the option **cshnullglob***, turned off by* **sh** *emulation, will* be turned on within **fni** *and remain on return to* **fno***. On exit* from **fno***, the emulation mode and all options will be restored to the* state they were in before entry to the temporary emulation.\n\n The documentation above is typically sufficient for the intended purpose of executing code designed for other shells in a suitable environment. More detailed rules follow.\n\n 1\\.\n\n : The sticky emulation environment provided by `**emulate** *shell* **-c***` is identical to that provided by entry to* a function marked for sticky emulation as a consequence of being defined in such an environment. Hence, for example, the sticky emulation is inherited by subfunctions defined within functions with sticky emulation.\n\n 2\\.\n\n : No change of options takes place on entry to or exit from functions that are not marked for sticky emulation, other than those that would normally take place, even if those functions are called within sticky emulation.\n\n 3\\.\n\n : No special handling is provided for functions marked for **autoload** *nor for functions present in wordcode created by* the **zcompile** *command.*\n\n 4\\.\n\n : The presence or absence of the **-R** *switch to* **emulate** corresponds to different sticky emulation modes, so for example `**emulate sh -c***`, `***emulate -R sh -c***` and `***emulate csh -c***`* are treated as three distinct sticky emulations.\n\n 5\\.\n\n : Difference in shell options supplied in addition to the basic emulation also mean the sticky emulations are different, so for example `**emulate zsh -c***` and `***emulate zsh -o cbases -c***` are* treated as distinct sticky emulations.",args:"emulate [ -lLR ] [ {zsh|sh|ksh|csh} [ flags ... ] ]"},enable:{shortDescription:"Enable shell features",description:': Enable the *named hash table elements, presumably disabled* earlier with **disable***. The default is to enable builtin commands.* The **-a** *option causes* **enable** *to act on regular or global aliases.* The **-s** *option causes* **enable** *to act on suffix aliases.* The **-f** *option causes* **enable** *to act on shell functions. The* **-r** option causes **enable** *to act on reserved words. Without arguments* all enabled hash table elements from the corresponding hash table are printed. With the **-m** *flag the arguments are taken as patterns* (should be quoted) and all hash table elements from the corresponding hash table matching these patterns are enabled. Enabled objects can be disabled with the **disable** *builtin command.*\n\n **enable -p** *reenables patterns disabled with* **disable -p***. Note* that it does not override globbing options; for example, `**enable -p** \\"\\~\\"*` does not cause the pattern character* **\\~** *to be active unless* the **EXTENDED_GLOB** *option is also set. To enable all possible* patterns (so that they may be individually disabled with **disable -p***),* use `**setopt EXTENDED_GLOB KSH_GLOB NO_SH_GLOB***`.*',args:"enable [ -afmprs ] name ..."},eval:{shortDescription:"Execute arguments in shell",description:": Read the arguments as input to the shell and execute the resulting command(s) in the current shell process. The return status is the same as if the commands had been executed directly by the shell; if there are no *args or they contain no commands (i.e. are* an empty string or whitespace) the return status is zero.",args:"eval [ arg ... ]"},exec:{shortDescription:"Replace shell with command",description:": Replace the current shell with *command rather than forking.* If *command is a shell builtin command or a shell function,* the shell executes it, and exits when the command is complete.\n\n With **-c** *clear the environment; with* **-l** *prepend* **-** *to the* **argv\\[0\\]** *string of the command executed (to simulate a login shell);* with **-a** *argv0 set the* **argv\\[0\\]** *string of the command* executed. See the section `Precommand Modifiers` in *zshmisc(1).*\n\n If the option **POSIX_BUILTINS** *is set, command is never* interpreted as a shell builtin command or shell function. This means further precommand modifiers such as **builtin** *and* **noglob** *are also not interpreted within the shell. Hence* *command is always found by searching the command path.*\n\n If *command is omitted but any redirections are specified,* then the redirections will take effect in the current shell.",args:"exec [ -cl ] [ -a argv0 ] [ command [ arg ... ] ]"},exit:{shortDescription:"Exit the shell",description:": Exit the shell with the exit status specified by an arithmetic expression *n; if none* is specified, use the exit status from the last command executed. An EOF condition will also cause the shell to exit, unless the **IGNORE_EOF** *option is set.*\n\n See notes at the end of the section JOBS in *zshmisc(1) for some possibly unexpected interactions* of the **exit** *command with jobs.*",args:"exit [ n ]"},export:{shortDescription:"Export to environment",description:": The specified *names are marked for automatic export* to the environment of subsequently executed commands. Equivalent to **typeset -gx***.* If a parameter specified does not already exist, it is created in the global scope.",args:"export [ name[=value] ... ]"},false:{shortDescription:"Return exit status of 1",description:": Do nothing and return an exit status of 1.",args:"false [ arg ... ]"},fc:{shortDescription:"Fix command",description:'**fc** **-ARWI** *\\[ filename \\]* The **fc** *command controls the interactive history mechanism. Note* that reading and writing of history options is only performed if the shell is interactive. Usually this is detected automatically, but it can be forced by setting the **interactive** *option when starting the* shell.\n\n> The first two forms of this command select a range of events from *first to last from the history list. The arguments first* and *last may be specified as a number or as a string. A negative* number is used as an offset to the current history event number. A string specifies the most recent event beginning with the given string. All substitutions *old***=***new, if any, are then performed on the* text of the events.\n>\n> The range of events selected by numbers can be narrowed further by the following flags.\n>\n> **-I**\n>\n> : restricts to only internal events (not from **\\$HISTFILE***)*\n>\n> **-L**\n>\n> : restricts to only local events (not from other shells, see **SHARE_HISTORY** *in zshoptions(1) \\-- note that* **\\$HISTFILE** *is* considered local when read at startup)\n>\n> **-m**\n>\n> : takes the first argument as a pattern (which should be quoted) and only the history events matching this pattern are considered\n>\n> If *first is not specified, it will be set to -1 (the most recent* event), or to -16 if the **-l** *flag is given.* If *last is not specified, it will be set to first,* or to -1 if the **-l** *flag is given.* However, if the current event has added entries to the history with `**print -s***` or `***fc -R***`, then the default last for* **-l** includes all new history entries since the current event began.\n>\n> When the **-l** *flag is given, the resulting events are listed on* standard output. Otherwise the editor program specified by **-e** *ename* is invoked on a file containing these history events. If **-e** *is not given, the* value of the parameter **FCEDIT** *is used; if that is not set the value of* the parameter **EDITOR** *is used; if that is not set a builtin default,* usually `**vi***` is used. If ename is `***-***`, no editor is invoked.* When editing is complete, the edited command is executed.\n>\n> The flag `**-s***` is equivalent to `***-e -***`.* The flag **-r** *reverses the order of the events and the* flag **-n** *suppresses event numbers when listing.*\n>\n> Also when listing,\n>\n> **-d**\n>\n> : prints timestamps for each event\n>\n> **-f**\n>\n> : prints full time-date stamps in the US `*MM***/***DD***/***YY hh***:***mm` format*\n>\n> **-E**\n>\n> : prints full time-date stamps in the European `*dd***.***mm***.***yyyy hh***:***mm` format*\n>\n> **-i**\n>\n> : prints full time-date stamps in ISO8601 `*yyyy***-***mm***-***dd hh***:***mm` format*\n>\n> **-t** *fmt*\n>\n> : prints time and date stamps in the given format; *fmt is formatted with the strftime function with the zsh extensions* described for the **%D{***string***}** *prompt format in* the section EXPANSION OF PROMPT SEQUENCES in *zshmisc(1). The resulting formatted string must be* no more than 256 characters or will not be printed\n>\n> \x3c!-- --\x3e\n>\n> **-D**\n>\n> : prints elapsed times; may be combined with one of the options above\n>\n> `**fc -p***` pushes the current history list onto a stack and switches to a* new history list. If the **-a** *option is also specified, this history list* will be automatically popped when the current function scope is exited, which is a much better solution than creating a trap function to call `**fc -P***`* manually. If no arguments are specified, the history list is left empty, **\\$HISTFILE** *is unset, and* **\\$HISTSIZE** *&* **\\$SAVEHIST** *are set to their* default values. If one argument is given, **\\$HISTFILE** *is set to that* filename, **\\$HISTSIZE** *&* **\\$SAVEHIST** *are left unchanged, and the history* file is read in (if it exists) to initialize the new list. If a second argument is specified, **\\$HISTSIZE** *&* **\\$SAVEHIST** *are instead set to the* single specified numeric value. Finally, if a third argument is specified, **\\$SAVEHIST** *is set to a separate value from* **\\$HISTSIZE***. You are free to* change these environment values for the new history list however you desire in order to manipulate the new history list.\n>\n> `**fc -P***` pops the history list back to an older list saved by `***fc -p***`.* The current list is saved to its **\\$HISTFILE** *before it is destroyed* (assuming that **\\$HISTFILE** *and* **\\$SAVEHIST** *are set appropriately, of* course). The values of **\\$HISTFILE***,* **\\$HISTSIZE***, and* **\\$SAVEHIST** *are* restored to the values they had when `**fc -p***` was called. Note that this* restoration can conflict with making these variables \\"local\\", so your best bet is to avoid local declarations for these variables in functions that use `**fc -p***`. The one other guaranteed-safe combination is declaring these* variables to be local at the top of your function and using the automatic option (**-a***) with `***fc -p***`. Finally, note that it is legal to manually* pop a push marked for automatic popping if you need to do so before the function exits.\n>\n> `**fc -R***` reads the history from the given file,* `**fc -W***` writes the history out to the given file,* and `**fc -A***` appends the history out to the given file.* If no filename is specified, the **\\$HISTFILE** *is assumed.* If the **-I** *option is added to* **-R***, only those events that are* not already contained within the internal history list are added. If the **-I** *option is added to* **-A** *or* **-W***, only those* events that are new since last incremental append/write to the history file are appended/written. In any case, the created file will have no more than **\\$SAVEHIST** entries.',args:"fc -P"},fg:{shortDescription:"Put a job in the foreground",description:"*job \\...* Bring each specified *job in turn to the foreground.* If no *job is specified, resume the current job.*",args:"fg [ job ... ]"},float:{shortDescription:"Floating point arithmetic",description:": Equivalent to **typeset -E***, except that options irrelevant to floating* point numbers are not permitted.",args:"float [ {+|-}Hghlprtux ] [ {+|-}EFLRZ [ n ] ] [ name[=value] ... ]"},functions:{shortDescription:"List functions",description:"**functions -c** *oldfn newfn*\n\n**functions -M** *\\[***-s***\\] mathfn \\[ min \\[ max \\[ shellfn \\] \\] \\]*\n\n**functions -M** *\\[* **-m** *pattern \\... \\]*\n\n**functions +M** *\\[* **-m** *\\] mathfn \\...* Equivalent to **typeset -f***, with the exception of the* **-c***,* **-x***,* **-M** *and* **-W** *options. For* **functions -u** *and* **functions -U***,* see **autoload***, which provides additional options. For* **functions -t** and **functions -T***, see* **typeset -f***.*\n\n> The **-x** *option indicates that any functions output will have* each leading tab for indentation, added by the shell to show syntactic structure, expanded to the given number *num of spaces. num* can also be 0 to suppress all indentation.\n>\n> The **-W** *option turns on the option* **WARN_NESTED_VAR** *for the named* function or functions only. The option is turned off at the start of nested functions (apart from anonoymous functions) unless the called function also has the **-W** *attribute.*\n>\n> The **-c** *option causes oldfn to be copied to newfn. The* copy is efficiently handled internally by reference counting. If *oldfn was marked for autoload it is first loaded and if this* fails the copy fails. Either function may subsequently be redefined without affecting the other. A typical idiom is that *oldfn is the* name of a library shell function which is then redefined to call **newfn***, thereby installing a modified version of the function.*\n>\n> *The* **-M** *and* **+M** *flags*\n>\n> Use of the **-M** *option may not be combined with any of the options* handled by **typeset -f***.*\n>\n> **functions -M** *mathfn defines mathfn as the name of* a mathematical function recognised in all forms of arithmetical expressions; see the section `Arithmetic Evaluation` in *zshmisc(1). By default mathfn may take* any number of comma-separated arguments. If *min is given,* it must have exactly *min args; if min and max are* both given, it must have at least *min and at most max* args. *max may be -1 to indicate that there is no upper limit.*\n>\n> By default the function is implemented by a shell function of the same name; if *shellfn is specified it gives the name of the corresponding* shell function while *mathfn remains the name used in arithmetical* expressions. The name of the function in **\\$0** *is mathfn (not* *shellfn as would usually be the case), provided the option* **FUNCTION_ARGZERO** *is in effect. The positional parameters in the shell* function correspond to the arguments of the mathematical function call.\n>\n> The result of the last arithmetical expression evaluated inside the shell function gives the result of the mathematical function. This is not limited to arithmetic substitutions of the form **\\$((***\\...***))***,* but also includes arithmetical expressions evaluated in any other way, including by the **let** *builtin,* by **((***\\...***))** *statements,* and even by the **return** *builtin* and by array subscripts. Therefore, care must be taken not to use syntactical constructs that perform arithmetic evaluation after evaluating what is to be the result of the function. For example:\n>\n> > # WRONG\n> > zmath_cube() {\n> > (( $1 * $1 * $1 ))\n> > return 0\n> > }\n> > functions -M cube 1 1 zmath_cube\n> > print $(( cube(3) ))\n>\n> This will print `**0***` because of the* **return***.*\n>\n> Commenting the **return** *out would lead to a different problem: the* **((***\\...***))** *statement would become* the last statement in the function, so the *return status (***\\$?***) of the* function would be non-zero (indicating failure) whenever the *arithmetic* result *of the function would happen to be zero (numerically):*\n>\n> > # WRONG\n> > zmath_cube() {\n> > (( $1 * $1 * $1 ))\n> > }\n> > functions -M cube 1 1 zmath_cube\n> > print $(( cube(0) ))\n>\n> Instead, the **true** *builtin can be used:*\n>\n> > # RIGHT\n> > zmath_cube() {\n> > (( $1 * $1 * $1 ))\n> > true\n> > }\n> > functions -M cube 1 1 zmath_cube\n> > print $(( cube(3) ))\n>\n> If the additional option **-s** *is given to* **functions -M***, the* argument to the function is a single string: anything between the opening and matching closing parenthesis is passed to the function as a single argument, even if it includes commas or white space. The minimum and maximum argument specifiers must therefore be 1 if given. An empty argument list is passed as a zero-length string. Thus, the following string function takes a single argument, including the commas, and prints 11:\n>\n> > stringfn() { (( $#1 )); true }\n> > functions -Ms stringfn\n> > print $(( stringfn(foo,bar,rod) ))\n>\n> **functions -M** *with no arguments lists all such user-defined functions in* the same form as a definition. With the additional option **-m** *and* a list of arguments, all functions whose *mathfn matches one of* the pattern arguments are listed.\n>\n> **function +M** *removes the list of mathematical functions; with the* additional option **-m** *the arguments are treated as patterns and* all functions whose *mathfn matches the pattern are removed. Note* that the shell function implementing the behaviour is not removed (regardless of whether its name coincides with *mathfn).*",args:"functions [ {+|-}UkmtTuWz ] [ -x num ] [ name ... ]"},getcap:{shortDescription:"Get capabilities",description:": See the section `The zsh/cap Module` in *zshmodules(1).*",args:"getcap"},getln:{shortDescription:"Get line from buffer",description:": Read the top value from the buffer stack and put it in the shell parameter *name. Equivalent to* **read -zr***.*",args:"getln [ -AclneE ] name ..."},getopts:{shortDescription:"Parse positional parameters",description:": Checks the *args for legal options. If the args are omitted,* use the positional parameters. A valid option argument begins with a `**+***` or a `***-***`. An argument not beginning with* a `**+***` or a `***-***`, or the argument `***--***`, ends the options.* Note that a single `**-***` is not considered a valid option argument.* *optstring contains the letters that* **getopts** recognizes. If a letter is followed by a `**:***`, that option* requires an argument. The options can be separated from the argument by blanks.\n\n Each time it is invoked, **getopts** *places the option letter it finds* in the shell parameter *name, prepended with a `***+***` when* *arg begins with a `***+***`. The index of the next arg* is stored in **OPTIND***. The option argument, if any,* is stored in **OPTARG***.*\n\n The first option to be examined may be changed by explicitly assigning to **OPTIND***.* **OPTIND** *has an initial value of* **1***, and is* normally set to **1** *upon entry to a shell function and restored* upon exit. (The **POSIX_BUILTINS** *option disables this, and also changes* the way the value is calculated to match other shells.) **OPTARG** is not reset and retains its value from the most recent call to **getopts***. If either of* **OPTIND** *or* **OPTARG** *is explicitly* unset, it remains unset, and the index or option argument is not stored. The option itself is still stored in *name in this case.*\n\n A leading `**:***` in optstring causes* **getopts** *to store the* letter of any invalid option in **OPTARG***, and to set name to* `**?***` for an unknown option and to `***:***` when a required argument is* missing. Otherwise, **getopts** *sets name to `***?***` and prints* an error message when an option is invalid. The exit status is nonzero when there are no more options.",args:"getopts optstring name [ arg ... ]"},hash:{shortDescription:"Remember command locations",description:": **hash** *can be used to directly modify the contents of the command* hash table, and the named directory hash table. Normally one would modify these tables by modifying one\\'s **PATH** (for the command hash table) or by creating appropriate shell parameters (for the named directory hash table). The choice of hash table to work on is determined by the **-d** *option;* without the option the command hash table is used, and with the option the named directory hash table is used.\n\n A command *name starting with a* **/** *is never hashed, whether by* explicit use of the **hash** *command or otherwise. Such a command* is always found by direct look up in the file system.\n\n Given no arguments, and neither the **-r** *or* **-f** *options,* the selected hash table will be listed in full.\n\n The **-r** *option causes the selected hash table to be emptied.* It will be subsequently rebuilt in the normal fashion. The **-f** *option causes the selected hash table to be fully* rebuilt immediately. For the command hash table this hashes all the absolute directories in the **PATH***,* and for the named directory hash table this adds all users\\' home directories. These two options cannot be used with any arguments.\n\n The **-m** *option causes the arguments to be taken as patterns* (which should be quoted) and the elements of the hash table matching those patterns are printed. This is the only way to display a limited selection of hash table elements.\n\n For each *name with a corresponding value, put `name` in* the selected hash table, associating it with the pathname `*value`.* In the command hash table, this means that whenever `*name` is used as a command argument, the shell will try* to execute the file given by `*value`.* In the named directory hash table, this means that `*value` may be referred to as `***\\~***name`.*\n\n For each *name with no* corresponding *value, attempt to add name to the hash table,* checking what the appropriate **value** *is in the normal manner for* that hash table. If an appropriate **value** *can\\'t be found, then* the hash table will be unchanged.\n\n The **-v** *option causes hash table entries to be listed as they are* added by explicit specification. If has no effect if used with **-f***.*\n\n If the **-L** *flag is present, then each hash table entry is printed in* the form of a call to hash.",args:"hash [ -Ldfmrv ] [ name[=value] ] ..."},history:{shortDescription:"Command history",description:": Same as **fc -l***.*",args:"history"},integer:{shortDescription:"Integer arithmetic",description:": Equivalent to **typeset -i***, except that options irrelevant to* integers are not permitted.",args:"integer [ {+|-}Hghlprtux ] [ {+|-}LRZi [ n ] ] [ name[=value] ... ]"},jobs:{shortDescription:"List active jobs",description:'**jobs -Z** *string* Lists information about each given job, or all jobs if *job is omitted. The* **-l** *flag lists process* IDs, and the **-p** *flag lists process groups.* If the **-r** *flag is specified only running jobs will be listed* and if the **-s** *flag is given only stopped jobs are shown.* If the **-d** *flag is given, the directory from which the job was* started (which may not be the current directory of the job) will also be shown.\n\n> The **-Z** *option replaces the shell\\\'s argument and environment space with* the given string, truncated if necessary to fit. This will normally be visible in **ps** *(ps(1)) listings. This feature is typically* used by daemons, to indicate their state.\n>\n> Full job control is only available in the top-level interactive shell, not in commands run in the left hand side of pipelines or within the **(***\\...***)** *construct. However, a snapshot* of the job state at that point is taken, so it is still possible to use the **jobs** *builtin, or any parameter providing job information.* This gives information about the state of jobs at the point the subshell was created. If background processes are created within the subshell, then instead information about those processes is provided.\n>\n> For example,\n>\n> > sleep 10 & # Job in background\n> > ( # Shell forks\n> > jobs # Shows information about "sleep 10 &"\n> > sleep 5 & # Process in background (no job control)\n> > jobs # Shows information about "sleep 5 &"\n> > )',args:"jobs [ -dlprs ] [ job ... ]"},kill:{shortDescription:"Send a signal to a process",description:"**kill** **-l** *\\[ sig \\... \\]* Sends either **SIGTERM** *or the specified signal to the given* jobs or processes. Signals are given by number or by names, with or without the `**SIG***`* prefix. If the signal being sent is not `**KILL***` or `***CONT***`, then the job* will be sent a `**CONT***` signal if it is stopped.* The argument *job can be the process ID of a job* not in the job list. In the second form, **kill -l***, if sig is not* specified the signal names are listed. Otherwise, for each *sig that is a name, the corresponding signal number is* listed. For each *sig that is a signal number or a number* representing the exit status of a process which was terminated or stopped by a signal the name of the signal is printed.\n\n> On some systems, alternative signal names are allowed for a few signals. Typical examples are **SIGCHLD** *and* **SIGCLD** *or* **SIGPOLL** *and* **SIGIO***, assuming they correspond to the same signal number.* **kill** -l *will only list the preferred form, however* **kill -l** *alt will* show if the alternative form corresponds to a signal number. For example, under Linux **kill -l IO** *and* **kill -l POLL** *both output 29, hence* **kill -IO** *and* **kill -POLL** *have the same effect.*\n>\n> Many systems will allow process IDs to be negative to kill a process group or zero to kill the current process group.",args:"kill [ -s signal_name | -n signal_number | -sig ] job ..."},let:{shortDescription:"Evaluate arithmetic expression",description:": Evaluate each *arg as an arithmetic expression.* See the section `Arithmetic Evaluation` in *zshmisc(1)* for a description of arithmetic expressions. The exit status is 0 if the value of the last expression is nonzero, 1 if it is zero, and 2 if an error occurred.",args:"let arg ..."},limit:{shortDescription:"Set or display resource limits",description:": Set or display resource limits. Unless the **-s** *flag is given,* the limit applies only the children of the shell. If **-s** *is* given without other arguments, the resource limits of the current shell is set to the previously set resource limits of the children.\n\n If *limit is not specified, print the current limit placed* on *resource, otherwise* set the limit to the specified value. If the **-h** *flag* is given, use hard limits instead of soft limits. If no *resource is given, print all limits.*\n\n When looping over multiple resources, the shell will abort immediately if it detects a badly formed argument. However, if it fails to set a limit for some other reason it will continue trying to set the remaining limits.\n\n *resource can be one of:*\n\n **addressspace**\n\n : Maximum amount of address space used.\n\n **aiomemorylocked**\n\n : Maximum amount of memory locked in RAM for AIO operations.\n\n **aiooperations**\n\n : Maximum number of AIO operations.\n\n **cachedthreads**\n\n : Maximum number of cached threads.\n\n **coredumpsize**\n\n : Maximum size of a core dump.\n\n **cputime**\n\n : Maximum CPU seconds per process.\n\n **datasize**\n\n : Maximum data size (including stack) for each process.\n\n **descriptors**\n\n : Maximum value for a file descriptor.\n\n **filesize**\n\n : Largest single file allowed.\n\n **kqueues**\n\n : Maximum number of kqueues allocated.\n\n **maxproc**\n\n : Maximum number of processes.\n\n **maxpthreads**\n\n : Maximum number of threads per process.\n\n **memorylocked**\n\n : Maximum amount of memory locked in RAM.\n\n **memoryuse**\n\n : Maximum resident set size.\n\n **msgqueue**\n\n : Maximum number of bytes in POSIX message queues.\n\n **posixlocks**\n\n : Maximum number of POSIX locks per user.\n\n **pseudoterminals**\n\n : Maximum number of pseudo-terminals.\n\n **resident**\n\n : Maximum resident set size.\n\n **sigpending**\n\n : Maximum number of pending signals.\n\n **sockbufsize**\n\n : Maximum size of all socket buffers.\n\n **stacksize**\n\n : Maximum stack size for each process.\n\n **swapsize**\n\n : Maximum amount of swap used.\n\n **vmemorysize**\n\n : Maximum amount of virtual memory.\n\n Which of these resource limits are available depends on the system. *resource can be abbreviated to any unambiguous prefix. It* can also be an integer, which corresponds to the integer defined for the resource by the operating system.\n\n If argument corresponds to a number which is out of the range of the resources configured into the shell, the shell will try to read or write the limit anyway, and will report an error if this fails. As the shell does not store such resources internally, an attempt to set the limit will fail unless the **-s** *option is present.*\n\n *limit is a number, with an optional scaling factor, as follows:*\n\n *n***h**\n\n : hours\n\n *n***k**\n\n : kilobytes (default)\n\n *n***m**\n\n : megabytes or minutes\n\n *n***g**\n\n : gigabytes\n\n \\[*mm***:***\\]ss*\n\n : minutes and seconds\n\n The **limit** *command is not made available by default when the* shell starts in a mode emulating another shell. It can be made available with the command `**zmodload -F zsh/rlimits b:limit***`.*",args:"limit [ -hs ] [ resource [ limit ] ] ..."},local:{shortDescription:"Create a local variable",description:": Same as **typeset***, except that the options* **-g***, and* **-f** *are not permitted. In this case the* **-x** *option does not force* the use of **-g***, i.e. exported variables will be local to functions.*",args:"local [ {+|-}AHUahlprtux ] [ {+|-}EFLRZi [ n ] ] [ name[=value] ... ]"},logout:{shortDescription:"Exit the shell",description:": Same as **exit***, except that it only works in a login shell.*",args:"logout [ n ]"},noglob:{shortDescription:"Disable filename expansion",description:": See the section `Precommand Modifiers` in *zshmisc(1).*",args:"noglob simple command"},popd:{shortDescription:"Remove directory from stack",description:": Remove an entry from the directory stack, and perform a **cd** *to* the new top directory. With no argument, the current top entry is removed. An argument of the form `**+***n` identifies a stack* entry by counting from the left of the list shown by the **dirs** *command,* starting with zero. An argument of the form **-***n counts from the right.* If the **PUSHD_MINUS** *option is set, the meanings of `***+***` and* `**-***` in this context are swapped.*\n\n If the **-q** *(quiet) option is specified, the hook function* **chpwd** and the functions in the array **\\$chpwd_functions** *are not called,* and the new directory stack is not printed. This is useful for calls to **popd** *that do not change the environment seen by an interactive user.*",args:"popd [ -q ] [ {+|-}n ]"},print:{shortDescription:"Print arguments",description:'*\\[* **-v** *name \\] \\[* **-xX** *tabstop \\] \\[* **-R** *\\[* **-en** *\\]\\] \\[ arg \\... \\]* With the `**-f***` option the arguments are printed as described by* **printf***.* With no flags or with the flag `**-***`, the arguments are printed on* the standard output as described by **echo***, with the following differences:* the escape sequence `**\\\\M-***x` (or `***\\\\M***x`) metafies the character* *x (sets the highest bit),* `**\\\\C-***x` (or `***\\\\C***x`) produces a control character* (`**\\\\C-@***` and `***\\\\C-?***` give the characters NULL and delete),* a character code in octal is represented by `**\\\\***NNN`* (instead of `**\\\\0***NNN`),* and `**\\\\E***` is a synonym for `***\\\\e***`.* Finally, if not in an escape sequence, `**\\\\***` escapes the following character and is not printed.*\n\n> **-a** Print arguments with the column incrementing first. Only useful with the **-c** *and* **-C** *options.*\n>\n> **-b**\n>\n> : Recognize all the escape sequences defined for the **bindkey** *command,* see the section `Zle Builtins` in *zshzle(1).*\n>\n> **-c**\n>\n> : Print the arguments in columns. Unless **-a** *is also given, arguments are* printed with the row incrementing first.\n>\n> **-C** *cols*\n>\n> : Print the arguments in *cols columns. Unless* **-a** *is also given,* arguments are printed with the row incrementing first.\n>\n> **-D**\n>\n> : Treat the arguments as paths, replacing directory prefixes with **\\~** expressions corresponding to directory names, as appropriate.\n>\n> **-i**\n>\n> : If given together with **-o** *or* **-O***, sorting is performed* case-independently.\n>\n> **-l**\n>\n> : Print the arguments separated by newlines instead of spaces. Note: if the list of arguments is empty, **print -l** *will still output one empty* line. To print a possibly-empty list of arguments one per line, use **print -C1***, as in `***print -rC1 \\-- \\"\\$list\\[@\\]\\"***`.*\n>\n> **-m**\n>\n> : Take the first argument as a pattern (should be quoted), and remove it from the argument list together with subsequent arguments that do not match this pattern.\n>\n> **-n**\n>\n> : Do not add a newline to the output.\n>\n> **-N**\n>\n> : Print the arguments separated and terminated by nulls. Again, **print -rNC1 \\-- \\"\\$list\\[@\\]\\"** *is a canonical way to print an* arbitrary list as null-delimited records.\n>\n> **-o**\n>\n> : Print the arguments sorted in ascending order.\n>\n> **-O**\n>\n> : Print the arguments sorted in descending order.\n>\n> **-p**\n>\n> : Print the arguments to the input of the coprocess.\n>\n> **-P**\n>\n> : Perform prompt expansion (see EXPANSION OF PROMPT SEQUENCES in *zshmisc(1)).* In combination with `**-f***`,* prompt escape sequences are parsed only within interpolated arguments, not within the format string.\n>\n> **-r**\n>\n> : Ignore the escape conventions of **echo***.*\n>\n> **-R**\n>\n> : Emulate the BSD **echo** *command, which does not process escape sequences* unless the **-e** *flag is given. The* **-n** *flag suppresses the trailing* newline. Only the **-e** *and* **-n** *flags are recognized after* **-R***; all other arguments and options are printed.*\n>\n> **-s**\n>\n> : Place the results in the history list instead of on the standard output. Each argument to the **print** *command is treated as a single word in the* history, regardless of its content.\n>\n> **-S**\n>\n> : Place the results in the history list instead of on the standard output. In this case only a single argument is allowed; it will be split into words as if it were a full shell command line. The effect is similar to reading the line from a history file with the **HIST_LEX_WORDS** *option active.*\n>\n> **-u** *n*\n>\n> : Print the arguments to file descriptor *n.*\n>\n> **-v** *name*\n>\n> : Store the printed arguments as the value of the parameter *name.*\n>\n> **-x** *tab-stop*\n>\n> : Expand leading tabs on each line of output in the printed string assuming a tab stop every *tab-stop characters. This is appropriate* for formatting code that may be indented with tabs. Note that leading tabs of any argument to print, not just the first, are expanded, even if **print** *is using spaces to separate arguments (the column count* is maintained across arguments but may be incorrect on output owing to previous unexpanded tabs).\n>\n> The start of the output of each print command is assumed to be aligned with a tab stop. Widths of multibyte characters are handled if the option **MULTIBYTE** *is in effect. This option is ignored if other* formatting options are in effect, namely column alignment or **printf** *style, or if output is to a special location such as shell* history or the command line editor.\n>\n> **-X** *tab-stop*\n>\n> : This is similar to **-x***, except that all tabs in the printed string* are expanded. This is appropriate if tabs in the arguments are being used to produce a table format.\n>\n> **-z**\n>\n> : Push the arguments onto the editing buffer stack, separated by spaces.\n>\n> If any of `**-m***`, `***-o***` or `***-O***` are used in combination with* `**-f***` and there are no arguments (after the removal process in the* case of `**-m***`) then nothing is printed.*',args:"print [ -abcDilmnNoOpPrsSz ] [ -u n ] [ -f format ] [ -C cols ]"},printf:{shortDescription:"Format and print data",description:": Print the arguments according to the format specification. Formatting rules are the same as used in C. The same escape sequences as for **echo** are recognised in the format. All C conversion specifications ending in one of **csdiouxXeEfgGn** *are handled. In addition to this, `***%b***` can be* used instead of `**%s***` to cause escape sequences in the argument to be* recognised and `**%q***` can be used to quote the argument in such a way* that allows it to be reused as shell input. With the numeric format specifiers, if the corresponding argument starts with a quote character, the numeric value of the following character is used as the number to print; otherwise the argument is evaluated as an arithmetic expression. See the section `Arithmetic Evaluation` in *zshmisc(1)* for a description of arithmetic expressions. With `**%n***`, the corresponding argument is taken as an* identifier which is created as an integer parameter.\n\n Normally, conversion specifications are applied to each argument in order but they can explicitly specify the *nth argument is to be used by* replacing `**%***` by `***%***n***\\$***` and `***\\****` by `***\\****n***\\$***`.* It is recommended that you do not mix references of this explicit style with the normal style and the handling of such mixed styles may be subject to future change.\n\n If arguments remain unused after formatting, the format string is reused until all arguments have been consumed. With the **print** *builtin, this* can be suppressed by using the **-r** *option. If more arguments are* required by the format than have been specified, the behaviour is as if zero or an empty string had been specified as the argument.\n\n The **-v** *option causes the output to be stored as the value of the* parameter *name, instead of printed. If name is an array and* the format string is reused when consuming arguments then one array element will be used for each use of the format string.",args:"printf [ -v name ] format [ arg ... ]"},pushd:{shortDescription:"Add directory to stack",description:"> The third form of **pushd** *changes directory by rotating the* directory list. An argument of the form `**+***n` identifies a stack* entry by counting from the left of the list shown by the **dirs** command, starting with zero. An argument of the form `**-***n` counts* from the right. If the **PUSHD_MINUS** *option is set, the meanings* of `**+***` and `***-***` in this context are swapped.*\n>\n> If the **-q** *(quiet) option is specified, the hook function* **chpwd** and the functions in the array **\\$chpwd_functions** *are not called,* and the new directory stack is not printed. This is useful for calls to **pushd** *that do not change the environment seen by an interactive user.*\n>\n> If the option **-q** *is not specified and the shell option* **PUSHD_SILENT** is not set, the directory stack will be printed after a **pushd** *is* performed.\n>\n> The options **-s***,* **-L** *and* **-P** *have the same meanings as for the* **cd** *builtin.*",args:"pushd [ -qsLP ] [ arg ]\n\npushd [ -qsLP ] old new\n\npushd [ -qsLP ] {+|-}n Change the current directory, and push the old\ncurrent directory onto the directory stack. In the first form, change\nthe current directory to arg. If arg is not specified, change to the\nsecond directory on the stack (that is, exchange the top two entries),\nor change to $HOME if the PUSHD_TO_HOME option is set or if there is\nonly one entry on the stack. Otherwise, arg is interpreted as it would\nbe by cd. The meaning of old and new in the second form is also the same\nas for cd."},pushln:{shortDescription:"Push arguments onto the buffer",description:": Equivalent to **print -nz***.*",args:"pushln [ arg ... ]"},pwd:{shortDescription:"Print working directory",description:": Print the absolute pathname of the current working directory. If the **-r** *or the* **-P** *flag is specified, or the* **CHASE_LINKS** option is set and the **-L** *flag is not given, the printed path will not* contain symbolic links.",args:"pwd [ -rLP ]"},r:{shortDescription:"Re-execute command",description:": Same as **fc -e -***.*",args:"r"},read:{shortDescription:"Read a line from input",description:"*\\[* **-u** *n \\] \\[ \\[name\\]\\[***?***prompt\\] \\] \\[ name \\... \\]* Read one line and break it into fields using the characters in **\\$IFS** *as separators, except as noted below.* The first field is assigned to the first *name, the second field* to the second *name, etc., with leftover* fields assigned to the last *name.* If *name is omitted then* **REPLY** *is used for scalars and* **reply** *for arrays.*\n\n> **-r** Raw mode: a `**\\\\***` at the end of a line does not signify line* continuation and backslashes in the line don\\'t quote the following character and are not removed.\n>\n> **-s**\n>\n> : Don\\'t echo back characters if reading from the terminal.\n>\n> **-q**\n>\n> : Read only one character from the terminal and set *name to* `**y***` if this character was `***y***` or `***Y***` and to `***n***` otherwise.* With this flag set the return status is zero only if the character was `**y***` or `***Y***`. This option may be used with a timeout (see* **-t***); if* the read times out, or encounters end of file, status 2 is returned. Input is read from the terminal unless one of **-u** *or* **-p** *is present. This option* may also be used within zle widgets.\n>\n> **-k** *\\[ num \\]*\n>\n> : Read only one (or *num) characters. All are assigned to the first* *name, without word splitting. This flag is ignored when* **-q** *is* present. Input is read from the terminal unless one of **-u** *or* **-p** is present. This option may also be used within zle widgets.\n>\n> Note that despite the mnemonic `key` this option does read full characters, which may consist of multiple bytes if the option **MULTIBYTE** *is set.*\n>\n> **-z**\n>\n> : Read one entry from the editor buffer stack and assign it to the first *name, without word splitting. Text is pushed onto the stack with* `**print -z***` or with* **push-line** *from the line editor (see* *zshzle(1)). This flag is ignored when the* **-k** *or* **-q** *flags are present.*\n>\n> **-e**\n>\n> **-E** The input read is printed (echoed) to the standard output. If the **-e** flag is used, no input is assigned to the parameters.\n>\n> **-A**\n>\n> : The first *name is taken as the name of an array and all words are* assigned to it.\n>\n> **-c**\n>\n> **-l** These flags are allowed only if called inside a function used for completion (specified with the **-K** *flag to* **compctl***). If the* **-c** *flag is given, the words of the* current command are read. If the **-l** *flag is given, the whole* line is assigned as a scalar. If both flags are present, **-l** is used and **-c** *is ignored.*\n>\n> **-n**\n>\n> : Together with **-c***, the number of the word the cursor is on is* read. With **-l***, the index of the character the cursor is on is* read. Note that the command name is word number 1, not word 0, and that when the cursor is at the end of the line, its character index is the length of the line plus one.\n>\n> **-u** *n*\n>\n> : Input is read from file descriptor *n.*\n>\n> **-p**\n>\n> : Input is read from the coprocess.\n>\n> **-d** *delim*\n>\n> : Input is terminated by the first character of *delim instead of* by newline.\n>\n> **-t** *\\[ num \\]*\n>\n> : Test if input is available before attempting to read. If *num* is present, it must begin with a digit and will be evaluated to give a number of seconds, which may be a floating point number; in this case the read times out if input is not available within this time. If *num is not present, it is taken to be zero, so that* **read** *returns immediately if no input is available.* If no input is available, return status 1 and do not set any variables. This option is not available when reading from the editor buffer with **-z***, when called from within completion with* **-c** *or* **-l***, with* **-q** *which clears the input queue before reading, or within zle where* other mechanisms should be used to test for input. Note that read does not attempt to alter the input processing mode. The default mode is canonical input, in which an entire line is read at a time, so usually `**read -t***` will not read anything until an entire line has* been typed. However, when reading from the terminal with **-k** input is processed one key at a time; in this case, only availability of the first character is tested, so that e.g. `**read -t -k 2***` can still* block on the second character. Use two instances of `**read -t -k***` if* this is not what is wanted.\n>\n> If the first argument contains a `**?***`, the remainder of this* word is used as a *prompt on standard error when the shell* is interactive.\n>\n> The value (exit status) of **read** *is 1 when an end-of-file is* encountered, or when **-c** *or* **-l** *is present and the command is* not called from a **compctl** *function, or as described for* **-q***.* Otherwise the value is 0.\n>\n> The behavior of some combinations of the **-k***,* **-p***,* **-q***,* **-u** and **-z** *flags is undefined. Presently* **-q** *cancels all the others,* **-p** *cancels* **-u***,* **-k** *cancels* **-z***, and otherwise* **-z** cancels both **-p** *and* **-u***.*\n>\n> The **-c** *or* **-l** *flags cancel any and all of* **-kpquz***.*",args:"read [ -rszpqAclneE ] [ -t [ num ] ] [ -k [ num ] ] [ -d delim ]"},readonly:{shortDescription:"Mark variables as read-only",description:": Same as **typeset -r***. With the* **POSIX_BUILTINS** *option set, same* as **typeset -gr***.*",args:"readonly"},rehash:{shortDescription:"Recompute command hash table",description:": Same as **hash -r***.*",args:"rehash"},return:{shortDescription:"Return from a function",description:': Causes a shell function or `**.***` script to return to* the invoking script with the return status specified by an arithmetic expression *n.* For example, the following prints `**42***`:*\n\n > () { integer foo=40; return "foo + 2" }\n > echo $?\n\n If *n* is omitted, the return status is that of the last command executed.\n\n If **return** *was executed from a trap in a* **TRAP***NAL function,* the effect is different for zero and non-zero return status. With zero status (or after an implicit return at the end of the trap), the shell will return to whatever it was previously processing; with a non-zero status, the shell will behave as interrupted except that the return status of the trap is retained. Note that the numeric value of the signal which caused the trap is passed as the first argument, so the statement `**return \\"128+\\$1\\"***` will return the same status as if the signal* had not been trapped.',args:"return [ n ]"},sched:{shortDescription:"Schedule commands",description:": See the section `The zsh/sched Module` in *zshmodules(1).*",args:"sched"},set:{shortDescription:"Set shell options",description:"*\\[ arg \\... \\]* Set the options for the shell and/or set the positional parameters, or declare and set an array. If the **-s** *option is given, it causes the* specified arguments to be sorted before assigning them to the positional parameters (or to the array *name if* **-A** *is used). With* **+s** sort arguments in descending order. For the meaning of the other flags, see *zshoptions(1). Flags may be specified by name using the* **-o** *option. If no option* name is supplied with **-o***, the current option states are printed: see* the description of **setopt** *below for more information on the format.* With **+o** *they are printed in a form that can be used as input* to the shell.\n\n> If the **-A** *flag is specified, name is set to an array containing* the given *args; if no name is specified, all arrays are printed* together with their values.\n>\n> If **+A** *is used and name is an array, the* given arguments will replace the initial elements of that array; if no *name is specified, all arrays are printed without their values.*\n>\n> The behaviour of arguments after **-A** *name or* **+A** *name* depends on whether the option **KSH_ARRAYS** *is set. If it is not set, all* arguments following *name are treated as values for the array,* regardless of their form. If the option is set, normal option processing continues at that point; only regular arguments are treated as values for the array. This means that\n>\n> > set -A array -x -- foo\n>\n> sets **array** *to `***-x -- foo***` if* **KSH_ARRAYS** *is not set, but sets* the array to **foo** *and turns on the option `***-x***` if it is set.*\n>\n> If the **-A** *flag is not present, but there are arguments beyond the* options, the positional parameters are set. If the option list (if any) is terminated by `**--***`, and there are no further arguments, the* positional parameters will be unset.\n>\n> If no arguments and no `**--***` are given, then the names and values of* all parameters are printed on the standard output. If the only argument is `**+***`, the names of all parameters are printed.*\n>\n> For historical reasons, `**set -***` is treated as `***set +xv***`* and `**set -** *args` as `***set +xv \\--** *args` when in* any other emulation mode than zsh\\'s native mode.",args:"set [ {+|-}options | {+|-}o [ option_name ] ] ... [ {+|-}A [ name ] ]"},setcap:{shortDescription:"Set capabilities",description:": See the section `The zsh/cap Module` in *zshmodules(1).*",args:"setcap"},setopt:{shortDescription:"Set shell options",description:": Set the options for the shell. All options specified either with flags or by name are set.\n\n If no arguments are supplied, the names of all options currently set are printed. The form is chosen so as to minimize the differences from the default options for the current emulation (the default emulation being native **zsh***, shown as* **\\** *in* *zshoptions(1)).* Options that are on by default for the emulation are shown with the prefix **no** *only if they are off, while other options are* shown without the prefix **no** *and only if they are on. In addition to* options changed from the default state by the user, any options activated automatically by the shell (for example, **SHIN_STDIN** *or* **INTERACTIVE***)* will be shown in the list. The format is further modified by the option **KSH_OPTION_PRINT***, however the rationale for choosing options with* or without the **no** *prefix remains the same in this case.*\n\n If the **-m** *flag is given the arguments are taken as patterns* (which should be quoted to protect them from filename expansion), and all options with names matching these patterns are set.\n\n Note that a bad option name does not cause execution of subsequent shell code to be aborted; this is behaviour is different from that of `**set** -o*`. This is because* **set** *is regarded as a special builtin by the* POSIX standard, but **setopt** *is not.*",args:"setopt [ {+|-}options | {+|-}o option_name ] [ -m ] [ name ... ]"},shift:{shortDescription:"Shift positional parameters",description:": The positional parameters **\\${***n+1***}** *\\... are renamed* to **\\$1** *\\..., where n is an arithmetic expression that* defaults to 1. If any *names are given then the arrays with these names are* shifted instead of the positional parameters.\n\n If the option **-p** *is given arguments are instead removed (popped)* from the end rather than the start of the array.",args:"shift [ -p ] [ n ] [ name ... ]"},source:{shortDescription:"Source a file",description:": Same as `**.***`, except that the current directory is always searched and* is always searched first, before directories in **\\$path***.*",args:"source file [ arg ... ]"},stat:{shortDescription:"Display file status",description:": See the section `The zsh/stat Module` in *zshmodules(1).*",args:"stat"},suspend:{shortDescription:"Suspend the shell",description:": Suspend the execution of the shell (send it a **SIGTSTP***)* until it receives a **SIGCONT***.* Unless the **-f** *option is given, this will refuse to suspend a login shell.*",args:"suspend [ -f ]"},test:{shortDescription:"Evaluate a conditional expression",description:"**\\[** *\\[ arg \\... \\]* **\\]** Like the system version of **test***. Added for compatibility;* use conditional expressions instead (see the section `Conditional Expressions`). The main differences between the conditional expression syntax and the **test** *and* **\\[** *builtins are: these commands are not handled* syntactically, so for example an empty variable expansion may cause an argument to be omitted; syntax errors cause status 2 to be returned instead of a shell error; and arithmetic operators expect integer arguments rather than arithmetic expressions.\n\n> The command attempts to implement POSIX and its extensions where these are specified. Unfortunately there are intrinsic ambiguities in the syntax; in particular there is no distinction between test operators and strings that resemble them. The standard attempts to resolve these for small numbers of arguments (up to four); for five or more arguments compatibility cannot be relied on. Users are urged wherever possible to use the `**\\[\\[***` test syntax which does not have these ambiguities.*",args:"test [ arg ... ]"},times:{shortDescription:"Display shell times",description:": Print the accumulated user and system times for the shell and for processes run from the shell.",args:"times"},trap:{shortDescription:"Set signal handlers",description:": *arg is a series of commands (usually quoted to protect it from* immediate evaluation by the shell) to be read and executed when the shell receives any of the signals specified by one or more *sig args.* Each *sig can be given as a number,* or as the name of a signal either with or without the string **SIG** in front (e.g. 1, HUP, and SIGHUP are all the same signal).\n\n If *arg is `***-***`, then the specified signals are reset to their* defaults, or, if no *sig args are present, all traps are reset.*\n\n If *arg is an empty string, then the specified signals* are ignored by the shell (and by the commands it invokes).\n\n If *arg is omitted but one or more sig args are provided (i.e.* the first argument is a valid signal number or name), the effect is the same as if *arg had been specified as `***-***`.*\n\n The **trap** *command with no arguments prints a list of commands* associated with each signal.\n\n If *sig is* **ZERR** *then arg will be executed* after each command with a nonzero exit status. **ERR** *is an alias* for **ZERR** *on systems that have no* **SIGERR** *signal (this is the* usual case).\n\n If *sig is* **DEBUG** *then arg will be executed* before each command if the option **DEBUG_BEFORE_CMD** *is set* (as it is by default), else after each command. Here, a `command` is what is described as a `sublist` in the shell grammar, see the section SIMPLE COMMANDS & PIPELINES in *zshmisc(1).* If **DEBUG_BEFORE_CMD** *is set various additional features are available.* First, it is possible to skip the next command by setting the option **ERR_EXIT***; see the description of the* **ERR_EXIT** *option in* *zshoptions(1). Also, the shell parameter* **ZSH_DEBUG_CMD** *is set to the string corresponding to the command* to be executed following the trap. Note that this string is reconstructed from the internal format and may not be formatted the same way as the original text. The parameter is unset after the trap is executed.\n\n If *sig is* **0** *or* **EXIT** and the **trap** *statement is executed inside the body of a function,* then the command *arg is executed after the function completes.* The value of **\\$?** *at the start of execution is the exit status of the* shell or the return status of the function exiting. If *sig is* **0** *or* **EXIT** and the **trap** *statement is not executed inside the body of a function,* then the command *arg is executed when the shell terminates; the* trap runs before any **zshexit** *hook functions.*\n\n **ZERR***,* **DEBUG***, and* **EXIT** *traps are not executed inside other* traps. **ZERR** *and* **DEBUG** *traps are kept within subshells, while* other traps are reset.\n\n Note that traps defined with the **trap** *builtin are slightly different* from those defined as `**TRAP***NAL () { \\... }`, as the latter have* their own function environment (line numbers, local variables, etc.) while the former use the environment of the command in which they were called. For example,\n\n > trap 'print $LINENO' DEBUG\n\n will print the line number of a command executed after it has run, while\n\n > TRAPDEBUG() { print $LINENO; }\n\n will always print the number zero.\n\n Alternative signal names are allowed as described under **kill** *above.* Defining a trap under either name causes any trap under an alternative name to be removed. However, it is recommended that for consistency users stick exclusively to one name or another.",args:"trap [ arg ] [ sig ... ]"},true:{shortDescription:"Return exit status of 0",description:": Do nothing and return an exit status of 0.",args:"true [ arg ... ]"},ttyctl:{shortDescription:"Control terminal attributes",description:": The **-f** *option freezes the tty (i.e. terminal or terminal emulator), and* **-u** *unfreezes it.* When the tty is frozen, no changes made to the tty settings by external programs will be honored by the shell, except for changes in the size of the screen; the shell will simply reset the settings to their previous values as soon as each command exits or is suspended. Thus, **stty** *and similar programs have* no effect when the tty is frozen. Freezing the tty does not cause the current state to be remembered: instead, it causes future changes to the state to be blocked.\n\n Without options it reports whether the terminal is frozen or not.\n\n Note that, regardless of whether the tty is frozen or not, the shell needs to change the settings when the line editor starts, so unfreezing the tty does not guarantee settings made on the command line are preserved. Strings of commands run between editing the command line will see a consistent tty state. See also the shell variable **STTY** *for a means of initialising* the tty before running external commands and/or freezing the tty around a single command.",args:"ttyctl [ -fu ]"},type:{shortDescription:"Describe a command",description:": Equivalent to **whence -v***.*",args:"type [ -wfpamsS ] name ..."},typeset:{shortDescription:"Set or display parameter attributes/values",description:'*\\[* **+** *\\| SCALAR\\[***=***value\\] array\\[***=(***value \\...***)***\\] \\[ sep \\] \\]*\n\n**typeset** **-f** *\\[ {***+***\\|***-***}***TUkmtuz** *\\] \\[* **+** *\\] \\[ name \\... \\]* Set or display attributes and values for shell parameters.\n\n> Except as noted below for control flags that change the behavior, a parameter is created for each *name that does not already refer* to one. When inside a function, a new parameter is created for every *name (even those that already exist), and is unset again when the* function completes. See `Local Parameters` in *zshparam(1). The same rules apply to special shell parameters, which* retain their special attributes when made local.\n>\n> For each *name***=***value assignment, the parameter* *name is set to value. If the assignment is omitted and name* does *not refer to an existing parameter, a new parameter is intialized* to empty string, zero, or empty array (as appropriate), *unless the* shell option **TYPESET_TO_UNSET** *is set. When that option is set,* the parameter attributes are recorded but the parameter remains unset.\n>\n> If the shell option **TYPESET_SILENT** *is not set, for each remaining* *name that refers to a parameter that is already set, the name and* value of the parameter are printed in the form of an assignment. Nothing is printed for newly-created parameters, or when any attribute flags listed below are given along with the *name. Using* `**+***` instead of minus to introduce an attribute turns it off.*\n>\n> If no *name is present, the names and values of all parameters are* printed. In this case the attribute flags restrict the display to only those parameters that have the specified attributes, and using `**+***`* rather than `**-***` to introduce the flag suppresses printing of the values* of parameters when there is no parameter name.\n>\n> All forms of the command handle scalar assignment. Array assignment is possible if any of the reserved words **declare***,* **export***,* **float***,* **integer***,* **local***,* **readonly** *or* **typeset** *is matched when the* line is parsed (N.B. not when it is executed). In this case the arguments are parsed as assignments, except that the `**+=***` syntax and the* **GLOB_ASSIGN** *option are not supported, and scalar values after* **=** are *not split further into words, even if expanded (regardless of the* setting of the **KSH_TYPESET** *option; this option is obsolete).*\n>\n> Examples of the differences between command and reserved word parsing:\n>\n> > # Reserved word parsing\n> > typeset svar=$(echo one word) avar=(several words)\n>\n> The above creates a scalar parameter **svar** *and an array* parameter **avar** *as if the assignments had been*\n>\n> > svar="one word"\n> > avar=(several words)\n>\n> On the other hand:\n>\n> > # Normal builtin interface\n> > builtin typeset svar=$(echo two words)\n>\n> The **builtin** *keyword causes the above to use the standard builtin* interface to **typeset** *in which argument parsing is performed in the same* way as for other commands. This example creates a scalar **svar** containing the value **two** *and another scalar parameter* **words** *with* no value. An array value in this case would either cause an error or be treated as an obscure set of glob qualifiers.\n>\n> Arbitrary arguments are allowed if they take the form of assignments after command line expansion; however, these only perform scalar assignment:\n>\n> > var=\'svar=val\'\n> > typeset $var\n>\n> The above sets the scalar parameter **svar** *to the value* **val***.* Parentheses around the value within **var** *would not cause array* assignment as they will be treated as ordinary characters when **\\$var** is substituted. Any non-trivial expansion in the name part of the assignment causes the argument to be treated in this fashion:\n>\n> > typeset {var1,var2,var3}=name\n>\n> The above syntax is valid, and has the expected effect of setting the three parameters to the same value, but the command line is parsed as a set of three normal command line arguments to **typeset** *after* expansion. Hence it is not possible to assign to multiple arrays by this means.\n>\n> Note that each interface to any of the commands may be disabled separately. For example, `**disable -r typeset***` disables the reserved* word interface to **typeset***, exposing the builtin interface, while* `**disable typeset***` disables the builtin. Note that disabling the* reserved word interface for **typeset** *may cause problems with the* output of `**typeset -p***`, which assumes the reserved word interface is* available in order to restore array and associative array values.\n>\n> Unlike parameter assignment statements, **typeset***\\\'s exit status on an* assignment that involves a command substitution does not reflect the exit status of the command substitution. Therefore, to test for an error in a command substitution, separate the declaration of the parameter from its initialization:\n>\n> > # WRONG\n> > typeset var1=$(exit 1) || echo "Trouble with var1"\n> >\n> > # RIGHT\n> > typeset var1 && var1=$(exit 1) || echo "Trouble with var1"\n>\n> To initialize a parameter *param to a command output and mark it readonly,* use **typeset -r** *param or* **readonly** *param after the parameter* assignment statement.\n>\n> If no attribute flags are given, and either no *name arguments are* present or the flag **+m** *is used, then each parameter name printed is* preceded by a list of the attributes of that parameter (**array***,* **association***,* **exported***,* **float***,* **integer***,* **readonly***,* or **undefined** *for autoloaded parameters not yet loaded). If* **+m** *is* used with attribute flags, and all those flags are introduced with **+***, the matching parameter names are printed but their values* are not.\n>\n> The following control flags change the behavior of **typeset***:*\n>\n> **+** If `**+***` appears by itself in a separate word as the last option,* then the names of all parameters (functions with **-f***) are printed, but* the values (function bodies) are not. No *name arguments may appear,* and it is an error for any other options to follow `**+***`. The* effect of `**+***` is as if all attribute flags which precede it were* given with a `**+***` prefix. For example, `***typeset -U +***` is* equivalent to `**typeset +U***` and displays the names of all arrays having* the uniqueness attribute, whereas `**typeset -f -U +***` displays the* names of all autoloadable functions. If **+** *is the only option,* then type information (array, readonly, etc.) is also printed for each parameter, in the same manner as `**typeset +m \\"\\*\\"***`.*\n>\n> **-g**\n>\n> : The **-g** *(global) means that any resulting parameter will not be* restricted to local scope. Note that this does not necessarily mean that the parameter will be global, as the flag will apply to any existing parameter (even if unset) from an enclosing function. This flag does not affect the parameter after creation, hence it has no effect when listing existing parameters, nor does the flag **+g** *have any effect except in* combination with **-m** *(see below).*\n>\n> **-m**\n>\n> : If the **-m** *flag is given the name arguments are taken as patterns* (use quoting to prevent these from being interpreted as file patterns). With no attribute flags, all parameters (or functions with the **-f** flag) with matching names are printed (the shell option **TYPESET_SILENT** is not used in this case).\n>\n> If the **+g** *flag is combined with* **-m***, a new local parameter is* created for every matching parameter that is not already local. Otherwise **-m** *applies all other flags or assignments to the existing parameters.*\n>\n> Except when assignments are made with *name***=***value, using* **+m** *forces the matching parameters and their attributes to be printed,* even inside a function. Note that **-m** *is ignored if no patterns are* given, so `**typeset -m***` displays attributes but `***typeset -a +m***`* does not.\n>\n> **-p** *\\[ n \\]*\n>\n> : If the **-p** *option is given, parameters and values are printed in the* form of a typeset command with an assignment, regardless of other flags and options. Note that the **-H** *flag on parameters is respected; no* value will be shown for these parameters.\n>\n> **-p** *may be followed by an optional integer argument. Currently* only the value **1** *is supported. In this case arrays and associative* arrays are printed with newlines between indented elements for readability.\n>\n> **-T** *\\[ scalar\\[***=***value\\] array\\[***=(***value \\...***)***\\] \\[ sep \\] \\]*\n>\n> : This flag has a different meaning when used with **-f***; see below.* Otherwise the **-T** *option requires zero, two, or three arguments to be* present. With no arguments, the list of parameters created in this fashion is shown. With two or three arguments, the first two are the name of a scalar and of an array parameter (in that order) that will be tied together in the manner of **\\$PATH** *and* **\\$path***. The optional third* argument is a single-character separator which will be used to join the elements of the array to form the scalar; if absent, a colon is used, as with **\\$PATH***. Only the first character of the separator is significant;* any remaining characters are ignored. Multibyte characters are not yet supported.\n>\n> Only one of the scalar and array parameters may be assigned an initial value (the restrictions on assignment forms described above also apply).\n>\n> Both the scalar and the array may be manipulated as normal. If one is unset, the other will automatically be unset too. There is no way of untying the variables without unsetting them, nor of converting the type of one of them with another **typeset** *command;* **+T** *does not work,* assigning an array to *scalar is an error, and assigning a scalar to* *array sets it to be a single-element array.*\n>\n> Note that both `**typeset -xT \\...***` and `***export -T \\...***` work, but* only the scalar will be marked for export. Setting the value using the scalar version causes a split on all separators (which cannot be quoted). It is possible to apply **-T** *to two previously tied variables but with a* different separator character, in which case the variables remain joined as before but the separator is changed.\n>\n> When an existing scalar is tied to a new array, the value of the scalar is preserved but no attribute other than export will be preserved.\n>\n> Attribute flags that transform the final value (**-L***,* **-R***,* **-Z***,* **-l***,* **-u***) are only applied to the expanded value at the point* of a parameter expansion expression using `**\\$***`. They are not applied* when a parameter is retrieved internally by the shell for any purpose.\n>\n> The following attribute flags may be specified:\n>\n> **-A** The names refer to associative array parameters; see `Array Parameters` in *zshparam(1).*\n>\n> **-L** *\\[ n \\]*\n>\n> : Left justify and remove leading blanks from the value when the parameter is expanded. If *n is nonzero, it defines the width of the field.* If *n is zero, the width is determined by the width of the value of* the first assignment. In the case of numeric parameters, the length of the complete value assigned to the parameter is used to determine the width, not the value that would be output.\n>\n> The width is the count of characters, which may be multibyte characters if the **MULTIBYTE** *option is in effect. Note that the screen* width of the character is not taken into account; if this is required, use padding with parameter expansion flags **\\${(ml***\\...***)***\\...***}** *as described in* `Parameter Expansion Flags` in *zshexpn(1).*\n>\n> When the parameter is expanded, it is filled on the right with blanks or truncated if necessary to fit the field. Note truncation can lead to unexpected results with numeric parameters. Leading zeros are removed if the **-Z** *flag is also set.*\n>\n> **-R** *\\[ n \\]*\n>\n> : Similar to **-L***, except that right justification is used;* when the parameter is expanded, the field is left filled with blanks or truncated from the end. May not be combined with the **-Z** flag.\n>\n> **-U**\n>\n> : For arrays (but not for associative arrays), keep only the first occurrence of each duplicated value. This may also be set for tied parameters (see **-T***) or colon-separated special parameters like* **PATH** *or* **FIGNORE***, etc. Note the flag takes effect on assignment,* and the type of the variable being assigned to is determinative; for variables with shared values it is therefore recommended to set the flag for all interfaces, e.g. `**typeset -U PATH path***`.*\n>\n> This flag has a different meaning when used with **-f***; see below.*\n>\n> **-Z** *\\[ n \\]*\n>\n> : Specially handled if set along with the **-L** *flag.* Otherwise, similar to **-R***, except that leading zeros are used for* padding instead of blanks if the first non-blank character is a digit. Numeric parameters are specially handled: they are always eligible for padding with zeroes, and the zeroes are inserted at an appropriate place in the output.\n>\n> **-a**\n>\n> : The names refer to array parameters. An array parameter may be created this way, but it may be assigned to in the **typeset** statement only if the reserved word form of **typeset** *is enabled* (as it is by default). When displaying, both normal and associative arrays are shown.\n>\n> **-f**\n>\n> : The names refer to functions rather than parameters. No assignments can be made, and the only other valid flags are **-t***,* **-T***,* **-k***,* **-u***,* **-U** *and* **-z***. The flag* **-t** *turns on execution tracing* for this function; the flag **-T** *does the same, but turns off tracing* for any named (not anonymous) function called from the present one, unless that function also has the **-t** *or* **-T** *flag. The* **-u** *and* **-U** *flags cause the* function to be marked for autoloading; **-U** *also causes alias* expansion to be suppressed when the function is loaded. See the description of the `**autoload***` builtin for details.*\n>\n> Note that the builtin **functions** *provides the same basic capabilities* as **typeset -f** *but gives access to a few extra options;* **autoload** gives further additional options for the case **typeset -fu** *and* **typeset -fU***.*\n>\n> **-h**\n>\n> : Hide: only useful for special parameters (those marked `\\` in the table in *zshparam(1)), and for local parameters with the same name as a special parameter,* though harmless for others. A special parameter with this attribute will not retain its special effect when made local. Thus after `**typeset -h** PATH*`, a function containing `***typeset PATH***` will create an ordinary* local parameter without the usual behaviour of **PATH***. Alternatively,* the local parameter may itself be given this attribute; hence inside a function `**typeset -h PATH***` creates an ordinary local parameter and the* special **PATH** *parameter is not altered in any way. It is also possible* to create a local parameter using `**typeset +h** *special`, where the* local copy of *special will retain its special properties regardless of* having the **-h** *attribute. Global special parameters loaded from shell* modules (currently those in **zsh/mapfile** *and* **zsh/parameter***) are* automatically given the **-h** *attribute to avoid name clashes.*\n>\n> **-H**\n>\n> : Hide value: specifies that **typeset** *will not display the value of the* parameter when listing parameters; the display for such parameters is always as if the `**+***` flag had been given. Use of the parameter is* in other respects normal, and the option does not apply if the parameter is specified by name, or by pattern with the **-m** *option. This is on by* default for the parameters in the **zsh/parameter** *and* **zsh/mapfile** modules. Note, however, that unlike the **-h** *flag this is also useful* for non-special parameters.\n>\n> **-i** *\\[ n \\]*\n>\n> : Use an internal integer representation. If *n is nonzero it* defines the output arithmetic base, otherwise it is determined by the first assignment. Bases from 2 to 36 inclusive are allowed.\n>\n> **-E** *\\[ n \\]*\n>\n> : Use an internal double-precision floating point representation. On output the variable will be converted to scientific notation. If *n is* nonzero it defines the number of significant figures to display; the default is ten.\n>\n> **-F** *\\[ n \\]*\n>\n> : Use an internal double-precision floating point representation. On output the variable will be converted to fixed-point decimal notation. If *n* is nonzero it defines the number of digits to display after the decimal point; the default is ten.\n>\n> **-l**\n>\n> : Convert the result to lower case whenever the parameter is expanded. The value is *not converted when assigned.*\n>\n> **-r**\n>\n> : The given *names are marked readonly. Note that if name is a* special parameter, the readonly attribute can be turned on, but cannot then be turned off.\n>\n> If the **POSIX_BUILTINS** *option is set, the readonly attribute is* more restrictive: unset variables can be marked readonly and cannot then be set; furthermore, the readonly attribute cannot be removed from any variable.\n>\n> It is still possible to change other attributes of the variable though, some of which like **-U** *or* **-Z** *would affect the value. More generally,* the readonly attribute should not be relied on as a security mechanism.\n>\n> Note that in zsh (like in pdksh but unlike most other shells) it is still possible to create a local variable of the same name as this is considered a different variable (though this variable, too, can be marked readonly). Special variables that have been made readonly retain their value and readonly attribute when made local.\n>\n> **-t**\n>\n> : Tags the named parameters. Tags have no special meaning to the shell. This flag has a different meaning when used with **-f***; see above.*\n>\n> **-u**\n>\n> : Convert the result to upper case whenever the parameter is expanded. The value is *not converted when assigned.* This flag has a different meaning when used with **-f***; see above.*\n>\n> **-x**\n>\n> : Mark for automatic export to the environment of subsequently executed commands. If the option **GLOBAL_EXPORT** *is set, this implies* the option **-g***, unless* **+g** *is also explicitly given; in other words* the parameter is not made local to the enclosing function. This is for compatibility with previous versions of zsh.',args:"typeset -T [ {+|-}Uglrux ] [ {+|-}LRZp [ n ] ]"},ulimit:{shortDescription:"Set or display resource limits",description:": Set or display resource limits of the shell and the processes started by the shell. The value of *limit can be a number in the unit specified* below or one of the values `**unlimited***`, which removes the limit on the* resource, or `**hard***`, which uses the current value of the hard limit on* the resource.\n\n By default, only soft limits are manipulated. If the **-H** *flag* is given use hard limits instead of soft limits. If the **-S** *flag is given* together with the **-H** *flag set both hard and soft limits.*\n\n If no options are used, the file size limit (**-f***) is assumed.*\n\n If *limit is omitted the current value of the specified resources are* printed. When more than one resource value is printed, the limit name and unit is printed before each value.\n\n When looping over multiple resources, the shell will abort immediately if it detects a badly formed argument. However, if it fails to set a limit for some other reason it will continue trying to set the remaining limits.\n\n Not all the following resources are supported on all systems. Running **ulimit -a** *will show which are supported.*\n\n **-a**\n\n : Lists all of the current resource limits.\n\n **-b**\n\n : Socket buffer size in bytes (N.B. not kilobytes)\n\n **-c**\n\n : 512-byte blocks on the size of core dumps.\n\n **-d**\n\n : Kilobytes on the size of the data segment.\n\n **-f**\n\n : 512-byte blocks on the size of files written.\n\n **-i**\n\n : The number of pending signals.\n\n **-k**\n\n : The number of kqueues allocated.\n\n **-l**\n\n : Kilobytes on the size of locked-in memory.\n\n **-m**\n\n : Kilobytes on the size of physical memory.\n\n **-n**\n\n : open file descriptors.\n\n **-p**\n\n : The number of pseudo-terminals.\n\n **-q**\n\n : Bytes in POSIX message queues.\n\n **-r**\n\n : Maximum real time priority. On some systems where this is not available, such as NetBSD, this has the same effect as **-T** for compatibility with **sh***.*\n\n **-s**\n\n : Kilobytes on the size of the stack.\n\n **-T**\n\n : The number of simultaneous threads available to the user.\n\n **-t**\n\n : CPU seconds to be used.\n\n **-u**\n\n : The number of processes available to the user.\n\n **-v**\n\n : Kilobytes on the size of virtual memory. On some systems this refers to the limit called `address space`.\n\n **-w**\n\n : Kilobytes on the size of swapped out memory.\n\n **-x**\n\n : The number of locks on files.\n\n A resource may also be specified by integer in the form `**-N** *resource`, where resource corresponds to the integer defined for* the resource by the operating system. This may be used to set the limits for resources known to the shell which do not correspond to option letters. Such limits will be shown by number in the output of `**ulimit -a***`.*\n\n The number may alternatively be out of the range of limits compiled into the shell. The shell will try to read or write the limit anyway, and will report an error if this fails.",args:"ulimit [ -HSa ] [ { -bcdfiklmnpqrsTtvwx | -N resource } [ limit ] ... ]"},umask:{shortDescription:"Set file creation mask",description:": The umask is set to *mask. mask can be either* an octal number or a symbolic value as described in the *chmod(1) man page.* If *mask is omitted, the current value is printed. The* **-S** option causes the mask to be printed as a symbolic value. Otherwise, the mask is printed as an octal number. Note that in the symbolic form the permissions you specify are those which are to be allowed (not denied) to the users specified.",args:"umask [ -S ] [ mask ]"},unalias:{shortDescription:"Removes aliases",description:": Removes aliases. This command works the same as **unhash -a***, except that* the **-a** *option removes all regular or global aliases, or with* **-s** all suffix aliases: in this case no *name arguments may appear. The* options **-m** *(remove by pattern) and* **-s** *without* **-a** *(remove* listed suffix aliases) behave as for **unhash -a***. Note that* the meaning of **-a** *is different between* **unalias** *and* **unhash***.*",args:"unalias [ -ams ] name ..."},unfunction:{shortDescription:"Remove function definition",description:": Same as **unhash -f***.*",args:"unfunction"},unhash:{shortDescription:"Remove command from hash table",description:": Remove the element named *name from an internal hash table. The* default is remove elements from the command hash table. The **-a** option causes **unhash** *to remove regular or global aliases; note* when removing a global aliases that the argument must be quoted to prevent it from being expanded before being passed to the command. The **-s** *option causes* **unhash** *to remove suffix aliases.* The **-f** *option causes* **unhash** *to remove shell functions. The* **-d** *options causes* **unhash** *to remove named directories. If the* **-m** *flag is given* the arguments are taken as patterns (should be quoted) and all elements of the corresponding hash table with matching names will be removed.",args:"unhash [ -adfms ] name ..."},unlimit:{shortDescription:"Remove resource limits",description:": The resource limit for each *resource is set to the hard limit.* If the **-h** *flag is given and the shell has appropriate privileges,* the hard resource limit for each *resource is removed.* The resources of the shell process are only changed if the **-s** flag is given.\n\n The **unlimit** *command is not made available by default when the* shell starts in a mode emulating another shell. It can be made available with the command `**zmodload -F zsh/rlimits b:unlimit***`.*",args:"unlimit [ -hs ] resource ..."},unset:{shortDescription:"Unset values and attributes of variables",description:": Each named parameter is unset. Local parameters remain local even if unset; they appear unset within scope, but the previous value will still reappear when the scope ends.\n\n Individual elements of associative array parameters may be unset by using subscript syntax on *name, which should be quoted (or the entire command* prefixed with **noglob***) to protect the subscript from filename generation.*\n\n If the **-m** *flag is specified the arguments are taken as patterns (should* be quoted) and all parameters with matching names are unset. Note that this cannot be used when unsetting associative array elements, as the subscript will be treated as part of the pattern.\n\n The **-v** *flag specifies that name refers to parameters. This is the* default behaviour.\n\n **unset -f** *is equivalent to* **unfunction***.*",args:"unset [ -fmv ] name ..."},unsetopt:{shortDescription:"Unset shell options",description:": Unset the options for the shell. All options specified either with flags or by name are unset. If no arguments are supplied, the names of all options currently unset are printed. If the **-m** *flag is given the arguments are taken as patterns* (which should be quoted to preserve them from being interpreted as glob patterns), and all options with names matching these patterns are unset.",args:"unsetopt [ {+|-}options | {+|-}o option_name ] [ name ... ]"},vared:{shortDescription:"Edit shell variables",description:": See the section `Zle Builtins` in *zshzle(1).*",args:"vared"},wait:{shortDescription:"Wait for a process",description:": Wait for the specified jobs or processes. If *job is not given* then all currently active child processes are waited for. Each *job can be either a job specification or the process ID* of a job in the job table. The exit status from this command is that of the job waited for. If *job represents an unknown job or process ID, a warning is printed* (unless the **POSIX_BUILTINS** *option is set) and the exit status is 127.*\n\n It is possible to wait for recent processes (specified by process ID, not by job) that were running in the background even if the process has exited. Typically the process ID will be recorded by capturing the value of the variable **\\$!** *immediately after the process has been* started. There is a limit on the number of process IDs remembered by the shell; this is given by the value of the system configuration parameter **CHILD_MAX***. When this limit is reached, older process IDs* are discarded, least recently started processes first.\n\n Note there is no protection against the process ID wrapping, i.e. if the wait is not executed soon enough there is a chance the process waited for is the wrong one. A conflict implies both process IDs have been generated by the shell, as other processes are not recorded, and that the user is potentially interested in both, so this problem is intrinsic to process IDs.",args:"wait [ job ... ]"},whence:{shortDescription:"Locate a command",description:": For each *name, indicate how it would be interpreted if used as a* command name.\n\n If *name is not an alias, built-in command, external command, shell* function, hashed command, or a reserved word, the exit status shall be non-zero, and \\-- if **-v***,* **-c***, or* **-w** *was passed \\-- a message* will be written to standard output. (This is different from other shells that write that message to standard error.)\n\n **whence** *is most useful when name is only the last path component* of a command, i.e. does not include a `**/***`; in particular, pattern* matching only succeeds if just the non-directory component of the command is passed.\n\n **-v** Produce a more verbose report.\n\n **-c**\n\n : Print the results in a **csh***-like format.* This takes precedence over **-v***.*\n\n **-w**\n\n : For each *name, print `name***:** *word` where word* is one of **alias***,* **builtin***,* **command***,* **function***,* **hashed***,* **reserved** *or* **none***, according as name* corresponds to an alias, a built-in command, an external command, a shell function, a command defined with the **hash** *builtin, a* reserved word, or is not recognised. This takes precedence over **-v** *and* **-c***.*\n\n **-f**\n\n : Causes the contents of a shell function to be displayed, which would otherwise not happen unless the **-c** flag were used.\n\n **-p**\n\n : Do a path search for *name* even if it is an alias, reserved word, shell function or builtin.\n\n **-a**\n\n : Do a search for all occurrences of *name* throughout the command path. Normally only the first occurrence is printed.\n\n **-m**\n\n : The arguments are taken as patterns (pattern characters should be quoted), and the information is displayed for each command matching one of these patterns.\n\n **-s**\n\n : If a pathname contains symlinks, print the symlink-free pathname as well.\n\n **-S**\n\n : As **-s***, but if the pathname had to be resolved by following* multiple symlinks, the intermediate steps are printed, too. The symlink resolved at each step might be anywhere in the path.\n\n **-x** *num*\n\n : Expand tabs when outputting shell functions using the **-c** *option.* This has the same effect as the **-x** *option to the* **functions** builtin.",args:"whence [ -vcwfpamsS ] [ -x num ] name ..."},where:{shortDescription:"Locate a command",description:": Equivalent to **whence -ca***.*",args:"where [ -wpmsS ] [ -x num ] name ..."},which:{shortDescription:"Locate a command",description:": Equivalent to **whence -c***.*",args:"which [ -wpamsS ] [ -x num ] name ..."},zcompile:{shortDescription:"Compile functions",description:"**zcompile -t** *file \\[ name \\... \\]* This builtin command can be used to compile functions or scripts, storing the compiled form in a file, and to examine files containing the compiled form. This allows faster autoloading of functions and sourcing of scripts by avoiding parsing of the text when the files are read.\n\n> The first form (without the **-c***,* **-a** *or* **-t** *options) creates a* compiled file. If only the *file argument is given, the* output file has the name `*file***.zwc***` and will be placed in* the same directory as the *file. The shell will load the compiled* file instead of the normal function file when the function is autoloaded; see the section `Autoloading Functions` in *zshmisc(1)* for a description of how autoloaded functions are searched. The extension **.zwc** *stands for `zsh word code`.*\n>\n> If there is at least one *name argument, all the named files* are compiled into the output *file given as the first argument. If* *file does not end in* **.zwc***, this extension is automatically* appended. Files containing multiple compiled functions are called `digest` files, and are intended to be used as elements of the **FPATH***/***fpath** special array.\n>\n> The second form, with the **-c** *or* **-a** *options, writes the compiled* definitions for all the named functions into *file. For* **-c***, the* names must be functions currently defined in the shell, not those marked for autoloading. Undefined functions that are marked for autoloading may be written by using the **-a** *option, in which case the* **fpath** is searched and the contents of the definition files for those functions, if found, are compiled into *file. If both* **-c** *and* **-a** *are given, names of both defined functions and functions marked* for autoloading may be given. In either case, the functions in files written with the **-c** *or* **-a** *option will be autoloaded as if the* **KSH_AUTOLOAD** *option were unset.*\n>\n> The reason for handling loaded and not-yet-loaded functions with different options is that some definition files for autoloading define multiple functions, including the function with the same name as the file, and, at the end, call that function. In such cases the output of `**zcompile -c***` does not include the additional functions defined in* the file, and any other initialization code in the file is lost. Using `**zcompile -a***` captures all this extra information.*\n>\n> If the **-m** *option is combined with* **-c** *or* **-a***,* the *names are used as patterns and all functions whose names* match one of these patterns will be written. If no *name is given,* the definitions of all functions currently defined or marked as autoloaded will be written.\n>\n> Note the second form cannot be used for compiling functions that include redirections as part of the definition rather than within the body of the function; for example\n>\n> > fn1() { { ... } >~/logfile }\n>\n> can be compiled but\n>\n> > fn1() { ... } >~/logfile\n>\n> cannot. It is possible to use the first form of **zcompile** *to compile* autoloadable functions that include the full function definition instead of just the body of the function.\n>\n> The third form, with the **-t** *option, examines an existing* compiled file. Without further arguments, the names of the original files compiled into it are listed. The first line of output shows the version of the shell which compiled the file and how the file will be used (i.e. by reading it directly or by mapping it into memory). With arguments, nothing is output and the return status is set to zero if definitions for *all names were found in the compiled* file, and non-zero if the definition for at least one *name was not* found.\n>\n> Other options:\n>\n> **-U** Aliases are not expanded when compiling the *named files.*\n>\n> **-R**\n>\n> : When the compiled file is read, its contents are copied into the shell\\'s memory, rather than memory-mapped (see **-M***). This* happens automatically on systems that do not support memory mapping.\n>\n> When compiling scripts instead of autoloadable functions, it is often desirable to use this option; otherwise the whole file, including the code to define functions which have already been defined, will remain mapped, consequently wasting memory.\n>\n> **-M**\n>\n> : The compiled file is mapped into the shell\\'s memory when read. This is done in such a way that multiple instances of the shell running on the same host will share this mapped file. If neither **-R** *nor* **-M** *is given, the* **zcompile** *builtin decides what to do based* on the size of the compiled file.\n>\n> **-k**\n>\n> **-z** These options are used when the compiled file contains functions which are to be autoloaded. If **-z** *is given, the* function will be autoloaded as if the **KSH_AUTOLOAD** *option is* *not set, even if it is set at the time the compiled file is* read, while if the **-k** *is given, the function will be loaded as if* **KSH_AUTOLOAD** *is set. These options also take precedence over* any **-k** *or* **-z** *options specified to the* **autoload** *builtin. If* neither of these options is given, the function will be loaded as determined by the setting of the **KSH_AUTOLOAD** *option at the time* the compiled file is read. These options may also appear as many times as necessary between the listed *names to specify the loading style of all following functions, up to* the next **-k** *or* **-z***.*\n>\n> The created file always contains two versions of the compiled format, one for big-endian machines and one for small-endian machines. The upshot of this is that the compiled file is machine independent and if it is read or mapped, only one half of the file is actually used (and mapped).",args:"zcompile [ -U ] [ -z | -k ] [ -R | -M ] file [ name ... ]\n\nzcompile -ca [ -m ] [ -R | -M ] file [ name ... ]"},zformat:{shortDescription:"Format strings",description:": See the section `The zsh/zutil Module` in *zshmodules(1).*",args:"zformat"},zftp:{shortDescription:"Zsh FTP client",description:": See the section `The zsh/zftp Module` in *zshmodules(1).*",args:"zftp"},zle:{shortDescription:"Zsh line editor",description:": See the section `Zle Builtins` in *zshzle(1).*",args:"zle"},zmodload:{shortDescription:"Load a module",description:"**zmodload** **-R** *modalias \\...* Performs operations relating to zsh\\'s loadable modules. Loading of modules while the shell is running (`dynamical loading`) is not available on all operating systems, or on all installations on a particular operating system, although the **zmodload** *command itself is always* available and can be used to manipulate modules built into versions of the shell executable without dynamical loading.\n\n> Without arguments the names of all currently loaded binary modules are printed. The **-L** *option causes this list to be in the form of a* series of **zmodload** *commands. Forms with arguments are:*\n>\n> **zmodload** *\\[* **-is** *\\] name \\...*\n>\n> **zmodload** **-u** *\\[* **-i** *\\] name \\...* In the simplest case, **zmodload** *loads a binary module. The module must* be in a file with a name consisting of the specified *name followed by* a standard suffix, usually `**.so***` (`***.sl***` on HPUX).* If the module to be loaded is already loaded the duplicate module is ignored. If **zmodload** *detects an inconsistency, such as an* invalid module name or circular dependency list, the current code block is aborted. If it is available, the module is loaded if necessary, while if it is not available, non-zero status is silently returned. The option **-i** *is accepted for compatibility but has no effect.*\n>\n> > The *named module is searched for in the same way a command is, using* **\\$module_path** *instead of* **\\$path***. However, the path search is* performed even when the module name contains a `**/***`, which it usually does.* There is no way to prevent the path search.\n> >\n> > If the module supports features (see below), **zmodload** *tries to* enable all features when loading a module. If the module was successfully loaded but not all features could be enabled, **zmodload** *returns status 2.*\n> >\n> > If the option **-s** *is given, no error is printed if the module was not* available (though other errors indicating a problem with the module are printed). The return status indicates if the module was loaded. This is appropriate if the caller considers the module optional.\n> >\n> > With **-u***,* **zmodload** *unloads modules. The same name* must be given that was given when the module was loaded, but it is not necessary for the module to exist in the file system. The **-i** *option suppresses the error if the module is already* unloaded (or was never loaded).\n> >\n> > Each module has a boot and a cleanup function. The module will not be loaded if its boot function fails. Similarly a module can only be unloaded if its cleanup function runs successfully.\n>\n> **zmodload -F** *\\[* **-almLe** **-P** *param \\] module \\[ \\[***+-***\\]feature \\... \\]*\n>\n> : **zmodload -F** *allows more selective control over the features provided* by modules. With no options apart from **-F***, the module named* *module is loaded, if it was not already loaded, and the list of* *features is set to the required state. If no* *features are specified, the module is loaded, if it was not already* loaded, but the state of features is unchanged. Each feature may be preceded by a **+** *to turn the feature on, or* **-** *to turn it* off; the **+** *is assumed if neither character is present.* Any feature not explicitly mentioned is left in its current state; if the module was not previously loaded this means any such features will remain disabled. The return status is zero if all features were set, 1 if the module failed to load, and 2 if some features could not be set (for example, a parameter couldn\\'t be added because there was a different parameter of the same name) but the module was loaded.\n>\n> The standard features are builtins, conditions, parameters and math functions; these are indicated by the prefix `**b:***`, `***c:***`* (`**C:***` for an infix condition), `***p:***` and `***f:***`, respectively,* followed by the name that the corresponding feature would have in the shell. For example, `**b:strftime***` indicates a builtin named* **strftime** *and* **p:EPOCHSECONDS** *indicates a parameter named* **EPOCHSECONDS***. The module may provide other (`abstract`) features of* its own as indicated by its documentation; these have no prefix.\n>\n> With **-l** *or* **-L***, features provided by the module are listed. With* **-l** *alone, a list of features together with their states is shown, one* feature per line. With **-L** *alone, a* **zmodload -F** *command that would* cause enabled features of the module to be turned on is shown. With **-lL***, a* **zmodload -F** *command that would cause all the features to be* set to their current state is shown. If one of these combinations is given with the option **-P** *param then the parameter param is set to an* array of features, either features together with their state or (if **-L** *alone is given) enabled features.*\n>\n> With the option **-L** *the module name may be omitted; then a list* of all enabled features for all modules providing features is printed in the form of **zmodload -F** *commands. If* **-l** *is also given,* the state of both enabled and disabled features is output in that form.\n>\n> A set of features may be provided together with **-l** *or* **-L** *and a* module name; in that case only the state of those features is considered. Each feature may be preceded by **+** *or* **-** *but the* character has no effect. If no set of features is provided, all features are considered.\n>\n> With **-e***, the command first tests that the module is loaded;* if it is not, status 1 is returned. If the module is loaded, the list of features given as an argument is examined. Any feature given with no prefix is simply tested to see if the module provides it; any feature given with a prefix **+** *or* **-** *is tested to* see if is provided and in the given state. If the tests on all features in the list succeed, status 0 is returned, else status 1.\n>\n> With **-m***, each entry in the given list of features is taken* as a pattern to be matched against the list of features provided by the module. An initial **+** *or* **-** *must be given explicitly.* This may not be combined with the **-a** *option as autoloads must* be specified explicitly.\n>\n> With **-a***, the given list of features is marked for autoload from* the specified module, which may not yet be loaded. An optional **+** may appear before the feature name. If the feature is prefixed with **-***, any existing autoload is removed. The options* **-l** *and* **-L** may be used to list autoloads. Autoloading is specific to individual features; when the module is loaded only the requested feature is enabled. Autoload requests are preserved if the module is subsequently unloaded until an explicit `**zmodload -Fa** *module* **-***feature` is issued. It is not an error to request an autoload* for a feature of a module that is already loaded.\n>\n> When the module is loaded each autoload is checked against the features actually provided by the module; if the feature is not provided the autoload request is deleted. A warning message is output; if the module is being loaded to provide a different feature, and that autoload is successful, there is no effect on the status of the current command. If the module is already loaded at the time when **zmodload -Fa** *is* run, an error message is printed and status 1 returned.\n>\n> **zmodload -Fa** *can be used with the* **-l***,* **-L***,* **-e** *and* **-P** *options for listing and testing the existence of autoloadable* features. In this case **-l** *is ignored if* **-L** *is specified.* **zmodload -FaL** *with no module name lists autoloads for all modules.*\n>\n> Note that only standard features as described above can be autoloaded; other features require the module to be loaded before enabling.\n>\n> **zmodload** **-d** *\\[* **-L** *\\] \\[ name \\]*\n>\n> **zmodload** **-d** *name dep \\...*\n>\n> **zmodload** **-ud** *name \\[ dep \\... \\]* The **-d** *option can be used to specify module dependencies. The modules* named in the second and subsequent arguments will be loaded before the module named in the first argument.\n>\n> > With **-d** *and one argument, all dependencies for that module are listed.* With **-d** *and no arguments, all module dependencies are listed. This* listing is by default in a Makefile-like format. The **-L** *option* changes this format to a list of **zmodload -d** *commands.*\n> >\n> > If **-d** *and* **-u** *are both used, dependencies are removed. If only one* argument is given, all dependencies for that module are removed.\n>\n> **zmodload** **-ab** *\\[* **-L** *\\]*\n>\n> **zmodload** **-ab** *\\[* **-i** *\\] name \\[ builtin \\... \\]*\n>\n> **zmodload** **-ub** *\\[* **-i** *\\] builtin \\...* The **-ab** *option defines autoloaded builtins. It defines the specified* *builtins. When any of those builtins is called, the module specified* in the first argument is loaded and all its features are enabled (for selective control of features use `**zmodload -F -a***` as described* above). If only the *name is given, one builtin is defined, with* the same name as the module. **-i** *suppresses the error if the builtin* is already defined or autoloaded, but not if another builtin of the same name is already defined.\n>\n> > With **-ab** *and no arguments, all autoloaded builtins are listed, with the* module name (if different) shown in parentheses after the builtin name. The **-L** *option changes this format to a list of* **zmodload -a** commands.\n> >\n> > If **-b** *is used together with the* **-u** *option, it removes builtins* previously defined with **-ab***. This is only possible if the builtin is* not yet loaded. **-i** *suppresses the error if the builtin is already* removed (or never existed).\n> >\n> > Autoload requests are retained if the module is subsequently unloaded until an explicit `**zmodload -ub** *builtin` is issued.*\n>\n> **zmodload** **-ac** *\\[* **-IL** *\\]*\n>\n> **zmodload** **-ac** *\\[* **-iI** *\\] name \\[ cond \\... \\]*\n>\n> **zmodload** **-uc** *\\[* **-iI** *\\] cond \\...* The **-ac** *option is used to define autoloaded condition codes. The* *cond strings give the names of the conditions defined by the* module. The optional **-I** *option is used to define infix condition* names. Without this option prefix condition names are defined.\n>\n> > If given no condition names, all defined names are listed (as a series of **zmodload** *commands if the* **-L** *option is given).*\n> >\n> > The **-uc** *option removes definitions for autoloaded conditions.*\n>\n> **zmodload** **-ap** *\\[* **-L** *\\]*\n>\n> **zmodload** **-ap** *\\[* **-i** *\\] name \\[ parameter \\... \\]*\n>\n> **zmodload** **-up** *\\[* **-i** *\\] parameter \\...* The **-p** *option is like the* **-b** *and* **-c** *options, but makes* **zmodload** *work on autoloaded parameters instead.*\n>\n> **zmodload** **-af** *\\[* **-L** *\\]*\n>\n> **zmodload** **-af** *\\[* **-i** *\\] name \\[ function \\... \\]*\n>\n> **zmodload** **-uf** *\\[* **-i** *\\] function \\...* The **-f** *option is like the* **-b***,* **-p***, and* **-c** *options, but* makes **zmodload** *work on autoloaded math functions instead.*\n>\n> **zmodload** **-a** *\\[* **-L** *\\]*\n>\n> **zmodload** **-a** *\\[* **-i** *\\] name \\[ builtin \\... \\]*\n>\n> **zmodload** **-ua** *\\[* **-i** *\\] builtin \\...* Equivalent to **-ab** *and* **-ub***.*\n>\n> **zmodload -e** *\\[* **-A** *\\] \\[ string \\... \\]*\n>\n> : The **-e** *option without arguments lists all loaded modules; if the* **-A** option is also given, module aliases corresponding to loaded modules are also shown. If arguments are provided, nothing is printed; the return status is set to zero if all *strings given as arguments* are names of loaded modules and to one if at least on *string is not* the name of a loaded module. This can be used to test for the availability of things implemented by modules. In this case, any aliases are automatically resolved and the **-A** *flag is not used.*\n>\n> **zmodload** **-A** *\\[* **-L** *\\] \\[ modalias\\[***=***module\\] \\... \\]*\n>\n> : For each argument, if both *modalias and module are given,* define *modalias to be an alias for the module module.* If the module *modalias is ever subsequently requested, either via a* call to **zmodload** *or implicitly, the shell will attempt to load* *module instead. If module is not given, show the definition of* *modalias. If no arguments are given, list all defined module aliases.* When listing, if the **-L** *flag was also given, list the definition as a* **zmodload** *command to recreate the alias.*\n>\n> The existence of aliases for modules is completely independent of whether the name resolved is actually loaded as a module: while the alias exists, loading and unloading the module under any alias has exactly the same effect as using the resolved name, and does not affect the connection between the alias and the resolved name which can be removed either by **zmodload -R** *or by redefining the alias. Chains of aliases (i.e. where* the first resolved name is itself an alias) are valid so long as these are not circular. As the aliases take the same format as module names, they may include path separators: in this case, there is no requirement for any part of the path named to exist as the alias will be resolved first. For example, `**any/old/alias***` is always a valid alias.*\n>\n> Dependencies added to aliased modules are actually added to the resolved module; these remain if the alias is removed. It is valid to create an alias whose name is one of the standard shell modules and which resolves to a different module. However, if a module has dependencies, it will not be possible to use the module name as an alias as the module will already be marked as a loadable module in its own right.\n>\n> Apart from the above, aliases can be used in the **zmodload** *command* anywhere module names are required. However, aliases will not be shown in lists of loaded modules with a bare `**zmodload***`.*\n>\n> **zmodload** **-R** *modalias \\...* \n>\n> : For each *modalias argument that was previously defined as a module* alias via **zmodload -A***, delete the alias. If any was not defined, an* error is caused and the remainder of the line is ignored.\n>\n> Note that **zsh** *makes no distinction between modules that were linked* into the shell and modules that are loaded dynamically. In both cases this builtin command has to be used to make available the builtins and other things defined by modules (unless the module is autoloaded on these definitions). This is true even for systems that don\\'t support dynamic loading of modules.",args:"zmodload [ -a [ -bcpf [ -I ] ] ] [ -iL ] ...\n\nzmodload -u [ -abcdpf [ -I ] ] [ -iL ] ...\n\nzmodload -A [ -L ] [ modalias[=module] ... ]"},zparseopts:{shortDescription:"Parse options",description:": See the section `The zsh/zutil Module` in *zshmodules(1).*",args:"zparseopts"},zprof:{shortDescription:"Zsh profiler",description:": See the section `The zsh/zprof Module` in *zshmodules(1).*",args:"zprof"},zpty:{shortDescription:"Zsh pseudo terminal",description:": See the section `The zsh/zpty Module` in *zshmodules(1).*",args:"zpty"},zregexparse:{shortDescription:"Parse regex",description:": See the section `The zsh/zutil Module` in *zshmodules(1).*",args:"zregexparse"},zsocket:{shortDescription:"Zsh socket interface",description:": See the section `The zsh/net/socket Module` in *zshmodules(1).*",args:"zsocket"},zstyle:{shortDescription:"Define styles",description:": See the section `The zsh/zutil Module` in *zshmodules(1).*",args:"zstyle"},ztcp:{shortDescription:"Manipulate TCP sockets",description:": See the section `The zsh/net/tcp Module` in *zshmodules(1).*",args:"ztcp"}}},1848:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.default={name:"seq",description:"Print sequences of numbers. (Defaults to increments of 1)",args:[{name:"first",description:"Starting number in sequence"},{name:"step",description:"Increment interval",isOptional:!0},{name:"last",description:"Last number in sequence",isOptional:!0}],options:[{name:["-w","--fixed-width"],description:"Equalize the widths of all numbers by padding with zeros as necessary"},{name:["-s","--separator"],description:"String separator between numbers. Default is newline",insertValue:'-s "{cursor}"',args:{name:"string",description:"Separator"}},{name:["-f","--format"],description:"Use a printf(3) style format to print each number",insertValue:"-f %{cursor}",args:{name:"format",description:"Print all numbers using format"}},{name:["-t","--terminator"],description:"Use string to terminate sequence of numbers",insertValue:'-t "{cursor}"',args:{name:"string",description:"Terminator"}}]}},1872:function(e,t,n){"use strict";var i,a=this&&this.__createBinding||(Object.create?function(e,t,n,i){void 0===i&&(i=n);var a=Object.getOwnPropertyDescriptor(t,n);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,i,a)}:function(e,t,n,i){void 0===i&&(i=n),e[i]=t[n]}),s=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||(i=function(e){return i=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},i(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=i(e),o=0;o{const t=e.Name!==e.DisplayName,n=[];let i;if(e.Definition&&n.push(e.Definition),e.ModuleName&&e.Version&&n.push(`${e.ModuleName} v${e.Version}`),e.Definition){let t=e.Definition.indexOf(" ");-1===t&&(t=e.Definition.length,i=e.Definition.substring(0,t))}return{label:e.Name,detail:n.join("\n\n"),kind:t?r.TerminalCompletionItemKind.Alias:r.TerminalCompletionItemKind.Method,definitionCommand:i}}):[]}async function m(e,t){const n=await(0,c.execHelper)('Get-Command -All | Select-Object Name, CommandType, Definition, ModuleName, @{Name="Version";Expression={$_.Version.ToString()}} | ConvertTo-Json',{...e,maxBuffer:104857600});let i;try{i=JSON.parse(n)}catch(e){return console.error("Error parsing pwsh output:",e),[]}return Array.isArray(i)?i.filter(p).filter(e=>1!==e.CommandType).map(e=>{const t=[];return e.Definition&&t.push(e.Definition.trim()),e.ModuleName&&e.Version&&t.push(`${e.ModuleName} v${e.Version}`),{label:e.Name,detail:t.join("\n\n"),kind:l.get(e.CommandType)}}):[]}function p(e){return h(e)&&"Name"in e&&"string"==typeof e.Name&&"CommandType"in e&&"number"==typeof e.CommandType&&(!("DisplayName"in e)||"string"==typeof e.DisplayName||null===e.DisplayName)&&(!("Definition"in e)||"string"==typeof e.Definition||null===e.Definition)&&(!("ModuleName"in e)||"string"==typeof e.ModuleName||null===e.ModuleName)&&(!("Version"in e)||"string"==typeof e.Version||null===e.Version)}function h(e){return!("object"!=typeof e||null===e||Array.isArray(e)||e instanceof RegExp||e instanceof Date)}},1943:e=>{"use strict";e.exports=require("fs/promises")},1963:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={name:"lsblk",description:"List block devices",options:[{name:["--help","-h"],description:"Show help for lsblk"},{name:["--version","-V"],description:"Show version for lsblk"},{name:["--all","-a"],description:"Also list empty devices and RAM disk devices"},{name:["--bytes","-b"],description:"Print the SIZE column in bytes"},{name:["--discard","-D"],description:"Print information about the discarding capabilities (TRIM, UNMAP) for each device"},{name:["--nodeps","-d"],description:"Do not print holder devices or slaves"},{name:["--dedup","-E"],description:"Use column as a de-duplication key to de-duplicate output tree",args:{name:"column"}},{name:["--exclude","-e"],description:"Exclude the devices specified by the comma-separated list of major device numbers",args:{name:"list"}},{name:["--fs","-f"],description:"Output info about filesystems"},{name:["--include","-I"],description:"Include devices specified by the comma-separated list of major device numbers",args:{name:"list"}},{name:["--ascii","-i"],description:"Use ASCII characters for tree formatting"},{name:["--json","-J"],description:"Use JSON output format"},{name:["--list","-l"],description:"Produce output in the form of a list"},{name:["--merge","-M"],description:"Group parents of sub-trees to provide more readable output for RAIDs and Multi-path devices"},{name:["--perms","-m"],description:"Output info about device owner, group and mode"},{name:["--noheadings","-n"],description:"Do not print a header line"},{name:["--output","-o"],description:"Specify which output columns to print",args:{name:"list",isVariadic:!0}},{name:["--output-all","-O"],description:"Output all available columns"},{name:["--pairs","-P"],description:"Produce output in the form of key-value pairs"},{name:["--raw","-r"],description:"Produce output in raw format"},{name:["--scsi","-S"],description:"Output info about SCSI devices only"},{name:["--inverse","-s"],description:"Print dependencies in inverse order"},{name:["--tree","-T"],description:"Force tree-like output format",args:{name:"column"}},{name:["--topology","-t"],description:"Output info about block-device topology"},{name:["--width","-w"],description:"Specifies output width as a number of characters",args:{name:"number"}},{name:["--sort","-x"],description:"Sort output lines by column",args:{name:"column"}},{name:["--zoned","-z"],description:"Print the zone model for each device"},{name:"--sysroot",description:"Gather data for a Linux instance other than the instance from which the lsblk command is issued",args:{name:"directory"}}],args:{name:"device",description:"Device to list",isOptional:!0}}},1970:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={name:"time",description:"Time how long a command takes!",args:{isCommand:!0}}},1991:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=e=>e.split("\n").map(e=>{try{const t=JSON.parse(e);return{name:t.Names,displayName:`${t.Names} (${t.Image})`,icon:"fig://icon?type=docker"}}catch(e){return console.error(e),null}}),i=e=>e.split("\n").map(e=>JSON.parse(e)).map(e=>({name:e.Name,description:e.ID,icon:"fig://icon?type=docker"})),a={runningDockerContainers:{script:["docker","ps","--format","{{ json . }}"],postProcess:n},allDockerContainers:{script:["docker","ps","-a","--format","{{ json . }}"],postProcess:n},pausedDockerContainers:{script:["docker","ps","--filter","status=paused","--format","{{ json . }}"],postProcess:n},allLocalImages:{script:["docker","image","ls","--format","{{ json . }}"],postProcess:function(e){return e.split("\n").map(e=>JSON.parse(e)).map(e=>({name:`${e.ID}`,displayName:`${e.Repository} - ${e.ID}`,icon:"fig://icon?type=docker"}))}},allLocalImagesWithRepository:{script:["docker","image","ls","--format","{{ json . }}"],postProcess:function(e){return e.split("\n").map(e=>JSON.parse(e)).map(e=>({name:e.Repository,displayName:`${e.Repository} - ${e.ID}`,icon:"fig://icon?type=docker"}))}},dockerHubSearch:{script:function(e){if(""!==e[e.length-1])return["docker","search",e[e.length-1],"--format","{{ json . }}"]},postProcess:function(e){return e.split("\n").map(e=>JSON.parse(e)).map(e=>({name:`${e.Name}`,icon:"fig://icon?type=docker"}))},trigger:function(){return!0}},allDockerContexts:{script:["docker","context","list","--format","{{ json . }}"],postProcess:function(e){return e.split("\n").map(e=>JSON.parse(e)).map(e=>({name:e.Name,description:e.Description,icon:"fig://icon?type=docker"}))}},listDockerNetworks:{script:["docker","network","list","--format","{{ json . }}"],postProcess:i},listDockerSwarmNodes:{script:["docker","node","list","--format","{{ json . }}"],postProcess:function(e){return e.split("\n").map(e=>JSON.parse(e)).map(e=>({name:e.ID,displayName:`${e.ID} - ${e.Hostname}`,description:e.Status,icon:"fig://icon?type=docker"}))}},listDockerPlugins:{script:["docker","plugin","list","--format","{{ json . }}"],postProcess:i},listDockerSecrets:{script:["docker","secret","list","--format","{{ json . }}"],postProcess:i},listDockerServices:{script:["docker","service","list","--format","{{ json . }}"],postProcess:function(e){return e.split("\n").map(e=>JSON.parse(e)).map(e=>({name:e.Name,description:e.Image,icon:"fig://icon?type=docker"}))}},listDockerServicesReplicas:{script:["docker","service","list","--format","{{ json . }}"],postProcess:function(e){return e.split("\n").map(e=>JSON.parse(e)).map(e=>({name:`${e.Name}=`,description:e.Image,icon:"fig://icon?type=docker"}))}},listDockerStacks:{script:["docker","stack","list","--format","{{ json . }}"],postProcess:function(e){return e.split("\n").map(e=>JSON.parse(e)).map(e=>({name:e.Name,icon:"fig://icon?type=docker"}))}},listDockerVolumes:{script:["docker","volume","list","--format","{{ json . }}"],postProcess:function(e){return e.split("\n").map(e=>JSON.parse(e)).map(e=>({name:e.Name,icon:"fig://icon?type=docker"}))}}},s={name:"container",generators:a.runningDockerContainers},o={name:"image",generators:a.allLocalImages},r=[s,{name:"command",isCommand:!0}],c={name:"CONTEXT",generators:a.allDockerContexts},l={build:{name:"build",description:"Build an image from a Dockerfile",args:{name:"path",generators:{template:"folders"}},options:[{name:"--add-host",args:{name:"list",description:"Add a custom host-to-IP mapping (host:ip)"}},{name:"--build-arg",args:{name:"list",description:"Set build-time variables"}},{name:"--cache-from",args:{name:"strings",description:"Images to consider as cache sources"}},{name:"--disable-content-trust",description:"Skip image verification (default true)"},{name:["-f","--file"],description:"Name of the Dockerfile (Default is 'PATH/Dockerfile')",args:{name:"string",generators:{template:"filepaths"}}},{name:"--iidfile",description:"Write the image ID to the file",args:{name:"string"}},{name:"--isolation",description:"Container isolation technology",args:{name:"string"}},{name:"--label",description:"Set metadata for an image",args:{name:"list"}},{name:"--network",description:'Set the networking mode for the RUN instructions during build (default "default")',args:{name:"string"}},{name:"--no-cache",description:"Do not use cache when building the image"},{name:["-o","--output"],description:"Output destination (format: type=local,dest=path)",args:{name:"stringArray"}},{name:"--platform",description:"Set platform if server is multi-platform capable",args:{name:"string"}},{name:"--progress",description:"Set type of progress output (auto, plain, tty). Use plain to show container output",args:{name:"string",suggestions:["auto","plain","tty"].map(e=>({name:e}))}},{name:"--pull",description:"Always attempt to pull a newer version of the image"},{name:["-q","--quiet"],description:"Suppress the build output and print image ID on success"},{name:"--secret",description:"Secret file to expose to the build (only if BuildKit enabled): id=mysecret,src=/local/secret",args:{name:"stringArray"}},{name:"--squash",description:"Squash newly built layers into a single new layer"},{name:"--ssh",description:"SSH agent socket or keys to expose to the build (only if BuildKit enabled) (format: default|[=|[,]])",args:{name:"stringArray"}},{name:["-t","--tag"],description:"Name and optionally a tag in the 'name:tag' format"},{name:"--target",description:"Set the target build stage to build",args:{name:"target build stage",generators:{trigger:function(){return!0},script:function(e){let t,n;return e.includes("-f")?(t=e.indexOf("-f"),n=e[t+1]):e.includes("--file")?(t=e.indexOf("--file"),n=e[t+1]):n="Dockerfile",["grep","-iE","FROM.*AS",n]},postProcess:function(e){const t=/(?:[aA][sS]\s+)([\w:.-]+)/;return e.split("\n").map(e=>{const n=t.exec(e);if(n)return{name:n[1]}}).filter(e=>void 0!==e)}}}}]},create:{name:"create",description:"Create a new container",args:[{name:"container",generators:a.allLocalImages},{name:"command",isCommand:!0}],options:[{args:{name:"list"},description:"Add a custom host-to-IP mapping (host:ip)",name:"--add-host"},{args:{name:"list"},description:"Attach to STDIN, STDOUT or STDERR",name:["-a","--attach"]},{args:{name:"uint16"},description:"Block IO (relative weight), between 10 and 1000, or 0 to disable (default 0)",name:"--blkio-weight"},{args:{name:"list"},description:"Block IO weight (relative device weight) (default [])",name:"--blkio-weight-device"},{args:{name:"list"},description:"Add Linux capabilities",name:"--cap-add"},{args:{name:"list"},description:"Drop Linux capabilities",name:"--cap-drop"},{args:{name:"string"},description:"Optional parent cgroup for the container",name:"--cgroup-parent"},{args:{name:"string"},description:"Cgroup namespace to use (host|private)",name:"--cgroupns"},{args:{name:"string"},description:"Write the container ID to the file",name:"--cidfile"},{args:{name:"int"},description:"Limit CPU CFS (Completely Fair Scheduler) period",name:"--cpu-period"},{args:{name:"int"},description:"Limit CPU CFS (Completely Fair Scheduler) quota",name:"--cpu-quota"},{args:{name:"int"},description:"Limit CPU real-time period in microseconds",name:"--cpu-rt-period"},{args:{name:"int"},description:"Limit CPU real-time runtime in microseconds",name:"--cpu-rt-runtime"},{args:{name:"int"},description:"CPU shares (relative weight)",name:["-c","--cpu-shares"]},{args:{name:"decimal"},description:"Number of CPUs",name:"--cpus"},{args:{name:"string"},description:"CPUs in which to allow execution (0-3, 0,1)",name:"--cpuset-cpus"},{args:{name:"string"},description:"MEMs in which to allow execution (0-3, 0,1)",name:"--cpuset-mems"},{args:{name:"list"},description:"Add a host device to the container",name:"--device"},{args:{name:"list"},description:"Add a rule to the cgroup allowed devices list",name:"--device-cgroup-rule"},{args:{name:"list"},description:"Limit read rate (bytes per second) from a device (default [])",name:"--device-read-bps"},{args:{name:"list"},description:"Limit read rate (IO per second) from a device (default [])",name:"--device-read-iops"},{args:{name:"list"},description:"Limit write rate (bytes per second) to a device (default [])",name:"--device-write-bps"},{args:{name:"list"},description:"Limit write rate (IO per second) to a device (default [])",name:"--device-write-iops"},{description:"Skip image verification (default true)",name:"--disable-content-trust"},{args:{name:"list"},description:"Set custom DNS servers",name:"--dns"},{args:{name:"list"},description:"Set DNS options",name:"--dns-option"},{args:{name:"list"},description:"Set custom DNS search domains",name:"--dns-search"},{args:{name:"string"},description:"Container NIS domain name",name:"--domainname"},{args:{name:"string"},description:"Overwrite the default ENTRYPOINT of the image",name:"--entrypoint"},{args:{name:"list"},description:"Set environment variables",name:["-e","--env"]},{args:{name:"list"},description:"Read in a file of environment variables",name:"--env-file"},{args:{name:"list"},description:"Expose a port or a range of ports",name:"--expose"},{args:{name:"gpu-request"},description:"GPU devices to add to the container ('all' to pass all GPUs)",name:"--gpus"},{args:{name:"list"},description:"Add additional groups to join",name:"--group-add"},{args:{name:"string"},description:"Command to run to check health",name:"--health-cmd"},{args:{name:"duration"},description:"Time between running the check (ms|s|m|h) (default 0s)",name:"--health-interval"},{args:{name:"int"},description:"Consecutive failures needed to report unhealthy",name:"--health-retries"},{args:{name:"duration"},description:"Start period for the container to initialize before starting health-retries countdown (ms|s|m|h) (default 0s)",name:"--health-start-period"},{args:{name:"duration"},description:"Maximum time to allow one check to run (ms|s|m|h) (default 0s)",name:"--health-timeout"},{description:"Print usage",name:"--help"},{args:{name:"string"},description:"Container host name",name:["-h","--hostname"]},{description:"Run an init inside the container that forwards signals and reaps processes",name:"--init"},{description:"Keep STDIN open even if not attached",name:["-i","--interactive"]},{args:{name:"string"},description:"IPv4 address (e.g., 172.30.100.104)",name:"--ip"},{args:{name:"string"},description:"IPv6 address (e.g., 2001:db8::33)",name:"--ip6"},{args:{name:"string"},description:"IPC mode to use",name:"--ipc"},{args:{name:"string"},description:"Container isolation technology",name:"--isolation"},{args:{name:"bytes"},description:"Kernel memory limit",name:"--kernel-memory"},{args:{name:"list"},description:"Set meta data on a container",name:["-l","--label"]},{args:{name:"list"},description:"Read in a line delimited file of labels",name:"--label-file"},{args:{name:"list"},description:"Add link to another container",name:"--link"},{args:{name:"list"},description:"Container IPv4/IPv6 link-local addresses",name:"--link-local-ip"},{args:{name:"string"},description:"Logging driver for the container",name:"--log-driver"},{args:{name:"list"},description:"Log driver options",name:"--log-opt"},{args:{name:"string"},description:"Container MAC address (e.g., 92:d0:c6:0a:29:33)",name:"--mac-address"},{args:{name:"bytes"},description:"Memory limit",name:["-m","--memory"]},{args:{name:"bytes"},description:"Memory soft limit",name:"--memory-reservation"},{args:{name:"bytes"},description:"Swap limit equal to memory plus swap: '-1' to enable unlimited swap",name:"--memory-swap"},{args:{name:"int"},description:"Tune container memory swappiness (0 to 100) (default -1)",name:"--memory-swappiness"},{args:{name:"mount"},description:"Attach a filesystem mount to the container",name:"--mount"},{args:{name:"string"},description:"Assign a name to the container",name:"--name"},{args:{name:"network"},description:"Connect a container to a network",name:"--network"},{args:{name:"list"},description:"Add network-scoped alias for the container",name:"--network-alias"},{description:"Disable any container-specified HEALTHCHECK",name:"--no-healthcheck"},{description:"Disable OOM Killer",name:"--oom-kill-disable"},{args:{name:"int"},description:"Tune host's OOM preferences (-1000 to 1000)",name:"--oom-score-adj"},{args:{name:"string"},description:"PID namespace to use",name:"--pid"},{args:{name:"int"},description:"Tune container pids limit (set -1 for unlimited)",name:"--pids-limit"},{args:{name:"string"},description:"Set platform if server is multi-platform capable",name:"--platform"},{description:"Give extended privileges to this container",name:"--privileged"},{args:{name:"list"},description:"Publish a container's port(s) to the host",name:["-p","--publish"]},{description:"Publish all exposed ports to random ports",name:["-P","--publish-all"]},{args:{name:"string"},description:'Pull image before creating ("always"|"missing"|"never") (default "missing")',name:"--pull"},{description:"Mount the container's root filesystem as read only",name:"--read-only"},{args:{name:"string"},description:'Restart policy to apply when a container exits (default "no")',name:"--restart"},{description:"Automatically remove the container when it exits",name:"--rm"},{args:{name:"string"},description:"Runtime to use for this container",name:"--runtime"},{args:{name:"list"},description:"Security Options",name:"--security-opt"},{args:{name:"bytes"},description:"Size of /dev/shm",name:"--shm-size"},{args:{name:"string"},description:'Signal to stop a container (default "SIGTERM")',name:"--stop-signal"},{args:{name:"int"},description:"Timeout (in seconds) to stop a container",name:"--stop-timeout"},{args:{name:"list"},description:"Storage driver options for the container",name:"--storage-opt"},{args:{name:"map"},description:"Sysctl options (default map[])",name:"--sysctl"},{args:{name:"list"},description:"Mount a tmpfs directory",name:"--tmpfs"},{description:"Allocate a pseudo-TTY",name:["-t","--tty"]},{args:{name:"ulimit"},description:"Ulimit options (default [])",name:"--ulimit"},{args:{name:"string"},description:"Username or UID (format: [:])",name:["-u","--user"]},{args:{name:"string"},description:"User namespace to use",name:"--userns"},{args:{name:"string"},description:"UTS namespace to use",name:"--uts"},{args:{name:"list"},description:"Bind mount a volume",name:["-v","--volume"]},{args:{name:"string"},description:"Optional volume driver for the container",name:"--volume-driver"},{args:{name:"list"},description:"Mount volumes from the specified container(s)",name:"--volumes-from"},{args:{name:"string"},description:"Working directory inside the container",name:["-w","--workdir"]}]},attach:{name:"attach",description:"Attach local standard input, output, and error streams to a running container,",options:[{name:"--detach-keys",description:"Override the key sequence for detaching a container",args:{name:"string"}},{name:"--no-stdin",description:"Do not attach STDIN"},{name:"--sig-proxy",description:"Proxy all received signals to the process (default true)"}]},commit:{name:"commit",description:"Create a new image from a container's changes",args:[s,{name:"[REPOSITORY[:TAG]]"}],options:[{args:{name:"string"},description:'Author (e.g., "John Hannibal Smith ")',name:["-a","--author"]},{args:{name:"list"},description:"Apply Dockerfile instruction to the created image",name:["-c","--change"]},{args:{name:"string"},description:"Commit message",name:["-m","--message"]},{description:"Pause container during commit (default true)",name:["-p","--pause"]}]},cp:{name:"cp",description:"Copy files/folders between a container and the local filesystem",args:{name:"CONTAINER:SRC_PATH DEST_PATH|- OR SRC_PATH|- CONTAINER:DEST_PATH"},options:[{description:"Archive mode (copy all uid/gid information)",name:["-a","--archive"]},{description:"Always follow symbol link in SRC_PATH",name:["-L","--follow-link"]}]},diff:{name:"diff",description:"Inspect changes to files or directories on a container's filesystem",args:s},exec:{name:"exec",description:"Run a command in a running container",options:[{name:"-it",description:"Launch an interactive session",icon:"fig://icon?type=commandkey"},{description:"Detached mode: run command in the background",name:["-d","--detach"]},{args:{name:"string"},description:"Override the key sequence for detaching a container",name:"--detach-keys"},{args:{name:"list"},description:"Set environment variables",name:["-e","--env"]},{args:{name:"list"},description:"Read in a file of environment variables",name:"--env-file"},{description:"Keep STDIN open even if not attached",name:["-i","--interactive"]},{description:"Give extended privileges to the command",name:"--privileged"},{description:"Allocate a pseudo-TTY",name:["-t","--tty"]},{args:{name:"string"},description:"Username or UID (format: [:])",name:["-u","--user"]},{args:{name:"string"},description:"Working directory inside the container",name:["-w","--workdir"]}],args:r},export:{name:"export",description:"Export a container's filesystem as a tar archive",args:s,options:[{description:"Write to a file, instead of STDOUT",name:["-o","--output"],args:{name:"string"}}]},kill:{name:"kill",description:"Kill one or more running containers",args:{...s,isVariadic:!0},options:[{description:'Signal to send to the container (default "KILL")',name:["-s","--signal"],args:{name:"string"}}]},logs:{name:"logs",description:"Fetch the logs of a container",args:s,options:[{description:"Show extra details provided to logs",name:"--details"},{description:"Follow log output",name:["-f","--follow"]},{description:"Show logs since timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)",name:"--since",args:{name:"string"}},{description:'Number of lines to show from the end of the logs (default "all")',name:["-n","--tail"],args:{name:"string"}},{description:"Show timestamps",name:["-t","--timestamps"]},{description:"Show logs before a timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)",name:"--until",args:{name:"string"}}]},pause:{name:"pause",description:"Pause all processes within one or more containers",args:s},port:{name:"port",description:"List port mappings or a specific mapping for the container",args:[s,{name:"[PRIVATE_PORT[/PROTO]]"}]},rename:{name:"rename",description:"Rename a container",args:[s,{name:"NEW_NAME"}]},restart:{name:"restart",description:"Restart one or more containers",args:s,options:[{description:"Seconds to wait for stop before killing the container (default 10)",name:["-t","--time"],args:{name:"int"}}]},rm:{name:"rm",description:"Remove one or more containers",args:{isVariadic:!0,name:"containers",generators:a.allDockerContainers},options:[{name:["-f","--force"],description:"Force the removal of a running container (uses SIGKILL)"},{name:["-l","--link"],description:"Remove the specified link"},{name:["-v","--volumes"],description:"Remove the anonymous volumes associated with the container"}]},run:{name:"run",description:"Run a command in a new container",options:[{name:"-it",description:"Launch an interactive session",icon:"fig://icon?type=commandkey"},{name:"--add-host",description:"Add a custom host-to-IP mapping (host:ip)",args:{name:"list"}},{name:["-a","--attach"],description:"Attach to STDIN, STDOUT or STDERR",args:{name:"list"}},{name:"--blkio-weight",description:"Block IO (relative weight), between 10 and 1000, or 0 to disable (default 0)",args:{name:"uint16"}},{name:"--blkio-weight-device",description:"Block IO weight (relative device weight) (default [])",args:{name:"list"}},{name:"--cap-add",description:"Add Linux capabilities",args:{name:"list"}},{name:"--cap-drop",description:"Drop Linux capabilities",args:{name:"list"}},{name:"--cgroup-parent",description:"Optional parent cgroup for the container",args:{name:"string"}},{name:"--cgroupns",description:"Cgroup namespace to use (host|private)\n'host': Run the container in the Docker host's cgroup namespace\n'private': Run the container in its own private cgroup namespace\n'': Use the cgroup namespace as configured by the\ndefault-cgroupns-mode option on the daemon (default)",args:{name:"string"}},{name:"--cidfile",description:"Write the container ID to the file",args:{name:"string"}},{name:"--cpu-period",description:"Limit CPU CFS (Completely Fair Scheduler) period",args:{name:"int"}},{name:"--cpu-quota",description:"Limit CPU CFS (Completely Fair Scheduler) quota",args:{name:"int"}},{name:"--cpu-rt-period",description:"Limit CPU real-time period in microseconds",args:{name:"int"}},{name:"--cpu-rt-runtime",description:"Limit CPU real-time runtime in microseconds",args:{name:"int"}},{name:["-c","--cpu-shares"],description:"CPU shares (relative weight)",args:{name:"int"}},{name:"--cpus",description:"Number of CPUs",args:{name:"decimal"}},{name:"--cpuset-cpus",description:"CPUs in which to allow execution (0-3, 0,1)",args:{name:"string"}},{name:"--cpuset-mems",description:"MEMs in which to allow execution (0-3, 0,1)",args:{name:"string"}},{name:["-d","--detach"],description:"Run container in background and print container ID"},{name:"--detach-keys",description:"Override the key sequence for detaching a container",args:{name:"string"}},{name:"--device",description:"Add a host device to the container",args:{name:"list"}},{name:"--device-cgroup-rule",description:"Add a rule to the cgroup allowed devices list",args:{name:"list"}},{name:"--device-read-bps",description:"Limit read rate (bytes per second) from a device (default [])",args:{name:"list"}},{name:"--device-read-iops",description:"Limit read rate (IO per second) from a device (default [])",args:{name:"list"}},{name:"--device-write-bps",description:"Limit write rate (bytes per second) to a device (default [])",args:{name:"list"}},{name:"--device-write-iops",description:"Limit write rate (IO per second) to a device (default [])",args:{name:"list"}},{name:"--disable-content-trust",description:"Skip image verification (default true)"},{name:"--dns",description:"Set custom DNS servers",args:{name:"list"}},{name:"--dns-option",description:"Set DNS options",args:{name:"list"}},{name:"--dns-search",description:"Set custom DNS search domains",args:{name:"list"}},{name:"--domainname",description:"Container NIS domain name",args:{name:"string"}},{name:"--entrypoint",description:"Overwrite the default ENTRYPOINT of the image",args:{name:"string"}},{name:["-e","--env"],description:"Set environment variables",args:{name:"list"}},{name:"--env-file",description:"Read in a file of environment variables",args:{name:"list"}},{name:"--expose",description:"Expose a port or a range of ports",args:{name:"list"}},{name:"--gpus",description:"GPU devices to add to the container ('all' to pass all GPUs)",args:{name:"gpu-request"}},{name:"--group-add",description:"Add additional groups to join",args:{name:"list"}},{name:"--health-cmd",description:"Command to run to check health",args:{name:"string"}},{name:"--health-interval",description:"Time between running the check (ms|s|m|h) (default 0s)",args:{name:"duration"}},{name:"--health-retries",description:"Consecutive failures needed to report unhealthy",args:{name:"int"}},{name:"--health-start-period",description:"Start period for the container to initialize before starting health-retries countdown (ms|s|m|h) (default 0s)",args:{name:"duration"}},{name:"--health-timeout",description:"Maximum time to allow one check to run (ms|s|m|h) (default 0s)",args:{name:"duration"}},{name:"--help",description:"Print usage"},{name:["-h","--hostname"],description:"Container host name",args:{name:"string"}},{name:"--init",description:"Run an init inside the container that forwards signals and reaps processes"},{name:["-i","--interactive"],description:"Keep STDIN open even if not attached"},{name:"--ip",description:"IPv4 address (e.g., 172.30.100.104)",args:{name:"string"}},{name:"--ip6",description:"IPv6 address (e.g., 2001:db8::33)",args:{name:"string"}},{name:"--ipc",description:"IPC mode to use",args:{name:"string"}},{name:"--isolation",description:"Container isolation technology",args:{name:"string"}},{name:"--kernel-memory",description:"Kernel memory limit",args:{name:"bytes"}},{name:["-l","--label"],description:"Set meta data on a container",args:{name:"list"}},{name:"--label-file",description:"Read in a line delimited file of labels",args:{name:"list"}},{name:"--link",description:"Add link to another container",args:{name:"list"}},{name:"--link-local-ip",description:"Container IPv4/IPv6 link-local addresses",args:{name:"list"}},{name:"--log-driver",description:"Logging driver for the container",args:{name:"string",suggestions:["json-file","syslog","journald","gelf","fluentd","awslogs","splunk","etwlogs","gcplogs","none"]}},{name:"--log-opt",description:"Log driver options",args:{name:"list"}},{name:"--mac-address",description:"Container MAC address (e.g., 92:d0:c6:0a:29:33)",args:{name:"string"}},{name:["-m","--memory"],description:"Memory limit",args:{name:"bytes"}},{name:"--memory-reservation",description:"Memory soft limit",args:{name:"bytes"}},{name:"--memory-swap",description:"Swap limit equal to memory plus swap: '-1' to enable unlimited swap",args:{name:"bytes"}},{name:"--memory-swappiness",description:"Tune container memory swappiness (0 to 100) (default -1)",args:{name:"int"}},{name:"--mount",description:"Attach a filesystem mount to the container",args:{name:"mount"}},{name:"--name",description:"Assign a name to the container",args:{name:"string"}},{name:"--network",description:"Connect a container to a network",args:{name:"network"}},{name:"--network-alias",description:"Add network-scoped alias for the container",args:{name:"list"}},{name:"--no-healthcheck",description:"Disable any container-specified HEALTHCHECK"},{name:"--oom-kill-disable",description:"Disable OOM Killer"},{name:"--oom-score-adj",description:"Tune host's OOM preferences (-1000 to 1000)",args:{name:"int"}},{name:"--pid",description:"PID namespace to use",args:{name:"string"}},{name:"--pids-limit",description:"Tune container pids limit (set -1 for unlimited)",args:{name:"int"}},{name:"--platform",description:"Set platform if server is multi-platform capable",args:{name:"string"}},{name:"--privileged",description:"Give extended privileges to this container"},{name:["-p","--publish"],description:"Publish a container's port(s) to the host",args:{name:"list"}},{name:["-P","--publish-all"],description:"Publish all exposed ports to random ports"},{name:"--pull",description:"Pull image before running ('always'|'missing'|'never') (default 'missing')",args:{name:"string"}},{name:"--read-only",description:"Mount the container's root filesystem as read only"},{name:"--restart",description:"Restart policy to apply when a container exits (default 'no')",args:{name:"string"}},{name:"--rm",description:"Automatically remove the container when it exits"},{name:"--runtime",description:"Runtime to use for this container",args:{name:"string"}},{name:"--security-opt",description:"Security Options",args:{name:"list"}},{name:"--shm-size",description:"Size of /dev/shm",args:{name:"bytes"}},{name:"--sig-proxy",description:"Proxy received signals to the process (default true)"},{name:"--stop-signal",description:"Signal to stop a container (default 'SIGTERM')",args:{name:"string"}},{name:"--stop-timeout",description:"Timeout (in seconds) to stop a container",args:{name:"int"}},{name:"--storage-opt",description:"Storage driver options for the container",args:{name:"list"}},{name:"--sysctl",description:"Sysctl options (default map[])",args:{name:"map"}},{name:"--tmpfs",description:"Mount a tmpfs directory",args:{name:"list"}},{name:["-t","--tty"],description:"Allocate a pseudo-TTY"},{name:"--ulimit",description:"Ulimit options (default [])",args:{name:"ulimit"}},{name:["-u","--user"],description:"Username or UID (format: [:])",args:{name:"string"}},{name:"--userns",description:"User namespace to use",args:{name:"string"}},{name:"--uts",description:"UTS namespace to use",args:{name:"string"}},{name:["-v","--volume"],description:"Bind mount a volume",args:{name:"list"}},{name:"--volume-driver",description:"Optional volume driver for the container",args:{name:"string"}},{name:"--volumes-from",description:"Mount volumes from the specified container(s)",args:{name:"list"}},{name:["-w","--workdir"],description:"Working directory inside the container",args:{name:"string"}}],args:[{name:"image",description:"The Docker image to use",generators:{script:["docker","images","--format","{{.Repository}} {{.Size}} {{.Tag}} {{.ID}}"],postProcess:function(e){return e.split("\n").map(e=>{const[t,n,i,a]=e.split(" ");return{name:t,description:`${a}@${i} - ${n}`,icon:"fig://icon?type=docker"}})}}},{name:"command"}]},sbom:{name:"sbom",description:"View the packaged-based Software Bill Of Materials (SBOM) for an image",args:{name:"image",generators:a.allLocalImagesWithRepository},options:[{description:"Show debug logging",name:["-D","--debug"]},{description:"Exclude paths from being scanned using a glob expression",name:"--exclude",args:{name:"paths"}},{description:"Report output format",name:"--format",args:{name:"fromat",suggestions:["syft-json","cyclonedx-xml","cyclonedx-json","github-0-json","spdx-tag-value","spdx-json","table","text"],default:"table"}},{description:"[experimental] selection of layers to catalog",name:"--layers",args:{name:"layers",suggestions:["squashed","all"],default:"squashed"}},{name:["-o","--output"],description:"File to write the default report output to (default is STDOUT)",args:{name:"file",template:["filepaths"],suggestCurrentToken:!0}},{name:"--platform",description:"An optional platform specifier for container image sources (e.g. 'linux/arm64', 'linux/arm64/v8', 'arm64', 'linux')",args:{name:"platform"}},{name:"--quiet",description:"Suppress all non-report output"},{name:["-v","--version"],description:"Version for sbom"}]},start:{name:"start",description:"Start one or more stopped containers",args:{name:"container",generators:a.allDockerContainers},options:[{description:"Attach STDOUT/STDERR and forward signals",name:["-a","--attach"]},{description:"Override the key sequence for detaching a container",name:"--detach-keys",args:{name:"string"}},{description:"Attach container's STDIN",name:["-i","--interactive"]}]},stats:{name:"stats",description:"Display a live stream of container(s) resource usage statistics",args:s,options:[{description:"Show all containers (default shows just running)",name:["-a","--all"]},{description:"Pretty-print images using a Go template",name:"--format",args:{name:"string"}},{description:"Disable streaming stats and only pull the first result",name:"--no-stream"},{description:"Do not truncate output",name:"--no-trunc"}]},stop:{name:"stop",description:"Stop one or more running containers",args:s,options:[{name:["-t","--t"],description:"Seconds to wait for stop before killing it (default 10)",args:{name:"int"}}]},top:{name:"top",description:"Display the running processes of a container",args:s},unpause:{name:"unpause",description:"Unpause all processes within one or more containers",args:{name:"container",generators:a.pausedDockerContainers}},update:{name:"update",description:"Update configuration of one or more containers",args:s,options:[{args:{name:"uint16"},description:"Block IO (relative weight), between 10 and 1000, or 0 to disable (default 0)",name:"--blkio-weight"},{args:{name:"int"},description:"Limit CPU CFS (Completely Fair Scheduler) period",name:"--cpu-period"},{args:{name:"int"},description:"Limit CPU CFS (Completely Fair Scheduler) quota",name:"--cpu-quota"},{args:{name:"int"},description:"Limit the CPU real-time period in microseconds",name:"--cpu-rt-period"},{args:{name:"int"},description:"Limit the CPU real-time runtime in microseconds",name:"--cpu-rt-runtime"},{args:{name:"int"},description:"CPU shares (relative weight)",name:["-c","--cpu-shares"]},{args:{name:"decimal"},description:"Number of CPUs",name:"--cpus"},{args:{name:"string"},description:"CPUs in which to allow execution (0-3, 0,1)",name:"--cpuset-cpus"},{args:{name:"string"},description:"MEMs in which to allow execution (0-3, 0,1)",name:"--cpuset-mems"},{args:{name:"bytes"},description:"Kernel memory limit",name:"--kernel-memory"},{args:{name:"bytes"},description:"Memory limit",name:["-m","--memory"]},{args:{name:"bytes"},description:"Memory soft limit",name:"--memory-reservation"},{args:{name:"bytes"},description:"Swap limit equal to memory plus swap: '-1' to enable unlimited swap",name:"--memory-swap"},{args:{name:"int"},description:"Tune container pids limit (set -1 for unlimited)",name:"--pids-limit"},{args:{name:"string"},description:"Restart policy to apply when a container exits",name:"--restart"}]},wait:{name:"wait",description:"Block until one or more containers stop, then print their exit codes",args:s},ps:{name:"ps",description:"List containers",options:[{description:"Show all containers (default shows just running)",name:["-a","--all"]},{args:{name:"filter"},description:"Filter output based on conditions provided",name:["-f","--filter"]},{args:{name:"string"},description:"Pretty-print containers using a Go template",name:"--format"},{args:{name:"int"},description:"Show n last created containers (includes all states) (default -1)",name:["-n","--last"]},{description:"Show the latest created container (includes all states)",name:["-l","--latest"]},{description:"Don't truncate output",name:"--no-trunc"},{description:"Only display container IDs",name:["-q","--quiet"]},{description:"Display total file sizes",name:["-s","--size"]}]},history:{name:"history",description:"Show the history of an image",args:o,options:[{description:"Pretty-print images using a Go template",name:"--format",args:{name:"string"}},{description:"Print sizes and dates in human readable format (default true)",name:["-H","--human"]},{description:"Don't truncate output",name:"--no-trunc"},{description:"Only show image IDs",name:["-q","--quiet"]}]},imageImport:{name:"import",description:"Import the contents from a tarball to create a filesystem image",args:{name:"file|URL|- [REPOSITORY[:TAG]]"},options:[{args:{name:"list"},description:"Apply Dockerfile instruction to the created image",name:["-c","--change"]},{args:{name:"string"},description:"Set commit message for imported image",name:["-m","--message"]},{args:{name:"string"},description:"Set platform if server is multi-platform capable",name:"--platform"}]},imageList:{name:"images",description:"List images",args:{name:"[REPOSITORY[:TAG]]"},options:[{name:["-a","--all"],description:"Show all images (default hides intermediate images)"},{name:"--digests",description:"Show digests"},{name:["-f","--filter"],description:"Filter output based on conditions provided",args:{name:"filter"}},{name:"--format",description:"Pretty-print images using a Go template",args:{name:"string"}},{name:"--no-trunc",description:"Don't truncate output"},{name:["-q","--quiet"],description:"Only show image IDs"}]},load:{name:"load",description:"Load an image from a tar archive or STDIN",options:[{name:"-i",description:"Read from tar archive file, instead of STDIN",args:{name:"string"}},{name:["-q","--quiet"],description:"Suppress the load output"}]},pull:{name:"pull",description:"Pull an image or a repository from a registry",args:{name:"NAME[:TAG|@DIGEST]",generators:a.dockerHubSearch,debounce:!0},options:[{description:"Download all tagged images in the repository",name:["-a","--all-tags"]},{description:"Skip image verification (default true)",name:"--disable-content-trust"},{description:"Set platform if server is multi-platform capable",name:"--platform",args:{name:"string"}},{description:"Suppress verbose output",name:["-q","--quiet"]}]},push:{name:"push",description:"Push an image or a repository to a registry",args:{name:"NAME[:TAG]"},options:[{description:"Push all tagged images in the repository",name:["-a","--all-tags"]},{description:"Skip image signing (default true)",name:"--disable-content-trust"},{description:"Suppress verbose output",name:["-q","--quiet"]}]},tag:{name:"tag",description:"Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE",args:{name:"SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]"}},imageSave:{name:"save",description:"Save one or more images to a tar archive (streamed to STDOUT by default)",args:o,options:[{description:"Write to a file, instead of STDOUT",name:["-o","--output"],args:{name:"string"}}]},removeImage:{name:"rmi",description:"Remove one or more images",args:{...o,isVariadic:!0},options:[{name:["-f","--force"],description:"Force removal of the image"},{name:"--no-prune",description:"Do not delete untagged parents"}]}},d={name:"docker",description:"A self-sufficient runtime for containers",subcommands:[l.attach,l.build,l.commit,l.cp,l.create,l.diff,{name:"events",description:"Get real time events from the server",options:[{args:{name:"filter"},description:"Filter output based on conditions provided",name:["-f","--filter"]},{args:{name:"string"},description:"Format the output using the given Go template",name:"--format"},{args:{name:"string"},description:"Show all events created since timestamp",name:"--since"},{args:{name:"string"},description:"Stream events until this timestamp",name:"--until"}]},l.exec,l.export,l.history,l.imageList,l.imageImport,{name:"info",description:"Display system-wide information",options:[{args:{name:"string"},description:"Format the output using the given Go template",name:["-f","--format"]}]},{name:"inspect",description:"Return low-level information on Docker objects",args:{name:"Name or ID",generators:[{script:["docker","ps","-a","--format","{{ json . }}"],postProcess:function(e){return e.split("\n").map(e=>JSON.parse(e)).map(e=>({name:e.ID,displayName:`[con] ${e.ID} (${e.Image})`}))}},{script:["docker","images","-a","--format","{{ json . }}"],postProcess:function(e){return e.split("\n").map(e=>JSON.parse(e)).map(e=>{let t;return""===e.Repository?t=e.ID:(t=e.Repository,""!==e.Tag&&(t+=`:${e.Tag}`)),{name:e.ID,displayName:`[img] ${t}`}})}},{script:["docker","volume","ls","--format","{{ json . }}"],postProcess:function(e){return e.split("\n").map(e=>JSON.parse(e)).map(e=>({name:e.Name,displayName:`[vol] ${e.Name}`}))}}]},options:[{name:["-f","--format"],description:"Format the output using the given Go template",args:{name:"string"}},{name:["-s","--size"],description:"Display total file sizes if the type is container"},{name:"--type",description:"Return JSON for specified type",args:{name:"string"}}]},l.kill,l.load,{name:"login",description:"Log in to a Docker registry",args:{name:"server"},options:[{description:"Password",name:["-p","--password"],args:{name:"string"}},{description:"Take the password from stdin",name:"--password-stdin"},{description:"Username",name:["-u","--username"],args:{name:"string"}}]},{name:"logout",description:"Log out from a Docker registry",args:{name:"server"}},l.logs,l.pause,l.port,l.ps,l.pull,l.push,l.rename,l.restart,l.rm,l.removeImage,l.run,l.imageSave,{name:"search",description:"Search the Docker Hub for images",args:{name:"TERM",description:"Search term"},options:[{args:{name:"filter"},description:"Filter output based on conditions provided",name:["-f","--filter"]},{args:{name:"string"},description:"Pretty-print search using a Go template",name:"--format"},{args:{name:"int"},description:"Max number of search results (default 25)",name:"--limit"},{description:"Don't truncate output",name:"--no-trunc"}]},l.sbom,l.start,l.stats,l.stop,l.tag,l.top,l.unpause,l.update,{name:"version",description:"Show the Docker version information",options:[{description:"Format the output. Values: [pretty | json]. (Default: pretty)",name:["-f","--format"],args:{name:"string",suggestions:["pretty","json"]}},{description:"Kubernetes config file",name:"--kubeconfig",args:{name:"string"}}]},l.wait,{name:"builder",description:"Manage builds",subcommands:[l.build,{name:"prune",description:"Amount of disk space to keep for cache",options:[{name:["-a","--all"],description:"Remove all unused build cache, not just dangling ones"},{name:"--filter",description:"Provide filter values (e.g. 'until=24h')",args:{name:"filter"}},{name:["-f","--force"],description:"Do not prompt for confirmation"},{name:"--keep-storage",description:"Amount of disk space to keep for cache",args:{name:"bytes"}}]}]},{name:"config",description:"Manage Docker configs",subcommands:[{name:"create",description:"Create a config from a file or STDIN",args:{name:"file",template:"filepaths"},options:[{name:"-l",description:"Config labels",args:{name:"list"}},{name:"--template-driver",description:"Template driver",args:{name:"string"}}]},{name:"inspect",description:"Display detailed information on one or more configs",args:{name:"CONFIG",isVariadic:!0},options:[{name:"-f",description:"Format the output using the given Go template",args:{name:"string"}},{name:"--pretty",description:"Print the information in a human friendly format"}]},{name:"ls",description:"List configs",options:[{name:"-f",description:"Filter output based on conditions provided",args:{name:"filter"}},{name:"--format",description:"Pretty-print configs using a Go template",args:{name:"string"}},{name:["-q","--quiet"],description:"Only display IDs"}]},{name:"rm",description:"Remove one or more configs",args:{name:"CONFIG",isVariadic:!0}}]},{name:"container",description:"Manage containers",subcommands:[l.attach,l.cp,l.create,l.diff,l.exec,l.export,{name:"inspect",description:"Return low-level information on Docker objects",args:s,options:[{name:["-f","--format"],description:"Format the output using the given Go template",args:{name:"string"}},{name:["-s","--size"],description:"Display total file sizes if the type is container"}]},l.kill,l.logs,{...l.ps,name:"ls"},l.pause,l.port,{name:"prune",description:"Remove all stopped containers",options:[{name:"--filter",description:"Provide filter values (e.g. 'until=')",args:{name:"filter"}},{name:["-f","--force"],description:"Do not prompt for confirmation"}]},l.rename,l.restart,l.rm,l.run,l.start,l.stats,l.stop,l.top,l.unpause,l.update,l.wait]},{name:"context",description:"Manage contexts",subcommands:[{name:"create",description:"Create new context",subcommands:[{name:"aci",description:"Create a context for Azure Container Instances",args:{name:"CONTEXT"},options:[{name:"--description",description:"Description of the context",args:{name:"string"}},{name:["-h","--help"],description:"Help for aci"},{name:"--location",description:'Location (default "eastus")',args:{name:"string"}},{name:"--resource-group",description:"Resource group",args:{name:"string"}},{name:"--subscription-id",description:"Location",args:{name:"string"}}]},{name:"ecs",description:"Create a context for Amazon ECS",args:{name:"CONTEXT"},options:[{name:"--access-keys",description:"Use AWS access keys from file",args:{name:"string"}},{name:"--description",description:"Description of the context",args:{name:"string"}},{name:"--from-env",description:"Use AWS environment variables for profile, or credentials and region"},{name:["-h","--help"],description:"Help for ecs"},{name:"--local-simulation",description:"Create context for ECS local simulation endpoints"},{name:"--profile",description:"Use an existing AWS profile",args:{name:"string"}}]}],options:[{name:"--default-stack-orchestrator",description:"Default orchestrator for stack operations to use with this context (swarm|kubernetes|all)",args:{name:"string",suggestions:["swarm","kubernetes","all"]}},{name:"--description",description:"Description of the context",args:{name:"string"}},{name:"--docker",description:"Set the docker endpoint (default [])",args:{name:"stringToString"}},{name:"--from",description:"Create context from a named context",args:{name:"string"}},{name:["-h","--help"],description:"Help for create"},{name:"--kubernetes",description:"Set the kubernetes endpoint (default [])",args:{name:"stringToString"}}]},{name:"export",description:"Export a context to a tar or kubeconfig file",args:[c,{name:"FILE",template:"filepaths"}],options:[{name:["-h","--help"],description:"Help for export"},{name:"--kubeconfig",description:"Export as a kubeconfig file"}]},{name:"import",description:"Import a context from a tar or zip file",args:[{name:"CONTEXT"},{name:"FILE",template:"filepaths"}],options:[{name:["-h","--help"],description:"Help for export"}]},{name:"inspect",description:"Display detailed information on one or more contexts",args:{...c,isVariadic:!0},options:[{name:"-f",description:"Format the output using the given Go template",args:{name:"string"}},{name:["-h","--help"],description:"Help for inspect"}]},{name:"list",description:"List available contexts",options:[{name:"--format",description:"Format the output. Values: [pretty | json]. (Default: pretty)",args:{name:"string",suggestions:["pretty","json"]}},{name:["-h","--help"],description:"Help for list"},{name:["-q","--quiet"],description:"Only show context names"}]},{name:"rm",description:"Remove one or more contexts",args:{...c,isVariadic:!0},options:[{name:["-f","--force"],description:"Force removing current context"},{name:["-h","--help"],description:"Help for rm"}]},{name:"show",description:"Print the current context",options:[{name:["-h","--help"],description:"Help for show"}]},{name:"update",description:"Update a context",args:c,options:[{name:"--default-stack-orchestrator",description:"Default orchestrator for stack operations to use with this context (swarm|kubernetes|all)",args:{name:"string",suggestions:["swarm","kubernetes","all"]}},{name:"--description",description:"Description of the context",args:{name:"string"}},{name:"--docker",description:"Set the docker endpoint (default [])",args:{name:"stringToString"}},{name:["-h","--help"],description:"Help for update"},{name:"--kubernetes",description:"Set the kubernetes endpoint (default [])",args:{name:"stringToString"}}]},{name:"use",description:"Set the default context",args:c,options:[{name:["-h","--help"],description:"Help for use"}]}],options:[{name:["-h","--help"],description:"Help for context"}]},{name:"image",description:"Manage images",subcommands:[l.build,l.history,l.imageImport,{name:"inspect",description:"Display detailed information on one or more images",args:{...o,isVariadic:!0},options:[{name:"-f",description:"Format the output using the given Go template",args:{name:"string"}}]},l.load,{...l.imageList,name:"ls"},{name:"prune",description:"Remove unused images",options:[{name:["-a","--all"],description:"Remove all unused images, not just dangling ones"},{name:"--filter",description:"Provide filter values (e.g. 'until=')",args:{name:"filter"}},{name:["-f","--force"],description:"Do not prompt for confirmation"}]},l.pull,l.push,{...l.removeImage,name:"rm"},l.imageSave,l.tag]},{name:"network",description:"Manage networks",subcommands:[{name:"connect",description:"Connect a container to a network",args:[{name:"NETWORK",generators:a.listDockerNetworks},s],options:[{name:"--alias",description:"Add network-scoped alias for the container",args:{name:"strings"}},{name:"--driver-opt",description:"Driver options for the network",args:{name:"strings"}},{name:"--ip",description:"IPv4 address (e.g., 172.30.100.104)",args:{name:"string"}},{name:"--ip6",description:"IPv6 address (e.g., 2001:db8::33)",args:{name:"string"}},{name:"--link",description:"Add link to another container",args:{name:"list"}},{name:"--link-local-ip",description:"Add a link-local address for the container",args:{name:"strings"}}]},{name:"create",description:"Create a network",args:{name:"NETWORK"},options:[{name:"--attachable",description:"Enable manual container attachment"},{name:"--aux-address",description:"Auxiliary IPv4 or IPv6 addresses used by Network driver (default map[])",args:{name:"map"}},{name:"--config-from",description:"The network from which to copy the configuration",args:{name:"string"}},{name:"--config-only",description:"Create a configuration only network"},{name:["-d","--driver"],description:'Driver to manage the Network (default "bridge")',args:{name:"string"}},{name:"--gateway",description:"IPv4 or IPv6 Gateway for the master subnet",args:{name:"strings"}},{name:"--ingress",description:"Create swarm routing-mesh network"},{name:"--internal",description:"Restrict external access to the network"},{name:"--ip-range",description:"Allocate container ip from a sub-range",args:{name:"strings"}},{name:"--ipam-driver",description:'IP Address Management Driver (default "default")',args:{name:"string"}},{name:"--ipam-opt",description:"Set IPAM driver specific options (default map[])",args:{name:"map"}},{name:"--ipv6",description:"Enable IPv6 networking"},{name:"--label",description:"Set metadata on a network",args:{name:"list"}},{name:["-o","--opt"],description:"Set driver specific options (default map[])",args:{name:"map"}},{name:"--scope",description:"Control the network's scope",args:{name:"string"}},{name:"--subnet",description:"Subnet in CIDR format that represents a network segment",args:{name:"strings"}}]},{name:"disconnect",description:"Disconnect a container from a network",args:[{name:"NETWORK",generators:a.listDockerNetworks},s],options:[{name:["-f","--force"],description:"Force the container to disconnect from a network"}]},{name:"inspect",description:"Display detailed information on one or more networks",args:{name:"NETWORK",generators:a.listDockerNetworks,isVariadic:!0},options:[{name:["-f","--format"],description:"Format the output using the given Go template",args:{name:"string"}},{name:["-v","--verbose"],description:"Verbose output for diagnostics"}]},{name:"ls",description:"List networks",options:[{name:["-f","--filter"],description:"Provide filter values (e.g. 'driver=bridge')",args:{name:"filter"}},{name:"--format",description:"Pretty-print networks using a Go template",args:{name:"string"}},{name:"--no-trunc",description:"Do not truncate the output"},{name:["-q","--quiet"],description:"Only display network IDs"}]},{name:"prune",description:"Remove all unused networks",options:[{name:"--filter",description:"Provide filter values (e.g. 'until=')",args:{name:"filter"}},{name:["-f","--force"],description:"Do not prompt for confirmation"}]},{name:"rm",description:"Remove one or more networks",args:{name:"NETWORK",generators:a.listDockerNetworks,isVariadic:!0}}]},{name:"node",description:"Manage Swarm nodes",subcommands:[{name:"demote",description:"Demote one or more nodes from manager in the swarm",args:{name:"NODE",generators:a.listDockerSwarmNodes,isVariadic:!0}},{name:"inspect",description:"Display detailed information on one or more nodes",args:{name:"NODE",generators:a.listDockerSwarmNodes,isVariadic:!0},options:[{name:["-f","--format"],description:"Format the output using the given Go template",args:{name:"string"}},{name:"--pretty",description:"Print the information in a human friendly format"}]},{name:"ls",description:"List nodes in the swarm",options:[{name:["-f","--filter"],description:"Filter output based on conditions provided",args:{name:"filter"}},{name:"--format",description:"Pretty-print nodes using a Go template",args:{name:"string"}},{name:["-q","--quiet"],description:"Only display IDs"}]},{name:"promote",description:"Promote one or more nodes to manager in the swarm",args:{name:"NODE",generators:a.listDockerSwarmNodes,isVariadic:!0}},{name:"ps",description:"List tasks running on one or more nodes, defaults to current node",args:{name:"NODE",generators:a.listDockerSwarmNodes,isVariadic:!0},options:[{name:["-f","--filter"],description:"Filter output based on conditions provided",args:{name:"filter"}},{name:"--format",description:"Pretty-print tasks using a Go template",args:{name:"string"}},{name:"--no-resolve",description:"Do not map IDs to Names"},{name:"--no-trunc",description:"Do not truncate output"},{name:["-q","--quiet"],description:"Only display task IDs"}]},{name:"rm",description:"Remove one or more nodes from the swarm",args:{name:"NODE",generators:a.listDockerSwarmNodes,isVariadic:!0},options:[{name:["-f","--force"],description:"Force remove a node from the swarm"}]},{name:"update",description:"Update a node",args:{name:"NODE",generators:a.listDockerSwarmNodes,isVariadic:!0},options:[{name:"--availability",description:'Availability of the node ("active"|"pause"|"drain")',args:{name:"string"}},{name:"--label-add",description:"Add or update a node label (key=value)",args:{name:"list"}},{name:"--label-rm",description:"Remove a node label if exists",args:{name:"list"}},{name:"--role",description:'Role of the node ("worker"|"manager")',args:{name:"string"}}]}]},{name:"buildx",description:"Extended build capabilities with BuildKit",subcommands:[{name:"bake",description:"Bake is a high-level build command. Each specified target will run in parallel as part of the build",args:{name:"string"},options:[{name:["-f","--file"],description:"Build definition file",args:{name:"string",isVariadic:!0}},{name:"--load",description:"Shorthand for --set=*.output=type=docker",args:{name:"string"}},{name:"--metadata-file",description:"Write build result metadata to the file",args:{name:"string"}},{name:"--no-cache",description:"Do not use cache when building the image",args:{name:"string"}},{name:"--print",description:"Print the options without building",args:{name:"string"}},{name:"--progress",description:"Set type of progress output (auto, plain, tty). Use plain to show container output",args:{name:"progress",default:"auto",suggestions:["auto","plain","tty"]}},{name:"--pull",description:"Always attempt to pull all referenced images",args:{name:"string"}},{name:"--push",description:"Shorthand for --set=*.output=type=registry",args:{name:"string"}},{name:"--set",description:"Override target value (e.g., targetpattern.key=value)",args:{name:"string"}}]},{name:"build",description:"The buildx build command starts a build using BuildKit. This command is similar to the UI of docker build command and takes the same flags and arguments",args:{name:"string"},options:[{name:"--add-host",description:"Add a custom host-to-IP mapping",args:{name:"string"}},{name:"--allow",description:"Allow extra privileged entitlement",args:{name:"string"}},{name:"--build-arg",description:"Set build-time variables",args:{name:"string"}},{name:"--build-context",description:"Additional build contexts",args:{name:"string"}},{name:"--cache-from",description:"External cache sources",args:{name:"string"}},{name:"--cache-to",description:"Cache export destinations",args:{name:"string"}},{name:"--cgroup-parent",description:"Optional parent cgroup for the container",args:{name:"string"}},{name:"--compress",description:"Compress the build context using gzip",args:{name:"string"}},{name:"--cpu-period",description:"Limit the CPU CFS (Completely Fair Scheduler) period",args:{name:"string"}},{name:"--cpu-quota",description:"Limit the CPU CFS (Completely Fair Scheduler) quota",args:{name:"string"}},{name:["--cpu-shares","-c"],description:"CPU shares (relative weight)",args:{name:"string"}},{name:"--cpuset-cpus",description:"CPUs in which to allow execution (0-3, 0,1)",args:{name:"string"}},{name:"--cpuset-mems",description:"MEMs in which to allow execution (0-3, 0,1)",args:{name:"string"}},{name:["--file","-f"],description:"Name of the Dockerfile",args:{name:"string"}},{name:"--force-rm",description:"Always remove intermediate containers",args:{name:"string"}},{name:"--iidfile",description:"Write the image ID to the file",args:{name:"string"}},{name:"--invoke",description:"Invoke a command after the build [experimental]",args:{name:"string"}},{name:"--isolation",description:"Container isolation technology",args:{name:"string"}},{name:"--label",description:"Set metadata for an image",args:{name:"string"}},{name:"--load",description:"Shorthand for --output=type=docker",args:{name:"string"}},{name:["--memory","-m"],description:"Memory limit",args:{name:"string"}},{name:"--memory-swap",description:"Swap limit equal to memory plus swap: -1 to enable unlimited swap",args:{name:"string"}},{name:"--metadata-file",description:"Write build result metadata to the file",args:{name:"string"}},{name:"--network",description:"Set the networking mode for the RUN instructions during build",args:{name:"string"}},{name:"--no-cache",description:"Do not use cache when building the image",args:{name:"string"}},{name:"--no-cache-filter",description:"Do not cache specified stages",args:{name:"string"}},{name:["--output","-o"],description:"Output destination (format: type=local,dest=path)",args:{name:"string"}},{name:"--platform",description:"Set target platform for build",args:{name:"string"}},{name:"--print",description:"Print result of information request (e.g., outline, targets) [experimental]",args:{name:"string"}},{name:"--progress",description:"Set type of progress output (auto, plain, tty). Use plain to show container output",args:{name:"progress",default:"auto",suggestions:["auto","plain","tty"]}},{name:"--pull",description:"Always attempt to pull all referenced images",args:{name:"string"}},{name:"--push",description:"Shorthand for --output=type=registry",args:{name:"string"}},{name:["--quiet","-q"],description:"Suppress the build output and print image ID on success",args:{name:"string"}},{name:"--rm",description:"Remove intermediate containers after a successful build",args:{name:"container",default:"true"}},{name:"--secret",description:"Secret to expose to the build (format: id=mysecret[,src=/local/secret])",args:{name:"string"}},{name:"--security-opt",description:"Security options",args:{name:"string"}},{name:"--shm-size",description:"Size of /dev/shm",args:{name:"string"}},{name:"--squash",description:"Squash newly built layers into a single new layer",args:{name:"string"}},{name:"--ssh",description:"SSH agent socket or keys to expose to the build (format: default|<id>[=<socket>|<key>[,<key>]])",args:{name:"string"}},{name:["--tag","-t"],description:"Name and optionally a tag (format: name:tag)",args:{name:"string"}},{name:"--target",description:"Set the target build stage to build",args:{name:"string"}},{name:"--ulimit",description:"Ulimit options",args:{name:"string"}}]},{name:"create",description:"Create a new builder instance",args:{name:"string"},options:[{name:"--append",description:"Append a node to builder instead of changing it",args:{name:"string"}},{name:"--bootstrap",description:"Boot builder after creation",args:{name:"string"}},{name:"--buildkitd-flags",description:"Flags for buildkitd daemon",args:{name:"string"}},{name:"--config",description:"BuildKit config file",args:{name:"string"}},{name:"--driver",description:"Driver to use (available: docker-container, kubernetes, remote)",args:{name:"string"}},{name:"--driver-opt",description:"Options for the driver",args:{name:"string"}},{name:"--leave",description:"Remove a node from builder instead of changing it",args:{name:"string"}},{name:"--name",description:"Builder instance name",args:{name:"string"}},{name:"--node",description:"Create/modify node with given name",args:{name:"string"}},{name:"--platform",description:"Fixed platforms for current node",args:{name:"string"}},{name:"--use",description:"Set the current builder instance",args:{name:"string"}}]},{name:"du",description:"Disk usage",args:{name:"string"},options:[{name:"--filter",description:"Provide filter values"},{name:"--verbose",description:"Provide a more verbose output"}]},{name:"imagetools",description:"Imagetools contains commands for working with manifest lists in the registry. These commands are useful for inspecting multi-platform build results",args:{name:"string"},subcommands:[{name:"create",description:"Create a new image based on source images",args:{name:"string"},options:[{name:"--append",description:"Append to existing manifest",args:{name:"string"}},{name:"--dry-run",description:"Show final image instead of pushing",args:{name:"string"}},{name:["--file","-f"],description:"Read source descriptor from file",args:{name:"string"}},{name:"--progress",description:"Set type of progress output (auto, plain, tty). Use plain to show container output",args:{name:"progress",default:"auto",suggestions:["auto","plain","tty"]}},{name:["--tag","-t"],description:"Set reference for new image",args:{name:"string"}}]},{name:"inspect",description:"Inspect current builder instance",args:{name:"string"},options:[{name:"--format",description:"Format the output using the given Go template",args:{name:"sting",default:"{{.Manifest}}"}},{name:"--raw",description:"Show original, unformatted JSON manifest"}]}]},{name:"inspect",description:"Inspect current builder instance",args:{name:"string"},options:[{name:"--bootstrap",description:"Ensure builder has booted before inspecting",args:{name:"string"}}]},{name:"install",description:"Install buildx as a ‘docker builder’ alias"},{name:"ls",description:"List builder instances"},{name:"prune",description:"Remove build cache",args:{name:"string"},options:[{name:["--all","-a"],description:"Include internal/frontend images",args:{name:"string"}},{name:"--filter",description:"Provide filter values (e.g., until=24h)",args:{name:"string"}},{name:["--force","-f"],description:"Do not prompt for confirmation",args:{name:"string"}},{name:"--keep-storage",description:"Amount of disk space to keep for cache",args:{name:"string"}},{name:"--verbose",description:"Provide a more verbose output",args:{name:"string"}}]},{name:"rm",description:"Remove a builder instance",args:{name:"string"},options:[{name:"--all-inactive",description:"Remove all inactive builders",args:{name:"string"}},{name:["--force","-f"],description:"Do not prompt for confirmation",args:{name:"string"}},{name:"--keep-daemon",description:"Keep the buildkitd daemon running",args:{name:"string"}},{name:"--keep-state",description:"Keep BuildKit state",args:{name:"string"}}]},{name:"stop",description:"Stop builder instance",args:{name:"string"}},{name:"uninstall",description:"Uninstall the ‘docker builder’ alias"},{name:"use",description:"Set the current builder instance",args:{name:"string"},options:[{name:"--default",description:"Set builder as default for current context",args:{name:"string"}},{name:"--global",description:"Builder persists context changes",args:{name:"string"}}]},{name:"version",description:"Show buildx version information"}],options:[{name:"--builder",description:"Override the configured builder instance",isPersistent:!0,args:{name:"string"}}]},{name:"plugin",description:"Manage plugins",subcommands:[{name:"create",description:"Create a plugin from a rootfs and configuration. Plugin data directory must contain config.json and rootfs directory",args:[{name:"PLUGIN"},{name:"PLUGIN-DATA-DIR",template:"filepaths"}],options:[{name:"--compress",description:"Compress the context using gzip"}]},{name:"disable",description:"Disable a plugin",args:{name:"PLUGIN",generators:a.listDockerPlugins},options:[{name:["-f","--force"],description:"Force the disable of an active plugin"}]},{name:"enable",description:"Enable a plugin",args:{name:"PLUGIN",generators:a.listDockerPlugins},options:[{name:"--timeout",description:"HTTP client timeout (in seconds) (default 30)",args:{name:"int"}}]},{name:"inspect",description:"Display detailed information on one or more plugins",args:{name:"PLUGIN",generators:a.listDockerPlugins,isVariadic:!0},options:[{name:["-f","--format"],description:"Format the output using the given Go template",args:{name:"string"}}]},{name:"install",description:"Install a plugin",args:[{name:"PLUGIN"},{name:"KEY=VALUE",isVariadic:!0}],options:[{name:"--alias",description:"Local name for plugin",args:{name:"string"}},{name:"--disable",description:"Do not enable the plugin on install"},{name:"--disable-content-trust",description:"Skip image verification (default true)"},{name:"--grant-all-permissions",description:"Grant all permissions necessary to run the plugin"}]},{name:"ls",description:"List plugins",options:[{name:["-f","--filter"],description:"Provide filter values (e.g. 'enabled=true')",args:{name:"filter"}},{name:"--format",description:"Pretty-print plugins using a Go template",args:{name:"string"}},{name:"--no-trunc",description:"Don't truncate output"},{name:["-q","--quiet"],description:"Only display plugin IDs"}]},{name:"push",description:"Push a plugin to a registry",args:{name:"PLUGIN:[TAG]"},options:[{name:"--disable-content-trust",description:"Skip image signing (default true)"}]},{name:"rm",description:"Remove one or more plugins",args:{name:"PLUGIN",generators:a.listDockerPlugins,isVariadic:!0},options:[{name:["-f","--force"],description:"Force the removal of an active plugin"}]},{name:"set",description:"Change settings for a plugin",args:[{name:"PLUGIN",generators:a.listDockerPlugins},{name:"KEY=VALUE",isVariadic:!0}]},{name:"upgrade",description:"Upgrade an existing plugin",args:[{name:"PLUGIN",generators:a.listDockerPlugins},{name:"REMOTE"}],options:[{name:"--disable-content-trust",description:"Skip image verification (default true)"},{name:"--grant-all-permissions",description:"Grant all permissions necessary to run the plugin"},{name:"--skip-remote-check",description:"Do not check if specified remote plugin matches existing plugin image"}]}]},{name:"secret",description:"Manage Docker secrets",subcommands:[{name:"create",description:"Create a secret from a file or STDIN as content",args:[{name:"SECRET NAME"},{name:"SECRET",template:"filepaths"}],options:[{name:["-d","--driver"],description:"Secret driver",args:{name:"string"}},{name:["-l","--label"],description:"Secret labels",args:{name:"list"}},{name:"--template-driver",description:"Template driver",args:{name:"string"}}]},{name:"inspect",description:"Display detailed information on one or more secrets",args:{name:"SECRET",generators:a.listDockerSecrets,isVariadic:!0},options:[{name:["-f","--format"],description:"Format the output using the given Go template",args:{name:"string"}},{name:"--pretty",description:"Print the information in a human friendly format"}]},{name:"ls",description:"List secrets",options:[{name:["-f","--filter"],description:"Filter output based on conditions provided",args:{name:"filter"}},{name:"--format",description:"Pretty-print secrets using a Go template",args:{name:"string"}},{name:["-q","--quiet"],description:"Only display IDs"}]},{name:"rm",description:"Remove one or more secrets",args:{name:"SECRET",generators:a.listDockerSecrets,isVariadic:!0}}]},{name:"service",description:"Manage services",subcommands:[{name:"create",description:"Create a new service",args:[o,{name:"COMMAND",isOptional:!0,isCommand:!0}],options:[{name:"--cap-add",description:"Add Linux capabilities",args:{name:"list"}},{name:"--cap-drop",description:"Drop Linux capabilities",args:{name:"list"}},{name:"--config",description:"Specify configurations to expose to the service",args:{name:"config"}},{name:"--constraint",description:"Placement constraints",args:{name:"list"}},{name:"--container-label",description:"Container labels",args:{name:"list"}},{name:"--credential-spec",description:"Credential spec for managed service account (Windows only)",args:{name:"credential-spec"}},{name:["-d","--detach"],description:"Exit immediately instead of waiting for the service to converge"},{name:"--dns",description:"Set custom DNS servers",args:{name:"list"}},{name:"--dns-option",description:"Set DNS options",args:{name:"list"}},{name:"--dns-search",description:"Set custom DNS search domains",args:{name:"list"}},{name:"--endpoint-mode",description:'Endpoint mode (vip or dnsrr) (default "vip")',args:{name:"string"}},{name:"--entrypoint",description:"Overwrite the default ENTRYPOINT of the image",args:{name:"command"}},{name:["-e","--env"],description:"Set environment variables",args:{name:"list"}},{name:"--env-file",description:"Read in a file of environment variables",args:{name:"list"}},{name:"--generic-resource",description:"User defined resources",args:{name:"list"}},{name:"--group",description:"Set one or more supplementary user groups for the container",args:{name:"list"}},{name:"--health-cmd",description:"Command to run to check health",args:{name:"string"}},{name:"--health-interval",description:"Time between running the check (ms|s|m|h)",args:{name:"duration"}},{name:"--health-retries",description:"Consecutive failures needed to report unhealthy",args:{name:"int"}},{name:"--health-start-period",description:"Start period for the container to initialize before counting retries towards unstable (ms|s|m|h)",args:{name:"duration"}},{name:"--health-timeout",description:"Maximum time to allow one check to run (ms|s|m|h)",args:{name:"duration"}},{name:"--host",description:"Set one or more custom host-to-IP mappings (host:ip)",args:{name:"list"}},{name:"--hostname",description:"Container hostname",args:{name:"string"}},{name:"--init",description:"Use an init inside each service container to forward signals and reap processes"},{name:"--isolation",description:"Service container isolation mode",args:{name:"string"}},{name:["-l","--label"],description:"Service labels",args:{name:"list"}},{name:"--limit-cpu",description:"Limit CPUs",args:{name:"decimal"}},{name:"--limit-memory",description:"Limit Memory",args:{name:"bytes"}},{name:"--limit-pids",description:"Limit maximum number of processes (default 0 = unlimited)",args:{name:"int"}},{name:"--log-driver",description:"Logging driver for service",args:{name:"string"}},{name:"--log-opt",description:"Logging driver options",args:{name:"list"}},{name:"--max-concurrent",description:"Number of job tasks to run concurrently (default equal to --replicas)",args:{name:"uint"}},{name:"--mode",description:'Service mode (replicated, global, replicated-job, or global-job) (default "replicated")',args:{name:"string",suggestions:["replicated","global","replicated-job","global-job"]}},{name:"--mount",description:"Attach a filesystem mount to the service",args:{name:"mount"}},{name:"--name",description:"Service name",args:{name:"string"}},{name:"--network",description:"Network attachments",args:{name:"network"}},{name:"--no-healthcheck",description:"Disable any container-specified HEALTHCHECK"},{name:"--no-resolve-image",description:"Do not query the registry to resolve image digest and supported platforms"},{name:"--placement-pref",description:"Add a placement preference",args:{name:"pref"}},{name:["-p","--publish"],description:"Publish a port as a node port",args:{name:"port"}},{name:["-q","--quiet"],description:"Suppress progress output"},{name:"--read-only",description:"Mount the container's root filesystem as read only"},{name:"--replicas",description:"Number of tasks",args:{name:"uint"}},{name:"--replicas-max-per-node",description:"Maximum number of tasks per node (default 0 = unlimited)",args:{name:"uint"}},{name:"--reserve-cpu",description:"Reserve CPUs",args:{name:"decimal"}},{name:"--reserve-memory",description:"Reserve Memory",args:{name:"bytes"}},{name:"--restart-condition",description:'Restart when condition is met ("none"|"on-failure"|"any") (default "any")',args:{name:"string"}},{name:"--restart-delay",description:"Delay between restart attempts (ns|us|ms|s|m|h) (default 5s)",args:{name:"duration"}},{name:"--restart-max-attempts",description:"Maximum number of restarts before giving up",args:{name:"uint"}},{name:"--restart-window",description:"Window used to evaluate the restart policy (ns|us|ms|s|m|h)",args:{name:"duration"}},{name:"--rollback-delay",description:"Delay between task rollbacks (ns|us|ms|s|m|h) (default 0s)",args:{name:"duration"}},{name:"--rollback-failure-action",description:'Action on rollback failure ("pause"|"continue") (default "pause")',args:{name:"string"}},{name:"--rollback-max-failure-ratio",description:"Failure rate to tolerate during a rollback (default 0)",args:{name:"float"}},{name:"--rollback-monitor",description:"Duration after each task rollback to monitor for failure (ns|us|ms|s|m|h) (default 5s)",args:{name:"duration"}},{name:"--rollback-order",description:'Rollback order ("start-first"|"stop-first") (default "stop-first")',args:{name:"string"}},{name:"--rollback-parallelism",description:"Maximum number of tasks rolled back simultaneously (0 to roll back all at once) (default 1)",args:{name:"uint"}},{name:"--secret",description:"Specify secrets to expose to the service",args:{name:"secret"}},{name:"--stop-grace-period",description:"Time to wait before force killing a container (ns|us|ms|s|m|h) (default 10s)",args:{name:"duration"}},{name:"--stop-signal",description:"Signal to stop the container",args:{name:"string"}},{name:"--sysctl",description:"Sysctl options",args:{name:"list"}},{name:["-t","--tty"],description:"Allocate a pseudo-TTY"},{name:"--ulimit",description:"Ulimit options (default [])",args:{name:"ulimit"}},{name:"--update-delay",description:"Delay between updates (ns|us|ms|s|m|h) (default 0s)",args:{name:"duration"}},{name:"--update-failure-action",description:'Action on update failure ("pause"|"continue"|"rollback") (default "pause")',args:{name:"string"}},{name:"--update-max-failure-ratio",description:"Failure rate to tolerate during an update (default 0)",args:{name:"float"}},{name:"--update-monitor",description:"Duration after each task update to monitor for failure (ns|us|ms|s|m|h) (default 5s)",args:{name:"duration"}},{name:"--update-order",description:'Update order ("start-first"|"stop-first") (default "stop-first")',args:{name:"string"}},{name:"--update-parallelism",description:"Maximum number of tasks updated simultaneously (0 to update all at once) (default 1)",args:{name:"uint"}},{name:["-u","--user"],description:"Username or UID (format: [:])",args:{name:"string"}},{name:"--with-registry-auth",description:"Send registry authentication details to swarm agents"},{name:["-w","--workdir"],description:"Working directory inside the container",args:{name:"string"}}]},{name:"inspect",description:"Display detailed information on one or more services",args:{name:"SERVICE",generators:a.listDockerServices,isVariadic:!0},options:[{name:["-f","--format"],description:"Format the output using the given Go template",args:{name:"string"}},{name:"--pretty",description:"Print the information in a human friendly format"}]},{name:"logs",description:"Fetch the logs of a service or task",args:{name:"SERVICE OR TASK",generators:a.listDockerServices},options:[{name:"--details",description:"Show extra details provided to logs"},{name:["-f","--follow"],description:"Follow log output"},{name:"--no-resolve",description:"Do not map IDs to Names in output"},{name:"--no-task-ids",description:"Do not include task IDs in output"},{name:"--no-trunc",description:"Do not truncate output"},{name:"--raw",description:"Do not neatly format logs"},{name:"--since",description:"Show logs since timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)",args:{name:"string"}},{name:["-n","--tail"],description:'Number of lines to show from the end of the logs (default "all")',args:{name:"string"}},{name:["-t","--timestamps"],description:"Show timestamps"}]},{name:"ls",description:"List services",options:[{name:["-f","--filter"],description:"Filter output based on conditions provided",args:{name:"filter"}},{name:"--format",description:"Pretty-print services using a Go template",args:{name:"string"}},{name:["-q","--quiet"],description:"Only display IDs"}]},{name:"ps",description:"List the tasks of one or more services",args:{name:"SERVICE",generators:a.listDockerServices,isVariadic:!0},options:[{name:["-f","--filter"],description:"Filter output based on conditions provided",args:{name:"filter"}},{name:"--format",description:"Pretty-print tasks using a Go template",args:{name:"string"}},{name:"--no-resolve",description:"Do not map IDs to Names"},{name:"--no-trunc",description:"Do not truncate output"},{name:["-q","--quiet"],description:"Only display task IDs"}]},{name:"rm",description:"Remove one or more services",args:{name:"SERVICE",generators:a.listDockerServices,isVariadic:!0}},{name:"rollback",description:"Revert changes to a service's configuration",args:{name:"SERVICE",generators:a.listDockerServices},options:[{name:["-d","--detach"],description:"Exit immediately instead of waiting for the service to converge"},{name:["-q","--quiet"],description:"Suppress progress output"}]},{name:"scale",description:"Scale one or multiple replicated services",args:{name:"SERVICE=REPLICAS",generators:a.listDockerServicesReplicas,isVariadic:!0},options:[{name:["-d","--detach"],description:"Exit immediately instead of waiting for the service to converge"}]},{name:"update",description:"Update a service",args:{name:"SERVICE",generators:a.listDockerServices},options:[{name:"--args",description:"Service command args",args:{name:"command"}},{name:"--cap-add",description:"Add Linux capabilities",args:{name:"list"}},{name:"--cap-drop",description:"Drop Linux capabilities",args:{name:"list"}},{name:"--config-add",description:"Add or update a config file on a service",args:{name:"config"}},{name:"--config-rm",description:"Remove a configuration file",args:{name:"list"}},{name:"--constraint-add",description:"Add or update a placement constraint",args:{name:"list"}},{name:"--constraint-rm",description:"Remove a constraint",args:{name:"list"}},{name:"--container-label-add",description:"Add or update a container label",args:{name:"list"}},{name:"--container-label-rm",description:"Remove a container label by its key",args:{name:"list"}},{name:"--credential-spec",description:"Credential spec for managed service account (Windows only)",args:{name:"credential-spec"}},{name:["-d","--detach"],description:"Exit immediately instead of waiting for the service to converge"},{name:"--dns-add",description:"Add or update a custom DNS server",args:{name:"list"}},{name:"--dns-option-add",description:"Add or update a DNS option",args:{name:"list"}},{name:"--dns-option-rm",description:"Remove a DNS option",args:{name:"list"}},{name:"--dns-rm",description:"Remove a custom DNS server",args:{name:"list"}},{name:"--dns-search-add",description:"Add or update a custom DNS search domain",args:{name:"list"}},{name:"--dns-search-rm",description:"Remove a DNS search domain",args:{name:"list"}},{name:"--endpoint-mode",description:"Endpoint mode (vip or dnsrr)",args:{name:"string"}},{name:"--entrypoint",description:"Overwrite the default ENTRYPOINT of the image",args:{name:"command"}},{name:"--env-add",description:"Add or update an environment variable",args:{name:"list"}},{name:"--env-rm",description:"Remove an environment variable",args:{name:"list"}},{name:"--force",description:"Force update even if no changes require it"},{name:"--generic-resource-add",description:"Add a Generic resource",args:{name:"list"}},{name:"--generic-resource-rm",description:"Remove a Generic resource",args:{name:"list"}},{name:"--group-add",description:"Add an additional supplementary user group to the container",args:{name:"list"}},{name:"--group-rm",description:"Remove a previously added supplementary user group from the container",args:{name:"list"}},{name:"--health-cmd",description:"Command to run to check health",args:{name:"string"}},{name:"--health-interval",description:"Time between running the check (ms|s|m|h)",args:{name:"duration"}},{name:"--health-retries",description:"Consecutive failures needed to report unhealthy",args:{name:"int"}},{name:"--health-start-period",description:"Start period for the container to initialize before counting retries towards unstable (ms|s|m|h)",args:{name:"duration"}},{name:"--health-timeout",description:"Maximum time to allow one check to run (ms|s|m|h)",args:{name:"duration"}},{name:"--host-add",description:"Add a custom host-to-IP mapping (host:ip)",args:{name:"list"}},{name:"--host-rm",description:"Remove a custom host-to-IP mapping (host:ip)",args:{name:"list"}},{name:"--hostname",description:"Container hostname",args:{name:"string"}},{name:"--image",description:"Service image tag",args:{name:"string"}},{name:"--init",description:"Use an init inside each service container to forward signals and reap processes"},{name:"--isolation",description:"Service container isolation mode",args:{name:"string"}},{name:"--label-add",description:"Add or update a service label",args:{name:"list"}},{name:"--label-rm",description:"Remove a label by its key",args:{name:"list"}},{name:"--limit-cpu",description:"Limit CPUs",args:{name:"decimal"}},{name:"--limit-memory",description:"Limit Memory",args:{name:"bytes"}},{name:"--limit-pids",description:"Limit maximum number of processes (default 0 = unlimited)",args:{name:"int"}},{name:"--log-driver",description:"Logging driver for service",args:{name:"string"}},{name:"--log-opt",description:"Logging driver options",args:{name:"list"}},{name:"--max-concurrent",description:"Number of job tasks to run concurrently (default equal to --replicas)",args:{name:"uint"}},{name:"--mount-add",description:"Add or update a mount on a service",args:{name:"mount"}},{name:"--mount-rm",description:"Remove a mount by its target path",args:{name:"list"}},{name:"--network-add",description:"Add a network",args:{name:"network"}},{name:"--network-rm",description:"Remove a network",args:{name:"list"}},{name:"--no-healthcheck",description:"Disable any container-specified HEALTHCHECK"},{name:"--no-resolve-image",description:"Do not query the registry to resolve image digest and supported platforms"},{name:"--placement-pref-add",description:"Add a placement preference",args:{name:"pref"}},{name:"--placement-pref-rm",description:"Remove a placement preference",args:{name:"pref"}},{name:"--publish-add",description:"Add or update a published port",args:{name:"port"}},{name:"--publish-rm",description:"Remove a published port by its target port",args:{name:"port"}},{name:["-q","--quiet"],description:"Suppress progress output"},{name:"--read-only",description:"Mount the container's root filesystem as read only"},{name:"--replicas",description:"Number of tasks",args:{name:"uint"}},{name:"--replicas-max-per-node",description:"Maximum number of tasks per node (default 0 = unlimited)",args:{name:"uint"}},{name:"--reserve-cpu",description:"Reserve CPUs",args:{name:"decimal"}},{name:"--reserve-memory",description:"Reserve Memory",args:{name:"bytes"}},{name:"--restart-condition",description:'Restart when condition is met ("none"|"on-failure"|"any")',args:{name:"string"}},{name:"--restart-delay",description:"Delay between restart attempts (ns|us|ms|s|m|h)",args:{name:"duration"}},{name:"--restart-max-attempts",description:"Maximum number of restarts before giving up",args:{name:"uint"}},{name:"--restart-window",description:"Window used to evaluate the restart policy (ns|us|ms|s|m|h)",args:{name:"duration"}},{name:"--rollback",description:"Rollback to previous specification"},{name:"--rollback-delay",description:"Delay between task rollbacks (ns|us|ms|s|m|h)",args:{name:"duration"}},{name:"--rollback-failure-action",description:'Action on rollback failure ("pause"|"continue")',args:{name:"string"}},{name:"--rollback-max-failure-ratio",description:"Failure rate to tolerate during a rollback",args:{name:"float"}},{name:"--rollback-monitor",description:"Duration after each task rollback to monitor for failure (ns|us|ms|s|m|h)",args:{name:"duration"}},{name:"--rollback-order",description:'Rollback order ("start-first"|"stop-first")',args:{name:"string"}},{name:"--rollback-parallelism",description:"Maximum number of tasks rolled back simultaneously (0 to roll back all at once)",args:{name:"uint"}},{name:"--secret-add",description:"Add or update a secret on a service",args:{name:"secret"}},{name:"--secret-rm",description:"Remove a secret",args:{name:"list"}},{name:"--stop-grace-period",description:"Time to wait before force killing a container (ns|us|ms|s|m|h)",args:{name:"duration"}},{name:"--stop-signal",description:"Signal to stop the container",args:{name:"string"}},{name:"--sysctl-add",description:"Add or update a Sysctl option",args:{name:"list"}},{name:"--sysctl-rm",description:"Remove a Sysctl option",args:{name:"list"}},{name:["-t","--tty"],description:"Allocate a pseudo-TTY"},{name:"--ulimit-add",description:"Add or update a ulimit option (default [])",args:{name:"ulimit"}},{name:"--ulimit-rm",description:"Remove a ulimit option",args:{name:"list"}},{name:"--update-delay",description:"Delay between updates (ns|us|ms|s|m|h)",args:{name:"duration"}},{name:"--update-failure-action",description:'Action on update failure ("pause"|"continue"|"rollback")',args:{name:"string"}},{name:"--update-max-failure-ratio",description:"Failure rate to tolerate during an update",args:{name:"float"}},{name:"--update-monitor",description:"Duration after each task update to monitor for failure (ns|us|ms|s|m|h)",args:{name:"duration"}},{name:"--update-order",description:'Update order ("start-first"|"stop-first")',args:{name:"string"}},{name:"--update-parallelism",description:"Maximum number of tasks updated simultaneously (0 to update all at once)",args:{name:"uint"}},{name:["-u","--user"],description:"Username or UID (format: [:])",args:{name:"string"}},{name:"--with-registry-auth",description:"Send registry authentication details to swarm agents"},{name:["-w","--workdir"],description:"Working directory inside the container",args:{name:"string"}}]}]},{name:"stack",description:"Manage Docker stacks",subcommands:[{name:"deploy",description:"Deploy a new stack or update an existing stack",args:{name:"STACK"},options:[{name:["-c","--compose-file"],description:'Path to a Compose file, or "-" to read from stdin',args:{name:"strings",template:"filepaths"}},{name:"--orchestrator",description:"Orchestrator to use (swarm|kubernetes|all)",args:{name:"string"}},{name:"--prune",description:"Prune services that are no longer referenced"},{name:"--resolve-image",description:'Query the registry to resolve image digest and supported platforms ("always"|"changed"|"never") (default "always")',args:{name:"string"}},{name:"--with-registry-auth",description:"Send registry authentication details to Swarm agents"}]},{name:"ls",description:"List stacks",options:[{name:"--format",description:"Pretty-print stacks using a Go template",args:{name:"string"}},{name:"--orchestrator",description:"Orchestrator to use (swarm|kubernetes|all)",args:{name:"string"}}]},{name:"ps",description:"List the tasks in the stack",args:{name:"STACK",generators:a.listDockerStacks},options:[{name:["-f","--filter"],description:"Filter output based on conditions provided",args:{name:"filter"}},{name:"--format",description:"Pretty-print tasks using a Go template",args:{name:"string"}},{name:"--no-resolve",description:"Do not map IDs to Names"},{name:"--no-trunc",description:"Do not truncate output"},{name:"--orchestrator",description:"Orchestrator to use (swarm|kubernetes|all)",args:{name:"string"}},{name:["-q","--quiet"],description:"Only display task IDs"}]},{name:"rm",description:"Remove one or more stacks",args:{name:"STACK",generators:a.listDockerStacks,isVariadic:!0},options:[{name:"--orchestrator",description:"Orchestrator to use (swarm|kubernetes|all)",args:{name:"string"}}]},{name:"services",description:"List the services in the stack",args:{name:"STACK",generators:a.listDockerStacks},options:[{name:["-f","--filter"],description:"Filter output based on conditions provided",args:{name:"filter"}},{name:"--format",description:"Pretty-print services using a Go template",args:{name:"string"}},{name:"--orchestrator",description:"Orchestrator to use (swarm|kubernetes|all)",args:{name:"string"}},{name:["-q","--quiet"],description:"Only display IDs"}]}]},{name:"swarm",description:"Manage Swarm",subcommands:[{name:"ca",description:"Display and rotate the root CA",options:[{name:"--ca-cert",description:"Path to the PEM-formatted root CA certificate to use for the new cluster",args:{name:"pem-file",template:"filepaths"}},{name:"--ca-key",description:"Path to the PEM-formatted root CA key to use for the new cluster",args:{name:"pem-file",template:"filepaths"}},{name:"--cert-expiry",description:"Validity period for node certificates (ns|us|ms|s|m|h) (default 2160h0m0s)",args:{name:"duration"}},{name:["-d","--detach"],description:"Exit immediately instead of waiting for the root rotation to converge"},{name:"--external-ca",description:"Specifications of one or more certificate signing endpoints",args:{name:"external-ca"}},{name:["-q","--quiet"],description:"Suppress progress output"},{name:"--rotate",description:"Rotate the swarm CA - if no certificate or key are provided, new ones will be generated"}]},{name:"init",description:"Initialize a swarm",options:[{name:"--advertise-addr",description:"Advertised address (format: [:port])",args:{name:"string"}},{name:"--autolock",description:"Enable manager autolocking (requiring an unlock key to start a stopped manager)"},{name:"--availability",description:'Availability of the node ("active"|"pause"|"drain") (default "active")',args:{name:"string"}},{name:"--cert-expiry",description:"Validity period for node certificates (ns|us|ms|s|m|h) (default 2160h0m0s)",args:{name:"duration"}},{name:"--data-path-addr",description:"Address or interface to use for data path traffic (format: )",args:{name:"string"}},{name:"--data-path-port",description:"Port number to use for data path traffic (1024 - 49151). If no value is set or is set to 0, the default port (4789) is used",args:{name:"uint32"}},{name:"--default-addr-pool",description:"Default address pool in CIDR format (default [])",args:{name:"ipNetSlice"}},{name:"--default-addr-pool-mask-length",description:"Default address pool subnet mask length (default 24)",args:{name:"uint32"}},{name:"--dispatcher-heartbeat",description:"Dispatcher heartbeat period (ns|us|ms|s|m|h) (default 5s)",args:{name:"duration"}},{name:"--external-ca",description:"Specifications of one or more certificate signing endpoints",args:{name:"external-ca"}},{name:"--force-new-cluster",description:"Force create a new cluster from current state"},{name:"--listen-addr",description:"Listen address (format: [:port]) (default 0.0.0.0:2377)",args:{name:"node-addr"}},{name:"--max-snapshots",description:"Number of additional Raft snapshots to retain",args:{name:"uint"}},{name:"--snapshot-interval",description:"Number of log entries between Raft snapshots (default 10000)",args:{name:"uint"}},{name:"--task-history-limit",description:"Task history retention limit (default 5)",args:{name:"int"}}]},{name:"join",description:"Join a swarm as a node and/or manager",args:{name:"HOST:PORT"},options:[{name:"--advertise-addr",description:"Advertised address (format: [:port])",args:{name:"string"}},{name:"--availability",description:'Availability of the node ("active"|"pause"|"drain") (default "active")',args:{name:"string"}},{name:"--data-path-addr",description:"Address or interface to use for data path traffic (format: )",args:{name:"string"}},{name:"--listen-addr",description:"Listen address (format: [:port]) (default 0.0.0.0:2377)",args:{name:"node-addr"}},{name:"--token",description:"Token for entry into the swarm",args:{name:"string"}}]},{name:"join-token",description:"Manage join tokens",args:{name:"worker or manager",suggestions:["worker","manager"]},options:[{name:["-q","--quiet"],description:"Only display token"},{name:"--rotate",description:"Rotate join token"}]},{name:"leave",description:"Leave the swarm",options:[{name:["-f","--force"],description:"Force this node to leave the swarm, ignoring warnings"}]},{name:"unlock",description:"Unlock swarm"},{name:"unlock-key",description:"Manage the unlock key",options:[{name:["-q","--quiet"],description:"Only display token"},{name:"--rotate",description:"Rotate unlock key"}]},{name:"update",description:"Update the swarm",options:[{name:"--autolock",description:"Change manager autolocking setting (true|false)",args:{suggestions:["true","false"]}},{name:"--cert-expiry",description:"Validity period for node certificates (ns|us|ms|s|m|h) (default 2160h0m0s)",args:{name:"duration"}},{name:"--dispatcher-heartbeat",description:"Dispatcher heartbeat period (ns|us|ms|s|m|h) (default 5s)",args:{name:"duration"}},{name:"--external-ca",description:"Specifications of one or more certificate signing endpoints",args:{name:"external-ca"}},{name:"--max-snapshots",description:"Number of additional Raft snapshots to retain",args:{name:"uint"}},{name:"--snapshot-interval",description:"Number of log entries between Raft snapshots (default 10000)",args:{name:"uint"}},{name:"--task-history-limit",description:"Task history retention limit (default 5)",args:{name:"int"}}]}]},{name:"system",description:"Manage Docker",subcommands:[{name:"prune",description:"Remove unused data",options:[{name:["-a","--all"],description:"Remove all unused images not just dangling ones"},{name:"--filter",description:"Provide filter values (e.g. 'label==')",args:{name:"filter"}},{name:["-f","--force"],description:"Do not prompt for confirmation"}]},{name:"rm",description:"Remove one or more volumes",args:{name:"VOLUME",generators:a.listDockerVolumes,isVariadic:!0},options:[{name:["-f","--force"],description:"Force the removal of one or more volumes"}]}]},{name:"compose",description:"Define and run multi-container applications with Docker",loadSpec:"docker-compose"}]};t.default=d},2008:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.codeTunnelSubcommands=t.extTunnelSubcommand=t.codeTunnelOptions=t.globalTunnelOptions=t.tunnelHelpOptions=t.commonAuthOptions=t.troubleshootingOptions=t.extensionManagementOptions=t.commonOptions=void 0,t.createCodeGenerators=a,t.parseInstalledExtensions=s;const i=n(2341);function a(e){return{script:[e,"--list-extensions","--show-versions","--enable-proposed-api"],postProcess:s}}function s(e){return e.split("\n").filter(Boolean).map(e=>{const[t,n]=e.split("@");return{name:t,type:"option",description:`Version: ${n}`}})}t.commonOptions=[{name:"-",description:"Read from stdin (e.g. 'ps aux | grep code | code -')"},{name:["-d","--diff"],description:"Compare two files with each other",args:[{name:"file",template:"filepaths"},{name:"file",template:"filepaths"}]},{name:["-m","--merge"],description:"Perform a three-way merge by providing paths for two modified versions of a file, the common origin of both modified versions and the output file to save merge results",args:[{name:"file",template:"filepaths"},{name:"file",template:"filepaths"},{name:"base",template:"filepaths"},{name:"result",template:"filepaths"}]},{name:["-a","--add"],description:"Add folder(s) to the last active window",args:{name:"folder",template:"folders",isVariadic:!0}},{name:"--remove",description:"Remove folder(s) from the last active window",args:{name:"folder",template:"folders",isVariadic:!0}},{name:["-g","--goto"],description:"Open a file at the path on the specified line and character position",args:{name:"file:line[:character]",template:"filepaths"}},{name:["-n","--new-window"],description:"Force to open a new window"},{name:["-r","--reuse-window"],description:"Force to open a file or folder in an already opened window"},{name:["-w","--wait"],description:"Wait for the files to be closed before returning"},{name:"--locale",description:"The locale to use (e.g. en-US or zh-TW)",args:{name:"locale",suggestions:[{name:"en",icon:"🇺🇸",description:"English (US)"},{name:"zh-CN",icon:"🇨🇳",description:"Simplified Chinese"},{name:"zh-TW",icon:"🇹🇼",description:"Traditional Chinese"},{name:"fr",icon:"🇫🇷",description:"French"},{name:"de",icon:"🇩🇪",description:"German"},{name:"it",icon:"🇮🇹",description:"Italian"},{name:"es",icon:"🇪🇸",description:"Spanish"},{name:"ja",icon:"🇯🇵",description:"Japanese"},{name:"ko",icon:"🇰🇷",description:"Korean"},{name:"ru",icon:"🇷🇺",description:"Russian"},{name:"bg",icon:"🇧🇬",description:"Bulgarian"},{name:"hu",icon:"🇭🇺",description:"Hungarian"},{name:"pt-br",icon:"🇧🇷",description:"Portuguese (Brazil)"},{name:"tr",icon:"🇹🇷",description:"Turkish"}]}},{name:"--user-data-dir",description:"Specifies the directory that user data is kept in. Can be used to open multiple distinct instances of Code",args:{name:"dir",template:"folders"}},{name:"--profile",description:"Opens the provided folder or workspace with the given profile and associates the profile with the workspace. If the profile does not exist, a new empty one is created. A folder or workspace must be provided for the profile to take effect",args:{name:"profileName"}},{name:["-h","--help"],description:"Print usage"},{name:"--add-mcp",description:'Adds a Model Context Protocol server definition to the user profile. Accepts JSON input in the form {"name":"server-name","command":...}',args:{name:"json",description:"JSON string for MCP server"}},{name:"--locate-shell-integration-path",description:"Print the path to the shell integration script for the provided shell",args:{isOptional:!1,name:"shell",description:"The shell to locate the integration script for",suggestions:["bash","fish","pwsh","zsh"]}}],t.extensionManagementOptions=e=>[{name:"--extensions-dir",description:"Set the root path for extensions",args:{name:"dir",template:"folders"}},{name:"--list-extensions",description:"List the installed extensions"},{name:"--show-versions",description:"Show versions of installed extensions, when using --list-extensions"},{name:"--category",description:"Filters installed extensions by provided category, when using --list-extensions",args:{name:"category",suggestions:["azure","data science","debuggers","extension packs","education","formatters","keymaps","language packs","linters","machine learning","notebooks","programming languages","scm providers","snippets","testing","themes","visualization","other"]}},{name:"--install-extension",description:"Installs or updates an extension. The argument is either an extension id or a path to a VSIX. The identifier of an extension is '${ publisher }.${ name }'. Use '--force' argument to update to latest version. To install a specific version provide '@${version}'. For example: 'vscode.csharp@1.2.3'",args:{name:"extension-id[@version] | path-to-vsix",generators:[a(e),(0,i.filepaths)({extensions:["vsix"]})]}},{name:"--pre-release",description:"Installs the pre-release version of the extension, when using --install-extension"},{name:"--uninstall-extension",description:"Uninstalls an extension",args:{name:"extension-id",generators:a(e)}},{name:"--update-extensions",description:"Update the installed extensions"},{name:"--enable-proposed-api",description:"Enables proposed API features for extensions. Can receive one or more extension IDs to enable individually",args:{name:"extension-id",generators:a(e),isVariadic:!0}}],t.troubleshootingOptions=e=>[{name:["-v","--version"],description:"Print version"},{name:"--verbose",description:"Print verbose output (implies --wait)"},{name:"--log",description:"Log level to use. Default is 'info'. Allowed values are 'critical', 'error', 'warn', 'info', 'debug', 'trace', 'off'. You can also configure the log level of an extension by passing extension id and log level in the following format: '{publisher}.{name}:{logLevel}'. For example: 'vscode.csharp:trace'. Can receive one or more such entries.",isRepeatable:!0,args:{name:"level",description:"Log level or 'publisher.name:logLevel'",default:"info",suggestions:["critical","error","warn","info","debug","trace","off"]}},{name:["-s","--status"],description:"Print process usage and diagnostics information"},{name:"--prof-startup",description:"Run CPU profiler during startup"},{name:"--disable-extensions",description:"Disable all installed extensions"},{name:"--disable-extension",description:"Disable an extension",args:{name:"extension-id",generators:a(e)}},{name:"--sync",description:"Turn sync on or off",args:{name:"sync",description:"Whether to enable sync",suggestions:["on","off"]}},{name:"--inspect-extensions",description:"Allow debugging and profiling of extensions. Check the developer tools for the connection URI",args:{name:"port"}},{name:"--inspect-brk-extensions",description:"Allow debugging and profiling of extensions with the extension host being paused after start. Check the developer tools for the connection URI",args:{name:"port"}},{name:"--disable-gpu",description:"Disable GPU hardware acceleration"},{name:"--disable-lcd-text",description:"Disable LCD font rendering"},{name:"--disable-chromium-sandbox",description:"Use this option only when there is requirement to launch the application as sudo user on Linux or when running as an elevated user in an applocker environment on Windows."},{name:"--max-memory",description:"Max memory size for a window (in Mbytes)",args:{name:"memory",description:"Memory in megabytes"}},{name:"--telemetry",description:"Shows all telemetry events which VS code collects"},{name:"--transient",description:"Run with temporary data and extension directories, as if launched for the first time."}],t.commonAuthOptions=[{name:"--access-token",description:"An access token to store for authentication",isRepeatable:!0,args:{name:"access_token",isOptional:!0}},{name:"--refresh-token",description:"An access token to store for authentication",isRepeatable:!0,args:{name:"refresh_token",isOptional:!0}},{name:"--provider",description:"The auth provider to use. If not provided, a prompt will be shown",isRepeatable:!0,args:{name:"provider",isOptional:!0,suggestions:["microsoft","github"]}}],t.tunnelHelpOptions=[{name:["-h","--help"],description:"Print help"}],t.globalTunnelOptions=[{name:"--cli-data-dir",description:"Directory where CLI metadata should be stored",args:{name:"cli_data_dir"}},{name:"--verbose",description:"Print verbose output (implies --wait)"},{name:"--log",description:"Log level to use",isRepeatable:!0,args:{name:"log",isOptional:!0,suggestions:["trace","debug","info","warn","error","critical","off"]}}],t.codeTunnelOptions=[{name:"--extensions-dir",description:"Set the root path for extensions",isRepeatable:!0,args:{name:"extensions_dir",isOptional:!0}},{name:"--user-data-dir",description:"Specifies the directory that user data is kept in. Can be used to open multiple distinct instances of the editor",isRepeatable:!0,args:{name:"user_data_dir",isOptional:!0}},{name:"--use-version",description:"Sets the editor version to use for this command. The preferred version can be persisted with `code version use `. Can be 'stable', 'insiders', a version number, or an absolute path to an existing install",isRepeatable:!0,args:{name:"use_version",isOptional:!0}}],t.extTunnelSubcommand={name:"ext",description:"Manage editor extensions",subcommands:[{name:"list",description:"List installed extensions",options:[...t.globalTunnelOptions,...t.tunnelHelpOptions,{name:"--category",description:"Filters installed extensions by provided category, when using --list-extensions",isRepeatable:!0,args:{name:"category",isOptional:!0}},{name:"--show-versions",description:"Show versions of installed extensions, when using --list-extensions"}]},{name:"install",description:"Install an extension",options:[...t.globalTunnelOptions,...t.tunnelHelpOptions,{name:"--pre-release",description:"Installs the pre-release version of the extension"},{name:"--donot-include-pack-and-dependencies",description:"Don't include installing pack and dependencies of the extension"},{name:"--force",description:"Update to the latest version of the extension if it's already installed"}],args:{name:"ext-id | id",isVariadic:!0,isOptional:!0}},{name:"uninstall",description:"Uninstall an extension",options:[...t.globalTunnelOptions,...t.tunnelHelpOptions],args:{name:"ext-id | id",isVariadic:!0,isOptional:!0}},{name:"update",description:"Update the installed extensions",options:[...t.globalTunnelOptions,...t.tunnelHelpOptions]}],...t.globalTunnelOptions,...t.codeTunnelOptions},t.codeTunnelSubcommands=[{name:"tunnel",description:"Create a tunnel that's accessible on vscode.dev from anywhere. Run`code tunnel --help` for more usage info",subcommands:[{name:"prune",description:"Delete all servers which are currently not running",options:[...t.globalTunnelOptions,...t.tunnelHelpOptions]},{name:"kill",description:"Stops any running tunnel on the system",options:[...t.globalTunnelOptions,...t.tunnelHelpOptions]},{name:"restart",description:"Restarts any running tunnel on the system",options:[...t.globalTunnelOptions,...t.tunnelHelpOptions]},{name:"status",description:"Gets whether there is a tunnel running on the current machine",options:[...t.globalTunnelOptions,...t.tunnelHelpOptions]},{name:"rename",description:"Rename the name of this machine associated with port forwarding service",options:[...t.globalTunnelOptions,...t.tunnelHelpOptions],args:{name:"name"}},{name:"unregister",description:"Remove this machine's association with the port forwarding service",options:[...t.globalTunnelOptions,...t.tunnelHelpOptions]},{name:"user",subcommands:[{name:"login",description:"Log in to port forwarding service",options:[...t.globalTunnelOptions,...t.tunnelHelpOptions,...t.commonAuthOptions]},{name:"logout",description:"Log out of port forwarding service",options:[...t.globalTunnelOptions,...t.tunnelHelpOptions]},{name:"show",description:"Show the account that's logged into port forwarding service",options:[...t.globalTunnelOptions,...t.tunnelHelpOptions]},{name:"help",description:"Print this message or the help of the given subcommand(s)",subcommands:[{name:"login",description:"Log in to port forwarding service"},{name:"logout",description:"Log out of port forwarding service"},{name:"show",description:"Show the account that's logged into port forwarding service"},{name:"help",description:"Print this message or the help of the given subcommand(s)"}]}]},{name:"service",description:"(Preview) Manages the tunnel when installed as a system service,",subcommands:[{name:"install",description:"Installs or re-installs the tunnel service on the machine",options:[{name:"--name",description:"Sets the machine name for port forwarding service",args:{name:"name"}},{name:"--accept-server-license-terms",description:"If set, the user accepts the server license terms and the server will be started without a user prompt"},...t.globalTunnelOptions,...t.tunnelHelpOptions]},{name:"uninstall",description:"Uninstalls and stops the tunnel service",options:[...t.globalTunnelOptions,...t.tunnelHelpOptions]},{name:"log",description:"Shows logs for the running service",options:[...t.globalTunnelOptions,...t.tunnelHelpOptions]},{name:"help",description:"Print this message or the help of the given subcommand(s)",subcommands:[{name:"install",description:"Installs or re-installs the tunnel service on the machine"},{name:"uninstall",description:"Uninstalls and stops the tunnel service"},{name:"log",description:"Shows logs for the running service"},{name:"help",description:"Print this message or the help of the given subcommand(s)"}]}],options:[...t.globalTunnelOptions,...t.tunnelHelpOptions]},{name:"help",description:"Print this message or the help of the given subcommand(s)",subcommands:[{name:"prune",description:"Delete all servers which are currently not running"},{name:"kill",description:"Stops any running tunnel on the system"},{name:"restart",description:"Restarts any running tunnel on the system"},{name:"status",description:"Gets whether there is a tunnel running on the current machine"},{name:"rename",description:"Rename the name of this machine associated with port forwarding service"},{name:"unregister",description:"Remove this machine's association with the port forwarding service"},{name:"user",subcommands:[{name:"login",description:"Log in to port forwarding service"},{name:"logout",description:"Log out of port forwarding service"},{name:"show",description:"Show the account that's logged into port forwarding service"}]},{name:"service",description:"(Preview) Manages the tunnel when installed as a system service,",subcommands:[{name:"install",description:"Installs or re-installs the tunnel service on the machine"},{name:"uninstall",description:"Uninstalls and stops the tunnel service"},{name:"log",description:"Shows logs for the running service"}]},{name:"help",description:"Print this message or the help of the given subcommand(s)"}]}],options:[{name:"--install-extension",description:"Requests that extensions be preloaded and installed on connecting servers",isRepeatable:!0,args:{name:"install_extension",isOptional:!0}},{name:"--server-data-dir",description:"Specifies the directory that server data is kept in",isRepeatable:!0,args:{name:"server_data_dir",isOptional:!0}},{name:"--extensions-dir",description:"Set the root path for extensions",isRepeatable:!0,args:{name:"extensions_dir",isOptional:!0}},{name:"--user-data-dir",description:"Specifies the directory that user data is kept in. Can be used to open multiple distinct instances of the editor",isRepeatable:!0,args:{name:"user_data_dir",isOptional:!0}},{name:"--use-version",description:"Sets the editor version to use for this command. The preferred version can be persisted with `code version use `. Can be 'stable', 'insiders', a version number, or an absolute path to an existing install",isRepeatable:!0,args:{name:"use_version",isOptional:!0}},{name:"--random-name",description:"Randomly name machine for port forwarding service"},{name:"--no-sleep",description:"Prevents the machine going to sleep while this command runs"},{name:"--accept-server-license-terms",description:"If set, the user accepts the server license terms and the server will be started without a user prompt"},{name:"--name",description:"Sets the machine name for port forwarding service",isRepeatable:!0,args:{name:"name",isOptional:!0}},{name:["-h","--help"],description:"Print help"},{name:"--log",description:"Log level to use",isRepeatable:!0,args:{name:"log",isOptional:!0,suggestions:["trace","debug","info","warn","error","critical","off"]}},{name:"--verbose",description:"Print verbose output (implies --wait)"},{name:"--cli-data-dir",description:"Directory where CLI metadata should be stored",args:{name:"cli_data_dir"}}]},{name:"chat",description:"Pass in a prompt to run in a chat session in the current working directory.",args:{name:"prompt",description:"The prompt to use as chat",isVariadic:!0,isOptional:!0},options:[{name:["-m","--mode"],description:"The mode to use for the chat session. Available options: 'ask', 'edit', 'agent', or the identifier of a custom mode. Defaults to 'agent'",args:{name:"mode",suggestions:["agent","ask","edit"]}},{name:["-a","--add-file"],description:"Add files as context to the chat session",isRepeatable:!0,args:{name:"file",template:"filepaths"}},{name:["--maximize"],description:"Maximize the chat session view."},{name:["-r","--reuse-window"],description:"Force to use the last active window for the chat session"},{name:["-n","--new-window"],description:"Force to open an empty window for the chat session"},{name:["-h","--help"],description:"Print usage"}]},{name:"status",description:"Print process usage and diagnostics information",options:[...t.globalTunnelOptions,...t.tunnelHelpOptions]},{name:"version",description:"Changes the version of the editor you're using",options:[...t.globalTunnelOptions,...t.tunnelHelpOptions]},{name:"serve-web",description:"Runs a local web version of Code - OSS",options:[{name:"--host",description:"Host to listen on, defaults to 'localhost'",isRepeatable:!0,args:{name:"host",isOptional:!0}},{name:"--socket-path",isRepeatable:!0,args:{name:"socket_path",isOptional:!0}},{name:"--port",description:"Port to listen on. If 0 is passed a random free port is picked",isRepeatable:!0,args:{name:"port",isOptional:!0}},{name:"--connection-token",description:"A secret that must be included with all requests",isRepeatable:!0,args:{name:"connection_token",isOptional:!0}},{name:"--connection-token-file",description:"A file containing a secret that must be included with all requests",isRepeatable:!0,args:{name:"connection_token_file",isOptional:!0}},{name:"--server-base-path",description:"Specifies the path under which the web UI and the code server is provided",isRepeatable:!0,args:{name:"server_base_path",isOptional:!0}},{name:"--server-data-dir",description:"Specifies the directory that server data is kept in",isRepeatable:!0,args:{name:"server_data_dir",isOptional:!0}},{name:"--without-connection-token",description:"Run without a connection token. Only use this if the connection is secured by other means"},{name:"--accept-server-license-terms",description:"If set, the user accepts the server license terms and the server will be started without a user prompt"},...t.globalTunnelOptions,...t.tunnelHelpOptions]},{name:"help",description:"Print this message or the help of the given subcommand(s)",subcommands:[{name:"tunnel",description:"Create a tunnel that's accessible on vscode.dev from anywhere. Run`code tunnel --help` for more usage info",subcommands:[{name:"prune",description:"Delete all servers which are currently not running"},{name:"kill",description:"Stops any running tunnel on the system"},{name:"restart",description:"Restarts any running tunnel on the system"},{name:"status",description:"Gets whether there is a tunnel running on the current machine"},{name:"rename",description:"Rename the name of this machine associated with port forwarding service"},{name:"unregister",description:"Remove this machine's association with the port forwarding service"},{name:"user",subcommands:[{name:"login",description:"Log in to port forwarding service"},{name:"logout",description:"Log out of port forwarding service"},{name:"show",description:"Show the account that's logged into port forwarding service"}]},{name:"service",description:"(Preview) Manages the tunnel when installed as a system service,",subcommands:[{name:"install",description:"Installs or re-installs the tunnel service on the machine"},{name:"uninstall",description:"Uninstalls and stops the tunnel service"},{name:"log",description:"Shows logs for the running service"}]}]},{name:"chat",description:"Pass in a prompt to run in a chat session in the current working directory."},t.extTunnelSubcommand,{name:"status",description:"Print process usage and diagnostics information"},{name:"version",description:"Changes the version of the editor you're using",subcommands:[{name:"use",description:"Switches the version of the editor in use"},{name:"show",description:"Shows the currently configured editor version"}]},{name:"serve-web",description:"Runs a local web version of Code - OSS"},{name:"command-shell",description:"Runs the control server on process stdin/stdout",hidden:!0},{name:"update",description:"Updates the CLI"},{name:"help",description:"Print this message or the help of the given subcommand(s)"}]}];const o={name:"code",description:"Visual Studio Code",args:{template:["filepaths","folders"],isVariadic:!0},subcommands:t.codeTunnelSubcommands,options:[...t.commonOptions,...(0,t.extensionManagementOptions)("code"),...(0,t.troubleshootingOptions)("code")]};t.default=o},2315:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n={script:["bundle","list","--name-only"],postProcess:e=>e.split("\n").map(e=>({name:e,icon:"📦",description:"Gem"}))},i={name:"bundle",description:"Ruby Dependency Management",subcommands:[{name:"install",description:"Install the gems specified by the Gemfile or Gemfile.lock",options:[{name:"--binstubs",args:{template:"folders"},description:"Create binstubs in dir"},{name:"--clean",description:"Remove unused gems after install"},{name:"--deployment",description:"For Production and CI use"},{name:["--force","--redownload"],description:"Redownload all gems"},{name:"--frozen",description:"Do not allow lock file to update"},{name:"--full-index",description:"Cache the full index locally"},{name:"--gemfile",args:{template:"filepaths"},description:"The gemfile to use"},{name:"--jobs",args:{},description:"Maximum number of parallel installs"},{name:"--local",description:"Use only gems already downloaded or cached"},{name:"--no-cache",description:"Do not use vendor/cache"},{name:"--no-prune",description:"Do not remove stale gems"},{name:"--path",args:{template:"folders"},description:"Path the install gems too"},{name:"--quiet",description:"Do not print to stdout"},{name:"--retry",args:{},description:"Retry failed network requests N times"},{name:"--shebang",args:{},description:"Uses the specified ruby executable for binstubs"},{name:"--standalone",args:{},description:"Makes a bundle that can work without depending on Rubygems or Bundler at runtime"},{name:"--system",description:"Use system Rubygems location"},{name:"--trust-policy",args:{},description:"Apply the Rubygems security policy"},{name:"--with",args:{},description:"Groups to install"},{name:"--without",args:{},description:"Groups to NOT install"}]},{name:"update",description:"Update dependencies to their latest versions",args:{name:"gem",generators:n,isOptional:!0},options:[{name:"--all",description:"Update all gems specified in Gemfile"},{name:["--group","-g"],description:"Only update the gems in the specified group",args:{}},{name:"--source",description:"The name of a :git or :path source used in the Gemfile",args:{}},{name:"--local",description:"Use only gems already downloaded or cached"},{name:"--ruby",description:"Update the locked version of Ruby to the current version of Ruby"},{name:"--bundler",description:"Update the locked version of bundler to the invoked bundler version"},{name:"--full-index",description:"Fall back to using the single-file index of all gems"},{name:["--jobs","-j"],description:"Specify the number of jobs to run in parallel. The default is 1",args:{}},{name:"--retry",description:"Retry failed network or git requests for number times",args:{}},{name:"--quiet",description:"Only output warnings and errors"},{name:["--force","--redownload"],description:"Force downloading every gem"},{name:"--patch",description:"Prefer updating only to next patch version"},{name:"--minor",description:"Prefer updating only to next minor version"},{name:"--major",description:"Prefer updating to next major version (default)"},{name:"--strict",description:"Do not allow any gem to be updated past latest --patch | --minor | --major"},{name:"--conservative",description:"Do not allow shared dependencies to be updated"}]},{name:"package",description:"Package the .gem files required by your application into the vendor/cache directory"},{name:"exec",description:"Execute a command in the context of the bundle",options:[{name:"--keep-file-descriptors",description:"Pass all file descriptors to the new process"}],args:{isCommand:!0}},{name:"config",args:{}},{name:"help"},{name:"add",description:"Add gem to the Gemfile and run bundle install",args:{},options:[{name:["--version","-v"],description:"Specify version requirements"},{name:["--group","-g"],description:"Specify the group(s) for the added gem"},{name:["--source","-s"],description:"Specify the source"},{name:"--skip-install",description:"Adds the gem to the Gemfile but does not install it"},{name:"--optimistic",description:"Adds optimistic declaration of version"},{name:"--strict",description:"Adds strict declaration of version"}]},{name:"binstubs",description:"Install the binstubs of the listed gems",args:{},options:[{name:"--force",description:"Overwrite existing binstubs"},{name:"--path",description:"The location to install the specified binstubs to"},{name:"--standalone",description:"Makes binstubs that can work without depending on Rubygems or Bundler at runtime"},{name:"--shebang",description:"Specify a different shebang executable name than the default"}]},{name:"check",description:"Determine whether the requirements for your application are installed and available to Bundler",options:[{name:"--dry-run",description:"Locks the Gemfile before running the command"},{name:"--gemfile",description:"Use the specified gemfile instead of the Gemfile"},{name:"--path",description:"Specify a different path than the system default"}]},{name:"show",description:"Show the source location of a particular gem in the bundle",args:{name:"gem",generators:n,isOptional:!0},options:[{name:"--paths",description:"List the paths of all gems that are required by your Gemfile"}]},{name:"outdated",description:"Show all of the outdated gems in the current bundle",options:[{name:"--local",description:"Do not attempt to fetch gems remotely and use the gem cache instead"},{name:"--pre",description:"Check for newer pre-release gems"},{name:"--source",description:"Check against a specific source"},{name:"--strict",description:"Only list newer versions allowed by your Gemfile requirements"},{name:["--parseable","--porcelain"],description:"Use minimal formatting for more parseable output"},{name:"--group",description:"List gems from a specific group"},{name:"--groups",description:"List gems organized by groups"},{name:"--update-strict",description:"Strict conservative resolution, do not allow any gem to be updated past latest --patch | --minor| --major"},{name:"--minor",description:"Prefer updating only to next minor version"},{name:"--major",description:"Prefer updating to next major version (default)"},{name:"--patch",description:"Prefer updating only to next patch version"},{name:"--filter-major",description:"Only list major newer versions"},{name:"--filter-minor",description:"Only list minor newer versions"},{name:"--filter-patch",description:"Only list patch newer versions"},{name:"--only-explicit",description:"Only list gems specified in your Gemfile, not their dependencies"}]},{name:"console",description:"Start an IRB session in the current bundle"},{name:"open",description:"Open an installed gem in the editor",args:{name:"gem",generators:n}},{name:"lock",description:"Generate a lockfile for your dependencies",options:[{name:"--update",description:"Ignores the existing lockfile",args:{}},{name:"--local",description:"Do not attempt to connect to rubygems.org"},{name:"--print",description:"Prints the lockfile to STDOUT instead of writing to the file\n system"},{name:"--lockfile",description:"The path where the lockfile should be written to",args:{name:"path"}},{name:"--full-index",description:"Fall back to using the single-file index of all gems"},{name:"--add-platform",description:"Add a new platform to the lockfile, re-resolving for the addi-\n tion of that platform"},{name:"--remove-platform",description:"Remove a platform from the lockfile"},{name:"--patch",description:"If updating, prefer updating only to next patch version"},{name:"--minor",description:"If updating, prefer updating only to next minor version"},{name:"--major",description:"If updating, prefer updating to next major version (default)"},{name:"--strict",description:"If updating, do not allow any gem to be updated past latest --patch | --minor | --major"},{name:"--conservative",description:"If updating, use bundle install conservative update behavior and do not allow shared dependencies to be updated"}]},{name:"viz",description:"Generate a visual representation of your dependencies",options:[{name:["--file","-f"],description:"The name to use for the generated file. See --format option"},{name:["--format","-F"],description:"This is output format option"},{name:["--requirements","-R"],description:"Set to show the version of each required dependency"},{name:["--version","-v"],description:"Set to show each gem version"},{name:["--without","-W"],description:"Exclude gems that are part of the specified named group"}]},{name:"init",description:"Generate a simple Gemfile, placed in the current directory",options:[{name:"--gemspec",description:"Use the specified .gemspec to create the Gemfile"}]},{name:"gem",description:"Create a simple gem, suitable for development with Bundler",options:[{name:["--exe","-b","--bin"],description:"Specify that Bundler should create a binary executable"},{name:"--no-exe",description:"Do not create a binary"},{name:"--coc",description:"Add a CODE_OF_CONDUCT.md file to the root of the generated project"},{name:"--no-coc",description:"Do not create a CODE_OF_CONDUCT.md"},{name:"--ext",description:"Add boilerplate for C extension code to the generated project"},{name:"--no-ext",description:"Do not add C extension code"},{name:"--mit",description:"Add an MIT license"},{name:"--no-mit",description:"Do not create a LICENSE.txt"},{name:["-t","--test"],description:"Specify the test framework that Bundler should use",args:{}},{name:["-e","--edit"],description:"Open the resulting gemspec in EDITOR",args:{}}]},{name:"platform",description:"Display platform compatibility information",options:[{name:"--ruby",description:"It will display the ruby directive information so you don't have to parse it from the Gemfile"}]},{name:"clean",description:"Clean up unused gems in your Bundler directory",options:[{name:"--dry-run",description:"Print the changes, but do not clean the unused gems"},{name:"--force",description:"Force a clean even if --path is not set"}]},{name:"doctor",description:"Display warnings about common problems",options:[{name:"--quiet",description:"Only output warnings and errors"},{name:"--gemfile",description:"The location of the Gemfile which Bundler should use",args:{}}]}],options:[{name:"--no-color",description:"Print all output without color"},{name:["--retry","-r"],description:"Specify the number of times you wish to attempt network commands"},{name:["--verbose","-V"],description:"Print out additional logging information"}]};t.default=i},2341:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.filepaths=function(e){return{custom:async(t,n,i)=>[{type:"file",_internal:{fileExtensions:e.extensions||[]}},{type:"folder"}],trigger:(e,t)=>!0,getQueryTerm:e=>e}}},2441:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={name:"shred",description:"Overwrite a file to hide its contents, and optionally delete it",options:[{name:["--force","-f"],description:"Change permissions to allow writing if necessary"},{name:["--iterations","-n"],description:"Overwrite N times instead of the default (3)",args:{name:"N",suggestions:["3","5","7"],default:"3"}},{name:"--random-source",description:"Get random bytes from FILE",args:{name:"FILE",suggestions:["/dev/urandom","/dev/random"],default:"/dev/urandom",template:"filepaths"}},{name:["--size","-s"],description:"Shred this many bytes (suffixes like K, M, G accepted)",args:{name:"N",suggestions:["1K","1M","1G"]}},{name:"--remove",description:"Like -u but give control on HOW to delete",args:{name:"HOW",description:"'unlink' => use a standard unlink call, 'wipe' => also first obfuscate bytes in the name, 'wipesync' => also sync each obfuscated byte to the device",suggestions:["unlink","wipe","wipesync"],default:"wipesync"}},{name:["--verbose","-v"],description:"Show progress"},{name:["--exact","-x"],description:"Do not round file sizes up to the next full block; this is the default for non-regular files"},{name:["--zero","-z"],description:"Add a final overwrite with zeros to hide shredding"},{name:"--help",description:"Display this help and exit"},{name:"--version",description:"Output version information and exit"}],args:{name:"FILE",description:"File(s) to shred",isVariadic:!0,template:"filepaths"}}},2449:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.configHosts=t.knownHosts=void 0;const n=/(?:[a-zA-Z0-9-]+\.)+[a-zA-Z0-9]+/,i=async(e,t,n,a)=>{const s=((e,t,n)=>e.startsWith("/")||e.startsWith("~/")||"~"===e?e.replace("~",n):t.startsWith("/")||t.startsWith("~/")||"~"===t?t.replace("~",n)+(t.replace("~",n).endsWith("/")?"":"/")+e:t+(t.endsWith("/")?"":"/")+e)(e,a,n),{stdout:o}=await t({command:"cat",args:[s]}),r=o.split("\n").map(e=>e.trim()),c=r.filter(e=>e.toLowerCase().startsWith("include ")).map(e=>e.split(" ")[1]),l=await Promise.all(c.map(e=>i(e,t,n,a)));return[...r,...l.flat()]};t.knownHosts={custom:async(e,t,i)=>{const{stdout:a}=await t({command:"cat",args:[`${i.environmentVariables.HOME}/.ssh/known_hosts`]});return a.split("\n").map(e=>{const t=n.exec(e);if(t)return String(t)}).filter((e,t,n)=>e&&n.indexOf(e)===t).map(t=>({name:(e[1].endsWith("@")?e[1]:"")+t,description:"SSH host"}))},trigger:"@"},t.configHosts={custom:async(e,t,n)=>(await i("config",t,n.environmentVariables.HOME,"~/.ssh")).filter(e=>e.trim().toLowerCase().startsWith("host ")&&!e.includes("*")).map(e=>({name:e.split(" ")[1],description:"SSH host",priority:90}))};const a={name:"ssh",description:"Log into a remote machine",args:{name:"user@hostname",description:"Address of remote machine to log into",generators:[t.knownHosts,t.configHosts,{template:"history"}]},options:[{name:"-1",description:"Forces ssh to try protocol version 1 only"},{name:"-2",description:"Forces ssh to try protocol version 2 only"},{name:"-4",description:"Forces ssh to use IPv4 addresses only"},{name:"-6",description:"Forces ssh to use IPv6 addresses only"},{name:"-A",description:"Enables forwarding of the authentication agent connection"},{name:"-a",description:"Disables forwarding of the authentication agent connection"},{name:"-b",description:"Use bind_address on the local machine as the source address of the connection",args:{name:"bind address",description:"Source address of the connection"}},{name:"-C",description:"Requests compression of all data (including stdin, stdout, stderr, and data for forwarded X11 and TCP connections)"},{name:"-c",description:"Selects the cipher specification for encrypting the session",args:{name:"cipher spec",description:"The selected cipher specification"}},{name:"-D",description:"Specifies a local 'dynamic' application-level port forwarding",args:{name:"port",description:"Port of the bind address"}},{name:"-e",description:"Sets the escape character for sessions with a pty (default: '~')",args:{name:"escape char",description:"Specified escape character"}},{name:"-F",description:"Specifies an alternative per-user configuration file",args:{name:"configfile",description:"Path to alternative config file",template:"filepaths"}},{name:"-f",description:"Requests ssh to go to background just before command execution"},{name:"-g",description:"Allows remote hosts to connect to local forwarded ports"},{name:"-I",description:"Specify the PKCS#11 shared library ssh should use to communicate with a PKCS#11 token providing the user's private RSA key",args:{name:"pkcs11"}},{name:"-i",description:"Selects a file from which the identity (private key) for public key authentication is read",isRepeatable:!0,args:{name:"identity file",description:"Path to identity (private key)",template:"filepaths"}},{name:"-K",description:"Enables GSSAPI-based authentication and forwarding (delegation) of GSSAPI credentials to the server"},{name:"-k",description:"Disables forwarding (delegation) of GSSAPI credentials to the server"},{name:"-L",description:"Specifies that the given port on the local (client) host is to be forwarded to the given host and port on the remote side",args:{name:"port:host:hostport",description:"Local port, followed by host and host port to forward to"}},{name:"-l",description:"Specifies the user to log in as on the remote machine",args:{name:"login name",description:"Name of user logging into remote machine"}},{name:"-M",description:"Places the ssh client into ``master'' mode for connection sharing",isRepeatable:!0},{name:"-m",description:"Additionally, for protocol version 2 a comma-separated list of MAC (message authentication code) algorithms can be specified in order of preference",args:{name:"mac spec"}},{name:"-N",description:"Do not execute a remote command"},{name:"-n",description:"Redirects stdin from /dev/null (actually, prevents reading from stdin)"},{name:"-O",description:"Control an active connection multiplexing master process",args:{name:"ctl cmd",description:"Command that's passed to the master process"}},{name:"-o",description:"Can be used to give options in the format used in the configuration file",isRepeatable:!0,args:{name:"option",description:"Options that can be specified in the format of the config file",suggestions:[{name:"AddressFamily"},{name:"BatchMode"},{name:"BindAddress"},{name:"ChallengeResponseAuthentication"},{name:"CheckHostIP"},{name:"Cipher"},{name:"Ciphers"},{name:"ClearAllForwardings"},{name:"Compression"},{name:"CompressionLevel"},{name:"ConnectionAttempts"},{name:"ConnectTimeout"},{name:"ControlMaster"},{name:"ControlPath"},{name:"ControlPersist"},{name:"DynamicForward"},{name:"EscapeChar"},{name:"ExitOnForwardFailure"},{name:"ForwardAgent"},{name:"ForwardX11"},{name:"ForwardX11Timeout"},{name:"ForwardX11Trusted"},{name:"GatewayPorts"},{name:"GlobalKnownHostsFile"},{name:"GSSAPIAuthentication"},{name:"GSSAPIDelegateCredentials"},{name:"HashKnownHosts"},{name:"Host"},{name:"HostbasedAuthentication"},{name:"HostKeyAlgorithms"},{name:"HostKeyAlias"},{name:"HostName"},{name:"IdentityFile"},{name:"IdentitiesOnly"},{name:"IPQoS"},{name:"KbdInteractiveAuthentication"},{name:"KbdInteractiveDevices"},{name:"KexAlgorithms"},{name:"LocalCommand"},{name:"LocalForward"},{name:"LogLevel"},{name:"MACs"},{name:"NoHostAuthenticationForLocalhost"},{name:"NumberOfPasswordPrompts"},{name:"PasswordAuthentication"},{name:"PermitLocalCommand"},{name:"PKCS11Provider"},{name:"Port"},{name:"PreferredAuthentications"},{name:"Protocol"},{name:"ProxyCommand"},{name:"PubkeyAuthentication"},{name:"RekeyLimit"},{name:"RequestTTY"},{name:"RhostsRSAAuthentication"},{name:"RSAAuthentication"},{name:"SendEnv"},{name:"ServerAliveInterval"},{name:"ServerAliveCountMax"},{name:"StrictHostKeyChecking"},{name:"TCPKeepAlive"},{name:"Tunnel"},{name:"TunnelDevice"},{name:"UsePrivilegedPort"},{name:"User"},{name:"UserKnownHostsFile"},{name:"VerifyHostKeyDNS"},{name:"VisualHostKey"},{name:"XAuthLocation"}]}},{name:"-p",description:"Port to connect to on the remote host",args:{name:"port",description:"Port to connect to"}},{name:"-q",description:"Quiet mode. Causes most warning and diagnostic messages to be suppressed"},{name:"-R",description:"Specifies that the given port on the remote (server) host is to be forwarded to the given host and port on the local side",args:{name:"port:host:hostport",description:"Local port, followed by host and host port to forward to"}},{name:"-S",description:"Specifies the location of a control socket for connection sharing, or the string 'none' to disable connection sharing",args:{name:"ctl_path",description:"Location of the control socket",template:"filepaths"}},{name:"-s",description:"May be used to request invocation of a subsystem on the remote system"},{name:"-T",description:"Disable pseudo-tty allocation"},{name:"-t",description:"Force pseudo-tty allocation",isRepeatable:!0},{name:"-V",description:"Display the version number and exit"},{name:"-v",description:"Verbose mode. Causes ssh to print debugging messages about its progress",isRepeatable:3},{name:"-W",description:"Requests that standard input and output on the client be forwarded to host on port over the secure channel",args:{name:"host:port",description:"Host and port to forward to"}},{name:"-w",description:"Requests tunnel device forwarding with the specified tun(4) devices between the client (local_tun) and the server (remote_tun)",args:{name:"local tun",description:"Local device to forward to"}},{name:"-X",description:"Enables X11 forwarding"},{name:"-x",description:"Disables X11 forwarding"},{name:"-Y",description:"Enables trusted X11 forwarding"},{name:"-y",description:"Send log information using the syslog(3) system module"}]};t.default=a},2488:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={name:"whereis",description:"Locate the binary, source, and manual page files for a command",options:[{name:"-b",description:"Search only for binaries"},{name:"-m",description:"Search only for manual sections"},{name:"-s",description:"Search only for sources"},{name:"-u",description:"Search for unusual entries"},{name:"-B",description:"Search for binaries only in the specified directory",args:{name:"directory",description:"The directory to search in",template:"folders"}},{name:"-M",description:"Search for manual pages only in the specified directory",args:{name:"directory",description:"The directory to search in",template:"folders"}},{name:"-S",description:"Search for sources only in the specified directory",args:{name:"directory",description:"The directory to search in",template:"folders"}},{name:"-f",description:"Terminate the -B, -M, and -S options"}],args:{name:"Filename",description:"The file to search for"}}},2500:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={name:"paste",description:"The paste utility concatenates the corresponding lines of the given input files, replacing all but the last file's newline characters with a single tab character, and writes the resulting lines to standard output. If end-of-file is reached on an input file while other input files still contain data, the file is treated as if it were an endless source of empty lines",options:[{name:"-d",description:"Use one or more of the provided characters to replace the newline characters instead of the default tab. The characters in list are used circularly, i.e., when list is exhausted the first character from list is reused. This continues until a line from the last input file (in default operation) or the last line in each file (using the -s option) is displayed, at which time paste begins selecting characters from the beginning of list again",args:{name:"list",suggestions:["\\t\\n","\\t","\\n","\\\\","\\0"],default:"\\n"}},{name:"-s",description:"Concatenate all of the lines of each separate input file in command line order. The newline character of every line except the last line in each input file is replaced with the tab character, unless otherwise specified by the -d option"}],args:{name:"file",template:"filepaths"}}},2682:(e,t)=>{"use strict";function n(e){return 1===e.length?e[0]:e}function i(e){const{name:t,args:i}=e;return{name:n(t),args:i}}Object.defineProperty(t,"__esModule",{value:!0}),t.revertSubcommand=function e(t,a){const{name:s,subcommands:o,options:r,persistentOptions:c,args:l}=t,d={name:n(s),subcommands:0!==Object.values(o).length?Object.values(o).map(t=>e(t,a)):void 0,options:0!==Object.values(r).length?[...Object.values(r).map(e=>i(e)),...Object.values(c).map(e=>i(e))]:void 0,args:0!==Object.values(l).length?n(Object.values(l)):void 0};return a(t,d)}},2717:function(e,t,n){"use strict";var i,a=this&&this.__createBinding||(Object.create?function(e,t,n,i){void 0===i&&(i=n);var a=Object.getOwnPropertyDescriptor(t,n);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,i,a)}:function(e,t,n,i){void 0===i&&(i=n),e[i]=t[n]}),s=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||(i=function(e){return i=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},i(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=i(e),o=0;oe.startsWith("warning:")||e.startsWith("error:")?e.split("\n").slice(1).join("\n"):e,l=(e,t)=>{const n=c(e);return n.startsWith("fatal:")?[]:[...n.split("\n").map(e=>{const t=e.trim().split(" ");return{working:t[0],file:t.slice(1).join(" ").trim()}}).map(e=>{const n=e.file.replace(/^"|"$/g,"");let i="";try{i=n.split(".").slice(-1)[0]}catch(e){}return n.endsWith("/")&&(i="folder"),{name:n,icon:`fig://icon?type=${i}&color=ff0000&badge=${e.working}`,description:"Changed tracked files",priority:t.some(e=>e.includes(n))?50:100}})]},d=(e={})=>t=>{const{insertWithoutRemotes:n=!1}=e,i=c(t);if(i.startsWith("fatal:"))return[];const a=new Set;return i.split("\n").filter(e=>e.trim()&&!e.trim().startsWith("HEAD")).map(e=>{const t=e.split("|");if(t.length<5){let t=e.trim();const i=e.match(/\S+/g);if(i&&i.length>1){if("*"===i[0])return e.includes("HEAD detached")?null:{name:e.replaceAll("*","").trim(),description:"Current branch",priority:100,icon:`vscode://icon?type=${r.TerminalCompletionItemKind.ScmBranch}`};"+"===i[0]&&(t=e.replaceAll("+","").trim())}let a="Branch";n&&t.startsWith("remotes/")&&(t=t.slice(t.indexOf("/",8)+1),a="Remote branch");const s=t.indexOf(" ");return-1!==s&&(t=t.slice(0,s)),{name:t,description:a,icon:`vscode://icon?type=${r.TerminalCompletionItemKind.ScmBranch}`,priority:75}}let i=t[0].trim();const a=t[1].trim(),s=t[2].trim(),o=t[3].trim(),c=`${t[4].trim()} • ${a} • ${s} • ${o}`;return n&&i.startsWith("remotes/")&&(i=i.slice(i.indexOf("/",8)+1)),{name:i,description:c,icon:`vscode://icon?type=${r.TerminalCompletionItemKind.ScmBranch}`,priority:75}}).filter(e=>!!e&&!a.has(e.name)&&(a.add(e.name),!0))},m=["git","--no-optional-locks","for-each-ref","--sort=-committerdate","--format=%(refname:short)|%(authorname)|%(objectname:short)|%(subject)|%(committerdate:relative)"];t.gitGenerators={commits:{script:["git","--no-optional-locks","log","--oneline","-n","1000"],postProcess:function(e){const t=c(e);if(t.startsWith("fatal:"))return[];const n=t.split("\n"),i=n.length>0?n[0]:void 0,a=i&&i.length>0?i.indexOf(" "):7,s=a+1;return n.map(e=>({name:e.substring(0,a),icon:`vscode://icon?type=${r.TerminalCompletionItemKind.ScmCommit}`,description:e.substring(s)}))}},aliases:{script:["git","--no-optional-locks","config","--get-regexp","^alias."],cache:{strategy:"stale-while-revalidate"},postProcess:e=>{const t=e.split("\n").map(e=>{const[t,...n]=e.slice(6).split(" ");return{name:t,description:`Alias for '${n.join(" ")}'`,icon:"fig://icon?type=commandkey"}}),n=new Set;return t.filter(e=>!n.has(e.name)&&(n.add(e.name),!0))}},revs:{script:["git","rev-list","--all","--oneline"],postProcess:function(e){const t=c(e);return t.startsWith("fatal:")?[]:t.split("\n").map(e=>({name:e.substring(0,7),icon:`vscode://icon?type=${r.TerminalCompletionItemKind.ScmCommit}`,description:e.substring(7)}))}},stashes:{script:["git","--no-optional-locks","stash","list"],postProcess:function(e){const t=c(e);return t.startsWith("fatal:")?[]:t.split("\n").map(e=>({name:e.split(":").slice(2).join(":"),insertValue:e.split(":")[0],icon:`vscode://icon?type=${r.TerminalCompletionItemKind.ScmStash}`}))}},treeish:{script:["git","--no-optional-locks","diff","--cached","--name-only"],postProcess:function(e,t){const n=c(e);return n.startsWith("fatal:")?[]:n.split("\n").map(e=>({name:e,insertValue:(t.includes("--")?"":"-- ")+e,icon:"fig://icon?type=file",description:"Staged file"}))}},remoteLocalBranches:{script:[...m,"refs/heads/","refs/remotes/"],postProcess:d({insertWithoutRemotes:!0})},localBranches:{script:[...m,"refs/heads/"],postProcess:d({insertWithoutRemotes:!0})},localOrRemoteBranches:{custom:async(e,t)=>{const n=d({insertWithoutRemotes:!0}),i=e.includes("-r")?"refs/remotes/":"refs/heads/";return n?.((await t({command:m[0],args:[...m.slice(1),i]})).stdout,e)}},remotes:{script:["git","--no-optional-locks","remote","-v"],postProcess:function(e){const t=e.split("\n").reduce((e,t)=>{const n=t.split("\t"),i=n[0],a=n[1].split(" ")[0];return e[i]=a,e},{});return Object.keys(t).map(e=>({name:e,icon:`vscode://icon?type=${r.TerminalCompletionItemKind.ScmRemote}`,description:"Remote"}))}},tags:{script:["git","--no-optional-locks","tag","--list","--sort=-committerdate"],postProcess:function(e){return e.split("\n").map(e=>({name:e,icon:`vscode://icon?type=${r.TerminalCompletionItemKind.ScmTag}`}))}},files_for_staging:{script:["git","--no-optional-locks","status","--short"],postProcess:(e,t)=>{const n=c(e);if(n.startsWith("fatal:"))return[];let i=n.split("\n").map(e=>{const t=["M","A"].includes(e.charAt(0)),n=(e=e.trim()).split(" ");return{working:n[0],file:n.slice(1).join(" ").trim(),alreadyAdded:t}});const a=n.split("\n").map(e=>e.slice(0,e.lastIndexOf("/")+1).trim().split(" ").slice(1).join(" ").trim()),s=[];if(a.length>=2){let e=a[0],t=1;for(let n=1;n=2&&s.push(e),t=1),e=a[n]}return i=i.filter(e=>{const n=e.file.replace(/^"|"$/g,"");return!t.some(e=>e===n||e.endsWith("*")&&n.startsWith(e.slice(0,-1))||e.startsWith("*")&&n.endsWith(e.slice(1)))}),[...s.map(e=>({name:e+"*",description:"Wildcard",icon:"fig://icon?type=asterisk"})),...i.map(e=>{const t=e.file.replace(/^"|"$/g,"");let n="";try{n=t.split(".").slice(-1)[0]}catch(e){}t.endsWith("/")&&(n="folder");const i=e.alreadyAdded?50:100;return{name:t,icon:`fig://icon?type=${n}&color=ff0000&badge=${e.working}`,description:"Changed file",priority:i}})]}},getStagedFiles:{script:["git","--no-optional-locks","status","--short"],postProcess:(e,t)=>{const n=c(e);if(n.startsWith("fatal:"))return[];const i=n.split("\n").filter(e=>e.match(/^M /)||e.match(/A /));return l(i.join("\n"),t)}},getUnstagedFiles:{script:["git","--no-optional-locks","diff","--name-only"],splitOn:"\n"},getChangedTrackedFiles:{script:["git","--no-optional-locks","status","--short"],postProcess:(e,t)=>{const n=c(e);if(n.startsWith("fatal:"))return[];let i;return i=t.includes("--staged")||t.includes("--cached")?n.split("\n").filter(e=>e.match(/^M /)||e.match(/A /)):n.split("\n").filter(e=>e.match(/M /)||e.match(/A /)),l(i.join("\n"),t)}}};const p=[{name:"add.ignore-errors",description:"Tells 'git add' to continue adding files when some files cannot be added due to indexing errors. Equivalent to the `--ignore-errors` option of git-add[1]. `add.ignore-errors` is deprecated, as it does not follow the usual naming convention for configuration variables",deprecated:!0,hidden:!0},{name:"add.interactive.useBuiltin",description:"Set to `false` to fall back to the original Perl implementation of the interactive version of git-add[1] instead of the built-in version. Is `true` by default"},{name:"advice.addEmbeddedRepo",description:"Advice on what to do when you've accidentally added one git repo inside of another"},{name:"advice.addEmptyPathspec",description:"Advice shown if a user runs the add command without providing the pathspec parameter"},{name:"advice.addIgnoredFile",description:"Advice shown if a user attempts to add an ignored file to the index"},{name:"advice.ambiguousFetchRefspec",description:"Advice shown when fetch refspec for multiple remotes map to the same remote-tracking branch namespace and causes branch tracking set-up to fail"},{name:"advice.amWorkDir",description:"Advice that shows the location of the patch file when git-am[1] fails to apply it"},{name:"advice.checkoutAmbiguousRemoteBranchName",description:"Advice shown when the argument to git-checkout[1] and git-switch[1] ambiguously resolves to a remote tracking branch on more than one remote in situations where an unambiguous argument would have otherwise caused a remote-tracking branch to be checked out. See the `checkout.defaultRemote` configuration variable for how to set a given remote to used by default in some situations where this advice would be printed"},{name:"advice.commitBeforeMerge",description:"Advice shown when git-merge[1] refuses to merge to avoid overwriting local changes"},{name:"advice.detachedHead",description:"Advice shown when you used git-switch[1] or git-checkout[1] to move to the detach HEAD state, to instruct how to create a local branch after the fact"},{name:"advice.fetchShowForcedUpdates",description:"Advice shown when git-fetch[1] takes a long time to calculate forced updates after ref updates, or to warn that the check is disabled"},{name:"advice.ignoredHook",description:"Advice shown if a hook is ignored because the hook is not set as executable"},{name:"advice.implicitIdentity",description:"Advice on how to set your identity configuration when your information is guessed from the system username and domain name"},{name:"advice.nestedTag",description:"Advice shown if a user attempts to recursively tag a tag object"},{name:"advice.pushAlreadyExists",description:"Shown when git-push[1] rejects an update that does not qualify for fast-forwarding (e.g., a tag.)"},{name:"advice.pushFetchFirst",description:"Shown when git-push[1] rejects an update that tries to overwrite a remote ref that points at an object we do not have"},{name:"advice.pushNeedsForce",description:"Shown when git-push[1] rejects an update that tries to overwrite a remote ref that points at an object that is not a commit-ish, or make the remote ref point at an object that is not a commit-ish"},{name:"advice.pushNonFFCurrent",description:"Advice shown when git-push[1] fails due to a non-fast-forward update to the current branch"},{name:"advice.pushNonFFMatching",description:"Advice shown when you ran git-push[1] and pushed 'matching refs' explicitly (i.e. you used ':', or specified a refspec that isn't your current branch) and it resulted in a non-fast-forward error"},{name:"advice.pushRefNeedsUpdate",description:"Shown when git-push[1] rejects a forced update of a branch when its remote-tracking ref has updates that we do not have locally"},{name:"advice.pushUnqualifiedRefname",description:"Shown when git-push[1] gives up trying to guess based on the source and destination refs what remote ref namespace the source belongs in, but where we can still suggest that the user push to either refs/heads/* or refs/tags/* based on the type of the source object"},{name:"advice.pushUpdateRejected",description:"Set this variable to 'false' if you want to disable 'pushNonFFCurrent', 'pushNonFFMatching', 'pushAlreadyExists', 'pushFetchFirst', 'pushNeedsForce', and 'pushRefNeedsUpdate' simultaneously"},{name:"advice.resetNoRefresh",description:"Advice to consider using the `--no-refresh` option to git-reset[1] when the command takes more than 2 seconds to refresh the index after reset"},{name:"advice.resolveConflict",description:"Advice shown by various commands when conflicts prevent the operation from being performed"},{name:"advice.rmHints",description:"In case of failure in the output of git-rm[1], show directions on how to proceed from the current state"},{name:"advice.sequencerInUse",description:"Advice shown when a sequencer command is already in progress"},{name:"advice.skippedCherryPicks",description:"Shown when git-rebase[1] skips a commit that has already been cherry-picked onto the upstream branch"},{name:"advice.statusAheadBehind",description:"Shown when git-status[1] computes the ahead/behind counts for a local ref compared to its remote tracking ref, and that calculation takes longer than expected. Will not appear if `status.aheadBehind` is false or the option `--no-ahead-behind` is given"},{name:"advice.statusHints",description:"Show directions on how to proceed from the current state in the output of git-status[1], in the template shown when writing commit messages in git-commit[1], and in the help message shown by git-switch[1] or git-checkout[1] when switching branch"},{name:"advice.statusUoption",description:"Advise to consider using the `-u` option to git-status[1] when the command takes more than 2 seconds to enumerate untracked files"},{name:"advice.submoduleAlternateErrorStrategyDie",description:'Advice shown when a submodule.alternateErrorStrategy option configured to "die" causes a fatal error'},{name:"advice.submodulesNotUpdated",description:"Advice shown when a user runs a submodule command that fails because `git submodule update --init` was not run"},{name:"advice.suggestDetachingHead",description:"Advice shown when git-switch[1] refuses to detach HEAD without the explicit `--detach` option"},{name:"advice.updateSparsePath",description:"Advice shown when either git-add[1] or git-rm[1] is asked to update index entries outside the current sparse checkout"},{name:"advice.waitingForEditor",description:"Print a message to the terminal whenever Git is waiting for editor input from the user"},{name:"alias.*",insertValue:"alias.{cursor}",description:"Command aliases for the git[1] command wrapper - e.g. after defining `alias.last = cat-file commit HEAD`, the invocation `git last` is equivalent to `git cat-file commit HEAD`. To avoid confusion and troubles with script usage, aliases that hide existing Git commands are ignored. Arguments are split by spaces, the usual shell quoting and escaping is supported. A quote pair or a backslash can be used to quote them"},{name:"am.keepcr",description:"If true, git-am will call git-mailsplit for patches in mbox format with parameter `--keep-cr`. In this case git-mailsplit will not remove `\\r` from lines ending with `\\r\\n`. Can be overridden by giving `--no-keep-cr` from the command line. See git-am[1], git-mailsplit[1]"},{name:"am.threeWay",description:"By default, `git am` will fail if the patch does not apply cleanly. When set to true, this setting tells `git am` to fall back on 3-way merge if the patch records the identity of blobs it is supposed to apply to and we have those blobs available locally (equivalent to giving the `--3way` option from the command line). Defaults to `false`. See git-am[1]"},{name:"apply.ignoreWhitespace",description:"When set to 'change', tells 'git apply' to ignore changes in whitespace, in the same way as the `--ignore-space-change` option. When set to one of: no, none, never, false tells 'git apply' to respect all whitespace differences. See git-apply[1]"},{name:"apply.whitespace",description:"Tells 'git apply' how to handle whitespaces, in the same way as the `--whitespace` option. See git-apply[1]"},{name:"blame.blankBoundary",description:"Show blank commit object name for boundary commits in git-blame[1]. This option defaults to false"},{name:"blame.coloring",description:"This determines the coloring scheme to be applied to blame output. It can be 'repeatedLines', 'highlightRecent', or 'none' which is the default"},{name:"blame.date",description:"Specifies the format used to output dates in git-blame[1]. If unset the iso format is used. For supported values, see the discussion of the `--date` option at git-log[1]"},{name:"blame.ignoreRevsFile",description:"Ignore revisions listed in the file, one unabbreviated object name per line, in git-blame[1]. Whitespace and comments beginning with `#` are ignored. This option may be repeated multiple times. Empty file names will reset the list of ignored revisions. This option will be handled before the command line option `--ignore-revs-file`"},{name:"blame.markIgnoredLines",description:"Mark lines that were changed by an ignored revision that we attributed to another commit with a '?' in the output of git-blame[1]"},{name:"blame.markUnblamableLines",description:"Mark lines that were changed by an ignored revision that we could not attribute to another commit with a '*' in the output of git-blame[1]"},{name:"blame.showEmail",description:"Show the author email instead of author name in git-blame[1]. This option defaults to false"},{name:"blame.showRoot",description:"Do not treat root commits as boundaries in git-blame[1]. This option defaults to false"},{name:"branch..description",insertValue:"branch.{cursor}.description",description:"Branch description, can be edited with `git branch --edit-description`. Branch description is automatically added in the format-patch cover letter or request-pull summary"},{name:"branch..merge",insertValue:"branch.{cursor}.merge",description:"Defines, together with branch..remote, the upstream branch for the given branch. It tells 'git fetch'/'git pull'/'git rebase' which branch to merge and can also affect 'git push' (see push.default). When in branch , it tells 'git fetch' the default refspec to be marked for merging in FETCH_HEAD. The value is handled like the remote part of a refspec, and must match a ref which is fetched from the remote given by \"branch..remote\". The merge information is used by 'git pull' (which at first calls 'git fetch') to lookup the default branch for merging. Without this option, 'git pull' defaults to merge the first refspec fetched. Specify multiple values to get an octopus merge. If you wish to setup 'git pull' so that it merges into from another branch in the local repository, you can point branch..merge to the desired branch, and use the relative path setting `.` (a period) for branch..remote"},{name:"branch..mergeOptions",insertValue:"branch.{cursor}.mergeOptions",description:"Sets default options for merging into branch . The syntax and supported options are the same as those of git-merge[1], but option values containing whitespace characters are currently not supported"},{name:"branch..pushRemote",insertValue:"branch.{cursor}.pushRemote",description:"When on branch , it overrides `branch..remote` for pushing. It also overrides `remote.pushDefault` for pushing from branch . When you pull from one place (e.g. your upstream) and push to another place (e.g. your own publishing repository), you would want to set `remote.pushDefault` to specify the remote to push to for all branches, and use this option to override it for a specific branch"},{name:"branch..rebase",insertValue:"branch.{cursor}.rebase",description:'When true, rebase the branch on top of the fetched branch, instead of merging the default branch from the default remote when "git pull" is run. See "pull.rebase" for doing this in a non branch-specific manner'},{name:"branch..remote",insertValue:"branch.{cursor}.remote",description:"When on branch , it tells 'git fetch' and 'git push' which remote to fetch from/push to. The remote to push to may be overridden with `remote.pushDefault` (for all branches). The remote to push to, for the current branch, may be further overridden by `branch..pushRemote`. If no remote is configured, or if you are not on any branch and there is more than one remote defined in the repository, it defaults to `origin` for fetching and `remote.pushDefault` for pushing. Additionally, `.` (a period) is the current local repository (a dot-repository), see `branch..merge`'s final note below"},{name:"branch.autoSetupMerge",description:"Tells 'git branch', 'git switch' and 'git checkout' to set up new branches so that git-pull[1] will appropriately merge from the starting point branch. Note that even if this option is not set, this behavior can be chosen per-branch using the `--track` and `--no-track` options. The valid settings are: `false` -- no automatic setup is done; `true` -- automatic setup is done when the starting point is a remote-tracking branch; `always` -- automatic setup is done when the starting point is either a local branch or remote-tracking branch; `inherit` -- if the starting point has a tracking configuration, it is copied to the new branch; `simple` -- automatic setup is done only when the starting point is a remote-tracking branch and the new branch has the same name as the remote branch. This option defaults to true"},{name:"branch.autoSetupRebase",description:"When a new branch is created with 'git branch', 'git switch' or 'git checkout' that tracks another branch, this variable tells Git to set up pull to rebase instead of merge (see \"branch..rebase\"). When `never`, rebase is never automatically set to true. When `local`, rebase is set to true for tracked branches of other local branches. When `remote`, rebase is set to true for tracked branches of remote-tracking branches. When `always`, rebase will be set to true for all tracking branches. See \"branch.autoSetupMerge\" for details on how to set up a branch to track another branch. This option defaults to never"},{name:"branch.sort",description:'This variable controls the sort ordering of branches when displayed by git-branch[1]. Without the "--sort=" option provided, the value of this variable will be used as the default. See git-for-each-ref[1] field names for valid values'},{name:"browser..cmd",insertValue:"browser.{cursor}.cmd",description:"Specify the command to invoke the specified browser. The specified command is evaluated in shell with the URLs passed as arguments. (See git-web{litdd}browse[1].)"},{name:"browser..path",insertValue:"browser.{cursor}.path",description:"Override the path for the given tool that may be used to browse HTML help (see `-w` option in git-help[1]) or a working repository in gitweb (see git-instaweb[1])"},{name:"checkout.defaultRemote",description:"When you run `git checkout ` or `git switch ` and only have one remote, it may implicitly fall back on checking out and tracking e.g. `origin/`. This stops working as soon as you have more than one remote with a `` reference. This setting allows for setting the name of a preferred remote that should always win when it comes to disambiguation. The typical use-case is to set this to `origin`"},{name:"checkout.guess",description:"Provides the default value for the `--guess` or `--no-guess` option in `git checkout` and `git switch`. See git-switch[1] and git-checkout[1]"},{name:"checkout.thresholdForParallelism",description:"When running parallel checkout with a small number of files, the cost of subprocess spawning and inter-process communication might outweigh the parallelization gains. This setting allows to define the minimum number of files for which parallel checkout should be attempted. The default is 100"},{name:"checkout.workers",description:"The number of parallel workers to use when updating the working tree. The default is one, i.e. sequential execution. If set to a value less than one, Git will use as many workers as the number of logical cores available. This setting and `checkout.thresholdForParallelism` affect all commands that perform checkout. E.g. checkout, clone, reset, sparse-checkout, etc"},{name:"clean.requireForce",description:"A boolean to make git-clean do nothing unless given -f, -i or -n. Defaults to true"},{name:"clone.defaultRemoteName",description:"The name of the remote to create when cloning a repository. Defaults to `origin`, and can be overridden by passing the `--origin` command-line option to git-clone[1]"},{name:"clone.filterSubmodules",description:"If a partial clone filter is provided (see `--filter` in git-rev-list[1]) and `--recurse-submodules` is used, also apply the filter to submodules"},{name:"clone.rejectShallow",description:"Reject to clone a repository if it is a shallow one, can be overridden by passing option `--reject-shallow` in command line. See git-clone[1]"},{name:"color.advice",description:"A boolean to enable/disable color in hints (e.g. when a push failed, see `advice.*` for a list). May be set to `always`, `false` (or `never`) or `auto` (or `true`), in which case colors are used only when the error output goes to a terminal. If unset, then the value of `color.ui` is used (`auto` by default)"},{name:"color.advice.hint",description:"Use customized color for hints"},{name:"color.blame.highlightRecent",description:"Specify the line annotation color for `git blame --color-by-age` depending upon the age of the line"},{name:"color.blame.repeatedLines",description:"Use the specified color to colorize line annotations for `git blame --color-lines`, if they come from the same commit as the preceding line. Defaults to cyan"},{name:"color.branch",description:"A boolean to enable/disable color in the output of git-branch[1]. May be set to `always`, `false` (or `never`) or `auto` (or `true`), in which case colors are used only when the output is to a terminal. If unset, then the value of `color.ui` is used (`auto` by default)"},{name:"color.branch.",insertValue:"color.branch.{cursor}",description:"Use customized color for branch coloration. `` is one of `current` (the current branch), `local` (a local branch), `remote` (a remote-tracking branch in refs/remotes/), `upstream` (upstream tracking branch), `plain` (other refs)"},{name:"color.decorate.",insertValue:"color.decorate.{cursor}",description:"Use customized color for 'git log --decorate' output. `` is one of `branch`, `remoteBranch`, `tag`, `stash` or `HEAD` for local branches, remote-tracking branches, tags, stash and HEAD, respectively and `grafted` for grafted commits"},{name:"color.diff",description:"Whether to use ANSI escape sequences to add color to patches. If this is set to `always`, git-diff[1], git-log[1], and git-show[1] will use color for all patches. If it is set to `true` or `auto`, those commands will only use color when output is to the terminal. If unset, then the value of `color.ui` is used (`auto` by default)"},{name:"color.diff.",insertValue:"color.diff.{cursor}",description:"Use customized color for diff colorization. `` specifies which part of the patch to use the specified color, and is one of `context` (context text - `plain` is a historical synonym), `meta` (metainformation), `frag` (hunk header), 'func' (function in hunk header), `old` (removed lines), `new` (added lines), `commit` (commit headers), `whitespace` (highlighting whitespace errors), `oldMoved` (deleted lines), `newMoved` (added lines), `oldMovedDimmed`, `oldMovedAlternative`, `oldMovedAlternativeDimmed`, `newMovedDimmed`, `newMovedAlternative` `newMovedAlternativeDimmed` (See the '' setting of '--color-moved' in git-diff[1] for details), `contextDimmed`, `oldDimmed`, `newDimmed`, `contextBold`, `oldBold`, and `newBold` (see git-range-diff[1] for details)"},{name:"color.grep",description:"When set to `always`, always highlight matches. When `false` (or `never`), never. When set to `true` or `auto`, use color only when the output is written to the terminal. If unset, then the value of `color.ui` is used (`auto` by default)"},{name:"color.grep.",insertValue:"color.grep.{cursor}",description:"Use customized color for grep colorization. `` specifies which part of the line to use the specified color, and is one of"},{name:"color.interactive",description:'When set to `always`, always use colors for interactive prompts and displays (such as those used by "git-add --interactive" and "git-clean --interactive"). When false (or `never`), never. When set to `true` or `auto`, use colors only when the output is to the terminal. If unset, then the value of `color.ui` is used (`auto` by default)'},{name:"color.interactive.",insertValue:"color.interactive.{cursor}",description:"Use customized color for 'git add --interactive' and 'git clean --interactive' output. `` may be `prompt`, `header`, `help` or `error`, for four distinct types of normal output from interactive commands"},{name:"color.pager",description:"A boolean to specify whether `auto` color modes should colorize output going to the pager. Defaults to true; set this to false if your pager does not understand ANSI color codes"},{name:"color.push",description:"A boolean to enable/disable color in push errors. May be set to `always`, `false` (or `never`) or `auto` (or `true`), in which case colors are used only when the error output goes to a terminal. If unset, then the value of `color.ui` is used (`auto` by default)"},{name:"color.push.error",description:"Use customized color for push errors"},{name:"color.remote",description:'If set, keywords at the start of the line are highlighted. The keywords are "error", "warning", "hint" and "success", and are matched case-insensitively. May be set to `always`, `false` (or `never`) or `auto` (or `true`). If unset, then the value of `color.ui` is used (`auto` by default)'},{name:"color.remote.",insertValue:"color.remote.{cursor}",description:"Use customized color for each remote keyword. `` may be `hint`, `warning`, `success` or `error` which match the corresponding keyword"},{name:"color.showBranch",description:"A boolean to enable/disable color in the output of git-show-branch[1]. May be set to `always`, `false` (or `never`) or `auto` (or `true`), in which case colors are used only when the output is to a terminal. If unset, then the value of `color.ui` is used (`auto` by default)"},{name:"color.status",description:"A boolean to enable/disable color in the output of git-status[1]. May be set to `always`, `false` (or `never`) or `auto` (or `true`), in which case colors are used only when the output is to a terminal. If unset, then the value of `color.ui` is used (`auto` by default)"},{name:"color.status.",insertValue:"color.status.{cursor}",description:"Use customized color for status colorization. `` is one of `header` (the header text of the status message), `added` or `updated` (files which are added but not committed), `changed` (files which are changed but not added in the index), `untracked` (files which are not tracked by Git), `branch` (the current branch), `nobranch` (the color the 'no branch' warning is shown in, defaulting to red), `localBranch` or `remoteBranch` (the local and remote branch names, respectively, when branch and tracking information is displayed in the status short-format), or `unmerged` (files which have unmerged changes)"},{name:"color.transport",description:"A boolean to enable/disable color when pushes are rejected. May be set to `always`, `false` (or `never`) or `auto` (or `true`), in which case colors are used only when the error output goes to a terminal. If unset, then the value of `color.ui` is used (`auto` by default)"},{name:"color.transport.rejected",description:"Use customized color when a push was rejected"},{name:"color.ui",description:"This variable determines the default value for variables such as `color.diff` and `color.grep` that control the use of color per command family. Its scope will expand as more commands learn configuration to set a default for the `--color` option. Set it to `false` or `never` if you prefer Git commands not to use color unless enabled explicitly with some other configuration or the `--color` option. Set it to `always` if you want all output not intended for machine consumption to use color, to `true` or `auto` (this is the default since Git 1.8.4) if you want such output to use color when written to the terminal"},{name:"column.branch",description:"Specify whether to output branch listing in `git branch` in columns. See `column.ui` for details"},{name:"column.clean",description:"Specify the layout when list items in `git clean -i`, which always shows files and directories in columns. See `column.ui` for details"},{name:"column.status",description:"Specify whether to output untracked files in `git status` in columns. See `column.ui` for details"},{name:"column.tag",description:"Specify whether to output tag listing in `git tag` in columns. See `column.ui` for details"},{name:"column.ui",description:"Specify whether supported commands should output in columns. This variable consists of a list of tokens separated by spaces or commas:"},{name:"commit.cleanup",description:"This setting overrides the default of the `--cleanup` option in `git commit`. See git-commit[1] for details. Changing the default can be useful when you always want to keep lines that begin with comment character `#` in your log message, in which case you would do `git config commit.cleanup whitespace` (note that you will have to remove the help lines that begin with `#` in the commit log template yourself, if you do this)"},{name:"commit.status",description:"A boolean to enable/disable inclusion of status information in the commit message template when using an editor to prepare the commit message. Defaults to true"},{name:"commit.template",description:"Specify the pathname of a file to use as the template for new commit messages"},{name:"commit.verbose",description:"A boolean or int to specify the level of verbose with `git commit`. See git-commit[1]"},{name:"commitGraph.generationVersion",description:"Specifies the type of generation number version to use when writing or reading the commit-graph file. If version 1 is specified, then the corrected commit dates will not be written or read. Defaults to 2"},{name:"commitGraph.maxNewFilters",description:"Specifies the default value for the `--max-new-filters` option of `git commit-graph write` (c.f., git-commit-graph[1])"},{name:"commitGraph.readChangedPaths",description:"If true, then git will use the changed-path Bloom filters in the commit-graph file (if it exists, and they are present). Defaults to true. See git-commit-graph[1] for more information"},{name:"committer.email",description:"The `user.name` and `user.email` variables determine what ends up in the `author` and `committer` field of commit objects. If you need the `author` or `committer` to be different, the `author.name`, `author.email`, `committer.name` or `committer.email` variables can be set. Also, all of these can be overridden by the `GIT_AUTHOR_NAME`, `GIT_AUTHOR_EMAIL`, `GIT_COMMITTER_NAME`, `GIT_COMMITTER_EMAIL` and `EMAIL` environment variables"},{name:"completion.commands",description:"This is only used by git-completion.bash to add or remove commands from the list of completed commands. Normally only porcelain commands and a few select others are completed. You can add more commands, separated by space, in this variable. Prefixing the command with '-' will remove it from the existing list"},{name:"core.abbrev",description:'Set the length object names are abbreviated to. If unspecified or set to "auto", an appropriate value is computed based on the approximate number of packed objects in your repository, which hopefully is enough for abbreviated object names to stay unique for some time. If set to "no", no abbreviation is made and the object names are shown in their full length. The minimum length is 4'},{name:"core.alternateRefsCommand",description:"When advertising tips of available history from an alternate, use the shell to execute the specified command instead of git-for-each-ref[1]. The first argument is the absolute path of the alternate. Output must contain one hex object id per line (i.e., the same as produced by `git for-each-ref --format='%(objectname)'`)"},{name:"core.alternateRefsPrefixes",description:"When listing references from an alternate, list only references that begin with the given prefix. Prefixes match as if they were given as arguments to git-for-each-ref[1]. To list multiple prefixes, separate them with whitespace. If `core.alternateRefsCommand` is set, setting `core.alternateRefsPrefixes` has no effect"},{name:"core.askPass",description:"Some commands (e.g. svn and http interfaces) that interactively ask for a password can be told to use an external program given via the value of this variable. Can be overridden by the `GIT_ASKPASS` environment variable. If not set, fall back to the value of the `SSH_ASKPASS` environment variable or, failing that, a simple password prompt. The external program shall be given a suitable prompt as command-line argument and write the password on its STDOUT"},{name:"core.attributesFile",description:"In addition to `.gitattributes` (per-directory) and `.git/info/attributes`, Git looks into this file for attributes (see gitattributes[5]). Path expansions are made the same way as for `core.excludesFile`. Its default value is `$XDG_CONFIG_HOME/git/attributes`. If `$XDG_CONFIG_HOME` is either not set or empty, `$HOME/.config/git/attributes` is used instead"},{name:"core.autocrlf",description:'Setting this variable to "true" is the same as setting the `text` attribute to "auto" on all files and core.eol to "crlf". Set to true if you want to have `CRLF` line endings in your working directory and the repository has LF line endings. This variable can be set to \'input\', in which case no output conversion is performed'},{name:"core.bare",description:"If true this repository is assumed to be 'bare' and has no working directory associated with it. If this is the case a number of commands that require a working directory will be disabled, such as git-add[1] or git-merge[1]"},{name:"core.bigFileThreshold",description:"The size of files considered \"big\", which as discussed below changes the behavior of numerous git commands, as well as how such files are stored within the repository. The default is 512 MiB. Common unit suffixes of 'k', 'm', or 'g' are supported"},{name:"core.checkRoundtripEncoding",description:"A comma and/or whitespace separated list of encodings that Git performs UTF-8 round trip checks on if they are used in an `working-tree-encoding` attribute (see gitattributes[5]). The default value is `SHIFT-JIS`"},{name:"core.checkStat",description:"When missing or is set to `default`, many fields in the stat structure are checked to detect if a file has been modified since Git looked at it. When this configuration variable is set to `minimal`, sub-second part of mtime and ctime, the uid and gid of the owner of the file, the inode number (and the device number, if Git was compiled to use it), are excluded from the check among these fields, leaving only the whole-second part of mtime (and ctime, if `core.trustCtime` is set) and the filesize to be checked"},{name:"core.commentChar",description:"Commands such as `commit` and `tag` that let you edit messages consider a line that begins with this character commented, and removes them after the editor returns (default '#')"},{name:"core.commitGraph",description:"If true, then git will read the commit-graph file (if it exists) to parse the graph structure of commits. Defaults to true. See git-commit-graph[1] for more information"},{name:"core.compression",description:"An integer -1..9, indicating a default compression level. -1 is the zlib default. 0 means no compression, and 1..9 are various speed/size tradeoffs, 9 being slowest. If set, this provides a default to other compression variables, such as `core.looseCompression` and `pack.compression`"},{name:"core.createObject",description:"You can set this to 'link', in which case a hardlink followed by a delete of the source are used to make sure that object creation will not overwrite existing objects"},{name:"core.deltaBaseCacheLimit",description:"Maximum number of bytes per thread to reserve for caching base objects that may be referenced by multiple deltified objects. By storing the entire decompressed base objects in a cache Git is able to avoid unpacking and decompressing frequently used base objects multiple times"},{name:"core.editor",description:"Commands such as `commit` and `tag` that let you edit messages by launching an editor use the value of this variable when it is set, and the environment variable `GIT_EDITOR` is not set. See git-var[1]"},{name:"core.eol",description:"Sets the line ending type to use in the working directory for files that are marked as text (either by having the `text` attribute set, or by having `text=auto` and Git auto-detecting the contents as text). Alternatives are 'lf', 'crlf' and 'native', which uses the platform's native line ending. The default value is `native`. See gitattributes[5] for more information on end-of-line conversion. Note that this value is ignored if `core.autocrlf` is set to `true` or `input`"},{name:"core.excludesFile",description:"Specifies the pathname to the file that contains patterns to describe paths that are not meant to be tracked, in addition to `.gitignore` (per-directory) and `.git/info/exclude`. Defaults to `$XDG_CONFIG_HOME/git/ignore`. If `$XDG_CONFIG_HOME` is either not set or empty, `$HOME/.config/git/ignore` is used instead. See gitignore[5]"},{name:"core.fileMode",description:"Tells Git if the executable bit of files in the working tree is to be honored"},{name:"core.filesRefLockTimeout",description:"The length of time, in milliseconds, to retry when trying to lock an individual reference. Value 0 means not to retry at all; -1 means to try indefinitely. Default is 100 (i.e., retry for 100ms)"},{name:"core.fsmonitor",description:"If set to true, enable the built-in file system monitor daemon for this working directory (git-fsmonitor{litdd}daemon[1])"},{name:"core.fsmonitorHookVersion",description:'Sets the protocol version to be used when invoking the "fsmonitor" hook'},{name:"core.fsync",description:"A comma-separated list of components of the repository that should be hardened via the core.fsyncMethod when created or modified. You can disable hardening of any component by prefixing it with a '-'. Items that are not hardened may be lost in the event of an unclean system shutdown. Unless you have special requirements, it is recommended that you leave this option empty or pick one of `committed`, `added`, or `all`"},{name:"core.fsyncMethod",description:"A value indicating the strategy Git will use to harden repository data using fsync and related primitives"},{name:"core.fsyncObjectFiles",description:"This boolean will enable 'fsync()' when writing object files. This setting is deprecated. Use core.fsync instead"},{name:"core.gitProxy",description:'A "proxy command" to execute (as \'command host port\') instead of establishing direct connection to the remote server when using the Git protocol for fetching. If the variable value is in the "COMMAND for DOMAIN" format, the command is applied only on hostnames ending with the specified domain string. This variable may be set multiple times and is matched in the given order; the first match wins'},{name:"core.hideDotFiles",description:"(Windows-only) If true, mark newly-created directories and files whose name starts with a dot as hidden. If 'dotGitOnly', only the `.git/` directory is hidden, but no other files starting with a dot. The default mode is 'dotGitOnly'"},{name:"core.hooksPath",description:"By default Git will look for your hooks in the `$GIT_DIR/hooks` directory. Set this to different path, e.g. `/etc/git/hooks`, and Git will try to find your hooks in that directory, e.g. `/etc/git/hooks/pre-receive` instead of in `$GIT_DIR/hooks/pre-receive`"},{name:"core.ignoreCase",description:'Internal variable which enables various workarounds to enable Git to work better on filesystems that are not case sensitive, like APFS, HFS+, FAT, NTFS, etc. For example, if a directory listing finds "makefile" when Git expects "Makefile", Git will assume it is really the same file, and continue to remember it as "Makefile"'},{name:"core.ignoreStat",description:'If true, Git will avoid using lstat() calls to detect if files have changed by setting the "assume-unchanged" bit for those tracked files which it has updated identically in both the index and working tree'},{name:"core.logAllRefUpdates",description:'Enable the reflog. Updates to a ref is logged to the file "`$GIT_DIR/logs/`", by appending the new and old SHA-1, the date/time and the reason of the update, but only when the file exists. If this configuration variable is set to `true`, missing "`$GIT_DIR/logs/`" file is automatically created for branch heads (i.e. under `refs/heads/`), remote refs (i.e. under `refs/remotes/`), note refs (i.e. under `refs/notes/`), and the symbolic ref `HEAD`. If it is set to `always`, then a missing reflog is automatically created for any ref under `refs/`'},{name:"core.looseCompression",description:"An integer -1..9, indicating the compression level for objects that are not in a pack file. -1 is the zlib default. 0 means no compression, and 1..9 are various speed/size tradeoffs, 9 being slowest. If not set, defaults to core.compression. If that is not set, defaults to 1 (best speed)"},{name:"core.multiPackIndex",description:"Use the multi-pack-index file to track multiple packfiles using a single index. See git-multi-pack-index[1] for more information. Defaults to true"},{name:"core.notesRef",description:"When showing commit messages, also show notes which are stored in the given ref. The ref must be fully qualified. If the given ref does not exist, it is not an error but means that no notes should be printed"},{name:"core.packedGitLimit",description:"Maximum number of bytes to map simultaneously into memory from pack files. If Git needs to access more than this many bytes at once to complete an operation it will unmap existing regions to reclaim virtual address space within the process"},{name:"core.packedGitWindowSize",description:"Number of bytes of a pack file to map into memory in a single mapping operation. Larger window sizes may allow your system to process a smaller number of large pack files more quickly. Smaller window sizes will negatively affect performance due to increased calls to the operating system's memory manager, but may improve performance when accessing a large number of large pack files"},{name:"core.packedRefsTimeout",description:"The length of time, in milliseconds, to retry when trying to lock the `packed-refs` file. Value 0 means not to retry at all; -1 means to try indefinitely. Default is 1000 (i.e., retry for 1 second)"},{name:"core.pager",description:"Text viewer for use by Git commands (e.g., 'less'). The value is meant to be interpreted by the shell. The order of preference is the `$GIT_PAGER` environment variable, then `core.pager` configuration, then `$PAGER`, and then the default chosen at compile time (usually 'less')"},{name:"core.precomposeUnicode",description:"This option is only used by Mac OS implementation of Git. When core.precomposeUnicode=true, Git reverts the unicode decomposition of filenames done by Mac OS. This is useful when sharing a repository between Mac OS and Linux or Windows. (Git for Windows 1.7.10 or higher is needed, or Git under cygwin 1.7). When false, file names are handled fully transparent by Git, which is backward compatible with older versions of Git"},{name:"core.preferSymlinkRefs",description:'Instead of the default "symref" format for HEAD and other symbolic reference files, use symbolic links. This is sometimes needed to work with old scripts that expect HEAD to be a symbolic link'},{name:"core.preloadIndex",description:"Enable parallel index preload for operations like 'git diff'"},{name:"core.protectHFS",description:"If set to true, do not allow checkout of paths that would be considered equivalent to `.git` on an HFS+ filesystem. Defaults to `true` on Mac OS, and `false` elsewhere"},{name:"core.protectNTFS",description:'If set to true, do not allow checkout of paths that would cause problems with the NTFS filesystem, e.g. conflict with 8.3 "short" names. Defaults to `true` on Windows, and `false` elsewhere'},{name:"core.quotePath",description:'Commands that output paths (e.g. \'ls-files\', \'diff\'), will quote "unusual" characters in the pathname by enclosing the pathname in double-quotes and escaping those characters with backslashes in the same way C escapes control characters (e.g. `\\t` for TAB, `\\n` for LF, `\\\\` for backslash) or bytes with values larger than 0x80 (e.g. octal `\\302\\265` for "micro" in UTF-8). If this variable is set to false, bytes higher than 0x80 are not considered "unusual" any more. Double-quotes, backslash and control characters are always escaped regardless of the setting of this variable. A simple space character is not considered "unusual". Many commands can output pathnames completely verbatim using the `-z` option. The default value is true'},{name:"core.repositoryFormatVersion",description:"Internal variable identifying the repository format and layout version"},{name:"core.restrictinheritedhandles",description:"Windows-only: override whether spawned processes inherit only standard file handles (`stdin`, `stdout` and `stderr`) or all handles. Can be `auto`, `true` or `false`. Defaults to `auto`, which means `true` on Windows 7 and later, and `false` on older Windows versions"},{name:"core.safecrlf",description:'If true, makes Git check if converting `CRLF` is reversible when end-of-line conversion is active. Git will verify if a command modifies a file in the work tree either directly or indirectly. For example, committing a file followed by checking out the same file should yield the original file in the work tree. If this is not the case for the current setting of `core.autocrlf`, Git will reject the file. The variable can be set to "warn", in which case Git will only warn about an irreversible conversion but continue the operation'},{name:"core.sharedRepository",description:"When 'group' (or 'true'), the repository is made shareable between several users in a group (making sure all the files and objects are group-writable). When 'all' (or 'world' or 'everybody'), the repository will be readable by all users, additionally to being group-shareable. When 'umask' (or 'false'), Git will use permissions reported by umask(2). When '0xxx', where '0xxx' is an octal number, files in the repository will have this mode value. '0xxx' will override user's umask value (whereas the other options will only override requested parts of the user's umask value). Examples: '0660' will make the repo read/write-able for the owner and group, but inaccessible to others (equivalent to 'group' unless umask is e.g. '0022'). '0640' is a repository that is group-readable but not group-writable. See git-init[1]. False by default"},{name:"core.sparseCheckout",description:'Enable "sparse checkout" feature. See git-sparse-checkout[1] for more information'},{name:"core.sparseCheckoutCone",description:'Enables the "cone mode" of the sparse checkout feature. When the sparse-checkout file contains a limited set of patterns, this mode provides significant performance advantages. The "non-cone mode" can be requested to allow specifying more flexible patterns by setting this variable to \'false\'. See git-sparse-checkout[1] for more information'},{name:"core.splitIndex",description:"If true, the split-index feature of the index will be used. See git-update-index[1]. False by default"},{name:"core.sshCommand",description:"If this variable is set, `git fetch` and `git push` will use the specified command instead of `ssh` when they need to connect to a remote system. The command is in the same form as the `GIT_SSH_COMMAND` environment variable and is overridden when the environment variable is set"},{name:"core.symlinks",description:"If false, symbolic links are checked out as small plain files that contain the link text. git-update-index[1] and git-add[1] will not change the recorded type to regular file. Useful on filesystems like FAT that do not support symbolic links"},{name:"core.trustctime",description:"If false, the ctime differences between the index and the working tree are ignored; useful when the inode change time is regularly modified by something outside Git (file system crawlers and some backup systems). See git-update-index[1]. True by default"},{name:"core.unsetenvvars",description:"Windows-only: comma-separated list of environment variables' names that need to be unset before spawning any other process. Defaults to `PERL5LIB` to account for the fact that Git for Windows insists on using its own Perl interpreter"},{name:"core.untrackedCache",description:"Determines what to do about the untracked cache feature of the index. It will be kept, if this variable is unset or set to `keep`. It will automatically be added if set to `true`. And it will automatically be removed, if set to `false`. Before setting it to `true`, you should check that mtime is working properly on your system. See git-update-index[1]. `keep` by default, unless `feature.manyFiles` is enabled which sets this setting to `true` by default"},{name:"core.useReplaceRefs",description:"If set to `false`, behave as if the `--no-replace-objects` option was given on the command line. See git[1] and git-replace[1] for more information"},{name:"core.warnAmbiguousRefs",description:"If true, Git will warn you if the ref name you passed it is ambiguous and might match multiple refs in the repository. True by default"},{name:"core.whitespace",description:"A comma separated list of common whitespace problems to notice. 'git diff' will use `color.diff.whitespace` to highlight them, and 'git apply --whitespace=error' will consider them as errors. You can prefix `-` to disable any of them (e.g. `-trailing-space`):"},{name:"core.worktree",description:"Set the path to the root of the working tree. If `GIT_COMMON_DIR` environment variable is set, core.worktree is ignored and not used for determining the root of working tree. This can be overridden by the `GIT_WORK_TREE` environment variable and the `--work-tree` command-line option. The value can be an absolute path or relative to the path to the .git directory, which is either specified by --git-dir or GIT_DIR, or automatically discovered. If --git-dir or GIT_DIR is specified but none of --work-tree, GIT_WORK_TREE and core.worktree is specified, the current working directory is regarded as the top level of your working tree"},{name:"credential.helper",description:"Specify an external helper to be called when a username or password credential is needed; the helper may consult external storage to avoid prompting the user for the credentials. This is normally the name of a credential helper with possible arguments, but may also be an absolute path with arguments or, if preceded by `!`, shell commands"},{name:"credential.useHttpPath",description:'When acquiring credentials, consider the "path" component of an http or https URL to be important. Defaults to false. See gitcredentials[7] for more information'},{name:"credential.username",description:"If no username is set for a network authentication, use this username by default. See credential..* below, and gitcredentials[7]"},{name:"credentialCache.ignoreSIGHUP",description:"Tell git-credential-cache--daemon to ignore SIGHUP, instead of quitting"},{name:"credentialStore.lockTimeoutMS",description:"The length of time, in milliseconds, for git-credential-store to retry when trying to lock the credentials file. Value 0 means not to retry at all; -1 means to try indefinitely. Default is 1000 (i.e., retry for 1s)"},{name:"credential..helper",insertValue:"credential.{cursor}.helper",description:"Specify an external helper to be called when a username or password credential is needed; the helper may consult external storage to avoid prompting the user for the credentials. This is normally the name of a credential helper with possible arguments, but may also be an absolute path with arguments or, if preceded by `!`, shell commands"},{name:"credential..useHttpPath",insertValue:"credential.{cursor}.useHttpPath",description:'When acquiring credentials, consider the "path" component of an http or https URL to be important. Defaults to false. See gitcredentials[7] for more information'},{name:"credential..username",insertValue:"credential.{cursor}.username",description:"If no username is set for a network authentication, use this username by default. See credential..* below, and gitcredentials[7]"},{name:"credentialCache..ignoreSIGHUP",insertValue:"credentialCache.{cursor}.ignoreSIGHUP",description:"Tell git-credential-cache--daemon to ignore SIGHUP, instead of quitting"},{name:"credentialStore..lockTimeoutMS",insertValue:"credentialStore.{cursor}.lockTimeoutMS",description:"The length of time, in milliseconds, for git-credential-store to retry when trying to lock the credentials file. Value 0 means not to retry at all; -1 means to try indefinitely. Default is 1000 (i.e., retry for 1s)"},{name:"diff..binary",insertValue:"diff.{cursor}.binary",description:"Set this option to true to make the diff driver treat files as binary. See gitattributes[5] for details"},{name:"diff..cachetextconv",insertValue:"diff.{cursor}.cachetextconv",description:"Set this option to true to make the diff driver cache the text conversion outputs. See gitattributes[5] for details"},{name:"diff..command",insertValue:"diff.{cursor}.command",description:"The custom diff driver command. See gitattributes[5] for details"},{name:"diff..textconv",insertValue:"diff.{cursor}.textconv",description:"The command that the diff driver should call to generate the text-converted version of a file. The result of the conversion is used to generate a human-readable diff. See gitattributes[5] for details"},{name:"diff..wordRegex",insertValue:"diff.{cursor}.wordRegex",description:"The regular expression that the diff driver should use to split words in a line. See gitattributes[5] for details"},{name:"diff..xfuncname",insertValue:"diff.{cursor}.xfuncname",description:"The regular expression that the diff driver should use to recognize the hunk header. A built-in pattern may also be used. See gitattributes[5] for details"},{name:"diff.algorithm",description:"Choose a diff algorithm"},{name:"diff.autoRefreshIndex",description:"When using 'git diff' to compare with work tree files, do not consider stat-only change as changed. Instead, silently run `git update-index --refresh` to update the cached stat information for paths whose contents in the work tree match the contents in the index. This option defaults to true. Note that this affects only 'git diff' Porcelain, and not lower level 'diff' commands such as 'git diff-files'"},{name:"diff.colorMoved",description:"If set to either a valid `` or a true value, moved lines in a diff are colored differently, for details of valid modes see '--color-moved' in git-diff[1]. If simply set to true the default color mode will be used. When set to false, moved lines are not colored"},{name:"diff.colorMovedWS",description:"When moved lines are colored using e.g. the `diff.colorMoved` setting, this option controls the `` how spaces are treated for details of valid modes see '--color-moved-ws' in git-diff[1]"},{name:"diff.context",description:"Generate diffs with lines of context instead of the default of 3. This value is overridden by the -U option"},{name:"diff.dirstat",description:"A comma separated list of `--dirstat` parameters specifying the default behavior of the `--dirstat` option to git-diff[1] and friends. The defaults can be overridden on the command line (using `--dirstat=`). The fallback defaults (when not changed by `diff.dirstat`) are `changes,noncumulative,3`. The following parameters are available:"},{name:"diff.external",description:'If this config variable is set, diff generation is not performed using the internal diff machinery, but using the given command. Can be overridden with the `GIT_EXTERNAL_DIFF\' environment variable. The command is called with parameters as described under "git Diffs" in git[1]. Note: if you want to use an external diff program only on a subset of your files, you might want to use gitattributes[5] instead'},{name:"diff.guitool",description:"Controls which diff tool is used by git-difftool[1] when the -g/--gui flag is specified. This variable overrides the value configured in `merge.guitool`. The list below shows the valid built-in values. Any other value is treated as a custom diff tool and requires that a corresponding difftool..cmd variable is defined"},{name:"diff.ignoreSubmodules",description:"Sets the default value of --ignore-submodules. Note that this affects only 'git diff' Porcelain, and not lower level 'diff' commands such as 'git diff-files'. 'git checkout' and 'git switch' also honor this setting when reporting uncommitted changes. Setting it to 'all' disables the submodule summary normally shown by 'git commit' and 'git status' when `status.submoduleSummary` is set unless it is overridden by using the --ignore-submodules command-line option. The 'git submodule' commands are not affected by this setting. By default this is set to untracked so that any untracked submodules are ignored"},{name:"diff.indentHeuristic",description:"Set this option to `false` to disable the default heuristics that shift diff hunk boundaries to make patches easier to read"},{name:"diff.interHunkContext",description:"Show the context between diff hunks, up to the specified number of lines, thereby fusing the hunks that are close to each other. This value serves as the default for the `--inter-hunk-context` command line option"},{name:"diff.mnemonicPrefix",description:'If set, \'git diff\' uses a prefix pair that is different from the standard "a/" and "b/" depending on what is being compared. When this configuration is in effect, reverse diff output also swaps the order of the prefixes:'},{name:"diff.noprefix",description:"If set, 'git diff' does not show any source or destination prefix"},{name:"diff.orderFile",description:"File indicating how to order files within a diff. See the '-O' option to git-diff[1] for details. If `diff.orderFile` is a relative pathname, it is treated as relative to the top of the working tree"},{name:"diff.relative",description:"If set to 'true', 'git diff' does not show changes outside of the directory and show pathnames relative to the current directory"},{name:"diff.renameLimit",description:"The number of files to consider in the exhaustive portion of copy/rename detection; equivalent to the 'git diff' option `-l`. If not set, the default value is currently 1000. This setting has no effect if rename detection is turned off"},{name:"diff.renames",description:'Whether and how Git detects renames. If set to "false", rename detection is disabled. If set to "true", basic rename detection is enabled. If set to "copies" or "copy", Git will detect copies, as well. Defaults to true. Note that this affects only \'git diff\' Porcelain like git-diff[1] and git-log[1], and not lower level commands such as git-diff-files[1]'},{name:"diff.statGraphWidth",description:"Limit the width of the graph part in --stat output. If set, applies to all commands generating --stat output except format-patch"},{name:"diff.submodule",description:'Specify the format in which differences in submodules are shown. The "short" format just shows the names of the commits at the beginning and end of the range. The "log" format lists the commits in the range like git-submodule[1] `summary` does. The "diff" format shows an inline diff of the changed contents of the submodule. Defaults to "short"'},{name:"diff.suppressBlankEmpty",description:"A boolean to inhibit the standard behavior of printing a space before each empty output line. Defaults to false"},{name:"diff.tool",description:"Controls which diff tool is used by git-difftool[1]. This variable overrides the value configured in `merge.tool`. The list below shows the valid built-in values. Any other value is treated as a custom diff tool and requires that a corresponding difftool..cmd variable is defined"},{name:"diff.wordRegex",description:'A POSIX Extended Regular Expression used to determine what is a "word" when performing word-by-word difference calculations. Character sequences that match the regular expression are "words", all other characters are *ignorable* whitespace'},{name:"diff.wsErrorHighlight",description:"Highlight whitespace errors in the `context`, `old` or `new` lines of the diff. Multiple values are separated by comma, `none` resets previous values, `default` reset the list to `new` and `all` is a shorthand for `old,new,context`. The whitespace errors are colored with `color.diff.whitespace`. The command line option `--ws-error-highlight=` overrides this setting"},{name:"difftool..cmd",insertValue:"difftool.{cursor}.cmd",description:"Specify the command to invoke the specified diff tool. The specified command is evaluated in shell with the following variables available: 'LOCAL' is set to the name of the temporary file containing the contents of the diff pre-image and 'REMOTE' is set to the name of the temporary file containing the contents of the diff post-image"},{name:"difftool..path",insertValue:"difftool.{cursor}.path",description:"Override the path for the given tool. This is useful in case your tool is not in the PATH"},{name:"difftool.prompt",description:"Prompt before each invocation of the diff tool"},{name:"extensions.objectFormat",description:"Specify the hash algorithm to use. The acceptable values are `sha1` and `sha256`. If not specified, `sha1` is assumed. It is an error to specify this key unless `core.repositoryFormatVersion` is 1"},{name:"extensions.worktreeConfig",description:"If enabled, then worktrees will load config settings from the `$GIT_DIR/config.worktree` file in addition to the `$GIT_COMMON_DIR/config` file. Note that `$GIT_COMMON_DIR` and `$GIT_DIR` are the same for the main working tree, while other working trees have `$GIT_DIR` equal to `$GIT_COMMON_DIR/worktrees//`. The settings in the `config.worktree` file will override settings from any other config files"},{name:"fastimport.unpackLimit",description:"If the number of objects imported by git-fast-import[1] is below this limit, then the objects will be unpacked into loose object files. However if the number of imported objects equals or exceeds this limit then the pack will be stored as a pack. Storing the pack from a fast-import can make the import operation complete faster, especially on slow filesystems. If not set, the value of `transfer.unpackLimit` is used instead"},{name:"feature.*",insertValue:"feature.{cursor}",description:"The config settings that start with `feature.` modify the defaults of a group of other config settings. These groups are created by the Git developer community as recommended defaults and are subject to change. In particular, new config options may be added with different defaults"},{name:"feature.experimental",description:"Enable config options that are new to Git, and are being considered for future defaults. Config settings included here may be added or removed with each release, including minor version updates. These settings may have unintended interactions since they are so new. Please enable this setting if you are interested in providing feedback on experimental features. The new default values are:"},{name:"feature.manyFiles",description:"Enable config options that optimize for repos with many files in the working directory. With many files, commands such as `git status` and `git checkout` may be slow and these new defaults improve performance:"},{name:"fetch.fsck.",insertValue:"fetch.fsck.{cursor}",description:"Acts like `fsck.`, but is used by git-fetch-pack[1] instead of git-fsck[1]. See the `fsck.` documentation for details"},{name:"fetch.fsck.skipList",description:"Acts like `fsck.skipList`, but is used by git-fetch-pack[1] instead of git-fsck[1]. See the `fsck.skipList` documentation for details"},{name:"fetch.fsckObjects",description:"If it is set to true, git-fetch-pack will check all fetched objects. See `transfer.fsckObjects` for what's checked. Defaults to false. If not set, the value of `transfer.fsckObjects` is used instead"},{name:"fetch.negotiationAlgorithm",description:'Control how information about the commits in the local repository is sent when negotiating the contents of the packfile to be sent by the server. Set to "consecutive" to use an algorithm that walks over consecutive commits checking each one. Set to "skipping" to use an algorithm that skips commits in an effort to converge faster, but may result in a larger-than-necessary packfile; or set to "noop" to not send any information at all, which will almost certainly result in a larger-than-necessary packfile, but will skip the negotiation step. Set to "default" to override settings made previously and use the default behaviour. The default is normally "consecutive", but if `feature.experimental` is true, then the default is "skipping". Unknown values will cause \'git fetch\' to error out'},{name:"fetch.output",description:"Control how ref update status is printed. Valid values are `full` and `compact`. Default value is `full`. See section OUTPUT in git-fetch[1] for detail"},{name:"fetch.parallel",description:"Specifies the maximal number of fetch operations to be run in parallel at a time (submodules, or remotes when the `--multiple` option of git-fetch[1] is in effect)"},{name:"fetch.prune",description:"If true, fetch will automatically behave as if the `--prune` option was given on the command line. See also `remote..prune` and the PRUNING section of git-fetch[1]"},{name:"fetch.pruneTags",description:"If true, fetch will automatically behave as if the `refs/tags/*:refs/tags/*` refspec was provided when pruning, if not set already. This allows for setting both this option and `fetch.prune` to maintain a 1=1 mapping to upstream refs. See also `remote..pruneTags` and the PRUNING section of git-fetch[1]"},{name:"fetch.recurseSubmodules",description:"This option controls whether `git fetch` (and the underlying fetch in `git pull`) will recursively fetch into populated submodules. This option can be set either to a boolean value or to 'on-demand'. Setting it to a boolean changes the behavior of fetch and pull to recurse unconditionally into submodules when set to true or to not recurse at all when set to false. When set to 'on-demand', fetch and pull will only recurse into a populated submodule when its superproject retrieves a commit that updates the submodule's reference. Defaults to 'on-demand', or to the value of 'submodule.recurse' if set"},{name:"fetch.showForcedUpdates",description:"Set to false to enable `--no-show-forced-updates` in git-fetch[1] and git-pull[1] commands. Defaults to true"},{name:"fetch.unpackLimit",description:"If the number of objects fetched over the Git native transfer is below this limit, then the objects will be unpacked into loose object files. However if the number of received objects equals or exceeds this limit then the received pack will be stored as a pack, after adding any missing delta bases. Storing the pack from a push can make the push operation complete faster, especially on slow filesystems. If not set, the value of `transfer.unpackLimit` is used instead"},{name:"fetch.writeCommitGraph",description:"Set to true to write a commit-graph after every `git fetch` command that downloads a pack-file from a remote. Using the `--split` option, most executions will create a very small commit-graph file on top of the existing commit-graph file(s). Occasionally, these files will merge and the write may take longer. Having an updated commit-graph file helps performance of many Git commands, including `git merge-base`, `git push -f`, and `git log --graph`. Defaults to false"},{name:"filter..clean",insertValue:"filter.{cursor}.clean",description:"The command which is used to convert the content of a worktree file to a blob upon checkin. See gitattributes[5] for details"},{name:"filter..smudge",insertValue:"filter.{cursor}.smudge",description:"The command which is used to convert the content of a blob object to a worktree file upon checkout. See gitattributes[5] for details"},{name:"format.attach",description:"Enable multipart/mixed attachments as the default for 'format-patch'. The value can also be a double quoted string which will enable attachments as the default and set the value as the boundary. See the --attach option in git-format-patch[1]"},{name:"format.cc",description:"Additional recipients to include in a patch to be submitted by mail. See the --to and --cc options in git-format-patch[1]"},{name:"format.coverFromDescription",description:"The default mode for format-patch to determine which parts of the cover letter will be populated using the branch's description. See the `--cover-from-description` option in git-format-patch[1]"},{name:"format.coverLetter",description:'A boolean that controls whether to generate a cover-letter when format-patch is invoked, but in addition can be set to "auto", to generate a cover-letter only when there\'s more than one patch. Default is false'},{name:"format.encodeEmailHeaders",description:'Encode email headers that have non-ASCII characters with "Q-encoding" (described in RFC 2047) for email transmission. Defaults to true'},{name:"format.filenameMaxLength",description:"The maximum length of the output filenames generated by the `format-patch` command; defaults to 64. Can be overridden by the `--filename-max-length=` command line option"},{name:"format.from",description:'Provides the default value for the `--from` option to format-patch. Accepts a boolean value, or a name and email address. If false, format-patch defaults to `--no-from`, using commit authors directly in the "From:" field of patch mails. If true, format-patch defaults to `--from`, using your committer identity in the "From:" field of patch mails and including a "From:" field in the body of the patch mail if different. If set to a non-boolean value, format-patch uses that value instead of your committer identity. Defaults to false'},{name:"format.headers",description:"Additional email headers to include in a patch to be submitted by mail. See git-format-patch[1]"},{name:"format.notes",description:"Provides the default value for the `--notes` option to format-patch. Accepts a boolean value, or a ref which specifies where to get notes. If false, format-patch defaults to `--no-notes`. If true, format-patch defaults to `--notes`. If set to a non-boolean value, format-patch defaults to `--notes=`, where `ref` is the non-boolean value. Defaults to false"},{name:"format.numbered",description:'A boolean which can enable or disable sequence numbers in patch subjects. It defaults to "auto" which enables it only if there is more than one patch. It can be enabled or disabled for all messages by setting it to "true" or "false". See --numbered option in git-format-patch[1]'},{name:"format.outputDirectory",description:"Set a custom directory to store the resulting files instead of the current working directory. All directory components will be created"},{name:"format.pretty",description:"The default pretty format for log/show/whatchanged command, See git-log[1], git-show[1], git-whatchanged[1]"},{name:"format.signature",description:'The default for format-patch is to output a signature containing the Git version number. Use this variable to change that default. Set this variable to the empty string ("") to suppress signature generation'},{name:"format.signatureFile",description:"Works just like format.signature except the contents of the file specified by this variable will be used as the signature"},{name:"format.signOff",description:"A boolean value which lets you enable the `-s/--signoff` option of format-patch by default. *Note:* Adding the `Signed-off-by` trailer to a patch should be a conscious act and means that you certify you have the rights to submit this work under the same open source license. Please see the 'SubmittingPatches' document for further discussion"},{name:"format.subjectPrefix",description:"The default for format-patch is to output files with the '[PATCH]' subject prefix. Use this variable to change that prefix"},{name:"format.suffix",description:"The default for format-patch is to output files with the suffix `.patch`. Use this variable to change that suffix (make sure to include the dot if you want it)"},{name:"format.thread",description:"The default threading style for 'git format-patch'. Can be a boolean value, or `shallow` or `deep`. `shallow` threading makes every mail a reply to the head of the series, where the head is chosen from the cover letter, the `--in-reply-to`, and the first patch mail, in this order. `deep` threading makes every mail a reply to the previous one. A true boolean value is the same as `shallow`, and a false value disables threading"},{name:"format.useAutoBase",description:'A boolean value which lets you enable the `--base=auto` option of format-patch by default. Can also be set to "whenAble" to allow enabling `--base=auto` if a suitable base is available, but to skip adding base info otherwise without the format dying'},{name:"fsck.",insertValue:"fsck.{cursor}",description:"During fsck git may find issues with legacy data which wouldn't be generated by current versions of git, and which wouldn't be sent over the wire if `transfer.fsckObjects` was set. This feature is intended to support working with legacy repositories containing such data"},{name:"fsck.skipList",description:"The path to a list of object names (i.e. one unabbreviated SHA-1 per line) that are known to be broken in a non-fatal way and should be ignored. On versions of Git 2.20 and later comments ('#'), empty lines, and any leading and trailing whitespace is ignored. Everything but a SHA-1 per line will error out on older versions"},{name:"gc..reflogExpire",insertValue:"gc.{cursor}.reflogExpire",description:'\'git reflog expire\' removes reflog entries older than this time; defaults to 90 days. The value "now" expires all entries immediately, and "never" suppresses expiration altogether. With "" (e.g. "refs/stash") in the middle the setting applies only to the refs that match the '},{name:"gc..reflogExpireUnreachable",insertValue:"gc.{cursor}.reflogExpireUnreachable",description:'\'git reflog expire\' removes reflog entries older than this time and are not reachable from the current tip; defaults to 30 days. The value "now" expires all entries immediately, and "never" suppresses expiration altogether. With "" (e.g. "refs/stash") in the middle, the setting applies only to the refs that match the '},{name:"gc.aggressiveDepth",description:"The depth parameter used in the delta compression algorithm used by 'git gc --aggressive'. This defaults to 50, which is the default for the `--depth` option when `--aggressive` isn't in use"},{name:"gc.aggressiveWindow",description:"The window size parameter used in the delta compression algorithm used by 'git gc --aggressive'. This defaults to 250, which is a much more aggressive window size than the default `--window` of 10"},{name:"gc.auto",description:"When there are approximately more than this many loose objects in the repository, `git gc --auto` will pack them. Some Porcelain commands use this command to perform a light-weight garbage collection from time to time. The default value is 6700"},{name:"gc.autoDetach",description:"Make `git gc --auto` return immediately and run in background if the system supports it. Default is true"},{name:"gc.autoPackLimit",description:"When there are more than this many packs that are not marked with `*.keep` file in the repository, `git gc --auto` consolidates them into one larger pack. The default value is 50. Setting this to 0 disables it. Setting `gc.auto` to 0 will also disable this"},{name:"gc.bigPackThreshold",description:"If non-zero, all packs larger than this limit are kept when `git gc` is run. This is very similar to `--keep-largest-pack` except that all packs that meet the threshold are kept, not just the largest pack. Defaults to zero. Common unit suffixes of 'k', 'm', or 'g' are supported"},{name:"gc.cruftPacks",description:"Store unreachable objects in a cruft pack (see git-repack[1]) instead of as loose objects. The default is `false`"},{name:"gc.logExpiry",description:"If the file gc.log exists, then `git gc --auto` will print its content and exit with status zero instead of running unless that file is more than 'gc.logExpiry' old. Default is \"1.day\". See `gc.pruneExpire` for more ways to specify its value"},{name:"gc.packRefs",description:"Running `git pack-refs` in a repository renders it unclonable by Git versions prior to 1.5.1.2 over dumb transports such as HTTP. This variable determines whether 'git gc' runs `git pack-refs`. This can be set to `notbare` to enable it within all non-bare repos or it can be set to a boolean value. The default is `true`"},{name:"gc.pruneExpire",description:"When 'git gc' is run, it will call 'prune --expire 2.weeks.ago' (and 'repack --cruft --cruft-expiration 2.weeks.ago' if using cruft packs via `gc.cruftPacks` or `--cruft`). Override the grace period with this config variable. The value \"now\" may be used to disable this grace period and always prune unreachable objects immediately, or \"never\" may be used to suppress pruning. This feature helps prevent corruption when 'git gc' runs concurrently with another process writing to the repository; see the \"NOTES\" section of git-gc[1]"},{name:"gc.rerereResolved",description:"Records of conflicted merge you resolved earlier are kept for this many days when 'git rerere gc' is run. You can also use more human-readable \"1.month.ago\", etc. The default is 60 days. See git-rerere[1]"},{name:"gc.rerereUnresolved",description:"Records of conflicted merge you have not resolved are kept for this many days when 'git rerere gc' is run. You can also use more human-readable \"1.month.ago\", etc. The default is 15 days. See git-rerere[1]"},{name:"gc.worktreePruneExpire",description:"When 'git gc' is run, it calls 'git worktree prune --expire 3.months.ago'. This config variable can be used to set a different grace period. The value \"now\" may be used to disable the grace period and prune `$GIT_DIR/worktrees` immediately, or \"never\" may be used to suppress pruning"},{name:"gc.writeCommitGraph",description:"If true, then gc will rewrite the commit-graph file when git-gc[1] is run. When using `git gc --auto` the commit-graph will be updated if housekeeping is required. Default is true. See git-commit-graph[1] for details"},{name:"gitcvs.allBinary",description:"This is used if `gitcvs.usecrlfattr` does not resolve the correct '-kb' mode to use. If true, all unresolved files are sent to the client in mode '-kb'. This causes the client to treat them as binary files, which suppresses any newline munging it otherwise might do. Alternatively, if it is set to \"guess\", then the contents of the file are examined to decide if it is binary, similar to `core.autocrlf`"},{name:"gitcvs.commitMsgAnnotation",description:'Append this string to each commit message. Set to empty string to disable this feature. Defaults to "via git-CVS emulator"'},{name:"gitcvs.dbDriver",description:"Used Perl DBI driver. You can specify any available driver for this here, but it might not work. git-cvsserver is tested with 'DBD::SQLite', reported to work with 'DBD::Pg', and reported *not* to work with 'DBD::mysql'. Experimental feature. May not contain double colons (`:`). Default: 'SQLite'. See git-cvsserver[1]"},{name:"gitcvs.dbName",description:"Database used by git-cvsserver to cache revision information derived from the Git repository. The exact meaning depends on the used database driver, for SQLite (which is the default driver) this is a filename. Supports variable substitution (see git-cvsserver[1] for details). May not contain semicolons (`;`). Default: '%Ggitcvs.%m.sqlite'"},{name:"gitcvs.dbTableNamePrefix",description:"Database table name prefix. Prepended to the names of any database tables used, allowing a single database to be used for several repositories. Supports variable substitution (see git-cvsserver[1] for details). Any non-alphabetic characters will be replaced with underscores"},{name:"gitcvs.dbUser",description:"Database user and password. Only useful if setting `gitcvs.dbDriver`, since SQLite has no concept of database users and/or passwords. 'gitcvs.dbUser' supports variable substitution (see git-cvsserver[1] for details)"},{name:"gitcvs.enabled",description:"Whether the CVS server interface is enabled for this repository. See git-cvsserver[1]"},{name:"gitcvs.logFile",description:"Path to a log file where the CVS server interface well... logs various stuff. See git-cvsserver[1]"},{name:"gitcvs.usecrlfattr",description:"If true, the server will look up the end-of-line conversion attributes for files to determine the `-k` modes to use. If the attributes force Git to treat a file as text, the `-k` mode will be left blank so CVS clients will treat it as text. If they suppress text conversion, the file will be set with '-kb' mode, which suppresses any newline munging the client might otherwise do. If the attributes do not allow the file type to be determined, then `gitcvs.allBinary` is used. See gitattributes[5]"},{name:"gitweb.snapshot",description:"See gitweb.conf[5] for description"},{name:"gitweb.url",description:"See gitweb[1] for description"},{name:"gpg..program",insertValue:"gpg.{cursor}.program",description:'Use this to customize the program used for the signing format you chose. (see `gpg.program` and `gpg.format`) `gpg.program` can still be used as a legacy synonym for `gpg.openpgp.program`. The default value for `gpg.x509.program` is "gpgsm" and `gpg.ssh.program` is "ssh-keygen"'},{name:"gpg.format",description:'Specifies which key format to use when signing with `--gpg-sign`. Default is "openpgp". Other possible values are "x509", "ssh"'},{name:"gpg.minTrustLevel",description:"Specifies a minimum trust level for signature verification. If this option is unset, then signature verification for merge operations require a key with at least `marginal` trust. Other operations that perform signature verification require a key with at least `undefined` trust. Setting this option overrides the required trust-level for all operations. Supported values, in increasing order of significance:"},{name:"gpg.program",description:'Use this custom program instead of "`gpg`" found on `$PATH` when making or verifying a PGP signature. The program must support the same command-line interface as GPG, namely, to verify a detached signature, "`gpg --verify $signature - <$file`" is run, and the program is expected to signal a good signature by exiting with code 0, and to generate an ASCII-armored detached signature, the standard input of "`gpg -bsau $key`" is fed with the contents to be signed, and the program is expected to send the result to its standard output'},{name:"gpg.ssh.allowedSignersFile",description:'A file containing ssh public keys which you are willing to trust. The file consists of one or more lines of principals followed by an ssh public key. e.g.: `user1@example.com,user2@example.com ssh-rsa AAAAX1...` See ssh-keygen(1) "ALLOWED SIGNERS" for details. The principal is only used to identify the key and is available when verifying a signature'},{name:"gpg.ssh.defaultKeyCommand",description:"This command that will be run when user.signingkey is not set and a ssh signature is requested. On successful exit a valid ssh public key prefixed with `key::` is expected in the first line of its output. This allows for a script doing a dynamic lookup of the correct public key when it is impractical to statically configure `user.signingKey`. For example when keys or SSH Certificates are rotated frequently or selection of the right key depends on external factors unknown to git"},{name:"gpg.ssh.revocationFile",description:'Either a SSH KRL or a list of revoked public keys (without the principal prefix). See ssh-keygen(1) for details. If a public key is found in this file then it will always be treated as having trust level "never" and signatures will show as invalid'},{name:"grep.column",description:"If set to true, enable the `--column` option by default"},{name:"grep.extendedRegexp",description:"If set to true, enable `--extended-regexp` option by default. This option is ignored when the `grep.patternType` option is set to a value other than 'default'"},{name:"grep.fallbackToNoIndex",description:"If set to true, fall back to git grep --no-index if git grep is executed outside of a git repository. Defaults to false"},{name:"grep.lineNumber",description:"If set to true, enable `-n` option by default"},{name:"grep.patternType",description:"Set the default matching behavior. Using a value of 'basic', 'extended', 'fixed', or 'perl' will enable the `--basic-regexp`, `--extended-regexp`, `--fixed-strings`, or `--perl-regexp` option accordingly, while the value 'default' will use the `grep.extendedRegexp` option to choose between 'basic' and 'extended'"},{name:"grep.threads",description:"Number of grep worker threads to use. See `grep.threads` in git-grep[1] for more information"},{name:"gui.blamehistoryctx",description:"Specifies the radius of history context in days to show in gitk[1] for the selected commit, when the `Show History Context` menu item is invoked from 'git gui blame'. If this variable is set to zero, the whole history is shown"},{name:"gui.commitMsgWidth",description:'Defines how wide the commit message window is in the git-gui[1]. "75" is the default'},{name:"gui.copyBlameThreshold",description:"Specifies the threshold to use in 'git gui blame' original location detection, measured in alphanumeric characters. See the git-blame[1] manual for more information on copy detection"},{name:"gui.diffContext",description:'Specifies how many context lines should be used in calls to diff made by the git-gui[1]. The default is "5"'},{name:"gui.displayUntracked",description:'Determines if git-gui[1] shows untracked files in the file list. The default is "true"'},{name:"gui.encoding",description:"Specifies the default character encoding to use for displaying of file contents in git-gui[1] and gitk[1]. It can be overridden by setting the 'encoding' attribute for relevant files (see gitattributes[5]). If this option is not set, the tools default to the locale encoding"},{name:"gui.fastCopyBlame",description:"If true, 'git gui blame' uses `-C` instead of `-C -C` for original location detection. It makes blame significantly faster on huge repositories at the expense of less thorough copy detection"},{name:"gui.matchTrackingBranch",description:'Determines if new branches created with git-gui[1] should default to tracking remote branches with matching names or not. Default: "false"'},{name:"gui.newBranchTemplate",description:"Is used as suggested name when creating new branches using the git-gui[1]"},{name:"gui.pruneDuringFetch",description:'"true" if git-gui[1] should prune remote-tracking branches when performing a fetch. The default value is "false"'},{name:"gui.spellingDictionary",description:'Specifies the dictionary used for spell checking commit messages in the git-gui[1]. When set to "none" spell checking is turned off'},{name:"gui.trustmtime",description:"Determines if git-gui[1] should trust the file modification timestamp or not. By default the timestamps are not trusted"},{name:"guitool..argPrompt",insertValue:"guitool.{cursor}.argPrompt",description:"Request a string argument from the user, and pass it to the tool through the `ARGS` environment variable. Since requesting an argument implies confirmation, the 'confirm' option has no effect if this is enabled. If the option is set to 'true', 'yes', or '1', the dialog uses a built-in generic prompt; otherwise the exact value of the variable is used"},{name:"guitool..cmd",insertValue:"guitool.{cursor}.cmd",description:"Specifies the shell command line to execute when the corresponding item of the git-gui[1] `Tools` menu is invoked. This option is mandatory for every tool. The command is executed from the root of the working directory, and in the environment it receives the name of the tool as `GIT_GUITOOL`, the name of the currently selected file as 'FILENAME', and the name of the current branch as 'CUR_BRANCH' (if the head is detached, 'CUR_BRANCH' is empty)"},{name:"guitool..confirm",insertValue:"guitool.{cursor}.confirm",description:"Show a confirmation dialog before actually running the tool"},{name:"guitool..needsFile",insertValue:"guitool.{cursor}.needsFile",description:"Run the tool only if a diff is selected in the GUI. It guarantees that 'FILENAME' is not empty"},{name:"guitool..noConsole",insertValue:"guitool.{cursor}.noConsole",description:"Run the command silently, without creating a window to display its output"},{name:"guitool..noRescan",insertValue:"guitool.{cursor}.noRescan",description:"Don't rescan the working directory for changes after the tool finishes execution"},{name:"guitool..prompt",insertValue:"guitool.{cursor}.prompt",description:"Specifies the general prompt string to display at the top of the dialog, before subsections for 'argPrompt' and 'revPrompt'. The default value includes the actual command"},{name:"guitool..revPrompt",insertValue:"guitool.{cursor}.revPrompt",description:"Request a single valid revision from the user, and set the `REVISION` environment variable. In other aspects this option is similar to 'argPrompt', and can be used together with it"},{name:"guitool..revUnmerged",insertValue:"guitool.{cursor}.revUnmerged",description:"Show only unmerged branches in the 'revPrompt' subdialog. This is useful for tools similar to merge or rebase, but not for things like checkout or reset"},{name:"guitool..title",insertValue:"guitool.{cursor}.title",description:"Specifies the title to use for the prompt dialog. The default is the tool name"},{name:"help.autoCorrect",description:"If git detects typos and can identify exactly one valid command similar to the error, git will try to suggest the correct command or even run the suggestion automatically. Possible config values are: - 0 (default): show the suggested command. - positive number: run the suggested command after specified"},{name:"help.browser",description:"Specify the browser that will be used to display help in the 'web' format. See git-help[1]"},{name:"help.format",description:"Override the default help format used by git-help[1]. Values 'man', 'info', 'web' and 'html' are supported. 'man' is the default. 'web' and 'html' are the same"},{name:"help.htmlPath",description:"Specify the path where the HTML documentation resides. File system paths and URLs are supported. HTML pages will be prefixed with this path when help is displayed in the 'web' format. This defaults to the documentation path of your Git installation"},{name:"http.cookieFile",description:"The pathname of a file containing previously stored cookie lines, which should be used in the Git http session, if they match the server. The file format of the file to read cookies from should be plain HTTP headers or the Netscape/Mozilla cookie file format (see `curl(1)`). NOTE that the file specified with http.cookieFile is used only as input unless http.saveCookies is set"},{name:"http.curloptResolve",description:"Hostname resolution information that will be used first by libcurl when sending HTTP requests. This information should be in one of the following formats:"},{name:"http.delegation",description:"Control GSSAPI credential delegation. The delegation is disabled by default in libcurl since version 7.21.7. Set parameter to tell the server what it is allowed to delegate when it comes to user credentials. Used with GSS/kerberos. Possible values are:"},{name:"http.emptyAuth",description:"Attempt authentication without seeking a username or password. This can be used to attempt GSS-Negotiate authentication without specifying a username in the URL, as libcurl normally requires a username for authentication"},{name:"http.extraHeader",description:"Pass an additional HTTP header when communicating with a server. If more than one such entry exists, all of them are added as extra headers. To allow overriding the settings inherited from the system config, an empty value will reset the extra headers to the empty list"},{name:"http.followRedirects",description:"Whether git should follow HTTP redirects. If set to `true`, git will transparently follow any redirect issued by a server it encounters. If set to `false`, git will treat all redirects as errors. If set to `initial`, git will follow redirects only for the initial request to a remote, but not for subsequent follow-up HTTP requests. Since git uses the redirected URL as the base for the follow-up requests, this is generally sufficient. The default is `initial`"},{name:"http.lowSpeedLimit",description:"If the HTTP transfer speed is less than 'http.lowSpeedLimit' for longer than 'http.lowSpeedTime' seconds, the transfer is aborted. Can be overridden by the `GIT_HTTP_LOW_SPEED_LIMIT` and `GIT_HTTP_LOW_SPEED_TIME` environment variables"},{name:"http.maxRequests",description:"How many HTTP requests to launch in parallel. Can be overridden by the `GIT_HTTP_MAX_REQUESTS` environment variable. Default is 5"},{name:"http.minSessions",description:"The number of curl sessions (counted across slots) to be kept across requests. They will not be ended with curl_easy_cleanup() until http_cleanup() is invoked. If USE_CURL_MULTI is not defined, this value will be capped at 1. Defaults to 1"},{name:"http.noEPSV",description:'A boolean which disables using of EPSV ftp command by curl. This can helpful with some "poor" ftp servers which don\'t support EPSV mode. Can be overridden by the `GIT_CURL_FTP_NO_EPSV` environment variable. Default is false (curl will use EPSV)'},{name:"http.pinnedPubkey",description:"Public key of the https service. It may either be the filename of a PEM or DER encoded public key file or a string starting with 'sha256//' followed by the base64 encoded sha256 hash of the public key. See also libcurl 'CURLOPT_PINNEDPUBLICKEY'. git will exit with an error if this option is set but not supported by cURL"},{name:"http.postBuffer",description:"Maximum size in bytes of the buffer used by smart HTTP transports when POSTing data to the remote system. For requests larger than this buffer size, HTTP/1.1 and Transfer-Encoding: chunked is used to avoid creating a massive pack file locally. Default is 1 MiB, which is sufficient for most requests"},{name:"http.proxy",description:"Override the HTTP proxy, normally configured using the 'http_proxy', 'https_proxy', and 'all_proxy' environment variables (see `curl(1)`). In addition to the syntax understood by curl, it is possible to specify a proxy string with a user name but no password, in which case git will attempt to acquire one in the same way it does for other credentials. See gitcredentials[7] for more information. The syntax thus is '[protocol://][user[:password]@]proxyhost[:port]'. This can be overridden on a per-remote basis; see remote..proxy"},{name:"http.proxyAuthMethod",description:"Set the method with which to authenticate against the HTTP proxy. This only takes effect if the configured proxy string contains a user name part (i.e. is of the form 'user@host' or 'user@host:port'). This can be overridden on a per-remote basis; see `remote..proxyAuthMethod`. Both can be overridden by the `GIT_HTTP_PROXY_AUTHMETHOD` environment variable. Possible values are:"},{name:"http.proxySSLCAInfo",description:"Pathname to the file containing the certificate bundle that should be used to verify the proxy with when using an HTTPS proxy. Can be overridden by the `GIT_PROXY_SSL_CAINFO` environment variable"},{name:"http.proxySSLCert",description:"The pathname of a file that stores a client certificate to use to authenticate with an HTTPS proxy. Can be overridden by the `GIT_PROXY_SSL_CERT` environment variable"},{name:"http.proxySSLCertPasswordProtected",description:"Enable Git's password prompt for the proxy SSL certificate. Otherwise OpenSSL will prompt the user, possibly many times, if the certificate or private key is encrypted. Can be overridden by the `GIT_PROXY_SSL_CERT_PASSWORD_PROTECTED` environment variable"},{name:"http.proxySSLKey",description:"The pathname of a file that stores a private key to use to authenticate with an HTTPS proxy. Can be overridden by the `GIT_PROXY_SSL_KEY` environment variable"},{name:"http.saveCookies",description:"If set, store cookies received during requests to the file specified by http.cookieFile. Has no effect if http.cookieFile is unset"},{name:"http.schannelCheckRevoke",description:'Used to enforce or disable certificate revocation checks in cURL when http.sslBackend is set to "schannel". Defaults to `true` if unset. Only necessary to disable this if Git consistently errors and the message is about checking the revocation status of a certificate. This option is ignored if cURL lacks support for setting the relevant SSL option at runtime'},{name:"http.schannelUseSSLCAInfo",description:"As of cURL v7.60.0, the Secure Channel backend can use the certificate bundle provided via `http.sslCAInfo`, but that would override the Windows Certificate Store. Since this is not desirable by default, Git will tell cURL not to use that bundle by default when the `schannel` backend was configured via `http.sslBackend`, unless `http.schannelUseSSLCAInfo` overrides this behavior"},{name:"http.sslBackend",description:'Name of the SSL backend to use (e.g. "openssl" or "schannel"). This option is ignored if cURL lacks support for choosing the SSL backend at runtime'},{name:"http.sslCAInfo",description:"File containing the certificates to verify the peer with when fetching or pushing over HTTPS. Can be overridden by the `GIT_SSL_CAINFO` environment variable"},{name:"http.sslCAPath",description:"Path containing files with the CA certificates to verify the peer with when fetching or pushing over HTTPS. Can be overridden by the `GIT_SSL_CAPATH` environment variable"},{name:"http.sslCert",description:"File containing the SSL certificate when fetching or pushing over HTTPS. Can be overridden by the `GIT_SSL_CERT` environment variable"},{name:"http.sslCertPasswordProtected",description:"Enable Git's password prompt for the SSL certificate. Otherwise OpenSSL will prompt the user, possibly many times, if the certificate or private key is encrypted. Can be overridden by the `GIT_SSL_CERT_PASSWORD_PROTECTED` environment variable"},{name:"http.sslKey",description:"File containing the SSL private key when fetching or pushing over HTTPS. Can be overridden by the `GIT_SSL_KEY` environment variable"},{name:"http.sslTry",description:"Attempt to use AUTH SSL/TLS and encrypted data transfers when connecting via regular FTP protocol. This might be needed if the FTP server requires it for security reasons or you wish to connect securely whenever remote FTP server supports it. Default is false since it might trigger certificate verification errors on misconfigured servers"},{name:"http.sslVerify",description:"Whether to verify the SSL certificate when fetching or pushing over HTTPS. Defaults to true. Can be overridden by the `GIT_SSL_NO_VERIFY` environment variable"},{name:"http.sslVersion",description:"The SSL version to use when negotiating an SSL connection, if you want to force the default. The available and default version depend on whether libcurl was built against NSS or OpenSSL and the particular configuration of the crypto library in use. Internally this sets the 'CURLOPT_SSL_VERSION' option; see the libcurl documentation for more details on the format of this option and for the ssl version supported. Currently the possible values of this option are:"},{name:"http.userAgent",description:"The HTTP USER_AGENT string presented to an HTTP server. The default value represents the version of the client Git such as git/1.7.1. This option allows you to override this value to a more common value such as Mozilla/4.0. This may be necessary, for instance, if connecting through a firewall that restricts HTTP connections to a set of common USER_AGENT strings (but not including those like git/1.7.1). Can be overridden by the `GIT_HTTP_USER_AGENT` environment variable"},{name:"http.version",description:"Use the specified HTTP protocol version when communicating with a server. If you want to force the default. The available and default version depend on libcurl. Currently the possible values of this option are:"},{name:"http..cookieFile",insertValue:"http.{cursor}.cookieFile",description:"The pathname of a file containing previously stored cookie lines, which should be used in the Git http session, if they match the server. The file format of the file to read cookies from should be plain HTTP headers or the Netscape/Mozilla cookie file format (see `curl(1)`). NOTE that the file specified with http.cookieFile is used only as input unless http.saveCookies is set"},{name:"http..curloptResolve",insertValue:"http.{cursor}.curloptResolve",description:"Hostname resolution information that will be used first by libcurl when sending HTTP requests. This information should be in one of the following formats:"},{name:"http..delegation",insertValue:"http.{cursor}.delegation",description:"Control GSSAPI credential delegation. The delegation is disabled by default in libcurl since version 7.21.7. Set parameter to tell the server what it is allowed to delegate when it comes to user credentials. Used with GSS/kerberos. Possible values are:"},{name:"http..emptyAuth",insertValue:"http.{cursor}.emptyAuth",description:"Attempt authentication without seeking a username or password. This can be used to attempt GSS-Negotiate authentication without specifying a username in the URL, as libcurl normally requires a username for authentication"},{name:"http..extraHeader",insertValue:"http.{cursor}.extraHeader",description:"Pass an additional HTTP header when communicating with a server. If more than one such entry exists, all of them are added as extra headers. To allow overriding the settings inherited from the system config, an empty value will reset the extra headers to the empty list"},{name:"http..followRedirects",insertValue:"http.{cursor}.followRedirects",description:"Whether git should follow HTTP redirects. If set to `true`, git will transparently follow any redirect issued by a server it encounters. If set to `false`, git will treat all redirects as errors. If set to `initial`, git will follow redirects only for the initial request to a remote, but not for subsequent follow-up HTTP requests. Since git uses the redirected URL as the base for the follow-up requests, this is generally sufficient. The default is `initial`"},{name:"http..lowSpeedLimit",insertValue:"http.{cursor}.lowSpeedLimit",description:"If the HTTP transfer speed is less than 'http.lowSpeedLimit' for longer than 'http.lowSpeedTime' seconds, the transfer is aborted. Can be overridden by the `GIT_HTTP_LOW_SPEED_LIMIT` and `GIT_HTTP_LOW_SPEED_TIME` environment variables"},{name:"http..maxRequests",insertValue:"http.{cursor}.maxRequests",description:"How many HTTP requests to launch in parallel. Can be overridden by the `GIT_HTTP_MAX_REQUESTS` environment variable. Default is 5"},{name:"http..minSessions",insertValue:"http.{cursor}.minSessions",description:"The number of curl sessions (counted across slots) to be kept across requests. They will not be ended with curl_easy_cleanup() until http_cleanup() is invoked. If USE_CURL_MULTI is not defined, this value will be capped at 1. Defaults to 1"},{name:"http..noEPSV",insertValue:"http.{cursor}.noEPSV",description:'A boolean which disables using of EPSV ftp command by curl. This can helpful with some "poor" ftp servers which don\'t support EPSV mode. Can be overridden by the `GIT_CURL_FTP_NO_EPSV` environment variable. Default is false (curl will use EPSV)'},{name:"http..pinnedPubkey",insertValue:"http.{cursor}.pinnedPubkey",description:"Public key of the https service. It may either be the filename of a PEM or DER encoded public key file or a string starting with 'sha256//' followed by the base64 encoded sha256 hash of the public key. See also libcurl 'CURLOPT_PINNEDPUBLICKEY'. git will exit with an error if this option is set but not supported by cURL"},{name:"http..postBuffer",insertValue:"http.{cursor}.postBuffer",description:"Maximum size in bytes of the buffer used by smart HTTP transports when POSTing data to the remote system. For requests larger than this buffer size, HTTP/1.1 and Transfer-Encoding: chunked is used to avoid creating a massive pack file locally. Default is 1 MiB, which is sufficient for most requests"},{name:"http..proxy",insertValue:"http.{cursor}.proxy",description:"Override the HTTP proxy, normally configured using the 'http_proxy', 'https_proxy', and 'all_proxy' environment variables (see `curl(1)`). In addition to the syntax understood by curl, it is possible to specify a proxy string with a user name but no password, in which case git will attempt to acquire one in the same way it does for other credentials. See gitcredentials[7] for more information. The syntax thus is '[protocol://][user[:password]@]proxyhost[:port]'. This can be overridden on a per-remote basis; see remote..proxy"},{name:"http..proxyAuthMethod",insertValue:"http.{cursor}.proxyAuthMethod",description:"Set the method with which to authenticate against the HTTP proxy. This only takes effect if the configured proxy string contains a user name part (i.e. is of the form 'user@host' or 'user@host:port'). This can be overridden on a per-remote basis; see `remote..proxyAuthMethod`. Both can be overridden by the `GIT_HTTP_PROXY_AUTHMETHOD` environment variable. Possible values are:"},{name:"http..proxySSLCAInfo",insertValue:"http.{cursor}.proxySSLCAInfo",description:"Pathname to the file containing the certificate bundle that should be used to verify the proxy with when using an HTTPS proxy. Can be overridden by the `GIT_PROXY_SSL_CAINFO` environment variable"},{name:"http..proxySSLCert",insertValue:"http.{cursor}.proxySSLCert",description:"The pathname of a file that stores a client certificate to use to authenticate with an HTTPS proxy. Can be overridden by the `GIT_PROXY_SSL_CERT` environment variable"},{name:"http..proxySSLCertPasswordProtected",insertValue:"http.{cursor}.proxySSLCertPasswordProtected",description:"Enable Git's password prompt for the proxy SSL certificate. Otherwise OpenSSL will prompt the user, possibly many times, if the certificate or private key is encrypted. Can be overridden by the `GIT_PROXY_SSL_CERT_PASSWORD_PROTECTED` environment variable"},{name:"http..proxySSLKey",insertValue:"http.{cursor}.proxySSLKey",description:"The pathname of a file that stores a private key to use to authenticate with an HTTPS proxy. Can be overridden by the `GIT_PROXY_SSL_KEY` environment variable"},{name:"http..saveCookies",insertValue:"http.{cursor}.saveCookies",description:"If set, store cookies received during requests to the file specified by http.cookieFile. Has no effect if http.cookieFile is unset"},{name:"http..schannelCheckRevoke",insertValue:"http.{cursor}.schannelCheckRevoke",description:'Used to enforce or disable certificate revocation checks in cURL when http.sslBackend is set to "schannel". Defaults to `true` if unset. Only necessary to disable this if Git consistently errors and the message is about checking the revocation status of a certificate. This option is ignored if cURL lacks support for setting the relevant SSL option at runtime'},{name:"http..schannelUseSSLCAInfo",insertValue:"http.{cursor}.schannelUseSSLCAInfo",description:"As of cURL v7.60.0, the Secure Channel backend can use the certificate bundle provided via `http.sslCAInfo`, but that would override the Windows Certificate Store. Since this is not desirable by default, Git will tell cURL not to use that bundle by default when the `schannel` backend was configured via `http.sslBackend`, unless `http.schannelUseSSLCAInfo` overrides this behavior"},{name:"http..sslBackend",insertValue:"http.{cursor}.sslBackend",description:'Name of the SSL backend to use (e.g. "openssl" or "schannel"). This option is ignored if cURL lacks support for choosing the SSL backend at runtime'},{name:"http..sslCAInfo",insertValue:"http.{cursor}.sslCAInfo",description:"File containing the certificates to verify the peer with when fetching or pushing over HTTPS. Can be overridden by the `GIT_SSL_CAINFO` environment variable"},{name:"http..sslCAPath",insertValue:"http.{cursor}.sslCAPath",description:"Path containing files with the CA certificates to verify the peer with when fetching or pushing over HTTPS. Can be overridden by the `GIT_SSL_CAPATH` environment variable"},{name:"http..sslCert",insertValue:"http.{cursor}.sslCert",description:"File containing the SSL certificate when fetching or pushing over HTTPS. Can be overridden by the `GIT_SSL_CERT` environment variable"},{name:"http..sslCertPasswordProtected",insertValue:"http.{cursor}.sslCertPasswordProtected",description:"Enable Git's password prompt for the SSL certificate. Otherwise OpenSSL will prompt the user, possibly many times, if the certificate or private key is encrypted. Can be overridden by the `GIT_SSL_CERT_PASSWORD_PROTECTED` environment variable"},{name:"http..sslKey",insertValue:"http.{cursor}.sslKey",description:"File containing the SSL private key when fetching or pushing over HTTPS. Can be overridden by the `GIT_SSL_KEY` environment variable"},{name:"http..sslTry",insertValue:"http.{cursor}.sslTry",description:"Attempt to use AUTH SSL/TLS and encrypted data transfers when connecting via regular FTP protocol. This might be needed if the FTP server requires it for security reasons or you wish to connect securely whenever remote FTP server supports it. Default is false since it might trigger certificate verification errors on misconfigured servers"},{name:"http..sslVerify",insertValue:"http.{cursor}.sslVerify",description:"Whether to verify the SSL certificate when fetching or pushing over HTTPS. Defaults to true. Can be overridden by the `GIT_SSL_NO_VERIFY` environment variable"},{name:"http..sslVersion",insertValue:"http.{cursor}.sslVersion",description:"The SSL version to use when negotiating an SSL connection, if you want to force the default. The available and default version depend on whether libcurl was built against NSS or OpenSSL and the particular configuration of the crypto library in use. Internally this sets the 'CURLOPT_SSL_VERSION' option; see the libcurl documentation for more details on the format of this option and for the ssl version supported. Currently the possible values of this option are:"},{name:"http..userAgent",insertValue:"http.{cursor}.userAgent",description:"The HTTP USER_AGENT string presented to an HTTP server. The default value represents the version of the client Git such as git/1.7.1. This option allows you to override this value to a more common value such as Mozilla/4.0. This may be necessary, for instance, if connecting through a firewall that restricts HTTP connections to a set of common USER_AGENT strings (but not including those like git/1.7.1). Can be overridden by the `GIT_HTTP_USER_AGENT` environment variable"},{name:"http..version",insertValue:"http.{cursor}.version",description:"Use the specified HTTP protocol version when communicating with a server. If you want to force the default. The available and default version depend on libcurl. Currently the possible values of this option are:"},{name:"i18n.commitEncoding",description:"Character encoding the commit messages are stored in; Git itself does not care per se, but this information is necessary e.g. when importing commits from emails or in the gitk graphical history browser (and possibly at other places in the future or in other porcelains). See e.g. git-mailinfo[1]. Defaults to 'utf-8'"},{name:"i18n.logOutputEncoding",description:"Character encoding the commit messages are converted to when running 'git log' and friends"},{name:"imap.authMethod",description:"Specify authenticate method for authentication with IMAP server. If Git was built with the NO_CURL option, or if your curl version is older than 7.34.0, or if you're running git-imap-send with the `--no-curl` option, the only supported method is 'CRAM-MD5'. If this is not set then 'git imap-send' uses the basic IMAP plaintext LOGIN command"},{name:"imap.folder",description:'The folder to drop the mails into, which is typically the Drafts folder. For example: "INBOX.Drafts", "INBOX/Drafts" or "[Gmail]/Drafts". Required'},{name:"imap.host",description:"A URL identifying the server. Use an `imap://` prefix for non-secure connections and an `imaps://` prefix for secure connections. Ignored when imap.tunnel is set, but required otherwise"},{name:"imap.pass",description:"The password to use when logging in to the server"},{name:"imap.port",description:"An integer port number to connect to on the server. Defaults to 143 for imap:// hosts and 993 for imaps:// hosts. Ignored when imap.tunnel is set"},{name:"imap.preformattedHTML",description:"A boolean to enable/disable the use of html encoding when sending a patch. An html encoded patch will be bracketed with
 and have a content type of text/html. Ironically, enabling this option causes Thunderbird to send the patch as a plain/text, format=fixed email. Default is `false`"},{name:"imap.sslverify",description:"A boolean to enable/disable verification of the server certificate used by the SSL/TLS connection. Default is `true`. Ignored when imap.tunnel is set"},{name:"imap.tunnel",description:"Command used to setup a tunnel to the IMAP server through which commands will be piped instead of using a direct network connection to the server. Required when imap.host is not set"},{name:"imap.user",description:"The username to use when logging in to the server"},{name:"includeIf..path",insertValue:"includeIf.{cursor}.path",description:'Special variables to include other configuration files. See the "CONFIGURATION FILE" section in the main git-config[1] documentation, specifically the "Includes" and "Conditional Includes" subsections'},{name:"index.recordEndOfIndexEntries",description:"Specifies whether the index file should include an \"End Of Index Entry\" section. This reduces index load time on multiprocessor machines but produces a message \"ignoring EOIE extension\" when reading the index using Git versions before 2.20. Defaults to 'true' if index.threads has been explicitly enabled, 'false' otherwise"},{name:"index.recordOffsetTable",description:"Specifies whether the index file should include an \"Index Entry Offset Table\" section. This reduces index load time on multiprocessor machines but produces a message \"ignoring IEOT extension\" when reading the index using Git versions before 2.20. Defaults to 'true' if index.threads has been explicitly enabled, 'false' otherwise"},{name:"index.sparse",description:"When enabled, write the index using sparse-directory entries. This has no effect unless `core.sparseCheckout` and `core.sparseCheckoutCone` are both enabled. Defaults to 'false'"},{name:"index.threads",description:"Specifies the number of threads to spawn when loading the index. This is meant to reduce index load time on multiprocessor machines. Specifying 0 or 'true' will cause Git to auto-detect the number of CPU's and set the number of threads accordingly. Specifying 1 or 'false' will disable multithreading. Defaults to 'true'"},{name:"index.version",description:"Specify the version with which new index files should be initialized. This does not affect existing repositories. If `feature.manyFiles` is enabled, then the default is 4"},{name:"init.defaultBranch",description:"Allows overriding the default branch name e.g. when initializing a new repository"},{name:"init.templateDir",description:'Specify the directory from which templates will be copied. (See the "TEMPLATE DIRECTORY" section of git-init[1].)'},{name:"instaweb.browser",description:"Specify the program that will be used to browse your working repository in gitweb. See git-instaweb[1]"},{name:"instaweb.httpd",description:"The HTTP daemon command-line to start gitweb on your working repository. See git-instaweb[1]"},{name:"instaweb.local",description:"If true the web server started by git-instaweb[1] will be bound to the local IP (127.0.0.1)"},{name:"instaweb.modulePath",description:"The default module path for git-instaweb[1] to use instead of /usr/lib/apache2/modules. Only used if httpd is Apache"},{name:"instaweb.port",description:"The port number to bind the gitweb httpd to. See git-instaweb[1]"},{name:"interactive.diffFilter",description:"When an interactive command (such as `git add --patch`) shows a colorized diff, git will pipe the diff through the shell command defined by this configuration variable. The command may mark up the diff further for human consumption, provided that it retains a one-to-one correspondence with the lines in the original diff. Defaults to disabled (no filtering)"},{name:"interactive.singleKey",description:"In interactive commands, allow the user to provide one-letter input with a single key (i.e., without hitting enter). Currently this is used by the `--patch` mode of git-add[1], git-checkout[1], git-restore[1], git-commit[1], git-reset[1], and git-stash[1]. Note that this setting is silently ignored if portable keystroke input is not available; requires the Perl module Term::ReadKey"},{name:"log.abbrevCommit",description:"If true, makes git-log[1], git-show[1], and git-whatchanged[1] assume `--abbrev-commit`. You may override this option with `--no-abbrev-commit`"},{name:"log.date",description:"Set the default date-time mode for the 'log' command. Setting a value for log.date is similar to using 'git log''s `--date` option. See git-log[1] for details"},{name:"log.decorate",description:"Print out the ref names of any commits that are shown by the log command. If 'short' is specified, the ref name prefixes 'refs/heads/', 'refs/tags/' and 'refs/remotes/' will not be printed. If 'full' is specified, the full ref name (including prefix) will be printed. If 'auto' is specified, then if the output is going to a terminal, the ref names are shown as if 'short' were given, otherwise no ref names are shown. This is the same as the `--decorate` option of the `git log`"},{name:"log.diffMerges",description:"Set default diff format to be used for merge commits. See `--diff-merges` in git-log[1] for details. Defaults to `separate`"},{name:"log.excludeDecoration",description:"Exclude the specified patterns from the log decorations. This is similar to the `--decorate-refs-exclude` command-line option, but the config option can be overridden by the `--decorate-refs` option"},{name:"log.follow",description:"If `true`, `git log` will act as if the `--follow` option was used when a single  is given. This has the same limitations as `--follow`, i.e. it cannot be used to follow multiple files and does not work well on non-linear history"},{name:"log.graphColors",description:"A list of colors, separated by commas, that can be used to draw history lines in `git log --graph`"},{name:"log.initialDecorationSet",description:"By default, `git log` only shows decorations for certain known ref namespaces. If 'all' is specified, then show all refs as decorations"},{name:"log.mailmap",description:"If true, makes git-log[1], git-show[1], and git-whatchanged[1] assume `--use-mailmap`, otherwise assume `--no-use-mailmap`. True by default"},{name:"log.showRoot",description:"If true, the initial commit will be shown as a big creation event. This is equivalent to a diff against an empty tree. Tools like git-log[1] or git-whatchanged[1], which normally hide the root commit will now show it. True by default"},{name:"log.showSignature",description:"If true, makes git-log[1], git-show[1], and git-whatchanged[1] assume `--show-signature`"},{name:"lsrefs.unborn",description:'May be "advertise" (the default), "allow", or "ignore". If "advertise", the server will respond to the client sending "unborn" (as described in gitprotocol-v2[5]) and will advertise support for this feature during the protocol v2 capability advertisement. "allow" is the same as "advertise" except that the server will not advertise support for this feature; this is useful for load-balanced servers that cannot be updated atomically (for example), since the administrator could configure "allow", then after a delay, configure "advertise"'},{name:"mailinfo.scissors",description:'If true, makes git-mailinfo[1] (and therefore git-am[1]) act by default as if the --scissors option was provided on the command-line. When active, this features removes everything from the message body before a scissors line (i.e. consisting mainly of ">8", "8<" and "-")'},{name:"mailmap.blob",description:"Like `mailmap.file`, but consider the value as a reference to a blob in the repository. If both `mailmap.file` and `mailmap.blob` are given, both are parsed, with entries from `mailmap.file` taking precedence. In a bare repository, this defaults to `HEAD:.mailmap`. In a non-bare repository, it defaults to empty"},{name:"mailmap.file",description:"The location of an augmenting mailmap file. The default mailmap, located in the root of the repository, is loaded first, then the mailmap file pointed to by this variable. The location of the mailmap file may be in a repository subdirectory, or somewhere outside of the repository itself. See git-shortlog[1] and git-blame[1]"},{name:"maintenance..enabled",insertValue:"maintenance.{cursor}.enabled",description:"This boolean config option controls whether the maintenance task with name `` is run when no `--task` option is specified to `git maintenance run`. These config values are ignored if a `--task` option exists. By default, only `maintenance.gc.enabled` is true"},{name:"maintenance..schedule",insertValue:"maintenance.{cursor}.schedule",description:'This config option controls whether or not the given `` runs during a `git maintenance run --schedule=` command. The value must be one of "hourly", "daily", or "weekly"'},{name:"maintenance.auto",description:"This boolean config option controls whether some commands run `git maintenance run --auto` after doing their normal work. Defaults to true"},{name:"maintenance.commit-graph.auto",description:"This integer config option controls how often the `commit-graph` task should be run as part of `git maintenance run --auto`. If zero, then the `commit-graph` task will not run with the `--auto` option. A negative value will force the task to run every time. Otherwise, a positive value implies the command should run when the number of reachable commits that are not in the commit-graph file is at least the value of `maintenance.commit-graph.auto`. The default value is 100"},{name:"maintenance.incremental-repack.auto",description:"This integer config option controls how often the `incremental-repack` task should be run as part of `git maintenance run --auto`. If zero, then the `incremental-repack` task will not run with the `--auto` option. A negative value will force the task to run every time. Otherwise, a positive value implies the command should run when the number of pack-files not in the multi-pack-index is at least the value of `maintenance.incremental-repack.auto`. The default value is 10"},{name:"maintenance.loose-objects.auto",description:"This integer config option controls how often the `loose-objects` task should be run as part of `git maintenance run --auto`. If zero, then the `loose-objects` task will not run with the `--auto` option. A negative value will force the task to run every time. Otherwise, a positive value implies the command should run when the number of loose objects is at least the value of `maintenance.loose-objects.auto`. The default value is 100"},{name:"maintenance.strategy",description:"This string config option provides a way to specify one of a few recommended schedules for background maintenance. This only affects which tasks are run during `git maintenance run --schedule=X` commands, provided no `--task=` arguments are provided. Further, if a `maintenance..schedule` config value is set, then that value is used instead of the one provided by `maintenance.strategy`. The possible strategy strings are:"},{name:"man..cmd",insertValue:"man.{cursor}.cmd",description:"Specify the command to invoke the specified man viewer. The specified command is evaluated in shell with the man page passed as argument. (See git-help[1].)"},{name:"man..path",insertValue:"man.{cursor}.path",description:"Override the path for the given tool that may be used to display help in the 'man' format. See git-help[1]"},{name:"man.viewer",description:"Specify the programs that may be used to display help in the 'man' format. See git-help[1]"},{name:"merge..driver",insertValue:"merge.{cursor}.driver",description:"Defines the command that implements a custom low-level merge driver. See gitattributes[5] for details"},{name:"merge..name",insertValue:"merge.{cursor}.name",description:"Defines a human-readable name for a custom low-level merge driver. See gitattributes[5] for details"},{name:"merge..recursive",insertValue:"merge.{cursor}.recursive",description:"Names a low-level merge driver to be used when performing an internal merge between common ancestors. See gitattributes[5] for details"},{name:"merge.autoStash",description:"When set to true, automatically create a temporary stash entry before the operation begins, and apply it after the operation ends. This means that you can run merge on a dirty worktree. However, use with care: the final stash application after a successful merge might result in non-trivial conflicts. This option can be overridden by the `--no-autostash` and `--autostash` options of git-merge[1]. Defaults to false"},{name:"merge.branchdesc",description:"In addition to branch names, populate the log message with the branch description text associated with them. Defaults to false"},{name:"merge.conflictStyle",description:'Specify the style in which conflicted hunks are written out to working tree files upon merge. The default is "merge", which shows a `<<<<<<<` conflict marker, changes made by one side, a `=======` marker, changes made by the other side, and then a `>>>>>>>` marker. An alternate style, "diff3", adds a `|||||||` marker and the original text before the `=======` marker. The "merge" style tends to produce smaller conflict regions than diff3, both because of the exclusion of the original text, and because when a subset of lines match on the two sides they are just pulled out of the conflict region. Another alternate style, "zdiff3", is similar to diff3 but removes matching lines on the two sides from the conflict region when those matching lines appear near either the beginning or end of a conflict region'},{name:"merge.defaultToUpstream",description:"If merge is called without any commit argument, merge the upstream branches configured for the current branch by using their last observed values stored in their remote-tracking branches. The values of the `branch..merge` that name the branches at the remote named by `branch..remote` are consulted, and then they are mapped via `remote..fetch` to their corresponding remote-tracking branches, and the tips of these tracking branches are merged. Defaults to true"},{name:"merge.directoryRenames",description:'Whether Git detects directory renames, affecting what happens at merge time to new files added to a directory on one side of history when that directory was renamed on the other side of history. If merge.directoryRenames is set to "false", directory rename detection is disabled, meaning that such new files will be left behind in the old directory. If set to "true", directory rename detection is enabled, meaning that such new files will be moved into the new directory. If set to "conflict", a conflict will be reported for such paths. If merge.renames is false, merge.directoryRenames is ignored and treated as false. Defaults to "conflict"'},{name:"merge.ff",description:"By default, Git does not create an extra merge commit when merging a commit that is a descendant of the current commit. Instead, the tip of the current branch is fast-forwarded. When set to `false`, this variable tells Git to create an extra merge commit in such a case (equivalent to giving the `--no-ff` option from the command line). When set to `only`, only such fast-forward merges are allowed (equivalent to giving the `--ff-only` option from the command line)"},{name:"merge.guitool",description:"Controls which merge tool is used by git-mergetool[1] when the -g/--gui flag is specified. The list below shows the valid built-in values. Any other value is treated as a custom merge tool and requires that a corresponding mergetool..cmd variable is defined"},{name:"merge.log",description:"In addition to branch names, populate the log message with at most the specified number of one-line descriptions from the actual commits that are being merged. Defaults to false, and true is a synonym for 20"},{name:"merge.renameLimit",description:"The number of files to consider in the exhaustive portion of rename detection during a merge. If not specified, defaults to the value of diff.renameLimit. If neither merge.renameLimit nor diff.renameLimit are specified, currently defaults to 7000. This setting has no effect if rename detection is turned off"},{name:"merge.renames",description:'Whether Git detects renames. If set to "false", rename detection is disabled. If set to "true", basic rename detection is enabled. Defaults to the value of diff.renames'},{name:"merge.renormalize",description:'Tell Git that canonical representation of files in the repository has changed over time (e.g. earlier commits record text files with CRLF line endings, but recent ones use LF line endings). In such a repository, Git can convert the data recorded in commits to a canonical form before performing a merge to reduce unnecessary conflicts. For more information, see section "Merging branches with differing checkin/checkout attributes" in gitattributes[5]'},{name:"merge.stat",description:"Whether to print the diffstat between ORIG_HEAD and the merge result at the end of the merge. True by default"},{name:"merge.suppressDest",description:'By adding a glob that matches the names of integration branches to this multi-valued configuration variable, the default merge message computed for merges into these integration branches will omit "into " from its title'},{name:"merge.tool",description:"Controls which merge tool is used by git-mergetool[1]. The list below shows the valid built-in values. Any other value is treated as a custom merge tool and requires that a corresponding mergetool..cmd variable is defined"},{name:"merge.verbosity",description:"Controls the amount of output shown by the recursive merge strategy. Level 0 outputs nothing except a final error message if conflicts were detected. Level 1 outputs only conflicts, 2 outputs conflicts and file changes. Level 5 and above outputs debugging information. The default is level 2. Can be overridden by the `GIT_MERGE_VERBOSITY` environment variable"},{name:"merge.verifySignatures",description:"If true, this is equivalent to the --verify-signatures command line option. See git-merge[1] for details"},{name:"mergetool..cmd",insertValue:"mergetool.{cursor}.cmd",description:"Specify the command to invoke the specified merge tool. The specified command is evaluated in shell with the following variables available: 'BASE' is the name of a temporary file containing the common base of the files to be merged, if available; 'LOCAL' is the name of a temporary file containing the contents of the file on the current branch; 'REMOTE' is the name of a temporary file containing the contents of the file from the branch being merged; 'MERGED' contains the name of the file to which the merge tool should write the results of a successful merge"},{name:"mergetool..hideResolved",insertValue:"mergetool.{cursor}.hideResolved",description:"Allows the user to override the global `mergetool.hideResolved` value for a specific tool. See `mergetool.hideResolved` for the full description"},{name:"mergetool..path",insertValue:"mergetool.{cursor}.path",description:"Override the path for the given tool. This is useful in case your tool is not in the PATH"},{name:"mergetool..trustExitCode",insertValue:"mergetool.{cursor}.trustExitCode",description:"For a custom merge command, specify whether the exit code of the merge command can be used to determine whether the merge was successful. If this is not set to true then the merge target file timestamp is checked and the merge assumed to have been successful if the file has been updated, otherwise the user is prompted to indicate the success of the merge"},{name:"mergetool.hideResolved",description:"During a merge Git will automatically resolve as many conflicts as possible and write the 'MERGED' file containing conflict markers around any conflicts that it cannot resolve; 'LOCAL' and 'REMOTE' normally represent the versions of the file from before Git's conflict resolution. This flag causes 'LOCAL' and 'REMOTE' to be overwriten so that only the unresolved conflicts are presented to the merge tool. Can be configured per-tool via the `mergetool..hideResolved` configuration variable. Defaults to `false`"},{name:"mergetool.keepBackup",description:"After performing a merge, the original file with conflict markers can be saved as a file with a `.orig` extension. If this variable is set to `false` then this file is not preserved. Defaults to `true` (i.e. keep the backup files)"},{name:"mergetool.keepTemporaries",description:"When invoking a custom merge tool, Git uses a set of temporary files to pass to the tool. If the tool returns an error and this variable is set to `true`, then these temporary files will be preserved, otherwise they will be removed after the tool has exited. Defaults to `false`"},{name:"mergetool.meld.hasOutput",description:"Older versions of `meld` do not support the `--output` option. Git will attempt to detect whether `meld` supports `--output` by inspecting the output of `meld --help`. Configuring `mergetool.meld.hasOutput` will make Git skip these checks and use the configured value instead. Setting `mergetool.meld.hasOutput` to `true` tells Git to unconditionally use the `--output` option, and `false` avoids using `--output`"},{name:"mergetool.meld.useAutoMerge",description:"When the `--auto-merge` is given, meld will merge all non-conflicting parts automatically, highlight the conflicting parts and wait for user decision. Setting `mergetool.meld.useAutoMerge` to `true` tells Git to unconditionally use the `--auto-merge` option with `meld`. Setting this value to `auto` makes git detect whether `--auto-merge` is supported and will only use `--auto-merge` when available. A value of `false` avoids using `--auto-merge` altogether, and is the default value"},{name:"mergetool.prompt",description:"Prompt before each invocation of the merge resolution program"},{name:"mergetool.vimdiff.layout",description:"The vimdiff backend uses this variable to control how its split windows look like. Applies even if you are using Neovim (`nvim`) or gVim (`gvim`) as the merge tool. See BACKEND SPECIFIC HINTS section"},{name:"mergetool.writeToTemp",description:"Git writes temporary 'BASE', 'LOCAL', and 'REMOTE' versions of conflicting files in the worktree by default. Git will attempt to use a temporary directory for these files when set `true`. Defaults to `false`"},{name:"notes..mergeStrategy",insertValue:"notes.{cursor}.mergeStrategy",description:'Which merge strategy to choose when doing a notes merge into refs/notes/. This overrides the more general "notes.mergeStrategy". See the "NOTES MERGE STRATEGIES" section in git-notes[1] for more information on the available strategies'},{name:"notes.displayRef",description:"The (fully qualified) refname from which to show notes when showing commit messages. The value of this variable can be set to a glob, in which case notes from all matching refs will be shown. You may also specify this configuration variable several times. A warning will be issued for refs that do not exist, but a glob that does not match any refs is silently ignored"},{name:"notes.mergeStrategy",description:'Which merge strategy to choose by default when resolving notes conflicts. Must be one of `manual`, `ours`, `theirs`, `union`, or `cat_sort_uniq`. Defaults to `manual`. See "NOTES MERGE STRATEGIES" section of git-notes[1] for more information on each strategy'},{name:"notes.rewrite.",insertValue:"notes.rewrite.{cursor}",description:'When rewriting commits with  (currently `amend` or `rebase`) and this variable is set to `true`, Git automatically copies your notes from the original to the rewritten commit. Defaults to `true`, but see "notes.rewriteRef" below'},{name:"notes.rewriteMode",description:'When copying notes during a rewrite (see the "notes.rewrite." option), determines what to do if the target commit already has a note. Must be one of `overwrite`, `concatenate`, `cat_sort_uniq`, or `ignore`. Defaults to `concatenate`'},{name:"notes.rewriteRef",description:"When copying notes during a rewrite, specifies the (fully qualified) ref whose notes should be copied. The ref may be a glob, in which case notes in all matching refs will be copied. You may also specify this configuration several times"},{name:"pack.allowPackReuse",description:"When true, and when reachability bitmaps are enabled, pack-objects will try to send parts of the bitmapped packfile verbatim. This can reduce memory and CPU usage to serve fetches, but might result in sending a slightly larger pack. Defaults to true"},{name:"pack.compression",description:'An integer -1..9, indicating the compression level for objects in a pack file. -1 is the zlib default. 0 means no compression, and 1..9 are various speed/size tradeoffs, 9 being slowest. If not set, defaults to core.compression. If that is not set, defaults to -1, the zlib default, which is "a default compromise between speed and compression (currently equivalent to level 6)"'},{name:"pack.deltaCacheLimit",description:"The maximum size of a delta, that is cached in git-pack-objects[1]. This cache is used to speed up the writing object phase by not having to recompute the final delta result once the best match for all objects is found. Defaults to 1000. Maximum value is 65535"},{name:"pack.deltaCacheSize",description:"The maximum memory in bytes used for caching deltas in git-pack-objects[1] before writing them out to a pack. This cache is used to speed up the writing object phase by not having to recompute the final delta result once the best match for all objects is found. Repacking large repositories on machines which are tight with memory might be badly impacted by this though, especially if this cache pushes the system into swapping. A value of 0 means no limit. The smallest size of 1 byte may be used to virtually disable this cache. Defaults to 256 MiB"},{name:"pack.depth",description:"The maximum delta depth used by git-pack-objects[1] when no maximum depth is given on the command line. Defaults to 50. Maximum value is 4095"},{name:"pack.indexVersion",description:"Specify the default pack index version. Valid values are 1 for legacy pack index used by Git versions prior to 1.5.2, and 2 for the new pack index with capabilities for packs larger than 4 GB as well as proper protection against the repacking of corrupted packs. Version 2 is the default. Note that version 2 is enforced and this config option ignored whenever the corresponding pack is larger than 2 GB"},{name:"pack.island",description:'An extended regular expression configuring a set of delta islands. See "DELTA ISLANDS" in git-pack-objects[1] for details'},{name:"pack.islandCore",description:'Specify an island name which gets to have its objects be packed first. This creates a kind of pseudo-pack at the front of one pack, so that the objects from the specified island are hopefully faster to copy into any pack that should be served to a user requesting these objects. In practice this means that the island specified should likely correspond to what is the most commonly cloned in the repo. See also "DELTA ISLANDS" in git-pack-objects[1]'},{name:"pack.packSizeLimit",description:"The maximum size of a pack. This setting only affects packing to a file when repacking, i.e. the git:// protocol is unaffected. It can be overridden by the `--max-pack-size` option of git-repack[1]. Reaching this limit results in the creation of multiple packfiles"},{name:"pack.preferBitmapTips",description:'When selecting which commits will receive bitmaps, prefer a commit at the tip of any reference that is a suffix of any value of this configuration over any other commits in the "selection window"'},{name:"pack.threads",description:"Specifies the number of threads to spawn when searching for best delta matches. This requires that git-pack-objects[1] be compiled with pthreads otherwise this option is ignored with a warning. This is meant to reduce packing time on multiprocessor machines. The required amount of memory for the delta search window is however multiplied by the number of threads. Specifying 0 will cause Git to auto-detect the number of CPU's and set the number of threads accordingly"},{name:"pack.useBitmaps",description:"When true, git will use pack bitmaps (if available) when packing to stdout (e.g., during the server side of a fetch). Defaults to true. You should not generally need to turn this off unless you are debugging pack bitmaps"},{name:"pack.useSparse",description:"When true, git will default to using the '--sparse' option in 'git pack-objects' when the '--revs' option is present. This algorithm only walks trees that appear in paths that introduce new objects. This can have significant performance benefits when computing a pack to send a small change. However, it is possible that extra objects are added to the pack-file if the included commits contain certain types of direct renames. Default is `true`"},{name:"pack.window",description:"The size of the window used by git-pack-objects[1] when no window size is given on the command line. Defaults to 10"},{name:"pack.windowMemory",description:'The maximum size of memory that is consumed by each thread in git-pack-objects[1] for pack window memory when no limit is given on the command line. The value can be suffixed with "k", "m", or "g". When left unconfigured (or set explicitly to 0), there will be no limit'},{name:"pack.writeBitmapHashCache",description:'When true, git will include a "hash cache" section in the bitmap index (if one is written). This cache can be used to feed git\'s delta heuristics, potentially leading to better deltas between bitmapped and non-bitmapped objects (e.g., when serving a fetch between an older, bitmapped pack and objects that have been pushed since the last gc). The downside is that it consumes 4 bytes per object of disk space. Defaults to true'},{name:"pack.writeBitmapLookupTable",description:'When true, Git will include a "lookup table" section in the bitmap index (if one is written). This table is used to defer loading individual bitmaps as late as possible. This can be beneficial in repositories that have relatively large bitmap indexes. Defaults to false'},{name:"pack.writeBitmaps",description:"This is a deprecated synonym for `repack.writeBitmaps`",deprecated:!0,hidden:!0},{name:"pack.writeReverseIndex",description:"When true, git will write a corresponding .rev file (see: gitformat-pack[5]) for each new packfile that it writes in all places except for git-fast-import[1] and in the bulk checkin mechanism. Defaults to false"},{name:"pager.",insertValue:"pager.{cursor}",description:"If the value is boolean, turns on or off pagination of the output of a particular Git subcommand when writing to a tty. Otherwise, turns on pagination for the subcommand using the pager specified by the value of `pager.`. If `--paginate` or `--no-pager` is specified on the command line, it takes precedence over this option. To disable pagination for all commands, set `core.pager` or `GIT_PAGER` to `cat`"},{name:"pretty.",insertValue:"pretty.{cursor}",description:'Alias for a --pretty= format string, as specified in git-log[1]. Any aliases defined here can be used just as the built-in pretty formats could. For example, running `git config pretty.changelog "format:* %H %s"` would cause the invocation `git log --pretty=changelog` to be equivalent to running `git log "--pretty=format:* %H %s"`. Note that an alias with the same name as a built-in format will be silently ignored'},{name:"protocol..allow",insertValue:"protocol.{cursor}.allow",description:"Set a policy to be used by protocol `` with clone/fetch/push commands. See `protocol.allow` above for the available policies"},{name:"protocol.allow",description:"If set, provide a user defined default policy for all protocols which don't explicitly have a policy (`protocol..allow`). By default, if unset, known-safe protocols (http, https, git, ssh, file) have a default policy of `always`, known-dangerous protocols (ext) have a default policy of `never`, and all other protocols have a default policy of `user`. Supported policies:"},{name:"protocol.version",description:"If set, clients will attempt to communicate with a server using the specified protocol version. If the server does not support it, communication falls back to version 0. If unset, the default is `2`. Supported versions:"},{name:"pull.ff",description:"By default, Git does not create an extra merge commit when merging a commit that is a descendant of the current commit. Instead, the tip of the current branch is fast-forwarded. When set to `false`, this variable tells Git to create an extra merge commit in such a case (equivalent to giving the `--no-ff` option from the command line). When set to `only`, only such fast-forward merges are allowed (equivalent to giving the `--ff-only` option from the command line). This setting overrides `merge.ff` when pulling"},{name:"pull.octopus",description:"The default merge strategy to use when pulling multiple branches at once"},{name:"pull.rebase",description:'When true, rebase branches on top of the fetched branch, instead of merging the default branch from the default remote when "git pull" is run. See "branch..rebase" for setting this on a per-branch basis'},{name:"pull.twohead",description:"The default merge strategy to use when pulling a single branch"},{name:"push.autoSetupRemote",description:"If set to \"true\" assume `--set-upstream` on default push when no upstream tracking exists for the current branch; this option takes effect with push.default options 'simple', 'upstream', and 'current'. It is useful if by default you want new branches to be pushed to the default remote (like the behavior of 'push.default=current') and you also want the upstream tracking to be set. Workflows most likely to benefit from this option are 'simple' central workflows where all branches are expected to have the same name on the remote"},{name:"push.default",description:"Defines the action `git push` should take if no refspec is given (whether from the command-line, config, or elsewhere). Different values are well-suited for specific workflows; for instance, in a purely central workflow (i.e. the fetch source is equal to the push destination), `upstream` is probably what you want. Possible values are:"},{name:"push.followTags",description:"If set to true enable `--follow-tags` option by default. You may override this configuration at time of push by specifying `--no-follow-tags`"},{name:"push.gpgSign",description:"May be set to a boolean value, or the string 'if-asked'. A true value causes all pushes to be GPG signed, as if `--signed` is passed to git-push[1]. The string 'if-asked' causes pushes to be signed if the server supports it, as if `--signed=if-asked` is passed to 'git push'. A false value may override a value from a lower-priority config file. An explicit command-line flag always overrides this config option"},{name:"push.negotiate",description:'If set to "true", attempt to reduce the size of the packfile sent by rounds of negotiation in which the client and the server attempt to find commits in common. If "false", Git will rely solely on the server\'s ref advertisement to find commits in common'},{name:"push.pushOption",description:"When no `--push-option=