Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
[PATCH] Update completion style guide
- X-seq: zsh-workers 43031
- From: dana <dana@xxxxxxx>
- To: Zsh workers <zsh-workers@xxxxxxx>
- Subject: [PATCH] Update completion style guide
- Date: Fri, 15 Jun 2018 23:17:29 -0500
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dana-is.20150623.gappssmtp.com; s=20150623; h=from:content-transfer-encoding:mime-version:subject:message-id:date :to; bh=KxKf3Iaej7eEQBi8FlzkJuaohRk5AtQtAkCfPe2v5Cg=; b=e4SoAJ42L2Sq0T23hzhbwj+qgNY/xCwdbGnnCbUnUUFHzwFfpkRv1BuojGs95DFDjK FtT6UZhenFch06ITScV60P75bCMW3cPoWXEO2WtR3bwW9UxzYZ1AX4TJxlknUNYnEggK QARA9AVrOk7jaYCaWl7dG1x5fVrA6USYam11mrtit6nUX7g3EKA0SGazqCj8KqYPa4qJ FGilot5U34qdp34Hkzq6nPSVPHqwV7bLr/RAyeHtjX5zDrCA/lOS9apQ7CpPSGuYdrXa Nwydm93zjJQsBn51+kp5ATY5rVA05RtqoYRXt/2t+SwmoMUtVO8HxwNjk0/MFRui+6Bd JodA==
- List-help: <mailto:zsh-workers-help@zsh.org>
- List-id: Zsh Workers List <zsh-workers.zsh.org>
- List-post: <mailto:zsh-workers@zsh.org>
- List-unsubscribe: <mailto:zsh-workers-unsubscribe@zsh.org>
- Mailing-list: contact zsh-workers-help@xxxxxxx; run by ezmlm
Some updates to the completion style guide inspired by Peter's remark in workers
# 43025 and my escaping confusion mentioned in workers # 42992. Not sure about
the formatting on the latter change; tried to stay consistent, but idk.
dana
diff --git a/Etc/completion-style-guide b/Etc/completion-style-guide
index a6fc737a7..3bb1477da 100644
--- a/Etc/completion-style-guide
+++ b/Etc/completion-style-guide
@@ -20,6 +20,26 @@ Coding style:
* Please try not to use lines longer than 79 characters. Don't worry
about breaking long `_arguments' or `_values' specs though.
+* Never use alternative, unusual, or optional syntax in completion
+ functions (or any other shell code distributed with zsh). In other
+ words, do NOT use the following:
+
+ # Short loops
+ for x in $y myfunc $x
+
+ # Alternative forms
+ if { [[ $x == $y ]] } {
+ myfunc $x
+ }
+ foreach x in $y {
+ myfunc $x
+ }
+
+ # Weird tricks
+ () for 1 {
+ myfunc $1
+ } $x
+
Descriptions:
Descriptions should not have a trailing full stop and initial capital
diff --git a/Etc/completion-style-guide b/Etc/completion-style-guide
index 3bb1477da..c6f5dcda3 100644
--- a/Etc/completion-style-guide
+++ b/Etc/completion-style-guide
@@ -513,3 +513,20 @@ Misc. remarks
completion function would contain the code for the default way to
generate the matches.
See the `_email_addresses', `_rpm' and `_nslookup' files for examples.
+9) Be mindful of quoting/escaping edge cases. Notably:
+ * Elements of the `$words' array are derived verbatim from the user's
+ command-line input -- if they type an argument in quotes or escaped
+ by backslashes, that is how it appears in the array.
+ * Option-arguments are stored in `$opt_args` the same way. Further,
+ since multiple arguments to the same option are represented in a
+ colon-delimited fashion, backslashes and colons passed by the user
+ are escaped. For instance, the option-arguments parsed from
+ `-afoo -a "bar" -a 1:2:3' appear in `$opt_args[-a]` as
+ `foo:"bar":1\:2\:3'.
+ * The `_call_program` helper used by many completion functions is
+ implemented using `eval', so arguments to it must be quoted
+ accordingly. As mentioned above, most of the user's own input comes
+ pre-escaped, but you may run into problems passing file names or
+ data derived from another command's output to the helper. Consider
+ using some variation of the `q` expansion flag to deal with this:
+ `_call_program vals $words[1] ${(q-)myfile}'
Messages sorted by:
Reverse Date,
Date,
Thread,
Author