From 1b8244ea28090176561b8df6971b416236a3c508 Mon Sep 17 00:00:00 2001 From: Christian Nieves Date: Wed, 31 Jan 2024 17:08:17 +0000 Subject: [PATCH] goog --- config/.config/nvim/lazy-lock.json | 48 ++-- tmux/.tmux.conf | 3 +- vim/.vim/lua/plugins/google.lua | 69 +++-- zsh/.bash_profile.google | 4 + zsh/.zshrc | 2 - zsh/goog_prompt.zsh | 422 ----------------------------- 6 files changed, 70 insertions(+), 478 deletions(-) delete mode 100755 zsh/goog_prompt.zsh diff --git a/config/.config/nvim/lazy-lock.json b/config/.config/nvim/lazy-lock.json index d955434..c22384e 100644 --- a/config/.config/nvim/lazy-lock.json +++ b/config/.config/nvim/lazy-lock.json @@ -5,9 +5,9 @@ "aerial.nvim": { "branch": "master", "commit": "e9661d4f739508377f42528fd08a85c4c8feba6e" }, "ai.nvim": { "branch": "main", "commit": "ab6b6f54612500f48d4d34fcf81529946b9338f3" }, "asyncrun.vim": { "branch": "master", "commit": "61cc3081963a12048e00e89f8cedc8bd1cb83b8c" }, - "bufferline.nvim": { "branch": "main", "commit": "6c456b888823d9e4832aa91c482bccd19445c009" }, - "catppuccin": { "branch": "main", "commit": "bc1f2151f23227ba02ac203c2c59ad693352a741" }, - "ciderlsp-nvim": { "branch": "main", "commit": "00a86f96f4b8b9e94f0978c2db316447cc30a573" }, + "bufferline.nvim": { "branch": "main", "commit": "d6cb9b7cac52887bcac65f8698e67479553c0748" }, + "catppuccin": { "branch": "main", "commit": "c2e6f8e7eb8d0ebf55700c89bdf842809aeecf09" }, + "ciderlsp-nvim": { "branch": "main", "commit": "16d7b742ad22a5534a22d2ba06516ab611ab1e7b" }, "cmp-async-path": { "branch": "main", "commit": "d8229a93d7b71f22c66ca35ac9e6c6cd850ec61d" }, "cmp-buffer": { "branch": "main", "commit": "3022dbc9166796b644a841a02de8dd1cc1d311fa" }, "cmp-calc": { "branch": "main", "commit": "ce91d14d2e7a8b3f6ad86d85e34d41c1ae6268d9" }, @@ -25,17 +25,17 @@ "cmp-under-comparator": { "branch": "master", "commit": "6857f10272c3cfe930cece2afa2406e1385bfef8" }, "cmp_luasnip": { "branch": "master", "commit": "05a9ab28b53f71d1aece421ef32fee2cb857a843" }, "conflict-marker.vim": { "branch": "master", "commit": "11a4d42244755505b66b15cd4496a150432eb5e3" }, - "conform.nvim": { "branch": "master", "commit": "d99b75b4aedf0e912f41c5740a7267de739cddac" }, + "conform.nvim": { "branch": "master", "commit": "4588008a7c5b57fbff97fdfb529c059235cdc7ee" }, "crates.nvim": { "branch": "main", "commit": "1dffccc0a95f656ebe00cacb4de282473430c5a1" }, "dashboard-nvim": { "branch": "master", "commit": "63df28409d940f9cac0a925df09d3dc369db9841" }, "debugprint.nvim": { "branch": "main", "commit": "0c81cd2bab372bba99815f505eb1fe759d38dd88" }, "ferris.nvim": { "branch": "main", "commit": "52e39c017f511e8cf9a024022d48164bfbfe52ee" }, - "fidget.nvim": { "branch": "main", "commit": "3a93300c076109d86c7ce35ec67a8034ae6ba9db" }, + "fidget.nvim": { "branch": "main", "commit": "1d1042d418ee8cb70d68f1e38db639844331c093" }, "firenvim": { "branch": "master", "commit": "f2dd6d3bcf3309a7dd30c79b3b3c03ab55cea6e2" }, - "friendly-snippets": { "branch": "main", "commit": "aced40b66b7bae9bc2c37fd7b11841d54727a7b0" }, - "fzf": { "branch": "master", "commit": "da752fc9a4b3cb9dd08cc80614a491f980436b46" }, + "friendly-snippets": { "branch": "main", "commit": "b8fae73a479ae0a1c54f5c98fa687ae8a0addc53" }, + "fzf": { "branch": "master", "commit": "dd886d22f0b95700ece24954ac00f6e2628226f1" }, "fzf.vim": { "branch": "master", "commit": "f6cb5b17897ff0c38f60fecd4b529678bcfec259" }, - "gcert.nvim": { "branch": "main", "commit": "9dce1af29c31b97a51bab24e25695c25a367141e" }, + "gcert.nvim": { "branch": "main", "commit": "8b4b68ce8eeaf54240b55a28081d3a2be1631e95" }, "git-conflict.nvim": { "branch": "main", "commit": "4c8e252b87d54d944c1e56bfb477f78b6fdaf661" }, "go.nvim": { "branch": "master", "commit": "24d2fa373d55d9900cd4b502a88214dc17e6fab6" }, "googlepaths.nvim": { "branch": "main", "commit": "b46baaaec3f5dbf634d2ea722bb89c376f4eaecb" }, @@ -46,27 +46,27 @@ "kotlin-vim": { "branch": "master", "commit": "53fe045906df8eeb07cb77b078fc93acda6c90b8" }, "lazy.nvim": { "branch": "main", "commit": "aedcd79811d491b60d0a6577a9c1701063c2a609" }, "lazygit.nvim": { "branch": "main", "commit": "1e08e3f5ac1152339690140e61a4a32b3bdc7de5" }, - "leap.nvim": { "branch": "main", "commit": "9f7cf0a87ca2c3f47df37ef6787d34a65604d248" }, + "leap.nvim": { "branch": "main", "commit": "14eda5bb233354933baa99b6d40bef3a40dbeaae" }, "libp.nvim": { "branch": "main", "commit": "636b1748e92f66022c1763f32b2ded6b8606eda5" }, "lsp-status.nvim": { "branch": "master", "commit": "54f48eb5017632d81d0fd40112065f1d062d0629" }, "lsp-virtual-improved.nvim": { "branch": "master", "commit": "db9cd544b7febdf4c48374e351b3903143b4477d" }, - "lsp-zero.nvim": { "branch": "v3.x", "commit": "c129311f4867675a52551b0a7ef12186308be00b" }, + "lsp-zero.nvim": { "branch": "v3.x", "commit": "e14aa165d820fc8943704c273e27fbce4a96b29f" }, "lsp_lines.nvim": { "branch": "main", "commit": "dbfd8e96ec2696e1ceedcd23fd70e842256e3dea" }, "lspkind.nvim": { "branch": "master", "commit": "1735dd5a5054c1fb7feaf8e8658dbab925f4f0cf" }, - "lualine.nvim": { "branch": "master", "commit": "566b7036f717f3d676362742630518a47f132fff" }, + "lualine.nvim": { "branch": "master", "commit": "7d131a8d3ba5016229e8a1d08bf8782acea98852" }, "luasnip-google.nvim": { "branch": "main", "commit": "5fd7feb144de0ecea837618c9c9e1bbecc0e3243" }, "markdown-preview.nvim": { "branch": "master", "commit": "a923f5fc5ba36a3b17e289dc35dc17f66d0548ee" }, "mason-lspconfig.nvim": { "branch": "main", "commit": "b9084b1f42f790d6230dc66dbcb6bcc35b148552" }, - "mason.nvim": { "branch": "main", "commit": "9c9416817c9f4e6f333c749327a1ed5355cfab61" }, + "mason.nvim": { "branch": "main", "commit": "c43eeb5614a09dc17c03a7fb49de2e05de203924" }, "mellifluous.nvim": { "branch": "main", "commit": "da719202489e37e3d5de29b5a0d650fa7f980cfd" }, "mkdir.nvim": { "branch": "main", "commit": "c55d1dee4f099528a1853b28bb28caa802eba217" }, "neo-tree.nvim": { "branch": "v2.x", "commit": "80dc74d081823649809f78370fa5b204aa9a853a" }, - "neodev.nvim": { "branch": "main", "commit": "e7ca4a2ea0da5e39a639c08c3edb352b9355f09e" }, + "neodev.nvim": { "branch": "main", "commit": "345ed5843405126464119154f394d4298c1314c7" }, "neoscopes": { "branch": "main", "commit": "470dff042004b93c10d262e8b0ad7bf6f703f86f" }, "neovim-ayu": { "branch": "master", "commit": "6463d39253bb70e2b867fce57f9e7174f657bd1b" }, "neovim-throttle-debounce": { "branch": "main", "commit": "5247b097df15016ab31db672b77ec4938bb9cbfd" }, "nui.nvim": { "branch": "main", "commit": "35da9ca1de0fc4dda96c2e214d93d363c145f418" }, - "nvgoog": { "branch": "main", "commit": "8e1dd8f5bdfce3d634e4d9e0c9482170a43cb8c2" }, + "nvgoog": { "branch": "main", "commit": "1a4905bc039dd3c3db9899ff474de54d2efbb722" }, "nvim-cmp": { "branch": "main", "commit": "538e37ba87284942c1d76ed38dd497e54e65b891" }, "nvim-cmp-buffer-lines": { "branch": "master", "commit": "924ccc04dc5c919b6baa05d45818025baa82699a" }, "nvim-colorizer.lua": { "branch": "master", "commit": "85855b38011114929f4058efc97af1059ab3e41d" }, @@ -75,33 +75,33 @@ "nvim-hlslens": { "branch": "main", "commit": "8ffc64bb6b624612cf762982b92633f283f7a715" }, "nvim-jdtls": { "branch": "master", "commit": "66b5ace68a5d1c45fdfb1afa8d847e87af2aa1f8" }, "nvim-lightbulb": { "branch": "master", "commit": "8f00b89dd1b1dbde16872bee5fbcee2e58c9b8e9" }, - "nvim-lint": { "branch": "master", "commit": "2cf9ad095130755d7d87f1730bcf33c91ee822e4" }, - "nvim-lspconfig": { "branch": "master", "commit": "8917d2c830e04bf944a699b8c41f097621283828" }, + "nvim-lint": { "branch": "master", "commit": "8e5920f9ce9f24c283a2e64be5fe58d1d37d1744" }, + "nvim-lspconfig": { "branch": "master", "commit": "d9e87768466f91c071375517b170da5fad7b41f5" }, "nvim-luapad": { "branch": "master", "commit": "a5b3d6aa1fe5fe75e6124927392a9d3a60a0ecce" }, "nvim-scrollbar": { "branch": "main", "commit": "35f99d559041c7c0eff3a41f9093581ceea534e8" }, "nvim-surround": { "branch": "main", "commit": "703ec63aa798e5e07d309b35e42def34bebe0174" }, - "nvim-treesitter": { "branch": "master", "commit": "81660800352ecab6a2e95f4ca30d637df1f3765e" }, - "nvim-web-devicons": { "branch": "master", "commit": "b427ac5f9dff494f839e81441fb3f04a58cbcfbc" }, + "nvim-treesitter": { "branch": "master", "commit": "ba6454783493ac3a5dd209c25e491640b07bd8de" }, + "nvim-web-devicons": { "branch": "master", "commit": "aaec87dbdaa776bfa0a13c8694bec9bcb7454719" }, "omnisharp-extended-lsp.nvim": { "branch": "main", "commit": "4be2e8689067494ed7e5a4f1221adc31d1a07783" }, "onedark.nvim": { "branch": "main", "commit": "b5161f0c631571640485be5d1c059cab82c86872" }, "persisted.nvim": { "branch": "main", "commit": "edd8aa41cd87f9da1b6ef0c584068dea192f65b7" }, - "plenary.nvim": { "branch": "master", "commit": "663246936325062427597964d81d30eaa42ab1e4" }, - "refactoring.nvim": { "branch": "master", "commit": "f4546284059f7dc01f65be93d03f6c850fd2aba1" }, - "rustaceanvim": { "branch": "master", "commit": "94dbc3479630b79f1fc05bad91dfeede50b9036c" }, + "plenary.nvim": { "branch": "master", "commit": "4f71c0c4a196ceb656c824a70792f3df3ce6bb6d" }, + "refactoring.nvim": { "branch": "master", "commit": "aff2e21e2f1a19d302adceb4e7d0fafbb3ae59a9" }, + "rustaceanvim": { "branch": "master", "commit": "bc8c4b8f7606d5b7c067cd8369e25c1a7ff77bd0" }, "scope.nvim": { "branch": "main", "commit": "cd27af77ad61a7199af5c28d27013fb956eb0e3e" }, "sonokai": { "branch": "master", "commit": "42822f8f9b3a5088f05cf72a0aa1477598ad1a40" }, "tagalong.vim": { "branch": "main", "commit": "5a2bbf2b1d5b657685a49d48d98a4aa921c1fde3" }, "telescope-dap.nvim": { "branch": "master", "commit": "8c88d9716c91eaef1cdea13cb9390d8ef447dbfe" }, "telescope-import.nvim": { "branch": "main", "commit": "08e31708451b43d1ef766d370d5ef17e9f0c24ae" }, - "telescope.nvim": { "branch": "master", "commit": "301505da4bb72d11ffeee47ad45e0b677f70abe5" }, - "telescope_citc": { "branch": "main", "commit": "f0f74127e262d097119d2946634d3aa7e49b0c2f" }, + "telescope.nvim": { "branch": "master", "commit": "e54fbf4ab2b64640b639b75c006c23b4bc51c86f" }, + "telescope_citc": { "branch": "main", "commit": "56eae89663154f0ccbd4bfd1259d4a56e383abb1" }, "telescope_codesearch": { "branch": "main", "commit": "a26077ad3c68cf897ae1c31da903d6516ebb9c92" }, "telescope_fig": { "branch": "main", "commit": "f6122fe82417ebeaddb9343cfd5584f62a4b8df8" }, "text-case.nvim": { "branch": "main", "commit": "6bc91cde614bbec6f0befbaf7fcd302415d803fb" }, "time-ago.vim": { "branch": "master", "commit": "be978d5c790cfcc41f524205f28783b9937fd0ee" }, "tree-sitter-gdscript": { "branch": "master", "commit": "03f20b94707a21bed90bb95101684bc4036139ce" }, "trouble.nvim": { "branch": "main", "commit": "f1168feada93c0154ede4d1fe9183bf69bac54ea" }, - "undotree": { "branch": "master", "commit": "d9c8b4ef872e078e8c4080812e5a3ed56d151c00" }, + "undotree": { "branch": "master", "commit": "a1758ba9990b7189f601a3a5acdfc8ca3907a700" }, "vcscommand.vim": { "branch": "master", "commit": "2fb32681361f37533455d20aaa7fc6eb11b0fa4b" }, "vim-bazel": { "branch": "master", "commit": "31b0d5e4f51da1aeb56d65bf505a744e6de405de" }, "vim-better-whitespace": { "branch": "master", "commit": "029f35c783f1b504f9be086b9ea757a36059c846" }, diff --git a/tmux/.tmux.conf b/tmux/.tmux.conf index 6f9c23c..acdf839 100644 --- a/tmux/.tmux.conf +++ b/tmux/.tmux.conf @@ -53,7 +53,8 @@ set-option -g status-interval 2 bind Escape confirm-before "kill-server" # Automatically set window title -set-option -g automatic-rename off +setw -g automatic-rename off +set-window-option -g automatic-rename off # set-option -g automatic-rename on # set-option -g automatic-rename-format '#{?#{m/r:^(/google/src)?/cloud/,#{pane_current_path}},#{s|^(/google/src)?/cloud/[^/]+/([^/]+).+$|\2|:pane_current_path},#{b:pane_current_path}}' diff --git a/vim/.vim/lua/plugins/google.lua b/vim/.vim/lua/plugins/google.lua index 442cdd3..c7e4290 100644 --- a/vim/.vim/lua/plugins/google.lua +++ b/vim/.vim/lua/plugins/google.lua @@ -19,12 +19,18 @@ return { { import = "nvgoog.google.misc" }, -- maktaba is required by all google plugins glug("maktaba", { - lazy = false, + lazy = true, dependencies = {}, config = function() -- init? vim.cmd("source /usr/share/vim/google/glug/bootstrap.vim") end, }), + glug("logmsgs", { + event = "VeryLazy", + }), + glug("googler", { + event = "VeryLazy", + }), glug("core"), glug("glaive"), glug("alert"), @@ -32,27 +38,27 @@ return { glug("languages"), glug("googlespell"), -- Enable logmsgs ASAP to avoid maktaba's log message queue filling up - veryLazy(glug("logmsgs")), - veryLazy(glug("googler")), glug("google-logo"), -- Add support for google filetypes - veryLazy(glug("google-filetypes", { - event = "BufReadPre", - })), + glug("google-filetypes", { event = { "BufReadPre", "BufNewFile" }, dependencies = {} }), + + -- Other filetype detection + veryLazy(glug("ft-cel", { event = "BufRead,BufNewFile *.cel,*jvp" })), + veryLazy(glug("ft-clif", { event = "BufRead,BufNewFile *.clif" })), + veryLazy(glug("ft-gin", { event = "BufRead,BufNewFile *.gin" })), + veryLazy(glug("ft-gss", { event = "BufRead,BufNewFile *.gss" })), + veryLazy(glug("ft-proto", { event = "BufRead,BufNewFile *.proto,*.protodevel,*.rosy,*.textproto" })), + veryLazy(glug("ft-soy", { event = "BufRead,BufNewFile *.soy" })), -- Set up syntax, indent, and core settings for various filetypes - veryLazy(glug("ft-cel")), - veryLazy(glug("ft-clif")), - veryLazy(glug("ft-cpp")), - veryLazy(glug("ft-gin")), - veryLazy(glug("ft-go")), - veryLazy(glug("ft-java")), - veryLazy(glug("ft-javascript")), - veryLazy(glug("ft-kotlin")), - veryLazy(glug("ft-proto")), - veryLazy(glug("ft-python")), - veryLazy(glug("ft-soy")), + veryLazy(glug("ft-cpp", { event = "BufRead,BufNewFile *.[ch],*.cc,*.cpp" })), + veryLazy(glug("ft-go", { event = "BufRead,BufNewFile *.go" })), + veryLazy(glug("ft-java", { event = "BufRead,BufNewFile *.java" })), + veryLazy(glug("ft-javascript", { event = "BufRead,BufNewFile *.js,*.jsx" })), + veryLazy(glug("ft-kotlin", { event = "BufRead,BufNewFile *.kt,*.kts" })), + veryLazy(glug("ft-python", { event = "BufRead,BufNewFile *.py" })), -- Configures nvim to respect Google's coding style - veryLazy(glug("googlestyle")), + veryLazy(glug("googlestyle", { event = { "BufRead", "BufNewFile" } })), + veryLazy(glug("add_usings")), -- Autogens boilerplate when creating new files glug("autogen", { @@ -142,7 +148,8 @@ return { }, }, cmd = { "FormatLines", "FormatCode", "AutoFormatBuffer" }, - event = "BufWritePre", + event = "VimEnter", + -- Setting up autocmds in init allows deferring loading the plugin until -- the `BufWritePre` event. One caveat is we must call `codefmt#FormatBuffer()` -- manually the first time since the plugin relies on the `BufWritePre` command to call it, @@ -167,22 +174,26 @@ return { }) end -- Build opts from possible parent specs since lazy.nvim doesn't provide it in `init` - local plugin_opts = {} - local curr_plugin = plugin - while curr_plugin do - if type(curr_plugin.opts) == "table" then - plugin_opts = require("lazy.core.util").merge(curr_plugin.opts, plugin_opts) - elseif type(curr_plugin.opts) == "function" then - plugin_opts = curr_plugin.opts(plugin, plugin_opts) - end - curr_plugin = curr_plugin._ and curr_plugin._.super or nil - end + local plugin_opts = require("lazy.core.plugin").values(plugin, "opts", false) for filetypes, formatter in pairs(plugin_opts.auto_format or {}) do autocmd(filetypes, formatter) end end, }), + glug("critique", { + dependencies = { + veryLazy(glug("googler")), + }, + -- optional = true, + cmd = { + "CritiqueComments", + "CritiqueUnresolvedComments", + "CritiqueNextComment", + "CritiquePreviousComment", + }, + }), + -- Run blaze commands glug("blaze", { dependencies = { diff --git a/zsh/.bash_profile.google b/zsh/.bash_profile.google index 4d7c117..3294609 100644 --- a/zsh/.bash_profile.google +++ b/zsh/.bash_profile.google @@ -1,3 +1,4 @@ +# vi: ft=sh # --------------- # Google Specific # --------------- @@ -195,3 +196,6 @@ source /etc/bash_completion.d/g4d gcertstatus --quiet || gcert && source /google/bin/releases/gmscore-tools/cli/prod/setup_prod_gms.sh complete -D -C /google/data/ro/users/sk/skaushik/www/public-tools/flagpick -o bashdefault -o default + +# Setup go/hi #!>>HI<>HI<>HI<>HI<}" - -# Hours before we care about staleness -export -i STALENESS_THRESHOLD=${STALENESS_THRESHOLD:-20} - -# Prompt colors -typeset -Ag clr=( - path 123 - wkspace 207 - src 39 - home 154 - prefix 190 - warn white - warn_bg 196 - p4head 1 - tip 154 - patched 165 - rollback 214 - icons white - stale 207 - author 45 - div white - cl_updated green - cl_willupdate yellow - cl_unsubmitted magenta - desc green -) - -export cloudHome="/google/src/cloud/$USER" - -##### END ENV settings ##### - -##### BEGIN Workspace identification ##### - -# Workspace name -function workspace() { - # Use :A parameter expansion to resolve symlinks to /google/src - # http://zsh.sourceforge.net/Doc/Release/Expansion.html#index-parameter-expansion-flags - if [[ $PWD:A =~ "$cloudHome/([^/]+)" ]]; then - echo ${match[1]} - fi -} - -# Absolute directory of our workspace -function workspace_dir() { - if [[ $WORKSPACE != "" ]]; then - echo "$cloudHome/$WORKSPACE/google3" - fi -} - -# Relative path after google3/ -function source_pwd() { - local wkspace_dir=$(workspace_dir) - if [[ -n "$wkspace_dir" ]]; then - echo "$PWD[${#wkspace_dir}+2,${#PWD}]" - fi -} - -##### END Workspace identification ##### - -##### BEGIN VCS analysis ##### - -# Clears out our exported vars -function unset_vcs_info() { - unset AUTHOR CHANGELIST COMMIT_MESSAGE - RPROMPT="" - typeset -Ag VCS_STATUS=() -} - -# Kicks off async request for vcs info -function fetch_vcs_info() { - unset_vcs_info - if [[ -z $WORKSPACE || ! -d $cloudHome/$WORKSPACE/.hg ]]; then return; fi - - async_worker_eval vcs_worker cd $PWD - async_job vcs_worker eval 'chg log --rev p4base -T "{date}\n"; chg log --follow -l 1 -T "{author}\n:{parents}\n{node|shortest}\n:{clpreferredname}\n:{clnumber}\n:{p4head}\n:{patchedcl}\n:{rollback_cl}\n:{tags}\n:{willupdatecl}\n{GOOG_trim_desc(desc)}"' -} - -# exports $AUTHOR $CHANGELIST $COMMIT_MESSAGE $VCS_STATUS -function update_vcs_info() { - unset_vcs_info - - # If we got an error, we need to kick off the service again - if [[ $2 -ne 0 ]]; then - async_stop_worker vcs_worker - async_unregister_callback vcs_worker - async_flush_jobs vcs_worker - async_start_worker vcs_worker - async_register_callback vcs_worker update_vcs_info - fetch_vcs_info - return - fi - - if [[ $1 != "eval" || -z $WORKSPACE ]]; then return; fi - - # If there's already another queued, we throw this one away - if [[ $6 -eq 1 ]]; then return; fi - - # Extract values from reply - local -a values=("${(f)3}") - local -i p4date=$values[1] - export AUTHOR=$values[2] - local -a parents=(${=values[3]}) - export SHORTEST_NODE=$values[4] - export CHANGELIST="${values[5]:1}" - local clnumber=$values[6] - local p4head=$values[7] - local patchedcl=$values[8] - local rollbackcl=$values[9] - local tags=$values[10] - local willupdatecl=$values[11] - export COMMIT_MESSAGE=$values[12] - - # Set various VCS_STATUS - local -i now=$(date +"%s") - local -i diff; ((diff = ($now - $p4date) / 3600)) - if [[ $diff -ge $STALENESS_THRESHOLD ]]; then - VCS_STATUS[stale]=$diff - fi - if [[ $#parents -ge 2 ]]; then - VCS_STATUS[merge]=$parents - fi - if [[ $clnumber =~ "\b([0-9]+)\b" ]]; then - VCS_STATUS[clnumber]=$match[1] - fi - if [[ $p4head == ":p4head" ]]; then - VCS_STATUS[p4head]=1 - fi - if [[ $patchedcl =~ "\b([0-9]+)\b" ]]; then - VCS_STATUS[patched_cl]=$match[1] - fi - if [[ $rollbackcl =~ "\b([0-9]+)\b" ]]; then - VCS_STATUS[rollback_cl]=$match[1] - fi - if [[ $tags =~ "\btip\b" ]]; then - VCS_STATUS[tip]=1 - fi - if [[ $willupdatecl =~ "\b([0-9]+)\b" ]]; then - VCS_STATUS[willupdate_cl]=$match[1] - fi - - # Update the prompt then tell ZSH to redraw it - update_rprompt - zle && zle reset-prompt -} - -# Updated in precmd, used to track fig changes -local vcs_mtime="" -function get_vcs_mtime() { - case `uname` in - Darwin) - local statArgs="-f%c" - ;; - Linux) - local statArgs="-c %Z" - ;; - esac - local mtime="" - if [[ -f $cloudHome/$WORKSPACE/.hg/dirstate ]]; then - mtime+="$(/usr/bin/stat $statArgs $cloudHome/$WORKSPACE/.hg/dirstate)" - fi - if [[ -f $cloudHome/$WORKSPACE/.hg/store/review__units ]]; then - mtime+="-$(/usr/bin/stat $statArgs $cloudHome/$WORKSPACE/.hg/store/review__units)" - fi - echo $mtime -} - -# Setup async worker for getting VCS info -async_start_worker vcs_worker -async_register_callback vcs_worker update_vcs_info - -##### END VCS analysis ##### - -##### BEGIN Prompt management ##### - -# get the color for CL indicators -function get_cl_color() { - if [[ -n $VCS_STATUS[willupdate_cl] ]]; then - echo $clr[cl_willupdate] - elif [[ -n $VCS_STATUS[clnumber] ]]; then - echo $clr[cl_updated] - elif [[ -n $CHANGELIST ]]; then - echo $clr[cl_unsubmitted] - else - return 1 - fi -} - -# Updated by update_prompt -local -i PROMPT_SIZE=0 - -# Fetches new RPROMPT string -function get_rprompt() { - if [[ -z $WORKSPACE || -z $vcs_mtime ]]; then - echo "" && return - fi - - # Build an array of RPROMPT elements to join at the end - local rprompt=() - - # Calculate total columns available for rprompt - local -i avail_columns - ((avail_columns = $COLUMNS - $PROMPT_SIZE - $PROMPT_SPACE)) - - # If we're stale, display the stale symbol, +3 for 🕑h - if [[ -n $VCS_STATUS[stale] ]]; then - rprompt+=("%F{$clr[stale]}🕑$VCS_STATUS[stale]h%f") - ((avail_columns = $avail_columns - $#VCS_STATUS[stale] - 3)) - fi - - # If we're at tip, display the tip symbol, +2 for ➳ - if [[ $VCS_STATUS[tip] -eq 1 ]]; then - rprompt+=("%F{$clr[tip]}➳%f") - ((avail_columns = $avail_columns - 2)) - fi - - # If we're at p4head, display the p4head symbol, +2 for ☽ - if [[ $VCS_STATUS[p4head] -eq 1 ]]; then - rprompt+=("%F{$clr[p4head]}☽%f") - ((avail_columns = $avail_columns - 2)) - fi - - # If we're a patch, display the patch symbol, +2 for ℞ - if [[ -n $VCS_STATUS[patched_cl] ]]; then - rprompt+=("%F{$clr[patched]}℞%f") - ((avail_columns = $avail_columns - 2)) - fi - - # If we're a rollback, display the rollback symbol, +2 for ⟳ - if [[ -n $VCS_STATUS[rollback_cl] ]]; then - rprompt+=("%F{$clr[rollback]}⟳%f") - ((avail_columns = $avail_columns - 2)) - fi - - # We show evil merge warning no matter what, then end it - if [[ -n $VCS_STATUS[merge] ]]; then - rprompt+=("❗%K{$clr[warn_bg]}%F{$clr[warn]}%BDon't amend! (Merge)%b%f%k") - echo ${(j: :)rprompt} && return - fi - - # Display author if it's not us, +1 for 🙋 - if [[ ! $AUTHOR =~ "$USER(@google.com)?" && - $avail_columns -ge (($#AUTHOR + 1)) ]]; then - rprompt+=("🙋%F{$clr[author]}$AUTHOR%f") - ((avail_columns = $avail_columns - $#AUTHOR - 2)) - fi - - # Adding any changelist info - if [[ -n $CHANGELIST ]]; then - # Add the shortest node? +2 for 🔰 - if [[ -n $SHOW_SHORTEST_NODE && - $avail_columns -ge (($#SHORTEST_NODE + 2)) ]]; then - if [[ -n $clr[shortest_node] ]]; then - rprompt+=("%F{$clr[shortest_node]}🔰$SHORTEST_NODE%f") - else - rprompt+=("%F{$(get_cl_color)}🔰$SHORTEST_NODE%f") - fi - ((avail_columns = $avail_columns - $#SHORTEST_NODE - 2)) - fi - - # Show the dot? +2 for ● - if [[ $avail_columns -ge 2 && (-n $SHOW_CL_STATUS_DOT || - (-z $HIDE_CL && $avail_columns -lt ($#CHANGELIST + 2))) ]]; then - rprompt+=("%F{$(get_cl_color)}●%f") - ((avail_columns = $avail_columns - 2)) - fi - # Show the CL number? +2 for ✔ - if [[ -z $HIDE_CL && $avail_columns -ge (($#CHANGELIST + 2)) ]]; then - rprompt+=("%F{$clr[icons]}✔%F{$(get_cl_color)}$CHANGELIST%f") - ((avail_columns = $avail_columns - $#CHANGELIST - 2)) - fi - fi - - # End if there's no commit_mesage or we're out of space - if [[ -z $COMMIT_MESSAGE || $avail_columns -lt 5 ]]; then - echo ${(j: :)rprompt} && return - fi - - # Do we need to shorten the commit message? +2 for ✐ - if [[ $avail_columns -lt (($#COMMIT_MESSAGE + 2)) ]]; then - local commit="$COMMIT_MESSAGE[1, (($avail_columns - 4))].." - else - local commit=$COMMIT_MESSAGE - fi - - # Escape percent signs in the commit message - rprompt+=("%F{$clr[icons]}✐%F{$clr[desc]}${commit:gs/%/%%}%f") - - echo ${(j: :)rprompt} -} - -# Make our RPROMPT work regardless of whether `prompt_subst` is set -function update_rprompt(){ - if [[ -o prompt_subst ]]; then - RPROMPT='$(get_rprompt)' - else - RPROMPT=$(get_rprompt) - fi -} - -# Update prompt -function update_prompt() { - if [[ -n $GP_IGNORE_LEFT_PROMPT ]]; then return; fi - - if [[ -n $INDICATOR_FUNCTION ]]; then - local indicator=$($INDICATOR_FUNCTION) - else - local indicator="%F{green}⇪" - fi - PROMPT="$indicator%F{$clr[prefix]}$PROMPT_PREFIX%F{$clr[div]}:%f" - ((PROMPT_SIZE = $#PROMPT_PREFIX + 2)) # 2 for "⇪:" - - if [[ $PWD == $HOME ]]; then # If we're in $HOME, just show 🏠 - PROMPT+="🏠" - ((PROMPT_SIZE = PROMPT_SIZE + 1)) # 1 for 🏠 - elif [[ $PWD == $HOME* ]]; then # Or relative path to 🏠 - local rel_home="${PWD##$HOME/}" - PROMPT+="🏠%F{$clr[home]}$rel_home%f" - ((PROMPT_SIZE = PROMPT_SIZE + $#rel_home + 1)) # 1 for 🏠 - elif [[ $PWD == $(workspace_dir) ]]; then # Or just $WORKSPACE - PROMPT+="%F{$clr[wkspace]}%B$WORKSPACE%b%f" - ((PROMPT_SIZE = PROMPT_SIZE + $#WORKSPACE)) - else - local src_pwd=$(source_pwd) - if [[ -n $src_pwd ]]; then # Show relative path to workspace - PROMPT+="%F{$clr[wkspace]}%B$WORKSPACE%b%F{$clr[div]}/%F{$clr[src]}$src_pwd%f" - ((PROMPT_SIZE = PROMPT_SIZE + $#WORKSPACE + $#src_pwd + 1)) # 1 for "/" - else - # Not in $WORKSPACE or $HOME, show absolute path up to 50 chars - PROMPT+="%F{$clr[path]}%50<..<%~%f" - if [[ $#PWD -gt 50 ]]; then - ((PROMPT_SIZE = PROMPT_SIZE + 50)) - else - ((PROMPT_SIZE = PROMPT_SIZE + $#PWD)) - fi - fi - fi - - ((PROMPT_SIZE = PROMPT_SIZE + $#PROMPT_SUFFIX)) - PROMPT+="%F{$clr[div]}$PROMPT_SUFFIX%f" -} - -# add-zsh-hook to hook into chpwd and precmd -autoload -Uz add-zsh-hook - -# Track when PWD/WORKSPACE has changed to update prompt -function pwd_changed() { - # Mark if workspace has changed - unset WORKSPACE_CHANGED - local new_workspace=$(workspace) - if [[ $new_workspace != $WORKSPACE ]]; then - export WORKSPACE=$new_workspace - export WORKSPACE_CHANGED=0 - fi - - # Mark that PWD changed - export PWD_CHANGED=0 - - # Update prompt, unless it always happens inside prompt_precmd() - if [[ -z $INDICATOR_FUNCTION ]]; then update_prompt; fi -} -add-zsh-hook chpwd pwd_changed - -# Run before every command, to determine whether rprompt needs updating -function prompt_precmd() { - export LAST_EXIT=$? # For access by INDICATOR_FUNCTION - - # Initial prompt needs to be set up - if [[ $PROMPT_SIZE -eq 0 ]]; then - pwd_changed - fi - - # Always update left prompt because of INDICATOR_FUNCTION - if [[ -n $INDICATOR_FUNCTION ]]; then - update_prompt - fi - - # Update if our WORKSPACE changed - if [[ -n $WORKSPACE_CHANGED ]]; then - if [[ -n $WORKSPACE ]]; then - vcs_mtime=$(get_vcs_mtime) - else vcs_mtime=''; fi - fetch_vcs_info - elif [[ -n $WORKSPACE ]]; then - # Update if .hg has been changed - local new_mtime=$(get_vcs_mtime) - if [[ $new_mtime != $vcs_mtime ]]; then - vcs_mtime=$new_mtime - fetch_vcs_info - elif [[ -n $PWD_CHANGED ]]; then update_rprompt; fi - elif [[ -n $PWD_CHANGED ]]; then update_rprompt; fi - - # Unset this for tracking next cycle - unset PWD_CHANGED WORKSPACE_CHANGED -} -add-zsh-hook precmd prompt_precmd - -# If the terminal resizes, we need to rerun update_rprompt -function window_changed() { - update_rprompt - zle && zle reset-prompt -} -trap window_changed WINCH - -##### END Prompt management #####