From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-1.1 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE autolearn=ham autolearn_force=no version=3.4.2 Received: from primenet.com.au (ns1.primenet.com.au [203.24.36.2]) by inbox.vuxu.org (OpenSMTPD) with ESMTP id f863ed9e for ; Wed, 10 Jul 2019 14:31:59 +0000 (UTC) Received: (qmail 12735 invoked by alias); 10 Jul 2019 14:31:54 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: List-Unsubscribe: X-Seq: 44505 Received: (qmail 23616 invoked by uid 1010); 10 Jul 2019 14:31:54 -0000 X-Qmail-Scanner-Diagnostics: from mailout1.w1.samsung.com by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.101.2/25503. spamassassin: 3.4.2. Clear:RC:0(210.118.77.11):SA:0(-7.0/5.0):. Processed in 1.81812 secs); 10 Jul 2019 14:31:54 -0000 X-Envelope-From: p.stephenson@samsung.com X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | Received-SPF: pass (ns1.primenet.com.au: SPF record at _spf.samsung.com designates 210.118.77.11 as permitted sender) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20190710143115euoutp01c0bf1d7d8ef29a0c0bdf216af5be928f~wEjHQBjrE2826628266euoutp01C DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1562769075; bh=0T6W3VhrB2O9kz6NSsXWPiFhzxog98aeSSZgJ2dRtTA=; h=Subject:From:To:Date:References:From; b=AsenkrPFBCBYjeMlGJ43Db8MPFRK7tNtDf2AaSpitH7xt5qcGpnm3pELp9cxLELbf zee2ppJ48R06K1OZ6srHNrqCBcSd7Entoolr5YAF5HMzJTCPZuMXa6XJgu71GSJDbt dYQvVGoe3+FT7vryTjl02DggyBP8pRfacYXrQwm0= X-AuditID: cbfec7f5-b75ff700000010e5-63-5d25f6b21a48 Message-ID: <1562769073.6491.10.camel@samsung.com> Subject: PATCH: zsh_directiory_name_generic fix From: Peter Stephenson To: Zsh Hackers' List Date: Wed, 10 Jul 2019 15:31:13 +0100 X-Mailer: Evolution 3.18.5.2-0ubuntu3.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrLIsWRmVeSWpSXmKPExsWy7djP87qbvqnGGnw9YW1xsPkhkwOjx6qD H5gCGKO4bFJSczLLUov07RK4MjbeNi94I1jRsGE+ewPjaf4uRk4OCQETiQcHtjN1MXJxCAms YJSYMm0zG4TTxySx4+xFVginl0li/dUJTDAt1w7thWpZziix/+wxdriqDwseM0I4Zxgl+t6u gOq/wChxf/oDRpB+XgEjic2TdrB0MXJwCAvoSyx/lAUSZhMwlJi6aTYjSFhEQFui/aMYSJhF QFVi4vSHUJs1JDbcPMYEMUVQ4uTMJywgNrOAvETz1tnMIKskBM6wSbQc7mGDaHCRaD48hxXC FpZ4dXwLO4QtI3F6cg8LREM7o8SaSa/ZIZweRolNR+8wQlRZS/Tdvgh2EbOApsT6XfoQYUeJ q8d3MIGEJQT4JG68FYQ4gk9i0rbpzBBhXomONiGIajWJHU1bGSHCMhJP1yhAhD0kNjavZJ3A qDgLyTezkHwzC2HtAkbmVYziqaXFuempxcZ5qeV6xYm5xaV56XrJ+bmbGIGJ4PS/4193MO77 k3SIUYCDUYmHl+OtaqwQa2JZcWXuIUYJDmYlEd597sqxQrwpiZVVqUX58UWlOanFhxilOViU xHmrGR5ECwmkJ5akZqemFqQWwWSZODilGhh3HSz079KQPGTq52Bq8/Url4+y5q6df4WW/l4n IbvqZnbFpcBXz96eiw6w7Yly3T3j5QI12VjllqD+LRvtGWSOn1hZZuUcxN9sFPJw+74e9zP1 6beTq7Qi7a/MPMh/XeB79JMHCc4HDr8+cc+wyXeJIseU2K6TT9IsI7j/bFArcgxYfuWgZqYS S3FGoqEWc1FxIgDmVyHoAAMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrOLMWRmVeSWpSXmKPExsVy+t/xe7qbvqnGGpy6xWxxsPkhkwOjx6qD H5gCGKP0bIryS0tSFTLyi0tslaINLYz0DC0t9IxMLPUMjc1jrYxMlfTtbFJSczLLUov07RL0 MjbeNi94I1jRsGE+ewPjaf4uRk4OCQETiWuH9jJ1MXJxCAksZZT4tmw5K0RCRuLTlY/sELaw xJ9rXWwQRd1MEl+/HmOHcM4wShz7uogVwrnAKPH0xE+wFl4BI4nNk3awdDFycAgL6Essf5QF EmYTMJSYumk2I0hYREBbov2jGEiYRUBVYuL0h0wgNrOApkTr9t9QizUkNtw8xgQxUVDi5Mwn LBA18hLNW2czT2AUmIWkZRaSsllIyhYwMq9iFEktLc5Nzy021CtOzC0uzUvXS87P3cQIDORt x35u3sF4aWPwIUYBDkYlHt4f91RjhVgTy4orcw8xSnAwK4nw7nNXjhXiTUmsrEotyo8vKs1J LT7EaAp0+ERmKdHkfGCU5ZXEG5oamltYGpobmxubWSiJ83YIHIwREkhPLEnNTk0tSC2C6WPi 4JRqYDRKdd/zoNArzYDpL2dzy9XKzTd+3V9/6GvRZ4N/97efO1CRc2veoh+1fOdiZC8IbXXM C8/Rm7kmc8FJO/43fL37NBMv+507Fi7GF7qy/0T1hsnnryXMuj+9T+DMz43TzBithJhW+zX1 8Mn+ab23m4FrlvbKlxIM73IKH7BONufZP703er3j9V4lluKMREMt5qLiRABl6FMtegIAAA== X-CMS-MailID: 20190710143114eucas1p1a5939118c365d5a25d81881dbef5dc44 X-Msg-Generator: CA Content-Type: text/plain; charset="utf-8" X-RootMTR: 20190710143114eucas1p1a5939118c365d5a25d81881dbef5dc44 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20190710143114eucas1p1a5939118c365d5a25d81881dbef5dc44 References: There was a bug in matching directories back to compentised names that it didn't prefer longest matches of prefixes if the prefix contained an expression that would be match as a new component, because it was sorting on the raw values (i.e. including the :more_stuff suffix).  This does the simple thing of matching exhaustively and picking the longest prefix that matches. pws diff --git a/Functions/Chpwd/zsh_directory_name_generic b/Functions/Chpwd/zsh_directory_name_generic index aa4bf9b84..df21af598 100644 --- a/Functions/Chpwd/zsh_directory_name_generic +++ b/Functions/Chpwd/zsh_directory_name_generic @@ -69,25 +69,32 @@ elif [[ $1 = d ]]; then    local _zdn_rest=$_zdn_dir    local -a _zdn_cpts    local _zdn_pref _zdn_pref_raw _zdn_matched _zdn_cpt _zdn_name +  local _zdn_pref_matched _zdn_rest_matched +  integer _zdn_matchlen _zdn_len1      while [[ -n $_zdn_var && -n $_zdn_rest ]]; do +    _zdn_matchlen=0      _zdn_assoc=(${(Pkv)_zdn_var}) -    # Sorting in descending order will ensure prefixes -    # come after longer strings with that perfix, so -    # we match more specific directory names preferentially.      _zdn_cpts=(${(Ov)_zdn_assoc})      _zdn_cpt=''      for _zdn_pref_raw in $_zdn_cpts; do        _zdn_pref=${_zdn_pref_raw%/:*}        [[ -z $_zdn_pref ]] && continue        if [[ $_zdn_rest = $_zdn_pref(#b)(/|)(*) ]]; then - _zdn_cpt=${(k)_zdn_assoc[(r)$_zdn_pref_raw]} - # if we matched a /, too, add it... - _zdn_matched+=$_zdn_pref$match[1] - _zdn_rest=$match[2] - break +        _zdn_len1=${#_zdn_pref} + if (( _zdn_len1 > _zdn_matchlen )); then +   _zdn_matchlen=$_zdn_len1 +   _zdn_cpt=${(k)_zdn_assoc[(r)$_zdn_pref_raw]} +   # if we matched a /, too, add it... +   _zdn_pref_matched=$_zdn_pref$match[1] +   _zdn_rest_matched=$match[2] + fi        fi      done +    if (( _zdn_matchlen )); then +      _zdn_matched+=$_zdn_pref_matched +      _zdn_rest=$_zdn_rest_matched +    fi      if [[ -n $_zdn_cpt ]]; then        _zdn_name+=${_zdn_name:+${_zdh_name}:}$_zdn_cpt        if [[ ${_zdn_assoc[$_zdn_cpt]} = (#b)*/:([[:IDENT:]]##) ]]; then