From: Bart Schaefer <schaefer@brasslantern.com>
To: zsh-users@zsh.org
Subject: Re: Large LS_COLORS makes auto_cd very slow
Date: Wed, 04 Apr 2012 00:52:36 -0700 [thread overview]
Message-ID: <120404005237.ZM10249@torch.brasslantern.com> (raw)
In-Reply-To: =?iso-8859-1?Q?=3CCABZhJg-xieMZAOEmbYzSb5T-3O8aLNurvPk=3DSiXs?= =?iso-8859-1?Q?PGjTpAMg-Q=40mail=2Egmail=2Ecom=3E?= =?iso-8859-1?Q?Comments=3A_In_reply_to_Jesper_Nyg=E5rds_=3Cjesper=2Enygar?= =?iso-8859-1?Q?ds=40gmail=2Ecom=3E?= =?iso-8859-1?Q?________=22Large_LS_COLORS_makes_auto_cd_very_slow=22_=28A?= =?iso-8859-1?Q?pr__3=2C__9=3A08pm=29?=
On Apr 3, 9:08pm, Jesper Nygårds wrote:
}
} /us<tab>
}
} whereas completion after an explicit cd is nearly instantaneous:
}
} cd /us<tab>
}
} It seems rather odd to me that coloring would render this so slow. I
} suppose the delay is caused by zsh trying to color some list of
} possible completions, but why would it be so very slow?
/us<tab> as the first word in the buffer is in command position, so is
completing any/all of commands, executables, builtins, functions,
aliases, suffix-aliases, reserved-words, jobs and parameters.
For each of these categories, _setup line 12 rebuilds the value of
the _comp_colors array to add new patterns such that any pattern that
started with '=' gets copied with a prefix matching the tag currently
being tested; e.g. '(commands)=...' or '(jobs)=...'
This is done even for tags that won't have any matches because the
colors array has to be ready for the internals to use when a match is
found, there's no way to "call back" to build it on demand.
The expensive bit is that _comp_colors is declared as a unique array,
so every time it gets rebuilt the resulting 1700+ entries are all
compared against one another to make sure there is no duplication.
Repeat that nine times and it takes a while.
With "cd" in front, it's restricted to directories only, so the array
is only rebuilt once.
Addenda for -workers:
Anybody want to have a stab at creating a vastly more efficient version
of Src/params.c:arrayuniq() ? I came up with a faster way to remove the
duplicate elements, but the problem here is to efficiently determine
that there are no duplicates to remove. Perhaps throw the elements into
a hash table and then make one pass looking up each element.
next prev parent reply other threads:[~2012-04-04 7:53 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-04-03 19:08 Jesper Nygårds
2012-04-04 7:52 ` Bart Schaefer [this message]
2012-04-04 16:57 ` Jesper Nygårds
2012-04-05 9:30 ` Václav Zeman
2012-04-05 15:51 ` Bart Schaefer
2012-04-05 16:33 ` Bart Schaefer
2012-04-05 17:00 ` Philippe Troin
2012-04-06 9:49 ` Václav Zeman
2012-04-06 11:07 ` Mark van Dijk
2012-04-06 15:51 ` Bart Schaefer
2012-04-09 8:23 ` Václav Zeman
2012-04-09 19:28 ` Bart Schaefer
2012-04-06 18:30 ` Valodim Skywalker
2012-04-07 16:43 ` Bart Schaefer
2013-01-11 11:30 Completing all possible candidates Jesper Nygårds
2013-01-11 14:32 ` Bart Schaefer
2013-01-15 7:28 ` Jesper Nygårds
2013-01-17 3:14 ` Bart Schaefer
2013-01-17 6:28 ` Jesper Nygårds
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=120404005237.ZM10249@torch.brasslantern.com \
--to=schaefer@brasslantern.com \
--cc=zsh-users@zsh.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/zsh/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).