|
| 1 | +# Hg context-menu terminology inventory |
| 2 | + |
| 3 | +The Appearance preference is off by default, persists in preference.json, and is read when a menu is built. Reopening a menu applies a changed preference immediately. Existing translated labels and arguments stay intact; only mapped menu labels gain ` { Hg: ... }`. The same preference also extends selected tooltips. Tooltip bindings respond to preference and locale changes, preserving shortcuts, formatting, literal flags, and dynamic descriptions. Dialog titles, native application menus, and user-defined labels are unchanged. |
| 4 | + |
| 5 | +## Candidates implemented |
| 6 | + |
| 7 | +Git branches are compared with Mercurial bookmarks (movable pointers), rather than permanent named branches. These hints describe corresponding functionality, not commands executed by SourceGit. Histedit requires the Mercurial histedit extension; it edits linear history and is not identical to every Git rebase scenario. |
| 8 | + |
| 9 | +| Resource key | Existing English label | Hg postfix | |
| 10 | +| --- | --- | --- | |
| 11 | +| `BranchCM.Checkout` | Checkout ${0}$... | `{ Hg: update }` | |
| 12 | +| `CommitCM.Checkout` | Checkout Commit... | `{ Hg: update }` | |
| 13 | +| `TagCM.Checkout` | Checkout Tag... | `{ Hg: update }` | |
| 14 | +| `CreateBranch` | Create Branch... | `{ Hg: bookmark }` | |
| 15 | +| `BranchCM.Rename` | Rename ${0}$... | `{ Hg: rename bookmark }` | |
| 16 | +| `BranchCM.Delete` | Delete ${0}$... | `{ Hg: delete bookmark }` | |
| 17 | +| `BranchCM.DeleteMultiBranches` | Delete selected {0} branches... | `{ Hg: delete bookmark }` | |
| 18 | +| `BranchCM.ResetToSelectedCommit` | Reset ${0}$ to ${1}$... | `{ Hg: move bookmark }` | |
| 19 | +| `BranchCM.FastForward` | Fast-Forward to ${0}$ | `{ Hg: update bookmark }` | |
| 20 | +| `RemoteCM.Fetch` | Fetch | `{ Hg: pull }` | |
| 21 | +| `BranchCM.FetchInto` | Fetch ${0}$ into ${1}$ | `{ Hg: pull }` | |
| 22 | +| `RemoteCM.EnableAutoFetch` | Enable Auto-Fetch | `{ Hg: pull }` | |
| 23 | +| `CommitCM.CherryPick` | Cherry-Pick Commit... | `{ Hg: graft }` | |
| 24 | +| `CommitCM.CherryPickMultiple` | Cherry-Pick... | `{ Hg: graft }` | |
| 25 | +| `CommitCM.Revert` | Revert Commit... | `{ Hg: backout }` | |
| 26 | +| `CommitCM.InteractiveRebase` | Interactive Rebase | `{ Hg: histedit }` | |
| 27 | +| `CommitCM.InteractiveRebase.Manually` | Interactively Rebase ${0}$ on ${1}$ | `{ Hg: histedit }` | |
| 28 | +| `BranchCM.InteractiveRebase.Manually` | Interactively Rebase ${0}$ on ${1}$ | `{ Hg: histedit }` | |
| 29 | +| `CommitCM.InteractiveRebase.Reword` | Reword... | `{ Hg: histedit mess }` | |
| 30 | +| `CommitCM.InteractiveRebase.Squash` | Squash into Parent... | `{ Hg: histedit fold }` | |
| 31 | +| `CommitCM.InteractiveRebase.Fixup` | Fixup into Parent... | `{ Hg: histedit roll }` | |
| 32 | +| `ChangeCM.CheckoutThisRevision` | Reset to This Revision | `{ Hg: revert }` | |
| 33 | +| `ChangeCM.CheckoutFirstParentRevision` | Reset to Parent Revision | `{ Hg: revert }` | |
| 34 | +| `ChangeCM.ResetFileTo` | Reset File(s) to ${0}$ | `{ Hg: revert }` | |
| 35 | +| `FileCM.Discard` | Discard... | `{ Hg: revert }` | |
| 36 | +| `FileCM.DiscardMulti` | Discard {0} files... | `{ Hg: revert }` | |
| 37 | +| `FileCM.Stash` | Stash... | `{ Hg: shelve }` | |
| 38 | +| `FileCM.StashMulti` | Stash {0} files... | `{ Hg: shelve }` | |
| 39 | +| `StashCM.Apply` | Apply | `{ Hg: unshelve --keep }` | |
| 40 | +| `StashCM.Drop` | Drop | `{ Hg: shelve --delete }` | |
| 41 | +| `Blame` | Blame | `{ Hg: annotate }` | |
| 42 | +| `WorkingCopy.AddToGitIgnore` | Git Ignore | `{ Hg: .hgignore }` | |
| 43 | + |
| 44 | +The interactive-rebase action flyout also adds the Reword/mess, Squash/fold, and Fixup/roll hints to its structured descriptions. Pick, Edit, and Drop retain their shared action names. Working-copy blame keeps its HEAD-only qualifier before the postfix. |
| 45 | + |
| 46 | +## Candidates deliberately left unchanged |
| 47 | + |
| 48 | +| Candidates | Reason | |
| 49 | +| --- | --- | |
| 50 | +| Push, pull, merge, rebase, tag, archive, patch export, file history | Terminology already exists in Hg. | |
| 51 | +| Stage / unstage; assume unchanged | Hg has no Git index or direct equivalent of assume-unchanged. In particular, hg add/forget would misrepresent staging tracked edits. | |
| 52 | +| Discard untracked/added files or a selection including them | Removes files; hg revert would misrepresent the action. Only tracked-file discard gets the revert hint. | |
| 53 | +| Reset current branch to a commit | The dialog offers soft, mixed, and hard modes; no single Hg operation describes all three. Moving a non-current branch pointer can be described as moving a bookmark. | |
| 54 | +| Checkout as worktree; switch/open/lock/unlock/remove worktree | Hg share is related but has different lifecycle and state; no direct operation mapping. | |
| 55 | +| Remote prune, tracking branches, push URL; Git Flow; Git LFS | Git-specific configuration, workflows, or extension behavior without a reliable universal mapping. | |
| 56 | +| Submodule add/remove/update/deinit/move/configure | Hg subrepositories differ in lifecycle and configuration; avoid claiming identical commands. | |
| 57 | +| Apply selected stash file changes; checkout branch from stash | Compositions or partial operations; a plain unshelve hint would omit important behavior. | |
| 58 | +| Resolve using / use mine / use theirs | Resolution concepts are shared; Git rebase can swap ours/theirs roles, making a direct Hg local/other command hint misleading. | |
| 59 | +| Compare with HEAD / worktree; SHA and commit metadata | General comparisons or metadata labels, rather than different operation names; retain the existing wording. | |
| 60 | +| Ignore-file pattern submenu entries | Ignore terminology is shared; the parent identifies .hgignore. | |
| 61 | +| Copy, cut, paste, open, save, reveal, sort, filter, layouts, browser links, tabs/workspaces, AI, avatars, logs, custom actions/templates | Application/editor actions or user-supplied labels, not differing Git/Hg operations. | |
| 62 | + |
| 63 | +## Complete menu source inventory |
| 64 | + |
| 65 | +This includes context menus and button-triggered menu flyouts. Shared factories cover multiple selection and single selection, local/current/remote branches, graph labels, and file/folder variants. Each source below was reviewed; only sources with mapped actions changed. |
| 66 | + |
| 67 | +| Source | Mapped resource keys present | |
| 68 | +| --- | --- | |
| 69 | +| `src/Resources/Styles.axaml` | None | |
| 70 | +| `src/Views/AIAssistant.axaml.cs` | None | |
| 71 | +| `src/Views/Avatar.cs` | None | |
| 72 | +| `src/Views/Blame.axaml.cs` | None | |
| 73 | +| `src/Views/BranchTree.axaml.cs` | `BranchCM.Checkout`, `CreateBranch`, `BranchCM.Rename`, `BranchCM.Delete`, `BranchCM.DeleteMultiBranches`, `BranchCM.ResetToSelectedCommit`, `BranchCM.FastForward`, `RemoteCM.Fetch`, `BranchCM.FetchInto`, `RemoteCM.EnableAutoFetch`, `BranchCM.InteractiveRebase.Manually` | |
| 74 | +| `src/Views/ChangeViewModeSwitcher.axaml` | None | |
| 75 | +| `src/Views/CommitBaseInfo.axaml` | None | |
| 76 | +| `src/Views/CommitBaseInfo.axaml.cs` | None | |
| 77 | +| `src/Views/CommitChanges.axaml.cs` | `ChangeCM.CheckoutThisRevision`, `ChangeCM.CheckoutFirstParentRevision` | |
| 78 | +| `src/Views/CommitDetail.axaml.cs` | `ChangeCM.CheckoutThisRevision`, `ChangeCM.CheckoutFirstParentRevision`, `Blame` | |
| 79 | +| `src/Views/CommitMessagePresenter.cs` | None | |
| 80 | +| `src/Views/CommitMessageToolBox.axaml.cs` | None | |
| 81 | +| `src/Views/Compare.axaml.cs` | `CommitCM.CherryPickMultiple`, `ChangeCM.ResetFileTo` | |
| 82 | +| `src/Views/Conflict.axaml` | None | |
| 83 | +| `src/Views/FileHistories.axaml.cs` | None | |
| 84 | +| `src/Views/FilterModeSwitchButton.axaml.cs` | None | |
| 85 | +| `src/Views/Histories.axaml.cs` | `BranchCM.Checkout`, `CommitCM.Checkout`, `CreateBranch`, `BranchCM.Rename`, `BranchCM.Delete`, `BranchCM.FastForward`, `CommitCM.CherryPick`, `CommitCM.CherryPickMultiple`, `CommitCM.Revert`, `CommitCM.InteractiveRebase`, `CommitCM.InteractiveRebase.Manually`, `CommitCM.InteractiveRebase.Reword`, `CommitCM.InteractiveRebase.Squash`, `CommitCM.InteractiveRebase.Fixup` | |
| 86 | +| `src/Views/InteractiveRebase.axaml.cs` | `CommitCM.InteractiveRebase.{Reword,Squash,Fixup}` | |
| 87 | +| `src/Views/Launcher.axaml` | None | |
| 88 | +| `src/Views/Launcher.axaml.cs` | None | |
| 89 | +| `src/Views/LauncherTabBar.axaml.cs` | None | |
| 90 | +| `src/Views/MergeConflictEditor.axaml` | None | |
| 91 | +| `src/Views/MergeConflictEditor.axaml.cs` | None | |
| 92 | +| `src/Views/RemoteProtocolSwitcher.axaml.cs` | None | |
| 93 | +| `src/Views/Repository.axaml.cs` | None | |
| 94 | +| `src/Views/RepositoryConfigure.axaml` | None | |
| 95 | +| `src/Views/RepositoryToolbar.axaml.cs` | None | |
| 96 | +| `src/Views/RevisionCompare.axaml.cs` | `ChangeCM.ResetFileTo` | |
| 97 | +| `src/Views/RevisionFileContentViewer.axaml.cs` | None | |
| 98 | +| `src/Views/RevisionFileTreeView.axaml.cs` | `ChangeCM.CheckoutThisRevision`, `Blame` | |
| 99 | +| `src/Views/StashesPage.axaml.cs` | `ChangeCM.CheckoutThisRevision`, `StashCM.Apply`, `StashCM.Drop` | |
| 100 | +| `src/Views/SubmoduleRevisionCompare.axaml.cs` | None | |
| 101 | +| `src/Views/SubmodulesView.axaml.cs` | None | |
| 102 | +| `src/Views/TagsView.axaml.cs` | `TagCM.Checkout`, `CreateBranch` | |
| 103 | +| `src/Views/TextDiffView.axaml.cs` | None | |
| 104 | +| `src/Views/ViewLogs.axaml.cs` | None | |
| 105 | +| `src/Views/Welcome.axaml` | None | |
| 106 | +| `src/Views/Welcome.axaml.cs` | None | |
| 107 | +| `src/Views/WorkingCopy.axaml` | None | |
| 108 | +| `src/Views/WorkingCopy.axaml.cs` | `FileCM.Discard`, `FileCM.DiscardMulti`, `FileCM.Stash`, `FileCM.StashMulti`, `Blame`, `WorkingCopy.AddToGitIgnore` | |
| 109 | + |
| 110 | +## Tooltip candidates implemented |
| 111 | + |
| 112 | +| Source | Tooltip | Hg postfix | |
| 113 | +| --- | --- | --- | |
| 114 | +| `RepositoryToolbar.axaml` | Fetch | `{ Hg: pull }` | |
| 115 | +| `RepositoryToolbar.axaml` | Stash | `{ Hg: shelve }` | |
| 116 | +| `RepositoryToolbar.axaml` | Create Branch (shortcut retained) | `{ Hg: bookmark }` | |
| 117 | +| `RepositoryToolbar.axaml` | Apply Patch | `{ Hg: import --no-commit }` | |
| 118 | +| `Repository.axaml` | Stashes (shortcut retained) | `{ Hg: shelves }` | |
| 119 | +| `StashesPage.axaml` | Clear all stashes | `{ Hg: shelve --cleanup }` | |
| 120 | +| `Blame.axaml` | Blame on Previous Revision | `{ Hg: annotate }` | |
| 121 | +| `StashChanges.axaml` | `--include-untracked` | `{ Hg: shelve --unknown }` | |
| 122 | +| `CreateBranch.axaml` | Overwrite existing branch (bound `OverrideTip`) | `{ Hg: bookmark --force }` | |
| 123 | + |
| 124 | +The checkbox tooltip explains that this option applies to tooltips as well as context menus. `HgTextExtension` binds the original label (dynamic resource, literal text, or an existing binding) and the preference to the shared formatter. Only opted-in tooltip fields use this extension; translated labels are never scanned for Git words. |
| 125 | + |
| 126 | +## Tooltip candidates left unchanged |
| 127 | + |
| 128 | +- Push, pull, bisect, commit/amend, merge/rebase and their shared command options already use Hg terminology. |
| 129 | +- Stage/unstage, staged-only stash, assume-unchanged, Git index restoration, Git Flow, Git LFS, worktrees, submodules, remote tracking and Git-specific configuration/flags lack a reliable direct equivalent. |
| 130 | +- Discard-all can include deletion of untracked/ignored files, so `revert` would not describe every mode. |
| 131 | +- GC/prune cleanup, force-with-lease, signoff, reset-author, hook bypass, cherry-pick mainline selection and autostash have Git-specific semantics; no misleading command substitutions are added. |
| 132 | +- Blame instructions, search hints, author/commit metadata, branch/tag/worktree details, paths, URLs, logs, keyboard shortcuts, AI/custom-action descriptions and editor/display controls retain their content. |
| 133 | + |
| 134 | +### Complete tooltip source inventory |
| 135 | + |
| 136 | +The following files contain tooltip assignments or tooltip content. All were reviewed, including literal flags, resource labels, bound data, structured controls and programmatic `ToolTip.SetTip` calls. Most present application help or user/repository data and do not need terminology hints. |
| 137 | + |
| 138 | +- `src/Resources/Styles.axaml` |
| 139 | +- `src/Views/About.axaml` |
| 140 | +- `src/Views/Apply.axaml` |
| 141 | +- `src/Views/ApplyStash.axaml` |
| 142 | +- `src/Views/Blame.axaml` |
| 143 | +- `src/Views/Blame.axaml.cs` |
| 144 | +- `src/Views/BlameCommandPalette.axaml` |
| 145 | +- `src/Views/BranchTree.axaml` |
| 146 | +- `src/Views/ChangeCollectionView.axaml.cs` |
| 147 | +- `src/Views/ChangeViewModeSwitcher.axaml` |
| 148 | +- `src/Views/Chart.cs` |
| 149 | +- `src/Views/CherryPick.axaml` |
| 150 | +- `src/Views/Clone.axaml` |
| 151 | +- `src/Views/CommitBaseInfo.axaml` |
| 152 | +- `src/Views/CommitBaseInfo.axaml.cs` |
| 153 | +- `src/Views/CommitDetail.axaml` |
| 154 | +- `src/Views/CommitMessagePresenter.cs` |
| 155 | +- `src/Views/CommitMessageToolBox.axaml` |
| 156 | +- `src/Views/CommitSearchView.axaml` |
| 157 | +- `src/Views/CommitSubjectPresenter.cs` |
| 158 | +- `src/Views/Compare.axaml` |
| 159 | +- `src/Views/ConventionalCommitMessageBuilder.axaml` |
| 160 | +- `src/Views/CreateBranch.axaml` |
| 161 | +- `src/Views/DeinitSubmodule.axaml` |
| 162 | +- `src/Views/DeleteBranch.axaml` |
| 163 | +- `src/Views/DeleteMultipleBranches.axaml` |
| 164 | +- `src/Views/DiffView.axaml` |
| 165 | +- `src/Views/DirHistories.axaml.cs` |
| 166 | +- `src/Views/ExecuteCustomAction.axaml` |
| 167 | +- `src/Views/Fetch.axaml` |
| 168 | +- `src/Views/FileHistories.axaml` |
| 169 | +- `src/Views/FileHistories.axaml.cs` |
| 170 | +- `src/Views/FileHistoryCommandPalette.axaml` |
| 171 | +- `src/Views/FileModeChange.cs` |
| 172 | +- `src/Views/FilterModeSwitchButton.axaml` |
| 173 | +- `src/Views/GitFlowFinish.axaml` |
| 174 | +- `src/Views/Histories.axaml` |
| 175 | +- `src/Views/InteractiveRebase.axaml` |
| 176 | +- `src/Views/Launcher.axaml` |
| 177 | +- `src/Views/LauncherPage.axaml` |
| 178 | +- `src/Views/LauncherPagesCommandPalette.axaml` |
| 179 | +- `src/Views/LauncherTabBar.axaml` |
| 180 | +- `src/Views/LFSLocks.axaml` |
| 181 | +- `src/Views/Merge.axaml` |
| 182 | +- `src/Views/MergeConflictEditor.axaml` |
| 183 | +- `src/Views/OpenFileCommandPalette.axaml` |
| 184 | +- `src/Views/Preferences.axaml` |
| 185 | +- `src/Views/Pull.axaml` |
| 186 | +- `src/Views/Push.axaml` |
| 187 | +- `src/Views/PushRevision.axaml` |
| 188 | +- `src/Views/Rebase.axaml` |
| 189 | +- `src/Views/Repository.axaml` |
| 190 | +- `src/Views/RepositoryConfigure.axaml` |
| 191 | +- `src/Views/RepositoryToolbar.axaml` |
| 192 | +- `src/Views/RevisionCompare.axaml` |
| 193 | +- `src/Views/RevisionFiles.axaml` |
| 194 | +- `src/Views/StashChanges.axaml` |
| 195 | +- `src/Views/StashesPage.axaml` |
| 196 | +- `src/Views/Statistics.axaml` |
| 197 | +- `src/Views/SubmoduleRevisionCompare.axaml` |
| 198 | +- `src/Views/SubmodulesView.axaml` |
| 199 | +- `src/Views/TagsView.axaml` |
| 200 | +- `src/Views/UpdateSubmodules.axaml` |
| 201 | +- `src/Views/WelcomeToolbar.axaml` |
| 202 | +- `src/Views/WorkingCopy.axaml` |
| 203 | + |
| 204 | +## References |
| 205 | + |
| 206 | +- [Mercurial glossary](https://www.mercurial-scm.org/help/topics/glossary): bookmarks and working-directory updates. |
| 207 | +- [Graft](https://www.mercurial-scm.org/help/commands/graft) and [backout](https://www.mercurial-scm.org/help/commands/backout): copying and reversing changesets. |
| 208 | +- [Histedit](https://www.mercurial-scm.org/help/commands/histedit): mess, fold, and roll actions. |
| 209 | +- [Revert](https://www.mercurial-scm.org/help/commands/revert) and [annotate](https://www.mercurial-scm.org/help/commands/annotate): restoring files and line attribution. |
| 210 | +- [Shelve](https://www.mercurial-scm.org/help/commands/shelve) and [unshelve](https://www.mercurial-scm.org/help/commands/unshelve): saving, keeping, and deleting shelved changes. |
| 211 | + |
| 212 | +- [Import](https://mercurial-scm.org/help/commands/import): `--no-commit` applies the patch without committing. |
0 commit comments