* feat(gmail): add timezone support for date output Add --timezone and --local flags to gmail search and watch serve commands to control how dates are displayed. By default uses local timezone. Users can specify any IANA timezone (e.g., America/New_York, UTC). Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * test(gmail): fix execute test for timezone changes Update TestExecute_GmailSearch_JSON to use explicit --timezone UTC flag and expect the correctly converted time (22:04 UTC from 15:04 -0700). Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * feat(gmail): add -z short flag for --timezone Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * test(gmail): add unit tests for resolveOutputLocation Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * docs(gmail): clarify timezone flag help text Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * test(gmail): add timezone conversion tests for formatGmailDateInLocation Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * feat(config): add default_timezone setting Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * feat(gmail): support GOG_TIMEZONE env var and config for timezone Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * feat(config): add gog config command for timezone and settings Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * feat(calendar): respect GOG_TIMEZONE and config for timezone Update calendar time command to follow the same timezone priority as gmail: 1. --timezone flag (explicit) 2. GOG_TIMEZONE env var 3. Config file default_timezone 4. Fall back to Google Calendar's timezone (calendar-specific fallback) Add getConfiguredTimezone helper that returns nil when no explicit timezone is configured, allowing calendar commands to use their own fallback behavior. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * test(gmail): add tests for GOG_TIMEZONE env var and getConfiguredTimezone Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(config): warn on invalid timezone instead of error When default_timezone in config is invalid, print a warning to stderr and fall back to local timezone instead of returning a hard error. Invalid flag/env var still returns errors (user mistake in current session), but invalid config should not break the CLI (stale config). Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * refactor(gmail): remove unused formatGmailDate, add nolint directive - Remove unused formatGmailDate wrapper function (all callers use formatGmailDateInLocation directly with explicit location) - Add nolint:nilnil directive to getConfiguredTimezone with explanation that nil return signals caller to use its own fallback Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(timezone): honor --timezone local * refactor(cli): unify config/timezone helpers * test(cmd): isolate config env in timezone tests * refactor(config): centralize config key metadata * fix(config): drop unused key spec lookup * fix(config): standardize config key errors --------- Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com> Co-authored-by: Peter Steinberger <steipete@gmail.com>
72 lines
1.6 KiB
Go
72 lines
1.6 KiB
Go
package cmd
|
|
|
|
import "fmt"
|
|
|
|
func completionScript(shell string) (string, error) {
|
|
switch shell {
|
|
case "bash":
|
|
return bashCompletionScript(), nil
|
|
case "zsh":
|
|
return zshCompletionScript(), nil
|
|
case "fish":
|
|
return fishCompletionScript(), nil
|
|
case "powershell":
|
|
return powerShellCompletionScript(), nil
|
|
default:
|
|
return "", fmt.Errorf("unsupported shell: %s", shell)
|
|
}
|
|
}
|
|
|
|
func bashCompletionScript() string {
|
|
return `#!/usr/bin/env bash
|
|
|
|
_gog_complete() {
|
|
local IFS=$'\n'
|
|
local completions
|
|
completions=$(gog __complete --cword "$COMP_CWORD" -- "${COMP_WORDS[@]}")
|
|
COMPREPLY=()
|
|
if [[ -n "$completions" ]]; then
|
|
COMPREPLY=( $completions )
|
|
fi
|
|
}
|
|
|
|
complete -F _gog_complete gog
|
|
`
|
|
}
|
|
|
|
func zshCompletionScript() string {
|
|
return `#compdef gog
|
|
|
|
autoload -Uz bashcompinit
|
|
bashcompinit
|
|
` + bashCompletionScript()
|
|
}
|
|
|
|
func fishCompletionScript() string {
|
|
return `function __gog_complete
|
|
set -l words (commandline -opc)
|
|
set -l cur (commandline -ct)
|
|
set -l cword (count $words)
|
|
if test -n "$cur"
|
|
set cword (math $cword - 1)
|
|
end
|
|
gog __complete --cword $cword -- $words
|
|
end
|
|
|
|
complete -c gog -f -a "(__gog_complete)"
|
|
`
|
|
}
|
|
|
|
func powerShellCompletionScript() string {
|
|
return `Register-ArgumentCompleter -CommandName gog -ScriptBlock {
|
|
param($commandName, $wordToComplete, $cursorPosition, $commandAst, $fakeBoundParameter)
|
|
$elements = $commandAst.CommandElements | ForEach-Object { $_.ToString() }
|
|
$cword = $elements.Count - 1
|
|
$completions = gog __complete --cword $cword -- $elements
|
|
foreach ($completion in $completions) {
|
|
[System.Management.Automation.CompletionResult]::new($completion, $completion, 'ParameterValue', $completion)
|
|
}
|
|
}
|
|
`
|
|
}
|