summaryrefslogtreecommitdiff
path: root/templates/system/time-zone
diff options
context:
space:
mode:
Diffstat (limited to 'templates/system/time-zone')
-rw-r--r--templates/system/time-zone/node.def79
1 files changed, 49 insertions, 30 deletions
diff --git a/templates/system/time-zone/node.def b/templates/system/time-zone/node.def
index e271e3e6..00179850 100644
--- a/templates/system/time-zone/node.def
+++ b/templates/system/time-zone/node.def
@@ -1,35 +1,54 @@
type: txt
help: Set local timezone
default: "GMT"
-update:expression: "LTF=\"/usr/share/zoneinfo\" && \
-case \"$VAR(@)\" in \
- [Ll][Oo][Ss]*) LTF=\"$LTF/US/Pacific\" ;; \
- [Dd][Ee][Nn]*) LTF=\"$LTF/US/Mountain\" ;; \
- [Hh][Oo][Nn]*) LTF=\"$LTF/US/Hawaii\" ;; \
- [Nn][Ee][Ww]*) LTF=\"$LTF/US/Eastern\" ;; \
- [Cc][Hh][Ii]*) LTF=\"$LTF/US/Central\" ;; \
- [Aa][Nn][Cc]*) LTF=\"$LTF/US/Alaska\" ;; \
- [Pp][Hh][Oo]*) LTF=\"$LTF/US/Arizona\" ;; \
- *) LTF=\"$LTF/Etc/$VAR(@)\" ;; \
-esac && \
-if [ -e \"$LTF\" ]; then \
- sudo ln -fs $LTF /etc/localtime; \
-else \
- echo \"Invalid timezone\"; \
- exit 1; \
-fi"
+update: LTF="/usr/share/zoneinfo"
+ case "$VAR(@)" in
+ [Ll][Oo][Ss]*) LTF="$LTF/US/Pacific" ;;
+ [Dd][Ee][Nn]*) LTF="$LTF/US/Mountain" ;;
+ [Hh][Oo][Nn][Oo]*) LTF="$LTF/US/Hawaii" ;;
+ [Nn][Ee][Ww]*) LTF="$LTF/US/Eastern" ;;
+ [Cc][Hh][Ii][Cc]*) LTF="$LTF/US/Central" ;;
+ [Aa][Nn][Cc]*) LTF="$LTF/US/Alaska" ;;
+ [Pp][Hh][Oo]*) LTF="$LTF/US/Arizona" ;;
+ GMT*) LTF="$LTF/Etc/$VAR(@)" ;;
+ *) LTF="$LTF/$VAR(@)" ;;
+ esac
+ if [ -f "$LTF" ]; then
+ sudo ln -fs $LTF /etc/localtime
+ else
+ echo "Invalid timezone"
+ exit 1
+ fi
delete:expression: "sudo ln -fs /usr/share/zoneinfo/GMT /etc/localtime"
-allowed: local -a list=( "Los Angeles" "New York" "Denver" "Chicago" \
- "Anchorage" "Honolulu" "Phoenix" "GMT" )
- for (( i = -1; i > -13; i-- )); do
- list[${#list[@]}]="GMT$i";
+allowed: word=${COMP_WORDS[$COMP_CWORD]}
+ if [[ $word == */* ]]; then
+ marr=($(ls -d /usr/share/zoneinfo/$word*))
+ else
+ marr=($(find /usr/share/zoneinfo/ -maxdepth 1 -type d \
+ -name "$word*"))
+ fi
+ if (( ${#marr[@]} == 1 )); then
+ word=${marr[0]#/usr/share/zoneinfo/}
+ fi
+ if [ -n "$word" ] && [[ $word != */ ]]; then
+ marr=($(ls -d /usr/share/zoneinfo/$word*))
+ if (( ${#marr[@]} == 1 )) \
+ && [ -d "/usr/share/zoneinfo/$word" ]; then
+ word=$word/
+ elif [[ $word == */* ]]; then
+ word=${word%/*}/
+ fi
+ fi
+ for z in $(ls -d /usr/share/zoneinfo/$word* \
+ 2>/dev/null | egrep '^/usr/share/zoneinfo/[A-Z]'); do
+ zz=${z#/usr/share/zoneinfo/}
+ if [ -d $z ] || [[ $zz == */* ]]; then
+ echo \"$zz\"
+ fi
done
- for (( i = 1; i < 13; i++ )); do
- list[${#list[@]}]="GMT+$i";
- done
- for zone in "${list[@]}"; do
- echo \"$zone\"
- done
-comp_help:Enter one of the following time zones:
- Honolulu Anchorage Los Angeles Phoenix Denver Chicago New York
- GMT GMT-1 ... GMT-12 GMT+1 ... GMT+12
+comp_help:Enter the local timezone by specifying "Region/City"
+ Use auto-completion to see available regions and cities.
+ Start with one of these regions:
+ Africa America Antarctica Arctic Asia Atlantic
+ Australia Brazil Canada Chile Europe Indian
+ Mexico Mideast Pacific US