{"id":16847875,"url":"https://github.com/stepancheg/zsh","last_synced_at":"2025-03-18T07:21:04.315Z","repository":{"id":4313638,"uuid":"5446908","full_name":"stepancheg/zsh","owner":"stepancheg","description":null,"archived":false,"fork":false,"pushed_at":"2012-08-20T13:13:25.000Z","size":12168,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"vcsinfo-count","last_synced_at":"2025-01-24T13:46:06.816Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/stepancheg.png","metadata":{"files":{"readme":"README","changelog":"ChangeLog","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2012-08-17T01:55:00.000Z","updated_at":"2014-01-22T04:19:06.000Z","dependencies_parsed_at":"2022-08-19T07:21:30.442Z","dependency_job_id":null,"html_url":"https://github.com/stepancheg/zsh","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stepancheg%2Fzsh","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stepancheg%2Fzsh/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stepancheg%2Fzsh/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stepancheg%2Fzsh/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stepancheg","download_url":"https://codeload.github.com/stepancheg/zsh/tar.gz/refs/heads/vcsinfo-count","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244173462,"owners_count":20410303,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-13T13:09:17.328Z","updated_at":"2025-03-18T07:21:04.295Z","avatar_url":"https://github.com/stepancheg.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"-----------------\nTHE Z SHELL (ZSH)\n-----------------\n\nVersion\n-------\n\nThis is version 5.0.0 of the shell.  This is a stable release.\nThere have been only incremental changes since the last development\nversion, 4.3.17.  The new major version number represents the\nsubstantial changes since the 4.2 stable release series.  The\nchanges are detailed in the file NEWS.\n\nInstalling Zsh\n--------------\n\nThe instructions for compiling zsh are in the file INSTALL.  You should\nalso check the file MACHINES in the top directory to see if there\nare any special instructions for your particular architecture.\n\nNote in particular the zsh/newuser module that guides new users through\nsetting basic shell options without the administrator's intervention.  This\nis turned on by default.  See the section AUTOMATIC NEW USER CONFIGURATION\nin INSTALL for configuration information.\n\nFeatures\n--------\n\nZsh is a shell with lots of features.  For a list of some of these, see the\nfile FEATURES, and for the latest changes see NEWS.  For more\ndetails, see the documentation.\n\nPossible incompatibilities\n---------------------------\n\nHere are some incompatibilities in the shell since the 4.2 series of\nreleases.  It is hoped most users will not be adversely affected by these.\n\nIn previous releases of the shell, builtin commands and precommand\nmodifiers that did not accept options also did not recognize the\nargument \"--\" as marking the end of option processing without being\nconsidered an argument.  This was not documented and was incompatible\nwith other shells.  All such commands now handle this syntax.\n\nThe configuration option --enable-lfs to enable large file support has\nbeen replaced by autoconf's standard --enable-largefile mechanism.\nAs this is usually used whenever necessary, this won't usually\nbe noticeable; however, anyone configuring with --disable-lfs\nshould configure with --disable-largefile instead.\n\nThe configuration option --with-curses-terminfo has been replaced\nby the option --with-term-lib=\"LIBS\" where LIBS is a space-separated\nlist of libraries to search for termcap and curses features.\n\nThe option SH_WORD_SPLIT, used in Bourne/Korn/Posix shell compatibility\nmode, has been made more like other shells in the case of substitutions of\nthe form ${1+\"$@\"} (a common trick used to work around problems in older\nBourne shells) or any of the related forms with the + replaced by - or =\nwith an optional colon preceding.  Previously, with SH_WORD_SPLIT in\neffect, this expression would cause splitting on all white space in the\nshell arguments.  (This was always regarded as a bug but was long-standing\nbehaviour.)  Now it is treated identically to \"$@\".  The same change\napplies to expressions with forced splitting such as ${=1+\"$@\"}, but\notherwise the case where SH_WORD_SPLIT is not set is unaffected.\n\nDebug traps (`trap ... DEBUG' or the function TRAPDEBUG) now run by default\nbefore the command to which they refer instead of after.  This is almost\nalways the right behaviour for the intended purpose of debugging and is\nconsistent with recent versions of other shells.  The option\nDEBUG_BEFORE_CMD can be unset to revert to the previous behaviour.\n\nPreviously, process substitutions of the form =(...), \u003c(...) and \u003e(...)\nwere only handled if they appeared as separate command arguments.\n(However, the latter two forms caused the current argument to be\nterminated and a new one started even if they occurred in the middle of\na string.)  Now all three may be followed by other strings, and the\nlatter two may also be preceded by other strings.  Remaining\nlimitations on their use (to reduce incompatibilities to a minimum)\nare documented in the zshexpn.1 manual.\n\nIn previous versions of the shell it was possible to use index 0 in an\narray or string subscript to refer to the same element as index 1 if the\noption KSH_ARRAYS was not in effect.  This was a limited approximation to\nthe full KSH_ARRAYS handling and so was not very useful.  In this version\nof the shell, this behaviour is only provided when the option\nKSH_ZERO_SUBSCRIPT is set.  Note that despite the name this does not provide\ntrue compatibility with ksh or other shells and KSH_ARRAYS should still be\nused for that purpose.  By default, the option is not set; an array\nsubscript that evaluates to 0 returns an empty string or array element and\nattempts to write to an array or string range including only a zero\nsubscript are treated as an error.  Writes to otherwise valid ranges that\nalso include index zero are allowed; hence for example the assignment\n  array[(R)notfound,(r)notfound]=()\n(where the string \"notfound\" does not match an element in $array) sets the\nentire array to be empty, as in previous versions of the shell.\nKSH_ZERO_SUBSCRIPT is irrelevant when KSH_ARRAYS is set.  Also as in previous\nversions, attempts to write to non-existent elements at the end of an array\ncause the array to be suitably extended.  This difference means that, for\nexample\n  array[(R)notfound]=(replacement)\nis an error if KSH_ZERO_SUBSCRIPT is not set (new behaviour), while\n  array[(r)notfound]=(replacement)\ncauses the given value to be appended to the array (same behaviour as\nprevious versions).\n\nThe \"exec\" precommand modifier now takes various options for compatibility\nwith other shells.  This means that whereas \"exec -prog\" previously\ntried to execute a command name \"-prog\", it will now report an error\nin option handling.  \"exec -- -prog\" will execute \"-prog\".  If\nthe option EQUALS is set, as it is by default in zsh's native mode,\n\"exec =-prog\" behaves the same way in all versions of zsh provided\nthe command can be found.\n\nThe \"unset\" builtin now does not regard the unsetting of non-existent\nvariables as an error, so can still return status 0 (depending on the\nhandling of other arguments).  This appears to be the standard shell\nbehaviour.\n\nThe variable BAUD is no longer set automatically by the shell.\nIn previous versions it was set to the baud rate reported by\nthe terminal driver in order to initialise the line editor's\ncompensation mechanism for slow baud rates.  However, the baud\nrate so reported is very rarely related to the limiting speed of\nscreen updates on modern systems.  Users who need the compensation\nmechanism should set BAUD to an appropriate rate by hand.\n\nThe variable HOME is no longer set by the shell if zsh is emulating any\nother shell at startup; it must be present in the environment or set\nsubsequently by the user.  It is valid for the variable to be unset.\n\nIf the shell starts in a mode where it is emulating another shell\n(typically because the base name of the shell was \"sh\" or another known\nshell), the \"repeat\" syntax is not available by default, to avoid clashes\nwith external commands, but the \"ulimit\" command is available by default.\n\"limit\", \"sched\" and \"unlimit\" are not available by default in such modes:\nthis has been the case for many versions but is now documented for the\nfirst time.  (Users should note that emulation modes are not designed for\nbackwards compatibility with previous versions of zsh, but to maximise\ncompatibility with other shells, hence it is not safe to assume emulation\nmodes will behave consistently between zsh versions.)\n\nParameter substitutions in the form ${param//#%search/replace} match\nagainst \"search\" anchored at both ends of the parameter value.  Previously\nthis syntax would have matched against \"%search\", anchored only at the head\nof the value.  The form ${param//#$search/replace} where the value\n$search starts with \"%\" considers the \"%\" to be part of the search\nstring as before.\n\nConfigure attempts to decide if multibyte characters are supported by the\nsystem and if so sets the effect of --enable-multibyte, unless\n--disable-multibyte was passed on the command line.  When\n--enable-multibyte is in effect, the MULTIBYTE shell option is on by\ndefault; this causes many operations to recognise characters in the current\nlocale.  (Most typically this is used for a UTF-8 character set but the\nshell will work with any character set provided by the system where\nindividual octets are either US ASCII characters or have the top bit set.)\nOlder versions of the shell always assumed a character was one byte; this\nremains the case if --disable-multibyte is in effect or if the MULTIBYTE\noption is unset.  In some places the width of characters will be taken into\naccount where previously a raw string length was used; this is transparent\nin calculations of screen position, but also occurs, for example, in\ncalculations of padding width.  Note that MULTIBYTE is not automatically\nset when emulating Bourne- and POSIX-style shells; for interactive use of\nthese emulations it may be necessary to set it by hand.  Note also that the\noption COMBINING_CHARS is not set by default due to difficulties detecting\nthe ability of the terminal to display combining characters correctly; MAC\nusers in particular will probably wish to set this option.\n\nZsh has previously been lax about whether it allows octets with the\ntop bit set to be part of a shell identifier.  Older versions of the shell\nassumed all such octets were allowed in identifiers, however the POSIX\nstandard does not allow such characters in identifiers.  The older\nbehaviour is still obtained with --disable-multibyte in effect.\nWith --enable-multibyte in effect (see previous paragraph) there are three\npossible cases:\n  MULTIBYTE option unset:  only ASCII characters are allowed; the\n    shell does not attempt to identify non-ASCII characters at all.\n  MULTIBYTE option set, POSIX_IDENTIFIERS option unset: in addition\n    to the POSIX characters, any alphanumeric characters in the\n    local character set are allowed.  Note that scripts and functions that\n    take advantage of this are non-portable; however, this is in the spirit\n    of previous versions of the shell.  Note also that the options must\n    be set before the shell parses the script or function; setting\n    them during execution is not sufficient.\n  MULITBYTE option set, POSIX_IDENTIFIERS set:  only ASCII characters\n    are allowed in identifiers even though the shell will recognise\n    alphanumeric multibyte characters.\n\nThe sched builtin now keeps entries in time order.  This means that\nafter adding an entry the index of an existing entry used for deletion\nmay change, if that entry had a later time than the new entry.  However,\ndeleting a entry with a later time will now never change the index of an\nentry with an earlier time, which could happen with the previous method.\n\nThe completion style pine-directory must now be set to use completion\nfor PINE mailbox folders; previously it had the default ~/mail.  This\nchange was necessary because otherwise recursive directories under\n~/mail were searched by default, which could be a considerable unnecessary\nhit for anyone not using PINE.  The previous default can be restored with:\n  zstyle ':completion:*' pine-directory ~/mail\n\nThe completion style fake-files now allows patterns as directories,\nfor example the value '/home/*:.snapshot' is now valid.  This will\nonly cause problems in the unlikely event that a directory in the style\nhas a pattern character in it.\n\nThe default maximum function depth (configurable with\n--enable-max-function-depth) has been decreased to 1000 from 4096.  The\nprevious value was observed to be small enough that crashes still occurred\non some fairly common PC configurations.  This change is only likely to\naffect some highly specialised uses of the shell.\n\nThe variables HISTCHARS and histchars now reject any attempt to\nset non-ASCII characters for history or comments.  Multibyte characters\nhave never worked and the most consistent change was to restrict the\nset to portable characters only.\n\nWriters of add-on modules should note that the API has changed\nsignificantly to allow user control of individual features provided by\nmodules.  See the documentation for zmodload -F and\nEtc/zsh-development-guide, in that order.\n\nDocumentation\n-------------\n\nThere are a number of documents about zsh in this distribution:\n\nDoc/Zsh/*.yo\tThe master source for the zsh documentation is written in\n\t\tyodl.  Yodl is a document language written by Karel Kubat.\n\t\tIt is not required by zsh but it is a nice program so you\n\t\tmight want to get it anyway, especially if you are a zsh\n\t\tdeveloper.  It can be downloaded from\n\t\tftp://yodl.sourceforge.net/\n\nDoc/zsh*.1\tMan pages in nroff format.  These will be installed\n\t\tby \"make install.man\" or \"make install\".  By default,\n\t\tthese will be installed in /usr/local/man/man1, although\n\t\tyou can change this with the --mandir option to configure\n\t\tor editing the user configuration section of the top level\n\t\tMakefile.\n\nDoc/zsh.texi\tEverything the man pages have, but in texinfo format.  These\n\t\twill be installed by \"make install.info\" or \"make install\".\n\t\tBy default, these will be installed in /usr/local/info,\n\t\talthough you can change this with the --infodir option to\n\t\tconfigure or editing the user configuration section of the\n\t\ttop level Makefile.  Version 4.0 or above of the\n\t\tTexinfo tools are recommended for processing this file.\n\nAlso included in the distribution are:\n\nDoc/intro.ms\tAn introduction to zsh in troff format using the ms\n\t\tmacros.  This document explains many of the features\n\t\tthat make zsh more equal than other shells.\n\t\tUnfortunately this is based on zsh-2.5 so some examples\n\t\tmay not work without changes but it is still a good\n\t\tintroduction.\n\nFor more information, see the website, as described in the META-FAQ.\n\nIf you do not have the necessary tools to process these documents, PDF,\nInfo and DVI versions are available in the separate file zsh-doc.tar.gz at\nthe archive sites listed in the META-FAQ.\n\nThe distribution also contains a Perl script in Utils/helpfiles which\ncan be used to extract the descriptions of builtin commands from the\nzshbuiltins manual page.  See the comments at the beginning of the\nscript about its usage.  The files created by this script can be used\nby example function run-help located in the subdirectory Functions/Misc to\nshow information about zsh builtins and run `man' on external commands.\nFor this the shell variable HELPDIR should point to a directory containing\nthe files generated by the helpfiles script.  run-help should be\nunaliased before loading the run-help function.  After that this function\nwill be executed by the run-help ZLE function which is by default bound\nto ESC-h in emacs mode.\n\nExamples\n--------\n\nExamples of zsh startup files are located in the subdirectory\nStartupFiles.  Examples of zsh functions and scripts are located in\nthe subdirectory Functions.  Examples of completion control commands\n(compctl) are located in the file Misc/compctl-examples.\n\nZsh FTP Sites, Web Pages, and Mailing Lists\n-------------------------------------------\n\nThe current list of zsh FTP sites, web pages, and mailing lists can be\nfound in the META-FAQ.  A copy is included in this distribution and is\navailable separately at any of the zsh FTP sites.\n\nCommon Problems and Frequently Asked Questions\n----------------------------------------------\n\nZsh has a list of Frequently Asked Questions (FAQ) maintained by Peter\nStephenson \u003cpws@zsh.org\u003e.  It covers many common problems encountered\nwhen building, installing, and using zsh.  A copy is included in this\ndistribution in Etc/FAQ and is available separately at any of the zsh\nftp sites.\n\nZsh Maintenance and Bug Reports\n-------------------------------\n\nZsh is currently maintained by the members of the zsh-workers mailing list\nand coordinated by Peter Stephenson \u003ccoordinator@zsh.org\u003e.  Please send\nany feedback and bugs reports to \u003czsh-workers@zsh.org\u003e.\n\nReports are most helpful if you can reproduce the bug starting zsh with\nthe -f option.  This skips the execution of local startup files except\n/etc/zshenv.  If a bug occurs only when some options set try to locate\nthe option which triggers the bug.\n\nThere is a script \"reporter\" in the subdirectory Util which will print out\nyour current shell environment/setup.  If you cannot reproduce the bug\nwith \"zsh -f\", use this script and include the output from sourcing this\nfile.  This way, the problem you are reporting can be recreated.\n\nThe known bugs in zsh are listed in the file Etc/BUGS.  Check this as\nwell as the Frequently Asked Questions (FAQ) list before sending a bug\nreport.  Note that zsh has some features which are not compatible with\nsh but these are not bugs.  Most of these incompatibilities go away\nwhen zsh is invoked as sh or ksh (e.g. using a symbolic link).\n\nIf you send a bug report to the list and are not a subscriber, please\nmention this in your message if you want a response.\n\nIf you would like to contribute to the development and maintenance of zsh,\nthen you should join the zsh-workers mailing list (check the META-FAQ\nfor info on this).  You should also read the \"zsh-development-guide\"\nlocated in the subdirectory Util.\n\nContributors\n------------\n\nThe people who have contributed to this software project are listed\nin Etc/CONTRIBUTORS.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstepancheg%2Fzsh","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstepancheg%2Fzsh","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstepancheg%2Fzsh/lists"}