/usr/share/zsh/5.5.1/functions
NameSizeModeActions
add-zle-hook-widget53820644editdlrm
add-zsh-hook19460644editdlrm
after13840644editdlrm
age21580644editdlrm
allopt7830644editdlrm
backward-kill-word-match6080644editdlrm
backward-word-match4500644editdlrm
bashcompinit50070644editdlrm
before13840644editdlrm
bracketed-paste-magic75030644editdlrm
bracketed-paste-url-magic11860644editdlrm
calendar117950644editdlrm
calendar_add82730755editdlrm
calendar_edit7940644editdlrm
calendar_lockfiles16290644editdlrm
calendar_parse61110644editdlrm
calendar_read12710644editdlrm
calendar_scandate291500644editdlrm
calendar_show10290644editdlrm
calendar_showdate14610644editdlrm
calendar_sort19300644editdlrm
capitalize-word-match3730644editdlrm
catch12500644editdlrm
cdr122400644editdlrm
checkmail8170755editdlrm
chpwd_recent_add5060644editdlrm
chpwd_recent_dirs15930644editdlrm
chpwd_recent_filehandler11760644editdlrm
colors34170644editdlrm
compaudit57380644editdlrm
compdump40920644editdlrm
compinit165760644editdlrm
compinstall616460644editdlrm
copy-earlier-word7950644editdlrm
cycle-completion-positions4970644editdlrm
define-composed-chars86810644editdlrm
delete-whole-word-match16840644editdlrm
down-case-word-match3760644editdlrm
down-line-or-beginning-search6230644editdlrm
edit-command-line11840644editdlrm
expand-absolute-path4730644editdlrm
forward-word-match9770644editdlrm
getjobs8270644editdlrm
harden960755editdlrm
history-beginning-search-menu34840644editdlrm
history-pattern-search21700644editdlrm
history-search-end8120644editdlrm
incarg10020644editdlrm
incremental-complete-word38700644editdlrm
insert-composed-char52370644editdlrm
insert-files10010644editdlrm
insert-unicode-char7150644editdlrm
is-at-least22790644editdlrm
keeper34490644editdlrm
keymap+widget26630644editdlrm
kill-word-match6060644editdlrm
match-word-context12620644editdlrm
match-words-by-style104380644editdlrm
mere20620644editdlrm
modify-current-argument27890644editdlrm
move-line-in-buffer4240644editdlrm
narrow-to-region50150644editdlrm
narrow-to-region-invisible2110644editdlrm
nslookup11250644editdlrm
pick-web-browser48750644editdlrm
predict-on47150644editdlrm
promptinit81960644editdlrm
promptnl33070644editdlrm
prompt_adam1_setup18290644editdlrm
prompt_adam2_setup41500644editdlrm
prompt_bart_setup80760644editdlrm
prompt_bigfade_setup18020644editdlrm
prompt_clint_setup17290644editdlrm
prompt_default_setup1120644editdlrm
prompt_elite2_setup15880644editdlrm
prompt_elite_setup14730644editdlrm
prompt_fade_setup17610644editdlrm
prompt_fire_setup19390644editdlrm
prompt_off_setup1260644editdlrm
prompt_oliver_setup14960644editdlrm
prompt_pws_setup6630644editdlrm
prompt_redhat_setup2780644editdlrm
prompt_restore_setup530644editdlrm
prompt_special_chars7880644editdlrm
prompt_suse_setup2600644editdlrm
prompt_walters_setup5280644editdlrm
prompt_zefram_setup5090644editdlrm
quote-and-complete-word14420644editdlrm
read-from-minibuffer13410644editdlrm
regexp-replace10390644editdlrm
relative8880644editdlrm
replace-argument11140644editdlrm
replace-string9700644editdlrm
replace-string-again18550644editdlrm
run-help30610755editdlrm
run-help-git1440644editdlrm
run-help-ip8620755editdlrm
run-help-openssl590644editdlrm
run-help-p4780644editdlrm
run-help-sudo560644editdlrm
run-help-svk420644editdlrm
run-help-svn420644editdlrm
select-bracketed16990644editdlrm
select-quoted17330644editdlrm
select-word-match39250644editdlrm
select-word-style22300644editdlrm
send-invisible26030644editdlrm
smart-insert-last-word43650644editdlrm
split-shell-arguments15750644editdlrm
sticky-note46980755editdlrm
surround21100644editdlrm
tcp_alias40930644editdlrm
tcp_close29810644editdlrm
tcp_command680644editdlrm
tcp_expect51000644editdlrm
tcp_fd_handler9700644editdlrm
tcp_log22850644editdlrm
tcp_open67940644editdlrm
tcp_output18560644editdlrm
tcp_point4430644editdlrm
tcp_proxy8490644editdlrm
tcp_read70530644editdlrm
tcp_rename8500644editdlrm
tcp_send19900644editdlrm
tcp_sess10390644editdlrm
tcp_shoot3240644editdlrm
tcp_spam29090644editdlrm
tcp_talk14720644editdlrm
tcp_wait4590644editdlrm
tetris54330644editdlrm
tetriscurses110160644editdlrm
throw10220644editdlrm
transpose-lines10880644editdlrm
transpose-words-match16800644editdlrm
up-case-word-match3770644editdlrm
up-line-or-beginning-search6010644editdlrm
url-quote-magic60830644editdlrm
vcs_info37060644editdlrm
VCS_INFO_adjust2460644editdlrm
VCS_INFO_bydir_detect8270644editdlrm
VCS_INFO_check_com2940644editdlrm
VCS_INFO_detect_bzr3260644editdlrm
VCS_INFO_detect_cdv3350644editdlrm
VCS_INFO_detect_cvs3250644editdlrm
VCS_INFO_detect_darcs3330644editdlrm
VCS_INFO_detect_fossil3410644editdlrm
VCS_INFO_detect_git6570644editdlrm
VCS_INFO_detect_hg6920644editdlrm
VCS_INFO_detect_mtn3360644editdlrm
VCS_INFO_detect_p423580644editdlrm
VCS_INFO_detect_svk14680644editdlrm
VCS_INFO_detect_svn3540644editdlrm
VCS_INFO_detect_tla3450644editdlrm
VCS_INFO_formats39500644editdlrm
VCS_INFO_get_cmd2330644editdlrm
VCS_INFO_get_data_bzr34920644editdlrm
VCS_INFO_get_data_cdv3050644editdlrm
VCS_INFO_get_data_cvs5120644editdlrm
VCS_INFO_get_data_darcs3110644editdlrm
VCS_INFO_get_data_fossil6540644editdlrm
VCS_INFO_get_data_git100240644editdlrm
VCS_INFO_get_data_hg80980644editdlrm
VCS_INFO_get_data_mtn4100644editdlrm
VCS_INFO_get_data_p411080644editdlrm
VCS_INFO_get_data_svk7280644editdlrm
VCS_INFO_get_data_svn21130644editdlrm
VCS_INFO_get_data_tla4790644editdlrm
VCS_INFO_hexdump3730644editdlrm
VCS_INFO_hook16780644editdlrm
vcs_info_hookadd4500644editdlrm
vcs_info_hookdel8820644editdlrm
vcs_info_lastmsg4920644editdlrm
VCS_INFO_maxexports4780644editdlrm
VCS_INFO_nvcsformats4230644editdlrm
VCS_INFO_patch2subject29060644editdlrm
vcs_info_printsys12970644editdlrm
VCS_INFO_quilt56300644editdlrm
VCS_INFO_realpath2500644editdlrm
VCS_INFO_reposub3130644editdlrm
VCS_INFO_set8650644editdlrm
VCS_INFO_set-patch-format28590644editdlrm
vcs_info_setsys5980644editdlrm
vi-pipe10920644editdlrm
which-command10310644editdlrm
xtermctl41850644editdlrm
zargs89420644editdlrm
zcalc122020755editdlrm
zcalc-auto-insert2670644editdlrm
zed29540755editdlrm
zed-set-file-name1450644editdlrm
zfanon19040644editdlrm
zfautocheck13180644editdlrm
zfcd19330644editdlrm
zfcd_match14020644editdlrm
zfcget20590644editdlrm
zfclose900644editdlrm
zfcput24590644editdlrm
zfdir33020644editdlrm
zffcache6620644editdlrm
zfgcp19540644editdlrm
zfget17750644editdlrm
zfget_match15320644editdlrm
zfgoto22500644editdlrm
zfhere1810644editdlrm
zfinit25500644editdlrm
zfls2080644editdlrm
zfmark14420644editdlrm
zfopen11860644editdlrm
zfparams6870644editdlrm
zfpcp13000644editdlrm
zfput14440644editdlrm
zfrglob21440644editdlrm
zfrtime13620644editdlrm
zfsession16440644editdlrm
zfstat20240644editdlrm
zftp_chpwd13860644editdlrm
zftp_progress20810644editdlrm
zftransfer15620644editdlrm
zftype5530644editdlrm
zfuget38980644editdlrm
zfuput26560644editdlrm
zkbd72880755editdlrm
zmathfunc5800644editdlrm
zmathfuncdef22790644editdlrm
zmv114030644editdlrm
zrecompile61840644editdlrm
zsh-mime-contexts4910644editdlrm
zsh-mime-handler91920644editdlrm
zsh-mime-setup113610644editdlrm
zsh-newuser-install300470644editdlrm
zsh_directory_name_cdr5270644editdlrm
zsh_directory_name_generic41760644editdlrm
zstyle+12670644editdlrm
ztodo14050644editdlrm
_a2ps28000644editdlrm
_a2utils4900644editdlrm
_aap26380644editdlrm
_absolute_command_paths10220644editdlrm
_acpi12720644editdlrm
_acpitool24350644editdlrm
_acroread35010644editdlrm
_adb149000644editdlrm
_add-zle-hook-widget9420644editdlrm
_add-zsh-hook6480644editdlrm
_alias7110644editdlrm
_aliases7080644editdlrm
_all_labels9200644editdlrm
_all_matches9700644editdlrm
_alternative19500644editdlrm
_analyseplugin6470644editdlrm
_ansible113770644editdlrm
_ant61760644editdlrm
_antiword11090644editdlrm
_apachectl1160644editdlrm
_apm16800644editdlrm
_approximate34720644editdlrm
_apt257470644editdlrm
_apt-file20050644editdlrm
_apt-move18630644editdlrm
_apt-show-versions7500644editdlrm
_aptitude42970644editdlrm
_arch_archives4130644editdlrm
_arch_namespace33080644editdlrm
_arguments175010644editdlrm
_arg_compile75690644editdlrm
_arp31960644editdlrm
_arping21610644editdlrm
_arrays840644editdlrm
_assign640644editdlrm
_at10360644editdlrm
_attr31760644editdlrm
_augeas25730644editdlrm
_auto-apt10810644editdlrm
_autocd850644editdlrm
_awk46300644editdlrm
_axi-cache8720644editdlrm
_basename7670644editdlrm
_bash_completions13580644editdlrm
_baudrates24880644editdlrm
_baz160190644editdlrm
_beadm20460644editdlrm
_beep16250644editdlrm
_be_name3410644editdlrm
_bibtex1600644editdlrm
_bindkey19940644editdlrm
_bind_addresses4160644editdlrm
_bison9230644editdlrm
_bittorrent48780644editdlrm
_bogofilter52480644editdlrm
_bpf_filters78590644editdlrm
_bpython12800644editdlrm
_brace_parameter57720644editdlrm
_brctl19260644editdlrm
_bsdconfig23850644editdlrm
_bsdinstall19340644editdlrm
_bsd_pkg88560644editdlrm
_btrfs117720644editdlrm
_bts96080644editdlrm
_bug48790644editdlrm
_builtin1780644editdlrm
_bzip222220644editdlrm
_bzr114340644editdlrm
_cabal2920644editdlrm
_cache_invalid7070644editdlrm
_caffeinate3950644editdlrm
_cal5470644editdlrm
_calendar14060644editdlrm
_call_function7370644editdlrm
_call_program8530644editdlrm
_canonical_paths36770644editdlrm
_cat21090644editdlrm
_ccal7780644editdlrm
_cd40840644editdlrm
_cdbs-edit-patch560644editdlrm
_cdcd21420644editdlrm
_cdr11970644editdlrm
_cdrdao81380644editdlrm
_cdrecord48620644editdlrm
_chattr10190644editdlrm
_chflags5740644editdlrm
_chkconfig7770644editdlrm
_chmod25030644editdlrm
_chown33080644editdlrm
_chrt25550644editdlrm
_chsh20120644editdlrm
_cksum19620644editdlrm
_clay17680644editdlrm
_cmdambivalent3910644editdlrm
_cmdstring1020644editdlrm
_cmp10780644editdlrm
_code23730644editdlrm
_column29150644editdlrm
_combination25000644editdlrm
_comm8160644editdlrm
_command3790644editdlrm
_command_names12500644editdlrm
_compadd22720644editdlrm
_compdef19630644editdlrm
_complete31670644editdlrm
_completers4000644editdlrm
_complete_debug10170644editdlrm
_complete_help26550644editdlrm
_complete_help_generic4120644editdlrm
_complete_tag20260644editdlrm
_compress14140644editdlrm
_comp_locale5720644editdlrm
_condition17790644editdlrm
_configure4440644editdlrm
_coreadm14860644editdlrm
_correct5180644editdlrm
_correct_filename19730644editdlrm
_correct_word3880644editdlrm
_cowsay9040644editdlrm
_cp41660644editdlrm
_cpio45890644editdlrm
_cplay3430644editdlrm
_cpupower42230644editdlrm
_cryptsetup66100644editdlrm
_cscope15940644editdlrm
_cssh7950644editdlrm
_csup11280644editdlrm
_ctags_tags1700644editdlrm
_cu6060644editdlrm
_curl2240644editdlrm
_cut23650644editdlrm
_cvs289970644editdlrm
_cvsup9370644editdlrm
_cygcheck20520644editdlrm
_cygpath26130644editdlrm
_cygrunsrv27720644editdlrm
_cygserver15390644editdlrm
_cygstart21780644editdlrm
_dak89730644editdlrm
_darcs12110644editdlrm
_date30610644editdlrm
_dates40660644editdlrm
_date_formats28000644editdlrm
_dbus35660644editdlrm
_dchroot11270644editdlrm
_dchroot-dsa10490644editdlrm
_dconf17870644editdlrm
_dcop29450644editdlrm
_dcut50530644editdlrm
_dd8160644editdlrm
_debbugs_bugnumber3880644editdlrm
_debchange50410644editdlrm
_debcheckout11980644editdlrm
_debdiff9060644editdlrm
_debfoster32200644editdlrm
_deborphan23460644editdlrm
_debsign6230644editdlrm
_deb_architectures3160644editdlrm
_deb_codenames3470644editdlrm
_deb_packages44090644editdlrm
_default6820644editdlrm
_defaults17260644editdlrm
_delimiters3300644editdlrm
_describe37010644editdlrm
_description30540644editdlrm
_devtodo46690644editdlrm
_df29360644editdlrm
_dhclient30440644editdlrm
_dhcpinfo12030644editdlrm
_dict21410644editdlrm
_dict_words12920644editdlrm
_diff900644editdlrm
_diffstat17560644editdlrm
_diff_options96750644editdlrm
_dig46070644editdlrm
_directories1300644editdlrm
_directory_stack14210644editdlrm
_dirs2620644editdlrm
_dir_list6800644editdlrm
_disable6830644editdlrm
_dispatch20570644editdlrm
_django60550644editdlrm
_dladm281500644editdlrm
_dlocate8930644editdlrm
_dmesg6380644editdlrm
_dmidecode13410644editdlrm
_dnf63440644editdlrm
_dns_types3310644editdlrm
_doas6560644editdlrm
_domains5850644editdlrm
_dpatch-edit-patch12750644editdlrm
_dpkg80840644editdlrm
_dpkg-buildpackage11410644editdlrm
_dpkg-cross11470644editdlrm
_dpkg-repack3210644editdlrm
_dpkg_source13180644editdlrm
_dput21530644editdlrm
_drill19580644editdlrm
_dsh17420644editdlrm
_dtrace21240644editdlrm
_du45880644editdlrm
_dumpadm8660644editdlrm
_dumper3770644editdlrm
_dupload7800644editdlrm
_dvi40410644editdlrm
_dynamic_directory_name3780644editdlrm
_ecasound85300644editdlrm
_echotc930644editdlrm
_echoti940644editdlrm
_elfdump13180644editdlrm
_elinks29580644editdlrm
_elm6530644editdlrm
_email_addresses56280644editdlrm
_emulate2740644editdlrm
_enable6920644editdlrm
_enscript76310644editdlrm
_entr5920644editdlrm
_env12100644editdlrm
_equal330644editdlrm
_espeak21690644editdlrm
_etags21350644editdlrm
_ethtool115800644editdlrm
_evince16480644editdlrm
_expand71240644editdlrm
_expand_alias20720644editdlrm
_expand_word3070644editdlrm
_extensions10180644editdlrm
_external_pwds10630644editdlrm
_fakeroot4860644editdlrm
_fbsd_architectures1350644editdlrm
_fc30720644editdlrm
_feh70110644editdlrm
_fetch32360644editdlrm
_fetchmail5540644editdlrm
_ffmpeg80230644editdlrm
_figlet15030644editdlrm
_files37780644editdlrm
_file_descriptors14740644editdlrm
_file_flags15290644editdlrm
_file_modes8620644editdlrm
_file_systems12630644editdlrm
_find55270644editdlrm
_find_net_interfaces13340644editdlrm
_finger21570644editdlrm
_fink53970644editdlrm
_first16310644editdlrm
_flac59180644editdlrm
_flasher16600644editdlrm
_flex31560644editdlrm
_floppy1100644editdlrm
_flowadm27540644editdlrm
_fmadm28720644editdlrm
_fmt19750644editdlrm
_fold7130644editdlrm
_fortune6010644editdlrm
_freebsd-update11440644editdlrm
_fsh5460644editdlrm
_fstat5340644editdlrm
_functions2330644editdlrm
_fuser25030644editdlrm
_fusermount6600644editdlrm
_fuse_arguments10780644editdlrm
_fuse_values16480644editdlrm
_fw_update2940644editdlrm
_gcc779700644editdlrm
_gcore14220644editdlrm
_gdb15890644editdlrm
_gem132260644editdlrm
_generic3280644editdlrm
_genisoimage20060644editdlrm
_getclip5320644editdlrm
_getconf22130644editdlrm
_getent17780644editdlrm
_getfacl15860644editdlrm
_getmail10800644editdlrm
_getopt11820644editdlrm
_git3479510644editdlrm
_git-buildpackage26320644editdlrm
_global31870644editdlrm
_global_tags1860644editdlrm
_globflags11090644editdlrm
_globquals67030644editdlrm
_globqual_delims4660644editdlrm
_gnome-gv1390644editdlrm
_gnupod56990644editdlrm
_gnutls116300644editdlrm
_gnu_generic1780644editdlrm
_go2560644editdlrm
_gpasswd7010644editdlrm
_gpg121150644editdlrm
_gphoto251430644editdlrm
_gprof13370644editdlrm
_gqview6190644editdlrm
_gradle69800644editdlrm
_graphicsmagick289020644editdlrm
_grep59290644editdlrm
_grep-excuses3150644editdlrm
_groff22500644editdlrm
_groups10070644editdlrm
_growisofs196180644editdlrm
_gs16180644editdlrm
_gsettings13490644editdlrm
_gstat4570644editdlrm
_guard1690644editdlrm
_guilt15520644editdlrm
_gv13490644editdlrm
_gzip42700644editdlrm
_hash11280644editdlrm
_have_glob_qual9100644editdlrm
_hdiutil225480644editdlrm
_head16880644editdlrm
_hexdump13290644editdlrm
_hg310460644editdlrm
_history14740644editdlrm
_history_complete_word34510644editdlrm
_history_modifiers20370644editdlrm
_hosts30000644editdlrm
_htop6400644editdlrm
_hwinfo19170644editdlrm
_iconv28610644editdlrm
_iconvconfig5080644editdlrm
_id18860644editdlrm
_ifconfig28800644editdlrm
_iftop9180644editdlrm
_ignored16470644editdlrm
_imagemagick281430644editdlrm
_inetadm4060644editdlrm
_initctl63300644editdlrm
_init_d31320644editdlrm
_install45060644editdlrm
_invoke-rc.d5550644editdlrm
_in_vared8130644editdlrm
_ionice11650644editdlrm
_iostat62580644editdlrm
_ip209300644editdlrm
_ipadm126080644editdlrm
_ipset61860644editdlrm
_iptables106020644editdlrm
_irssi13510644editdlrm
_ispell42100644editdlrm
_iwconfig23990644editdlrm
_jail24630644editdlrm
_jails7470644editdlrm
_java251940644editdlrm
_java_class6930644editdlrm
_jexec5440644editdlrm
_jls7050644editdlrm
_jobs19870644editdlrm
_jobs_bg270644editdlrm
_jobs_builtin3600644editdlrm
_jobs_fg310644editdlrm
_joe22410644editdlrm
_join11840644editdlrm
_jot25300644editdlrm
_jq21680644editdlrm
_kdeconnect19140644editdlrm
_kfmclient32670644editdlrm
_kill6780644editdlrm
_killall3650644editdlrm
_kld10270644editdlrm
_knock3040644editdlrm
_kpartx4460644editdlrm
_kvno6690644editdlrm
_last27560644editdlrm
_ldconfig25330644editdlrm
_ldd16490644editdlrm
_ld_debug11690644editdlrm
_less60580644editdlrm
_lha17510644editdlrm
_libvirt97630644editdlrm
_lighttpd4140644editdlrm
_limit1660644editdlrm
_limits1050644editdlrm
_links20910644editdlrm
_lintian47300644editdlrm
_list8220644editdlrm
_list_files14240644editdlrm
_lldb26020644editdlrm
_ln36540644editdlrm
_loadkeys5950644editdlrm
_locale28700644editdlrm
_localedef30910644editdlrm
_locales3490644editdlrm
_locate42510644editdlrm
_logical_volumes4550644editdlrm
_look9980644editdlrm
_losetup21240644editdlrm
_lp82810644editdlrm
_ls90510644editdlrm
_lsattr3350644editdlrm
_lsblk27320644editdlrm
_lscfg6580644editdlrm
_lsdev14270644editdlrm
_lslv3480644editdlrm
_lsof45530644editdlrm
_lspv4320644editdlrm
_lsusb11890644editdlrm
_lsvg5050644editdlrm
_ltrace22000644editdlrm
_lynx111660644editdlrm
_lzop39310644editdlrm
_mac_applications1390644editdlrm
_mac_files_for_application20000644editdlrm
_madison6440644editdlrm
_mail4670644editdlrm
_mailboxes60240644editdlrm
_main_complete109770644editdlrm
_make95270644editdlrm
_make-kpkg26570644editdlrm
_man43390644editdlrm
_match24290644editdlrm
_math4830644editdlrm
_math_params600644editdlrm
_matlab14340644editdlrm
_md5sum7370644editdlrm
_mdadm82160644editdlrm
_mdfind9910644editdlrm
_mdls4640644editdlrm
_mdutil7230644editdlrm
_members3900644editdlrm
_mencal10820644editdlrm
_menu5580644editdlrm
_mere570644editdlrm
_mergechanges1060644editdlrm
_message8400644editdlrm
_mh37640644editdlrm
_mii-tool8560644editdlrm
_mime_types11800644editdlrm
_mixerctl5760644editdlrm
_mkdir17190644editdlrm
_mkshortcut12740644editdlrm
_mktemp15490644editdlrm
_mkzsh3710644editdlrm
_module54780644editdlrm
_module-assistant20950644editdlrm
_module_math_func2210644editdlrm
_modutils50200644editdlrm
_mondo20010644editdlrm
_monotone23760644editdlrm
_moosic120270644editdlrm
_mosh17570644editdlrm
_most_recent_file8830644editdlrm
_mount392710644editdlrm
_mozilla47770644editdlrm
_mpc94110644editdlrm
_mplayer83500644editdlrm
_mt32120644editdlrm
_mtools40900644editdlrm
_mtr33220644editdlrm
_multi_parts83510644editdlrm
_mutt13830644editdlrm
_mv20210644editdlrm
_mysqldiff10570644editdlrm
_mysql_utils99790644editdlrm
_my_accounts450644editdlrm
_nautilus5380644editdlrm
_nbsd_architectures5020644editdlrm
_ncftp4290644editdlrm
_nedit28650644editdlrm
_netcat13210644editdlrm
_netscape29350644editdlrm
_netstat22760644editdlrm
_networkmanager89560644editdlrm
_net_interfaces2040644editdlrm
_newsgroups2100644editdlrm
_next_label6000644editdlrm
_next_tags34640644editdlrm
_ngrep17370644editdlrm
_nice2460644editdlrm
_nkf21460644editdlrm
_nl18720644editdlrm
_nm58260644editdlrm
_nmap34720644editdlrm
_normal10100644editdlrm
_nothing900644editdlrm
_notmuch22570644editdlrm
_npm1730644editdlrm
_nslookup56770644editdlrm
_numfmt15770644editdlrm
_nvram7930644editdlrm
_objdump104370644editdlrm
_object_classes1460644editdlrm
_object_files2170644editdlrm
_obsd_architectures1780644editdlrm
_od29740644editdlrm
_okular3320644editdlrm
_oldlist19150644editdlrm
_open11030644editdlrm
_openstack91920644editdlrm
_options1820644editdlrm
_options_set2990644editdlrm
_options_unset3090644editdlrm
_osascript9560644editdlrm
_osc41230644editdlrm
_other_accounts640644editdlrm
_otool22300644editdlrm
_pack3610644editdlrm
_parameter370644editdlrm
_parameters9750644editdlrm
_paste5750644editdlrm
_patch86760644editdlrm
_patchutils48580644editdlrm
_path_commands30560644editdlrm
_path_files279450644editdlrm
_pax27900644editdlrm
_pbcopy6140644editdlrm
_pbm258620644editdlrm
_pbuilder11000644editdlrm
_pdf4220644editdlrm
_pdftk13690644editdlrm
_perforce1028820644editdlrm
_perl53910644editdlrm
_perldoc23370644editdlrm
_perl_basepods7160644editdlrm
_perl_modules46780644editdlrm
_pfctl48910644editdlrm
_pfexec7510644editdlrm
_pgrep51430644editdlrm
_php31720644editdlrm
_physical_volumes1240644editdlrm
_pick_variant9180644editdlrm
_picocom21590644editdlrm
_pidof9240644editdlrm
_pids18350644editdlrm
_pine29450644editdlrm
_ping72660644editdlrm
_piuparts9760644editdlrm
_pkg-config31040644editdlrm
_pkg5124410644editdlrm
_pkgadd10120644editdlrm
_pkginfo6130644editdlrm
_pkgrm5510644editdlrm
_pkgtool24350644editdlrm
_pkg_instance3530644editdlrm
_plutil19000644editdlrm
_pon4430644editdlrm
_portaudit5630644editdlrm
_portlint7480644editdlrm
_portmaster39800644editdlrm
_ports2850644editdlrm
_portsnap10530644editdlrm
_postfix68160644editdlrm
_postscript3330644editdlrm
_powerd6280644editdlrm
_prcs68480644editdlrm
_precommand2050644editdlrm
_prefix16180644editdlrm
_print41450644editdlrm
_printenv1140644editdlrm
_printers32090644editdlrm
_procstat8980644editdlrm
_prompt2960644editdlrm
_prove25030644editdlrm
_prstat18310644editdlrm
_ps85420644editdlrm
_ps123457940644editdlrm
_pscp7160644editdlrm
_pspdf3340644editdlrm
_psutils37820644editdlrm
_ptree2090644editdlrm
_pump14410644editdlrm
_putclip5380644editdlrm
_pwgen15670644editdlrm
_pydoc8580644editdlrm
_python21600644editdlrm
_python_modules11140644editdlrm
_qdbus27480644editdlrm
_qemu26160644editdlrm
_qiv26470644editdlrm
_qtplay5250644editdlrm
_quilt88810644editdlrm
_raggle27400644editdlrm
_rake28490644editdlrm
_ranlib4030644editdlrm
_rar45740644editdlrm
_rcctl10440644editdlrm
_rcs7660644editdlrm
_rdesktop38000644editdlrm
_read9190644editdlrm
_readelf33100644editdlrm
_readshortcut10570644editdlrm
_read_comp38520644editdlrm
_rebootin7410644editdlrm
_redirect4210644editdlrm
_regex_arguments24960644editdlrm
_regex_words9360644editdlrm
_remote_files27190644editdlrm
_renice4240644editdlrm
_reprepro26390644editdlrm
_requested2680644editdlrm
_retrieve_cache7320644editdlrm
_retrieve_mac_apps33080644editdlrm
_ri37980644editdlrm
_rlogin18850644editdlrm
_rm20450644editdlrm
_route73870644editdlrm
_rpm113220644editdlrm
_rpmbuild33880644editdlrm
_rrdtool5910644editdlrm
_rsync137240644editdlrm
_rubber27260644editdlrm
_ruby57510644editdlrm
_run-help2090644editdlrm
_runit22030644editdlrm
_sablotron18030644editdlrm
_samba34360644editdlrm
_savecore2280644editdlrm
_say30310644editdlrm
_sccs61900644editdlrm
_sched4670644editdlrm
_schedtool9160644editdlrm
_schroot15990644editdlrm
_scl11230644editdlrm
_screen70730644editdlrm
_script24270644editdlrm
_scselect9410644editdlrm
_scutil20070644editdlrm
_sed21720644editdlrm
_sep_parts37970644editdlrm
_seq9300644editdlrm
_sequence13160644editdlrm
_service12150644editdlrm
_services9510644editdlrm
_set14730644editdlrm
_setfacl20490644editdlrm
_setopt5710644editdlrm
_setup22460644editdlrm
_setxkbmap24340644editdlrm
_set_command8150644editdlrm
_sh2900644editdlrm
_showmount4280644editdlrm
_shutdown20470644editdlrm
_signals11010644editdlrm
_signify12270644editdlrm
_sisu39380644editdlrm
_slrn11310644editdlrm
_smartmontools45060644editdlrm
_smit8560644editdlrm
_snoop14850644editdlrm
_socket10890644editdlrm
_sockstat11140644editdlrm
_softwareupdate23320644editdlrm
_sort37280644editdlrm
_source2260644editdlrm
_spamassassin4750644editdlrm
_split28720644editdlrm
_sqlite21900644editdlrm
_sqsh21590644editdlrm
_ss47750644editdlrm
_ssh276750644editdlrm
_sshfs24930644editdlrm
_ssh_hosts11010644editdlrm
_stat12800644editdlrm
_stdbuf6740644editdlrm
_stgit12930644editdlrm
_store_cache19290644editdlrm
_strace53610644editdlrm
_strftime2790644editdlrm
_strings24740644editdlrm
_strip28960644editdlrm
_stty7760644editdlrm
_su26900644editdlrm
_sublimetext6050644editdlrm
_subscript43260644editdlrm
_subversion165810644editdlrm
_sub_commands1360644editdlrm
_sudo32950644editdlrm
_suffix_alias_files5250644editdlrm
_surfraw181420644editdlrm
_SUSEconfig2790644editdlrm
_svcadm18300644editdlrm
_svccfg21180644editdlrm
_svcprop7930644editdlrm
_svcs11450644editdlrm
_svcs_fmri28970644editdlrm
_svn-buildpackage25830644editdlrm
_swaks19170644editdlrm
_swift59550644editdlrm
_sw_vers1860644editdlrm
_sysctl24580644editdlrm
_sysrc29710644editdlrm
_sysstat61520644editdlrm
_systat28810644editdlrm
_system_profiler13110644editdlrm
_sys_calls5450644editdlrm
_tags14660644editdlrm
_tail29250644editdlrm
_tar64860644editdlrm
_tardy6780644editdlrm
_tar_archive10270644editdlrm
_tcpdump85760644editdlrm
_tcpsys9250644editdlrm
_tcptraceroute5830644editdlrm
_telnet29130644editdlrm
_terminals2300644editdlrm
_tex19670644editdlrm
_texi1290644editdlrm
_texinfo165090644editdlrm
_tidy37200644editdlrm
_tiff72300644editdlrm
_tilde7320644editdlrm
_tilde_files7850644editdlrm
_timeout8150644editdlrm
_time_zone2220644editdlrm
_tin21960644editdlrm
_tla179990644editdlrm
_tmux552980644editdlrm
_todo.sh45910644editdlrm
_toilet8630644editdlrm
_toolchain-source3280644editdlrm
_top69110644editdlrm
_topgit1770644editdlrm
_totd2870644editdlrm
_touch15620644editdlrm
_tpb9750644editdlrm
_tpconfig11200644editdlrm
_tput4880644editdlrm
_tr15070644editdlrm
_tracepath3200644editdlrm
_trap1010644editdlrm
_tree27950644editdlrm
_truss31210644editdlrm
_ttyctl1130644editdlrm
_ttys4740644editdlrm
_tune2fs22050644editdlrm
_twidge17050644editdlrm
_twisted13710644editdlrm
_typeset54900644editdlrm
_ulimit10200644editdlrm
_uml52610644editdlrm
_umountable14680644editdlrm
_unace4720644editdlrm
_uname30280644editdlrm
_unexpand11300644editdlrm
_unhash4000644editdlrm
_uniq15340644editdlrm
_unison55160644editdlrm
_units28150644editdlrm
_update-alternatives17710644editdlrm
_update-rc.d6370644editdlrm
_urls60500644editdlrm
_urpmi135700644editdlrm
_urxvt28290644editdlrm
_uscan10370644editdlrm
_users2400644editdlrm
_users_on2530644editdlrm
_user_admin62720644editdlrm
_user_at_host7290644editdlrm
_user_expand37640644editdlrm
_user_math_func1880644editdlrm
_uzbl3040644editdlrm
_valgrind50110644editdlrm
_value16430644editdlrm
_values38200644editdlrm
_vared4320644editdlrm
_vars5040644editdlrm
_vcsh23830644editdlrm
_vim57300644editdlrm
_vim-addons19090644editdlrm
_vmctl21680644editdlrm
_vmstat49060644editdlrm
_vnc41570644editdlrm
_volume_groups870644editdlrm
_vorbis56990644editdlrm
_vorbiscomment6170644editdlrm
_vserver30050644editdlrm
_vux18120644editdlrm
_w14040644editdlrm
_w3m45350644editdlrm
_wait660644editdlrm
_wajig25180644editdlrm
_wakeup_capable_devices4390644editdlrm
_wanna-build20700644editdlrm
_wanted1830644editdlrm
_watch2050644editdlrm
_watch-snoop4000644editdlrm
_wc7930644editdlrm
_webbrowser2100644editdlrm
_wget109520644editdlrm
_whereis360644editdlrm
_which11910644editdlrm
_who24170644editdlrm
_whois48390644editdlrm
_widgets1930644editdlrm
_wiggle11200644editdlrm
_wipefs13350644editdlrm
_wpa_cli8250644editdlrm
_xargs27380644editdlrm
_xauth25800644editdlrm
_xautolock6310644editdlrm
_xclip10520644editdlrm
_xdvi17040644editdlrm
_xfig19720644editdlrm
_xft_fonts13540644editdlrm
_xloadimage39020644editdlrm
_xmlsoft68320644editdlrm
_xmlstarlet74600644editdlrm
_xmms253870644editdlrm
_xmodmap22740644editdlrm
_xournal1260644editdlrm
_xpdf17590644editdlrm
_xrandr24570644editdlrm
_xscreensaver8230644editdlrm
_xset52000644editdlrm
_xterm9390644editdlrm
_xt_arguments17440644editdlrm
_xt_session_id400644editdlrm
_xv24840644editdlrm
_xwit47430644editdlrm
_xxd21270644editdlrm
_xz44130644editdlrm
_x_arguments6000644editdlrm
_x_borderwidth1250644editdlrm
_x_color10070644editdlrm
_x_colormapid3960644editdlrm
_x_cursor4090644editdlrm
_x_display750644editdlrm
_x_extension4840644editdlrm
_x_font2860644editdlrm
_x_geometry1250644editdlrm
_x_keysym6150644editdlrm
_x_locale1200644editdlrm
_x_modifier1530644editdlrm
_x_name1160644editdlrm
_x_resource1240644editdlrm
_x_selection_timeout1300644editdlrm
_x_title1180644editdlrm
_x_utils64200644editdlrm
_x_visual2720644editdlrm
_x_window4020644editdlrm
_yafc18270644editdlrm
_yast6500644editdlrm
_yodl6580644editdlrm
_yp32580644editdlrm
_yum172930644editdlrm
_zargs20560644editdlrm
_zattr5970644editdlrm
_zcalc2170644editdlrm
_zcalc_line17420644editdlrm
_zcat1090644editdlrm
_zcompile9270644editdlrm
_zdump1120644editdlrm
_zed2030644editdlrm
_zfs181880644editdlrm
_zfs_dataset27570644editdlrm
_zfs_keysource_props4080644editdlrm
_zfs_pool510644editdlrm
_zftp25820644editdlrm
_zip97260644editdlrm
_zle27710644editdlrm
_zlogin4720644editdlrm
_zmodload28410644editdlrm
_zmv8050644editdlrm
_zoneadm40610644editdlrm
_zones2560644editdlrm
_zpool94920644editdlrm
_zpty20840644editdlrm
_zsh5900644editdlrm
_zsh-mime-handler7190644editdlrm
_zsocket3840644editdlrm
_zstyle195080644editdlrm
_ztodo5860644editdlrm
_zypper60930644editdlrm
Edit: /usr/share/zsh/5.5.1/functions/_path_files (27945B)
#autoload local -a match mbegin mend # Look for glob qualifiers. Do this first: if we're really # in a glob qualifier, we don't actually want to expand # the earlier part of the path. We can't expand inside # parentheses otherwise, so as we test that successfully # we should be able to commit to glob qualifiers here. # # Extra nastiness to be careful about a quoted parenthesis. # The initial tests look for parentheses with zero or an # even number of backslashes in front. We also require that # there was at least one character before the parenthesis for # a bare glob qualifier. # The later test looks for an outstanding quote. if _have_glob_qual $PREFIX; then local ret=1 compset -p ${#match[1]} compset -S '[^\)\|\~]#(|\))' if [[ $_comp_caller_options[extendedglob] == on ]] && compset -P '\#'; then _globflags && ret=0 else if [[ $_comp_caller_options[extendedglob] == on ]]; then local -a flags flags=( '#:introduce glob flag' ) _describe -t globflags "glob flag" flags -Q -S '' && ret=0 fi _globquals && ret=0 fi return ret fi # Utility function for in-path completion. This allows `/u/l/b' # to complete to `/usr/local/bin'. local linepath realpath donepath prepath testpath exppath skips skipped local tmp1 tmp2 tmp3 tmp4 i orig eorig pre suf tpre tsuf opre osuf cpre local pats haspats ignore pfx pfxsfx sopt gopt opt sdirs ignpar cfopt listsfx local nm=$compstate[nmatches] menu matcher mopts sort mid accex fake local listfiles listopts tmpdisp origtmp1 Uopt local accept_exact_dirs path_completion integer npathcheck local -a Mopts typeset -U prepaths exppaths exppaths=() # Get the options. zparseopts -a mopts \ 'P:=pfx' 'S:=pfxsfx' 'q=pfxsfx' 'r:=pfxsfx' 'R:=pfxsfx' \ 'W:=prepaths' 'F:=ignore' 'M+:=matcher' \ J+: V+: X+: 1 2 n 'f=tmp1' '/=tmp1' 'g+:-=tmp1' sopt="-${(@j::M)${(@)tmp1#-}#?}" (( $tmp1[(I)-[/g]*] )) && haspats=yes (( $tmp1[(I)-g*] )) && gopt=yes if (( $tmp1[(I)-/] )); then pats="${(@)${(@M)tmp1:#-g*}#-g}" pats=( '*(-/)' ${${(z):-x $pats}[2,-1]} ) else pats="${(@)${(@M)tmp1:#-g*}#-g}" pats=( ${${(z):-x $pats}[2,-1]} ) fi pats=( "${(@)pats:# #}" ) if (( $#pfx )); then compset -P "${(b)pfx[2]}" || pfxsfx=( "$pfx[@]" "$pfxsfx[@]" ) fi if (( $#prepaths )); then tmp1="${prepaths[2]}" if [[ "$tmp1[1]" = '(' ]]; then prepaths=( ${^=tmp1[2,-2]%/}/ ) elif [[ "$tmp1[1]" = '/' ]]; then prepaths=( "${tmp1%/}/" ) else prepaths=( ${(P)^tmp1%/}/ ) (( ! $#prepaths )) && prepaths=( ${tmp1%/}/ ) fi (( ! $#prepaths )) && prepaths=( '' ) else prepaths=( '' ) fi if (( $#ignore )); then if [[ "${ignore[2]}" = \(* ]]; then ignore=( ${=ignore[2][2,-2]} ) else ignore=( ${(P)ignore[2]} ) fi fi # If we were given no file selection option, we behave as if we were given # a `-f'. if [[ "$sopt" = -(f|) ]]; then if [[ -z "$gopt" ]]; then sopt='-f' pats=('*') else unset sopt fi fi if (( ! $mopts[(I)-[JVX]] )); then local expl if [[ -z "$gopt" && "$sopt" = -/ ]]; then _description directories expl directory else _description files expl file fi tmp1=$expl[(I)-M*] if (( tmp1 )); then if (( $#matcher )); then matcher[2]="$matcher[2] $expl[1+tmp1]" else matcher=(-M "$expl[1+tmp1]") fi fi mopts=( "$mopts[@]" "$expl[@]" ) fi # If given no `-F' option, we may want to use $fignore, turned into patterns. [[ -z "$_comp_no_ignore" && $#ignore -eq 0 && ( -z $gopt || "$pats" = \ #\*\ # ) && -n $FIGNORE ]] && ignore=( "?*${^fignore[@]}" ) if (( $#ignore )); then _comp_ignore=( "$_comp_ignore[@]" "$ignore[@]" ) (( $mopts[(I)-F] )) || mopts=( "$mopts[@]" -F _comp_ignore ) fi if [[ $#matcher -eq 0 && -o nocaseglob ]]; then # If globbing is case insensitive and there's no matcher, # do case-insensitive matching. matcher=( -M 'm:{a-zA-Z}={A-Za-z}' ) fi if (( $#matcher )); then # Add the current matcher to the options to compadd. mopts=( "$mopts[@]" "$matcher[@]" ) fi if zstyle -s ":completion:${curcontext}:" file-sort tmp1; then case "$tmp1" in *size*) sort=oL;; *links*) sort=ol;; *(time|date|modi)*) sort=om;; *access*) sort=oa;; *(inode|change)*) sort=oc;; *) sort=on;; esac [[ "$tmp1" = *rev* ]] && sort[1]=O [[ "$tmp1" = *follow* ]] && sort="-${sort}-" if [[ "$sort" = on ]]; then sort= else mopts=( "${(@)mopts/#-J/-V}" ) tmp2=() for tmp1 in "$pats[@]"; do if _have_glob_qual "$tmp1" complete; then # unbalanced parenthesis is correct: match[1] contains the start, # match[5] doesn't contain the end. tmp2+=( "${match[1]}#q${sort})(${match[5]})" ) else tmp2+=( "${tmp1}(${sort})" ) fi done pats=( "$tmp2[@]" ) fi fi # Check if we have to skip over sequences of slashes. The value of $skips # is used below to match the pathname components we always have to accept # immediately. if zstyle -t ":completion:${curcontext}:paths" squeeze-slashes; then skips='((.|..|)/)##' else skips='((.|..)/)##' fi zstyle -s ":completion:${curcontext}:paths" special-dirs sdirs zstyle -t ":completion:${curcontext}:paths" list-suffixes && listsfx=yes [[ "$pats" = ((|*[[:blank:]])\*(|[[:blank:]]*|\([^[:blank:]]##\))|*\([^[:blank:]]#/[^[:blank:]]#\)*) ]] && sopt=$sopt/ zstyle -a ":completion:${curcontext}:paths" accept-exact accex zstyle -a ":completion:${curcontext}:" fake-files fake zstyle -s ":completion:${curcontext}:" ignore-parents ignpar zstyle -t ":completion:${curcontext}:paths" accept-exact-dirs && accept_exact_dirs=1 zstyle -T ":completion:${curcontext}:paths" path-completion && path_completion=1 if [[ -n "$compstate[pattern_match]" ]]; then if { [[ -z "$SUFFIX" ]] && _have_glob_qual "$PREFIX" complete; } || _have_glob_qual "$SUFFIX" complete; then # Copy all glob qualifiers from the line to # the patterns used when generating matches tmp3=${match[5]} if [[ -n "$SUFFIX" ]]; then SUFFIX=${match[2]} else PREFIX=${match[2]} fi tmp2=() for tmp1 in "$pats[@]"; do if _have_glob_qual "$tmp1" complete; then # unbalanced parenthesis is correct: match[1] contains the start, # match[5] doesn't contain the end. tmp2+=( "${match[1]}${tmp3}${match[5]})") else tmp2+=( "${tmp1}(${tmp3})" ) fi done pats=( "$tmp2[@]" ) fi fi # We get the prefix and the suffix from the line and save the whole # original string. Then we see if we will do menu completion. pre="$PREFIX" suf="$SUFFIX" opre="$PREFIX" osuf="$SUFFIX" orig="${PREFIX}${SUFFIX}" eorig="$orig" [[ $compstate[insert] = (*menu|[0-9]*) || -n "$_comp_correct" || ( -n "$compstate[pattern_match]" && "${orig#\~}" != (|*[^\\])[][*?#~^\|\<\>]* ) ]] && menu=yes if [[ -n "$_comp_correct" ]]; then cfopt=- Uopt=-U else Mopts=(-M "r:|/=* r:|=*") fi # Now let's have a closer look at the string to complete. if [[ "$pre" = [^][*?#^\|\<\>\\]#(\`[^\`]#\`|\$)*/* && "$compstate[quote]" != \' ]]; then # If there is a parameter expansion in the word from the line, we try # to complete the beast by expanding the prefix and completing anything # after the first slash after the parameter expansion. # This fails for things like `f/$foo/b/' where the first `f' is # meant as a partial path. linepath="${(M)pre##*\$[^/]##/}" function { # do not treat an unset parameter expansion as the empty string setopt localoptions nounset eval 'realpath=${(e)~linepath}' 2>/dev/null } [[ -z "$realpath" || "$realpath" = "$linepath" ]] && return 1 pre="${pre#${linepath}}" i='[^/]' i="${#linepath//$i}" orig="${orig[1,(in:i:)/][1,-2]}" donepath= prepaths=( '' ) elif [[ "$pre[1]" = \~ && "$compstate[quote]" = (|\`) ]]; then # It begins with `~', so remember anything before the first slash to be able # to report it to the completion code. Also get an expanded version of it # (in `realpath'), so that we can generate the matches. Then remove that # prefix from the string to complete, set `donepath' to build the correct # paths and make sure that the loop below is run only once with an empty # prefix path by setting `prepaths'. linepath="${pre[2,-1]%%/*}" if [[ -z "$linepath" ]]; then realpath="${HOME%/}/" elif [[ "$linepath" = ([-+]|)[0-9]## ]]; then if [[ "$linepath" != [-+]* ]]; then tmp1="$linepath" else if [[ "$linepath" = -* ]]; then tmp1=$(( $#dirstack $linepath )) else tmp1=$linepath[2,-1] fi [[ -o pushdminus ]] && tmp1=$(( $#dirstack - $tmp1 )) fi if (( ! tmp1 )); then realpath=$PWD/ elif [[ tmp1 -le $#dirstack ]]; then realpath=$dirstack[tmp1]/ else _message 'not enough directory stack entries' return 1 fi elif [[ "$linepath" = [-+] ]]; then realpath=${~:-\~$linepath}/ else eval "realpath=~${linepath}/" 2>/dev/null if [[ -z "$realpath" ]]; then _message "unknown user \`$linepath'" return 1 fi fi linepath="~${linepath}/" [[ "$realpath" = "$linepath" ]] && return 1 pre="${pre#*/}" orig="${orig#*/}" donepath= prepaths=( '' ) else # If the string does not start with a `~' we don't remove a prefix from the # string. linepath= realpath= if zstyle -s ":completion:${curcontext}:" preserve-prefix tmp1 && [[ -n "$tmp1" && "$pre" = (#b)(${~tmp1})* ]]; then pre="$pre[${#match[1]}+1,-1]" orig="$orig[${#match[1]}+1,-1]" donepath="$match[1]" prepaths=( '' ) elif [[ "$pre[1]" = / ]]; then # If it is a absolute path name, we remove the first slash and put it in # `donepath' meaning that we treat it as the path that was already handled. # Also, we don't use the paths from `-W'. pre="$pre[2,-1]" orig="$orig[2,-1]" donepath='/' prepaths=( '' ) else # The common case, we just use the string as it is, unless it begins with # `./' or `../' in which case we don't use the paths from `-W'. [[ "$pre" = (.|..)/* ]] && prepaths=( '' ) donepath= fi fi # Now we generate the matches. First we loop over all prefix paths given # with the `-W' option. for prepath in "$prepaths[@]"; do # Get local copies of the prefix, suffix, and the prefix path to use # in the following loop, which walks through the pathname components # in the string from the line. skipped= cpre= if [[ ( -n $accept_exact_dirs || -z $path_completion ) && \ ${pre} = (#b)(*)/([^/]#) ]]; then # We've been told either that we can accept an exact directory prefix # immediately, or that path expansion is inhibited. Try the longest # path prefix first: in the first case, this saves stats in the simple # case and may get around automount behaviour if early components don't # yet exist, and in the second case this is the prefix we want to keep. # # Explanation of substitution: For tmp1 and tpre, which are used further # on, we need to remove quotes from everything that's not a pattern # character, because the code that does the file generation only # strips quotes from pattern characters (you know better than # to ask why). tmp1=${match[1]} tpre=${match[2]} tmp2=$tmp1 tmp1=${tmp1//(#b)\\(?)/$match[1]} tpre=${tpre//(#b)\\([^\\\]\[\^\~\(\)\#\*\?])/$match[1]} # Theory: donepath needs the quoting of special characters # still in it. However, we need it without at this point. # (I think.) Note this is different from the above where we're # doing something a bit different. tmp3=${donepath//(#b)\\(?)/$match[1]} while true; do if [[ -z $path_completion || -d $prepath$realpath$tmp3$tmp2 ]]; then tmp3=$tmp3$tmp1/ # Now put donepath back the way it should be. (I think.) donepath=${tmp3//(#b)([\\\]\[\^\~\(\)\#\*\?])/\\$match[1]} pre=$tpre break elif [[ $tmp1 = (#b)(*)/([^/]#) ]]; then tmp1=$match[1] tpre=$match[2]/$tpre else break fi done fi tpre="$pre" tsuf="$suf" # Now we strip quoting from pattern characters, too, because # testpath is used as a literal string. I suppose we could # alternatively use ${~testpath} later. # # I'm not sure if donepath itself should be entirely unquoted at # some point but probably not here, since we need the quoted pattern # characters in tmp1 below (I think). testpath="${donepath//(#b)\\([\\\]\[\^\~\(\)\#\*\?])/$match[1]}" tmp2="${(M)tpre##${~skips}}" tpre="${tpre#$tmp2}" tmp1=( "$prepath$realpath$donepath$tmp2" ) # count of attemps for pws non-canonical hack (( npathcheck = 0 )) while true; do origtmp1=("${tmp1[@]}") # Get the prefix and suffix for matching. if [[ "$tpre" = */* ]]; then PREFIX="${tpre%%/*}" SUFFIX= else PREFIX="${tpre}" SUFFIX="${tsuf%%/*}" fi # Force auto-mounting. There might be a better way... # Commented out in the hope that `pws non-canonical hack' # down below does this for us. Can be uncommented if it # doesn't. # : ${^tmp1}/${PREFIX}${SUFFIX}/.(/) # Get the matching files by globbing. tmp2=( "$tmp1[@]" ) if [[ "$tpre$tsuf" = (#b)*/(*) ]]; then # We are going to be looping over the leading path segments. # This means we should not apply special-dirs handling unless # the path tail is a fake directory that needs to be simulated, # and we should not apply pattern matching until we are looking # for files rather than for intermediate directories. if [[ -n "$fake${match[1]}" ]]; then compfiles -P$cfopt tmp1 accex "$skipped" "$_matcher $matcher[2]" "$sdirs" fake else compfiles -P$cfopt tmp1 accex "$skipped" "$_matcher $matcher[2]" '' fake fi elif [[ "$sopt" = *[/f]* ]]; then compfiles -p$cfopt tmp1 accex "$skipped" "$_matcher $matcher[2]" "$sdirs" fake "$pats[@]" else compfiles -p$cfopt tmp1 accex "$skipped" "$_matcher $matcher[2]" '' fake "$pats[@]" fi tmp1=( $~tmp1 ) 2> /dev/null if [[ -n "$PREFIX$SUFFIX" ]]; then # See which of them match what's on the line. # pws non-canonical hack which seems to work so far... # if we didn't match by globbing, check that there is # something to match by explicit name. This is for # `clever' filing systems where names pop into existence # when referenced. # # As suggested by Bart, to make sure the "compfiles" checks # still work we repeat the tests above if we successfully # find something that might need adding, but we make sure # we only do this once for completion of each path segment. if (( ! $#tmp1 && npathcheck == 0 )); then (( npathcheck = 1 )) for tmp3 in "$tmp2[@]"; do if [[ -n $tmp3 && $tmp3 != */ ]]; then tmp3+=/ fi if [[ -e "$tmp3${(Q)PREFIX}${(Q)SUFFIX}" ]] then (( npathcheck = 2 )) fi done if (( npathcheck == 2 )); then # repeat loop with same arguments tmp1=("$origtmp1[@]") continue fi fi if (( ! $#tmp1 )); then tmp2=( ${^${tmp2:#/}}/$PREFIX$SUFFIX ) elif [[ "$tmp1[1]" = */* ]]; then if [[ -n "$_comp_correct" ]]; then tmp2=( "$tmp1[@]" ) builtin compadd -D tmp1 "$matcher[@]" - "${(@)tmp1:t}" if [[ $#tmp1 -eq 0 ]]; then tmp1=( "$tmp2[@]" ) compadd -D tmp1 "$matcher[@]" - "${(@)tmp2:t}" fi else tmp2=( "$tmp1[@]" ) compadd -D tmp1 "$matcher[@]" - "${(@)tmp1:t}" fi else tmp2=( '' ) compadd -D tmp1 "$matcher[@]" -a tmp1 fi # If no file matches, save the expanded path and continue with # the outer loop. if (( ! $#tmp1 )); then if [[ "$tmp2[1]" = */* ]]; then tmp2=( "${(@)tmp2#${prepath}${realpath}}" ) if [[ "$tmp2[1]" = */* ]]; then tmp2=( "${(@)tmp2:h}" ) compquote tmp2 if [[ "$tmp2" = */ ]]; then exppaths=( "$exppaths[@]" ${^tmp2}${tpre}${tsuf} ) else exppaths=( "$exppaths[@]" ${^tmp2}/${tpre}${tsuf} ) fi elif [[ ${tpre}${tsuf} = */* ]]; then exppaths=( "$exppaths[@]" ${tpre}${tsuf} ) ### this once was in an `else' (not `elif') fi fi continue 2 fi elif (( ! $#tmp1 )); then # A little extra hack: if we were completing `foo/' and `foo' # contains no files, this will normally produce no matches and other # completers might think that's it's their time now. But if the next # completer is _correct or something like that, this will result in # an attempt to correct a valid directory name. So we just add the # original string in such a case so that the command line doesn't # change but other completers still think there are matches. # We do this only if we weren't given a `-g' or `-/' option because # otherwise this would keep `_files' from completing all filenames # if none of the patterns match. if [[ -z "$tpre$tsuf" && -n "$pre$suf" ]]; then pfxsfx=(-S '' "$pfxsfx[@]") ### Don't remember what the break was good for. We explicitly ### execute this only when there are no matches in the directory, ### so why continue? ### ### tmp1=( "$tmp2[@]" ) ### break elif [[ -n "$haspats" && -z "$tpre$tsuf$suf" && "$pre" = */ ]]; then PREFIX="${opre}" SUFFIX="${osuf}" compadd -nQS '' - "$linepath$donepath$orig" tmp4=- fi continue 2 fi if [[ -n "$ignpar" && -z "$_comp_no_ignore" && "$tpre$tsuf" != */* && $#tmp1 -ne 0 && ( "$ignpar" != *dir* || "$pats" = '*(-/)' ) && ( "$ignpar" != *..* || "$tmp1[1]" = *../* ) ]]; then compfiles -i tmp1 ignore "$ignpar" "$prepath$realpath$donepath" _comp_ignore+=( ${(@)ignore#$prepath$realpath$donepath} ) (( $#_comp_ignore && ! $mopts[(I)-F] )) && mopts=( "$mopts[@]" -F _comp_ignore ) fi # Step over to the next component, if any. if [[ "$tpre" = */* ]]; then tpre="${tpre#*/}" elif [[ "$tsuf" = */* ]]; then tpre="${tsuf#*/}" tsuf= else break fi # There are more components, so skip over the next components and make a # slash be added. #tmp1=( ${tmp1//(#b)([][()|*?^#~<>\\=])/\\${match[1]}} ) tmp2="${(M)tpre##${~skips}}" if [[ -n "$tmp2" ]]; then skipped="/$tmp2" tpre="${tpre#$tmp2}" else skipped=/ fi (( npathcheck = 0 )) done # The next loop searches the first ambiguous component. tmp3="$pre$suf" tpre="$pre" tsuf="$suf" if [[ -n "${prepath}${realpath}${testpath}" ]] then if [[ -o nocaseglob ]] then tmp1=( "${(@)tmp1#(#i)${prepath}${realpath}${testpath}}" ) else tmp1=( "${(@)tmp1#${prepath}${realpath}${testpath}}" ) fi fi while true; do # First we check if some of the files match the original string # for this component. If there are some we remove all other # names. This avoids having `foo' complete to `foo' and `foobar'. # The return value is non-zero if the component is ambiguous. compfiles -r tmp1 "${(Q)tmp3}" tmp4=$? if [[ "$tpre" = */* ]]; then tmp2="${cpre}${tpre%%/*}" PREFIX="${linepath}${donepath}${tmp2}" SUFFIX="/${tpre#*/}${tsuf#*/}" else tmp2="${cpre}${tpre}" PREFIX="${linepath}${donepath}${tmp2}" SUFFIX="${tsuf}" fi # This once tested `|| [[ -n "$compstate[pattern_match]" && # "$tmp2" = (|*[^\\])[][*?#~^\|\<\>]* ]]' but it should now be smart # enough to handle multiple components with patterns. if (( tmp4 )); then # The component we're checking is ambiguous. # For menu completion we now add the possible completions # for this component with the unambiguous prefix we have built # and the rest of the string from the line as the suffix. # For normal completion we add the rests of the filenames # collected as the suffixes to make the completion code expand # it as far as possible. tmp2="$testpath" if [[ -n "$linepath" ]]; then compquote -p tmp2 tmp1 elif [[ -n "$tmp2" ]]; then compquote -p tmp1 compquote tmp2 else compquote tmp1 tmp2 fi if [[ -z "$_comp_correct" && "$compstate[pattern_match]" = \* && -n "$listsfx" && "$tmp2" = (|*[^\\])[][*?#~^\|\<\>]* ]]; then PREFIX="$opre" SUFFIX="$osuf" fi # This once tested `-n $menu ||' but our menu-completion expert says # that's not what we want. if [[ -z "$compstate[insert]" ]] || { ! zstyle -t ":completion:${curcontext}:paths" expand suffix && [[ -z "$listsfx" && ( -n "$_comp_correct" || -z "$compstate[pattern_match]" || "$SUFFIX" != */* || "${SUFFIX#*/}" = (|*[^\\])[][*?#~^\|\<\>]* ) ]] }; then # We have not been told to insert the match, so we are # listing, or something. (( tmp4 )) && zstyle -t ":completion:${curcontext}:paths" ambiguous && compstate[to_end]= if [[ "$tmp3" = */* ]]; then if [[ -z "$listsfx" || "$tmp3" != */?* ]]; then # I think this means we are expanding some directory # back up the path. tmp1=("${(@)tmp1%%/*}") _list_files tmp1 "$prepath$realpath$testpath" compadd $Uopt -Qf "$mopts[@]" \ -p "${Uopt:+$IPREFIX}$linepath$tmp2" \ -s "/${tmp3#*/}${Uopt:+$ISUFFIX}" \ -W "$prepath$realpath$testpath" \ "$pfxsfx[@]" $Mopts \ $listopts \ -a tmp1 else # Same with a non-empty suffix tmp1=("${(@)^tmp1%%/*}/${tmp3#*/}") _list_files tmp1 "$prepath$realpath$testpath" compadd $Uopt -Qf "$mopts[@]" \ -p "${Uopt:+$IPREFIX}$linepath$tmp2" \ -s "${Uopt:+$ISUFFIX}" \ -W "$prepath$realpath$testpath" \ "$pfxsfx[@]" $Mopts \ $listopts \ -a tmp1 fi else _list_files tmp1 "$prepath$realpath$testpath" compadd $Uopt -Qf "$mopts[@]" -p "${Uopt:+$IPREFIX}$linepath$tmp2" \ -s "${Uopt:+$ISUFFIX}" \ -W "$prepath$realpath$testpath" \ "$pfxsfx[@]" $Mopts \ $listopts \ -a tmp1 fi else # We are inserting the match into the command line. if [[ "$tmp3" = */* ]]; then tmp4=( $Uopt -Qf "$mopts[@]" -p "${Uopt:+$IPREFIX}$linepath$tmp2" -W "$prepath$realpath$testpath" "$pfxsfx[@]" $Mopts ) if [[ -z "$listsfx" ]]; then for i in "$tmp1[@]"; do tmpdisp=("$i") _list_files tmpdisp "$prepath$realpath$testpath" compadd "$tmp4[@]" -s "${Uopt:+$ISUFFIX}" $listopts - "$tmpdisp" done else [[ -n "$compstate[pattern_match]" ]] && SUFFIX="${SUFFIX:s./.*/}*" for i in "$tmp1[@]"; do _list_files i "$prepath$realpath$testpath" compadd "$tmp4[@]" $listopts - "$i" done fi else _list_files tmp1 "$prepath$realpath$testpath" compadd $Uopt -Qf "$mopts[@]" -p "${Uopt:+$IPREFIX}$linepath$tmp2" \ -s "${Uopt:+$ISUFFIX}" \ -W "$prepath$realpath$testpath" \ "$pfxsfx[@]" $Mopts \ $listopts \ -a tmp1 fi fi tmp4=- # Found an ambiguity, stop the loop over components. break fi # If we have checked all components, we stop now and add the # strings collected after the loop. if [[ "$tmp3" != */* ]]; then tmp4= break fi # Otherwise we add the unambiguous component to `testpath' and # take it from the filenames. testpath="${testpath}${tmp1[1]%%/*}/" tmp3="${tmp3#*/}" if [[ "$tpre" = */* ]]; then if [[ -z "$_comp_correct" && -n "$compstate[pattern_match]" && "$tmp2" = (|*[^\\])[][*?#~^\|\<\>]* ]]; then cpre="${cpre}${tmp1[1]%%/*}/" else cpre="${cpre}${tpre%%/*}/" fi tpre="${tpre#*/}" elif [[ "$tsuf" = */* ]]; then [[ "$tsuf" != /* ]] && mid="$testpath" if [[ -z "$_comp_correct" && -n "$compstate[pattern_match]" && "$tmp2" = (|*[^\\])[][*?#~^\|\<\>]* ]]; then cpre="${cpre}${tmp1[1]%%/*}/" else cpre="${cpre}${tpre}/" fi tpre="${tsuf#*/}" tsuf= else tpre= tsuf= fi tmp1=( "${(@)tmp1#*/}" ) done if [[ -z "$tmp4" ]]; then # I think this means it's finally time to add the matches, # now we've collected contributions from all components. if [[ "$mid" = */ ]]; then # This seems to mean we're completing in the middle of the # command line argument, i.e. not in the last component. # There are two cases, depending on whether this part of # the path itself has multiple directories or not. PREFIX="${opre}" SUFFIX="${osuf}" tmp4="${testpath#${mid}}" if [[ $mid = */*/* ]]; then # Multiple levels of directory involved. tmp3="${mid%/*/}" tmp2="${${mid%/}##*/}" if [[ -n "$linepath" ]]; then compquote -p tmp3 else compquote tmp3 fi compquote tmp4 tmp2 tmp1 for i in "$tmp1[@]"; do _list_files tmp2 "$prepath$realpath${mid%/*/}" compadd $Uopt -Qf "$mopts[@]" -p "${Uopt:+$IPREFIX}$linepath$tmp3/" \ -s "/$tmp4$i${Uopt:+$ISUFFIX}" \ -W "$prepath$realpath${mid%/*/}/" \ "$pfxsfx[@]" $Mopts $listopts - "$tmp2" done else # Simpler case with fewer directories: avoid double counting. tmp2="${${mid%/}##*/}" compquote tmp4 tmp2 tmp1 for i in "$tmp1[@]"; do _list_files tmp2 "$prepath$realpath${mid%/*/}" compadd $Uopt -Qf "$mopts[@]" -p "${Uopt:+$IPREFIX}$linepath" \ -s "/$tmp4$i${Uopt:+$ISUFFIX}" \ -W "$prepath$realpath" \ "$pfxsfx[@]" $Mopts $listopts - "$tmp2" done fi else # This would seem to be where we're completing the last # component of the path -- the normal one, in other words. if [[ "$osuf" = */* ]]; then PREFIX="${opre}${osuf}" SUFFIX= else PREFIX="${opre}" SUFFIX="${osuf}" fi tmp4="$testpath" if [[ -n "$linepath" ]]; then compquote -p tmp4 tmp1 elif [[ -n "$tmp4" ]]; then compquote -p tmp1 compquote tmp4 else compquote tmp4 tmp1 fi if [[ -z "$_comp_correct" && -n "$compstate[pattern_match]" && "${PREFIX#\~}$SUFFIX" = (|*[^\\])[][*?#~^\|\<\>]* ]]; then # Pattern match, we need to be clever with matchers. tmp1=("$linepath$tmp4${(@)^tmp1}") _list_files tmp1 "$prepath$realpath" compadd -Qf -W "$prepath$realpath" "$pfxsfx[@]" "$mopts[@]" \ -M "r:|/=* r:|=*" $listopts -a tmp1 else # Not a pattern match _list_files tmp1 "$prepath$realpath$testpath" compadd $Uopt -Qf -p "${Uopt:+$IPREFIX}$linepath$tmp4" \ -s "${Uopt:+$ISUFFIX}" \ -W "$prepath$realpath$testpath" \ "$pfxsfx[@]" "$mopts[@]" $Mopts $listopts -a tmp1 fi fi fi done # If we are configured to expand paths as far as possible and we collected # expanded paths that are different from the string on the line, we add # them as possible matches. Do that only if we are currently trying the # last entry in the matcher-list style, otherwise other match specs might # make the suffix that didn't match this time match in one of the following # attempts. if [[ _matcher_num -eq ${#_matchers} ]] && zstyle -t ":completion:${curcontext}:paths" expand prefix && [[ nm -eq compstate[nmatches] && $#exppaths -ne 0 && "$linepath$exppaths" != "$eorig" ]]; then PREFIX="${opre}" SUFFIX="${osuf}" compadd -Q "$mopts[@]" -S '' -M "r:|/=* r:|=*" -p "$linepath" -a exppaths fi [[ nm -ne compstate[nmatches] ]]