From af842e40d4d11aea8f9534e42d312fff2860c0ba Mon Sep 17 00:00:00 2001 From: Karim Khaleel Date: Sat, 18 May 2024 19:46:06 +0300 Subject: [PATCH 001/157] Remove unnecesary schema validations in user config --- pkg/config/user_config.go | 6 +++--- schema/config.json | 9 ++------- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/pkg/config/user_config.go b/pkg/config/user_config.go index c225944613a..7a551bca66b 100644 --- a/pkg/config/user_config.go +++ b/pkg/config/user_config.go @@ -252,7 +252,7 @@ type PagingConfig struct { // diff-so-fancy // delta --dark --paging=never // ydiff -p cat -s --wrap --width={{columnWidth}} - Pager PagerType `yaml:"pager" jsonschema:"minLength=1"` + Pager PagerType `yaml:"pager"` // If true, Lazygit will use whatever pager is specified in `$GIT_PAGER`, `$PAGER`, or your *git config*. If the pager ends with something like ` | less` we will strip that part out, because less doesn't play nice with our rendering approach. If the custom pager uses less under the hood, that will also break rendering (hence the `--paging=never` flag for the `delta` pager). UseConfig bool `yaml:"useConfig"` // e.g. 'difft --color=always' @@ -294,9 +294,9 @@ type LogConfig struct { type CommitPrefixConfig struct { // pattern to match on. E.g. for 'feature/AB-123' to match on the AB-123 use "^\\w+\\/(\\w+-\\w+).*" - Pattern string `yaml:"pattern" jsonschema:"example=^\\w+\\/(\\w+-\\w+).*,minLength=1"` + Pattern string `yaml:"pattern" jsonschema:"example=^\\w+\\/(\\w+-\\w+).*"` // Replace directive. E.g. for 'feature/AB-123' to start the commit message with 'AB-123 ' use "[$1] " - Replace string `yaml:"replace" jsonschema:"example=[$1] ,minLength=1"` + Replace string `yaml:"replace" jsonschema:"example=[$1]"` } type UpdateConfig struct { diff --git a/schema/config.json b/schema/config.json index 05a2db1517f..3e8bc7c802e 100644 --- a/schema/config.json +++ b/schema/config.json @@ -428,7 +428,6 @@ }, "pager": { "type": "string", - "minLength": 1, "description": "e.g.\ndiff-so-fancy\ndelta --dark --paging=never\nydiff -p cat -s --wrap --width={{columnWidth}}", "default": "", "examples": [ @@ -543,7 +542,6 @@ "properties": { "pattern": { "type": "string", - "minLength": 1, "description": "pattern to match on. E.g. for 'feature/AB-123' to match on the AB-123 use \"^\\\\w+\\\\/(\\\\w+-\\\\w+).*\"", "examples": [ "^\\w+\\/(\\w+-\\w+).*" @@ -551,10 +549,9 @@ }, "replace": { "type": "string", - "minLength": 1, "description": "Replace directive. E.g. for 'feature/AB-123' to start the commit message with 'AB-123 ' use \"[$1] \"", "examples": [ - "[$1] " + "[$1]" ] } }, @@ -567,7 +564,6 @@ "properties": { "pattern": { "type": "string", - "minLength": 1, "description": "pattern to match on. E.g. for 'feature/AB-123' to match on the AB-123 use \"^\\\\w+\\\\/(\\\\w+-\\\\w+).*\"", "examples": [ "^\\w+\\/(\\w+-\\w+).*" @@ -575,10 +571,9 @@ }, "replace": { "type": "string", - "minLength": 1, "description": "Replace directive. E.g. for 'feature/AB-123' to start the commit message with 'AB-123 ' use \"[$1] \"", "examples": [ - "[$1] " + "[$1]" ] } }, From 7d787afb2cd8f711b508fb63a7d097bffe9c9cb3 Mon Sep 17 00:00:00 2001 From: Karim Khaleel Date: Thu, 16 May 2024 12:52:42 +0300 Subject: [PATCH 002/157] Set default value for WindowSize config to pass validation --- pkg/config/user_config.go | 1 + schema/config.json | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/pkg/config/user_config.go b/pkg/config/user_config.go index 7a551bca66b..4c0d50e5204 100644 --- a/pkg/config/user_config.go +++ b/pkg/config/user_config.go @@ -684,6 +684,7 @@ func GetDefaultConfig() *UserConfig { CommandLogSize: 8, SplitDiff: "auto", SkipRewordInEditorWarning: false, + WindowSize: "normal", Border: "rounded", AnimateExplosion: true, PortraitMode: "auto", diff --git a/schema/config.json b/schema/config.json index 3e8bc7c802e..556ce46077e 100644 --- a/schema/config.json +++ b/schema/config.json @@ -341,7 +341,8 @@ "half", "full" ], - "description": "Default size for focused window. Window size can be changed from within Lazygit with '+' and '_' (but this won't change the default).\nOne of: 'normal' (default) | 'half' | 'full'" + "description": "Default size for focused window. Window size can be changed from within Lazygit with '+' and '_' (but this won't change the default).\nOne of: 'normal' (default) | 'half' | 'full'", + "default": "normal" }, "border": { "type": "string", From b98ae1c773f3bd264a484a007d4b0cbe1f422ddd Mon Sep 17 00:00:00 2001 From: Karim Khaleel Date: Wed, 24 Apr 2024 23:23:40 +0300 Subject: [PATCH 003/157] Add default lazygit config generator for Config.md from JSON schema --- docs/Config.md | 647 ++++++++++++------ go.mod | 1 + go.sum | 2 + pkg/jsonschema/generate_config_docs.go | 269 ++++++++ pkg/jsonschema/generator.go | 1 + .../github.com/iancoleman/orderedmap/LICENSE | 21 + .../iancoleman/orderedmap/orderedmap.go | 266 +++++++ .../iancoleman/orderedmap/readme.md | 81 +++ vendor/modules.txt | 3 + 9 files changed, 1085 insertions(+), 206 deletions(-) create mode 100644 pkg/jsonschema/generate_config_docs.go create mode 100644 vendor/github.com/iancoleman/orderedmap/LICENSE create mode 100644 vendor/github.com/iancoleman/orderedmap/orderedmap.go create mode 100644 vendor/github.com/iancoleman/orderedmap/readme.md diff --git a/docs/Config.md b/docs/Config.md index d85637429c3..f9c6a729b23 100644 --- a/docs/Config.md +++ b/docs/Config.md @@ -29,268 +29,503 @@ to the top of your config file or via [Visual Studio Code settings.json config][ ## Default + ```yaml +# Config relating to the Lazygit UI gui: - # stuff relating to the UI - windowSize: 'normal' # one of 'normal' | 'half' | 'full' default is 'normal' - scrollHeight: 2 # how many lines you scroll by - scrollPastBottom: true # enable scrolling past the bottom - scrollOffMargin: 2 # how many lines to keep before/after the cursor when it reaches the top/bottom of the view; see 'Scroll-off Margin' section below - scrollOffBehavior: 'margin' # one of 'margin' | 'jump'; see 'Scroll-off Margin' section below - sidePanelWidth: 0.3333 # number from 0 to 1 - expandFocusedSidePanel: false - mainPanelSplitMode: 'flexible' # one of 'horizontal' | 'flexible' | 'vertical' - enlargedSideViewLocation: 'left' # one of 'left' | 'top' - language: 'auto' # one of 'auto' | 'en' | 'zh-CN' | 'zh-TW' | 'pl' | 'nl' | 'ja' | 'ko' | 'ru' - timeFormat: '02 Jan 06' # https://pkg.go.dev/time#Time.Format - shortTimeFormat: '3:04PM' + # The number of lines you scroll by when scrolling the main window + scrollHeight: 2 + + # If true, allow scrolling past the bottom of the content in the main window + scrollPastBottom: true + + # See https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#scroll-off-margin + scrollOffMargin: 2 + + # One of: 'margin' (default) | 'jump' + scrollOffBehavior: margin + + # If true, capture mouse events. + # When mouse events are captured, it's a little harder to select text: e.g. requiring you to hold the option key when on macOS. + mouseEvents: true + + # Fraction of the total screen width to use for the left side section. You may want to pick a small number (e.g. 0.2) if you're using a narrow screen, so that you can see more of the main section. + # Number from 0 to 1.0. + sidePanelWidth: 0.3333 + + # Sometimes the main window is split in two (e.g. when the selected file has both staged and unstaged changes). This setting controls how the two sections are split. + # Options are: + # - 'horizontal': split the window horizontally + # - 'vertical': split the window vertically + # - 'flexible': (default) split the window horizontally if the window is wide enough, otherwise split vertically + mainPanelSplitMode: flexible + + # How the window is split when in half screen mode (i.e. after hitting '+' once). + # Possible values: + # - 'left': split the window horizontally (side panel on the left, main view on the right) + # - 'top': split the window vertically (side panel on top, main view below) + enlargedSideViewLocation: left + + # One of 'auto' (default) | 'en' | 'zh-CN' | 'zh-TW' | 'pl' | 'nl' | 'ja' | 'ko' | 'ru' + language: auto + + # Format used when displaying time e.g. commit time. + # Uses Go's time format syntax: https://pkg.go.dev/time#Time.Format + timeFormat: 02 Jan 06 + + # Format used when displaying time if the time is less than 24 hours ago. + # Uses Go's time format syntax: https://pkg.go.dev/time#Time.Format + shortTimeFormat: 3:04PM + + # Config relating to colors and styles. + # See https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#color-attributes theme: + # Border color of focused window activeBorderColor: - green - bold + + # Border color of non-focused windows inactiveBorderColor: - - white + - default + + # Border color of focused window when searching in that window searchingActiveBorderColor: - cyan - bold + + # Color of keybindings help text in the bottom line optionsTextColor: - blue + + # Background color of selected line. + # See https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#highlighting-the-selected-line selectedLineBgColor: - - blue # set to `default` to have no background colour + - blue + + # Foreground color of copied commit + cherryPickedCommitFgColor: + - blue + + # Background color of copied commit cherryPickedCommitBgColor: - cyan - cherryPickedCommitFgColor: + + # Foreground color of marked base commit (for rebase) + markedBaseCommitFgColor: - blue + + # Background color of marked base commit (for rebase) + markedBaseCommitBgColor: + - yellow + + # Color for file with unstaged changes unstagedChangesColor: - red + + # Default text color defaultFgColor: - default + + # Config relating to the commit length indicator commitLength: + # If true, show an indicator of commit message length show: true - mouseEvents: true - skipDiscardChangeWarning: false - skipStashWarning: false - showFileTree: true # for rendering changes files in a tree format - showListFooter: true # for seeing the '5 of 20' message in list panels + + # If true, show the '5 of 20' footer at the bottom of list views + showListFooter: true + + # If true, display the files in the file views as a tree. If false, display the files as a flat list. + # This can be toggled from within Lazygit with the '~' key, but that will not change the default. + showFileTree: true + + # If true, show a random tip in the command log when Lazygit starts showRandomTip: true - showBranchCommitHash: false # show commit hashes alongside branch names - showBottomLine: true # for hiding the bottom information line (unless it has important information to tell you) - showPanelJumps: true # for showing the jump-to-panel keybindings as panel subtitles + + # If true, show the command log showCommandLog: true - showIcons: false # deprecated: use nerdFontsVersion instead - nerdFontsVersion: "" # nerd fonts version to use ("2" or "3"); empty means don't show nerd font icons - showFileIcons: true # for hiding file icons in the file views - commitHashLength: 8 # length of commit hash in commits view. 0 shows '*' if NF icons aren't enabled + + # If true, show the bottom line that contains keybinding info and useful buttons. If false, this line will be hidden except to display a loader for an in-progress action. + showBottomLine: true + + # If true, show jump-to-window keybindings in window titles. + showPanelJumps: true + + # Nerd fonts version to use. + # One of: '2' | '3' | empty string (default) + # If empty, do not show icons. + nerdFontsVersion: "" + + # If true (default), file icons are shown in the file views. Only relevant if NerdFontsVersion is not empty. + showFileIcons: true + + # Length of commit hash in commits view. 0 shows '*' if NF icons aren't on. + commitHashLength: 8 + + # Height of the command log view commandLogSize: 8 - splitDiff: 'auto' # one of 'auto' | 'always' - skipRewordInEditorWarning: false # for skipping the confirmation before launching the reword editor - border: 'rounded' # one of 'single' | 'double' | 'rounded' | 'hidden' - animateExplosion: true # shows an explosion animation when nuking the working tree - portraitMode: 'auto' # one of 'auto' | 'never' | 'always' - filterMode: 'substring' # one of 'substring' | 'fuzzy'; see 'Filtering' section below + + # Whether to split the main window when viewing file changes. + # One of: 'auto' | 'always' + # If 'auto', only split the main window when a file has both staged and unstaged changes + splitDiff: auto + + # Default size for focused window. Window size can be changed from within Lazygit with '+' and '_' (but this won't change the default). + # One of: 'normal' (default) | 'half' | 'full' + windowSize: normal + + # Window border style. + # One of 'rounded' (default) | 'single' | 'double' | 'hidden' + border: rounded + + # If true, show a seriously epic explosion animation when nuking the working tree. + animateExplosion: true + + # Whether to stack UI components on top of each other. + # One of 'auto' (default) | 'always' | 'never' + portraitMode: auto + + # How things are filtered when typing '/'. + # One of 'substring' (default) | 'fuzzy' + filterMode: substring + + # Config relating to the spinner. spinner: - frames: ['|', '/', '-', '\\'] - rate: 50 # spinner rate in milliseconds - statusPanelView: 'dashboard' # one of 'dashboard' | 'allBranchesLog' + # The frames of the spinner animation. + frames: + - '|' + - / + - '-' + - \ + + # The "speed" of the spinner in milliseconds. + rate: 50 + + # Status panel view. + # One of 'dashboard' (default) | 'allBranchesLog' + statusPanelView: dashboard + +# Config relating to git git: + # See https://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Pagers.md paging: + # Value of the --color arg in the git diff command. Some pagers want this to be set to 'always' and some want it set to 'never' colorArg: always - useConfig: false + + # e.g. + # diff-so-fancy + # delta --dark --paging=never + # ydiff -p cat -s --wrap --width={{columnWidth}} + pager: "" + + # e.g. 'difft --color=always' + externalDiffCommand: "" + + # Config relating to committing commit: - signOff: false - autoWrapCommitMessage: true # automatic WYSIWYG wrapping of the commit message as you type - autoWrapWidth: 72 # if autoWrapCommitMessage is true, the width to wrap to + # Automatic WYSIWYG wrapping of the commit message as you type + autoWrapCommitMessage: true + + # If autoWrapCommitMessage is true, the width to wrap to + autoWrapWidth: 72 + + # Config relating to merging merging: - # only applicable to unix users - manualCommit: false - # extra args passed to `git merge`, e.g. --no-ff - args: '' + # Extra args passed to `git merge`, e.g. --no-ff + args: "" + + # list of branches that are considered 'main' branches, used when displaying commits + mainBranches: + - master + - main + + # Prefix to use when skipping hooks. E.g. if set to 'WIP', then pre-commit hooks will be skipped when the commit message starts with 'WIP' + skipHookPrefix: WIP + + # If true, periodically fetch from remote + autoFetch: true + + # If true, periodically refresh files and submodules + autoRefresh: true + + # If true, pass the --all arg to git fetch + fetchAll: true + + # Command used when displaying the current branch git log in the main window + branchLogCmd: git log --graph --color=always --abbrev-commit --decorate --date=relative --pretty=medium {{branchName}} -- + + # Command used to display git log of all branches in the main window + allBranchesLogCmd: git log --graph --all --color=always --abbrev-commit --decorate --date=relative --pretty=medium + + # See https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#predefined-commit-message-prefix + commitPrefix: + # pattern to match on. E.g. for 'feature/AB-123' to match on the AB-123 use "^\\w+\\/(\\w+-\\w+).*" + pattern: "" + + # Replace directive. E.g. for 'feature/AB-123' to start the commit message with 'AB-123 ' use "[$1] " + replace: "" + + # Config for showing the log in the commits view log: - # one of date-order, author-date-order, topo-order or default. - # topo-order makes it easier to read the git log graph, but commits may not - # appear chronologically. See https://git-scm.com/docs/git-log#_commit_ordering + # One of: 'date-order' | 'author-date-order' | 'topo-order' | 'default' + # 'topo-order' makes it easier to read the git log graph, but commits may not + # appear chronologically. See https://git-scm.com/docs/ # # Deprecated: Configure this with `Log menu -> Commit sort order` ( in the commits window by default). - order: 'topo-order' - # one of always, never, when-maximised - # this determines whether the git graph is rendered in the commits panel + order: topo-order + + # This determines whether the git graph is rendered in the commits panel + # One of 'always' | 'never' | 'when-maximised' # # Deprecated: Configure this with `Log menu -> Show git graph` ( in the commits window by default). - showGraph: 'always' - # displays the whole git graph by default in the commits panel (equivalent to passing the `--all` argument to `git log`) - showWholeGraph: false - skipHookPrefix: WIP - # The main branches. We colour commits green if they belong to one of these branches, - # so that you can easily see which commits are unique to your branch (coloured in yellow) - mainBranches: [master, main] - autoFetch: true - autoRefresh: true - fetchAll: true # Pass --all flag when running git fetch. Set to false to fetch only origin (or the current branch's upstream remote if there is one) - branchLogCmd: 'git log --graph --color=always --abbrev-commit --decorate --date=relative --pretty=medium {{branchName}} --' - allBranchesLogCmd: 'git log --graph --all --color=always --abbrev-commit --decorate --date=relative --pretty=medium' - overrideGpg: false # prevents lazygit from spawning a separate process when using GPG - disableForcePushing: false - parseEmoji: false - truncateCopiedCommitHashesTo: 12 # When copying commit hashes to the clipboard, truncate them to this length. Set to 40 to disable truncation. -os: - copyToClipboardCmd: '' # See 'Custom Command for Copying to Clipboard' section - editPreset: '' # see 'Configuring File Editing' section - edit: '' - editAtLine: '' - editAtLineAndWait: '' - open: '' - openLink: '' -refresher: - refreshInterval: 10 # File/submodule refresh interval in seconds. Auto-refresh can be disabled via option 'git.autoRefresh'. - fetchInterval: 60 # Re-fetch interval in seconds. Auto-fetch can be disabled via option 'git.autoFetch'. + showGraph: always + + # When copying commit hashes to the clipboard, truncate them to this + # length. Set to 40 to disable truncation. + truncateCopiedCommitHashesTo: 12 + +# Periodic update checks update: - method: prompt # can be: prompt | background | never - days: 14 # how often an update is checked for -confirmOnQuit: false -# determines whether hitting 'esc' will quit the application when there is nothing to cancel/close -quitOnTopLevelReturn: false -disableStartupPopups: false -notARepository: 'prompt' # one of: 'prompt' | 'create' | 'skip' | 'quit' -promptToReturnFromSubprocess: true # display confirmation when subprocess terminates + # One of: 'prompt' (default) | 'background' | 'never' + method: prompt + + # Period in days between update checks + days: 14 + +# Background refreshes +refresher: + # File/submodule refresh interval in seconds. + # Auto-refresh can be disabled via option 'git.autoRefresh'. + refreshInterval: 10 + + # Re-fetch interval in seconds. + # Auto-fetch can be disabled via option 'git.autoFetch'. + fetchInterval: 60 + +# Keybindings keybinding: universal: - quit: 'q' - quit-alt1: '' # alternative/alias of quit - return: '' # return to previous menu, will quit if there's nowhere to return - quitWithoutChangingDirectory: 'Q' - togglePanel: '' # goto the next panel - prevItem: '' # go one line up - nextItem: '' # go one line down - prevItem-alt: 'k' # go one line up - nextItem-alt: 'j' # go one line down - prevPage: ',' # go to next page in list - nextPage: '.' # go to previous page in list - gotoTop: '<' # go to top of list - gotoBottom: '>' # go to bottom of list - scrollLeft: 'H' # scroll left within list view - scrollRight: 'L' # scroll right within list view - prevBlock: '' # goto the previous block / panel - nextBlock: '' # goto the next block / panel - prevBlock-alt: 'h' # goto the previous block / panel - nextBlock-alt: 'l' # goto the next block / panel - jumpToBlock: ['1', '2', '3', '4', '5'] # goto the Nth block / panel - nextMatch: 'n' - prevMatch: 'N' - optionMenu: # show help menu - optionMenu-alt1: '?' # show help menu - select: '' - goInto: '' - openRecentRepos: '' - confirm: '' - remove: 'd' - new: 'n' - edit: 'e' - openFile: 'o' - scrollUpMain: '' # main panel scroll up - scrollDownMain: '' # main panel scroll down - scrollUpMain-alt1: 'K' # main panel scroll up - scrollDownMain-alt1: 'J' # main panel scroll down - scrollUpMain-alt2: '' # main panel scroll up - scrollDownMain-alt2: '' # main panel scroll down + quit: q + quit-alt1: + return: + quitWithoutChangingDirectory: Q + togglePanel: + prevItem: + nextItem: + prevItem-alt: k + nextItem-alt: j + prevPage: ',' + nextPage: . + scrollLeft: H + scrollRight: L + gotoTop: < + gotoBottom: '>' + toggleRangeSelect: v + rangeSelectDown: + rangeSelectUp: + prevBlock: + nextBlock: + prevBlock-alt: h + nextBlock-alt: l + nextBlock-alt2: + prevBlock-alt2: + jumpToBlock: + - "1" + - "2" + - "3" + - "4" + - "5" + nextMatch: "n" + prevMatch: "N" + startSearch: / + optionMenu: + optionMenu-alt1: '?' + select: + goInto: + confirm: + confirmInEditor: + remove: d + new: "n" + edit: e + openFile: o + scrollUpMain: + scrollDownMain: + scrollUpMain-alt1: K + scrollDownMain-alt1: J + scrollUpMain-alt2: + scrollDownMain-alt2: executeCustomCommand: ':' - createRebaseOptionsMenu: 'm' - pushFiles: 'P' - pullFiles: 'p' - refresh: 'R' - createPatchOptionsMenu: '' + createRebaseOptionsMenu: m + + # 'Files' appended for legacy reasons + pushFiles: P + + # 'Files' appended for legacy reasons + pullFiles: p + refresh: R + createPatchOptionsMenu: nextTab: ']' prevTab: '[' - nextScreenMode: '+' - prevScreenMode: '_' - undo: 'z' - redo: '' - filteringMenu: '' - diffingMenu: 'W' - diffingMenu-alt: '' # deprecated - copyToClipboard: '' - submitEditorText: '' + nextScreenMode: + + prevScreenMode: _ + undo: z + redo: + filteringMenu: + diffingMenu: W + diffingMenu-alt: + copyToClipboard: + openRecentRepos: + submitEditorText: extrasMenu: '@' - toggleWhitespaceInDiffView: '' + toggleWhitespaceInDiffView: increaseContextInDiffView: '}' decreaseContextInDiffView: '{' - toggleRangeSelect: 'v' - rangeSelectUp: '' - rangeSelectDown: '' + openDiffTool: status: - checkForUpdate: 'u' - recentRepos: '' + checkForUpdate: u + recentRepos: + allBranchesLogGraph: a files: - commitChanges: 'c' - commitChangesWithoutHook: 'w' # commit changes without pre-commit hook - amendLastCommit: 'A' - commitChangesWithEditor: 'C' - findBaseCommitForFixup: '' - confirmDiscard: 'x' - ignoreFile: 'i' - refreshFiles: 'r' - stashAllChanges: 's' - viewStashOptions: 'S' - toggleStagedAll: 'a' # stage/unstage all - viewResetOptions: 'D' - fetch: 'f' + commitChanges: c + commitChangesWithoutHook: w + amendLastCommit: A + commitChangesWithEditor: C + findBaseCommitForFixup: + confirmDiscard: x + ignoreFile: i + refreshFiles: r + stashAllChanges: s + viewStashOptions: S + toggleStagedAll: a + viewResetOptions: D + fetch: f toggleTreeView: '`' - openMergeTool: 'M' - openStatusFilter: '' + openMergeTool: M + openStatusFilter: + copyFileInfoToClipboard: "y" branches: - createPullRequest: 'o' - viewPullRequestOptions: 'O' - checkoutBranchByName: 'c' - forceCheckoutBranch: 'F' - rebaseBranch: 'r' - renameBranch: 'R' - mergeIntoCurrentBranch: 'M' - viewGitFlowOptions: 'i' - fastForward: 'f' # fast-forward this branch from its upstream - createTag: 'T' - pushTag: 'P' - setUpstream: 'u' # set as upstream of checked-out branch - fetchRemote: 'f' + createPullRequest: o + viewPullRequestOptions: O + copyPullRequestURL: + checkoutBranchByName: c + forceCheckoutBranch: F + rebaseBranch: r + renameBranch: R + mergeIntoCurrentBranch: M + viewGitFlowOptions: i + fastForward: f + createTag: T + pushTag: P + setUpstream: u + fetchRemote: f + sortOrder: s + worktrees: + viewWorktreeOptions: w commits: - squashDown: 's' - renameCommit: 'r' - renameCommitWithEditor: 'R' - viewResetOptions: 'g' - markCommitAsFixup: 'f' - createFixupCommit: 'F' # create fixup commit for this commit - squashAboveCommits: 'S' - moveDownCommit: '' # move commit down one - moveUpCommit: '' # move commit up one - amendToCommit: 'A' - amendAttributeMenu: 'a' - pickCommit: 'p' # pick commit (when mid-rebase) - revertCommit: 't' - cherryPickCopy: 'C' - pasteCommits: 'V' - tagCommit: 'T' - checkoutCommit: '' - resetCherryPick: '' - copyCommitMessageToClipboard: '' - openLogMenu: '' - viewBisectOptions: 'b' + squashDown: s + renameCommit: r + renameCommitWithEditor: R + viewResetOptions: g + markCommitAsFixup: f + createFixupCommit: F + squashAboveCommits: S + moveDownCommit: + moveUpCommit: + amendToCommit: A + resetCommitAuthor: a + pickCommit: p + revertCommit: t + cherryPickCopy: C + pasteCommits: V + markCommitAsBaseForRebase: B + tagCommit: T + checkoutCommit: + resetCherryPick: + copyCommitAttributeToClipboard: "y" + openLogMenu: + openInBrowser: o + viewBisectOptions: b + startInteractiveRebase: i + amendAttribute: + resetAuthor: a + setAuthor: A + addCoAuthor: c stash: - popStash: 'g' - renameStash: 'r' + popStash: g + renameStash: r commitFiles: - checkoutCommitFile: 'c' + checkoutCommitFile: c main: - toggleSelectHunk: 'a' - pickBothHunks: 'b' + toggleSelectHunk: a + pickBothHunks: b + editSelectHunk: E submodules: - init: 'i' - update: 'u' - bulkMenu: 'b' + init: i + update: u + bulkMenu: b commitMessage: - commitMenu: '' - amendAttribute: - addCoAuthor: 'c' - resetAuthor: 'a' - setAuthor: 'A' + commitMenu: + +# Config relating to things outside of Lazygit like how files are opened, copying to clipboard, etc +os: + # Command for editing a file. Should contain "{{filename}}". + edit: "" + + # Command for editing a file at a given line number. Should contain + # "{{filename}}", and may optionally contain "{{line}}". + editAtLine: "" + + # Same as EditAtLine, except that the command needs to wait until the + # window is closed. + editAtLineAndWait: "" + + # For opening a directory in an editor + openDirInEditor: "" + + # A built-in preset that sets all of the above settings. Supported presets + # are defined in the getPreset function in editor_presets.go. + editPreset: "" + + # Command for opening a file, as if the file is double-clicked. Should + # contain "{{filename}}", but doesn't support "{{line}}". + open: "" + + # Command for opening a link. Should contain "{{link}}". + openLink: "" + + # EditCommand is the command for editing a file. + # Deprecated: use Edit instead. Note that semantics are different: + # EditCommand is just the command itself, whereas Edit contains a + # "{{filename}}" variable. + editCommand: "" + + # EditCommandTemplate is the command template for editing a file + # Deprecated: use EditAtLine instead. + editCommandTemplate: "" + + # OpenCommand is the command for opening a file + # Deprecated: use Open instead. + openCommand: "" + + # OpenLinkCommand is the command for opening a link + # Deprecated: use OpenLink instead. + openLinkCommand: "" + + # CopyToClipboardCmd is the command for copying to clipboard. + # See https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#custom-command-for-copying-to-clipboard + copyToClipboardCmd: "" + +# What to do when opening Lazygit outside of a git repo. +# - 'prompt': (default) ask whether to initialize a new repo or open in the most recent repo +# - 'create': initialize a new repo +# - 'skip': open most recent repo +# - 'quit': exit Lazygit +notARepository: prompt + +# If true, display a confirmation when subprocess terminates. This allows you to view the output of the subprocess before returning to Lazygit. +promptToReturnFromSubprocess: true ``` + ## Platform Defaults diff --git a/go.mod b/go.mod index ca0adebe212..6e7d87686bd 100644 --- a/go.mod +++ b/go.mod @@ -11,6 +11,7 @@ require ( github.com/gdamore/tcell/v2 v2.7.4 github.com/go-errors/errors v1.5.1 github.com/gookit/color v1.4.2 + github.com/iancoleman/orderedmap v0.3.0 github.com/imdario/mergo v0.3.11 github.com/integrii/flaggy v1.4.0 github.com/jesseduffield/generics v0.0.0-20220320043834-727e535cbe68 diff --git a/go.sum b/go.sum index cdd64127c1e..ae6adb2314e 100644 --- a/go.sum +++ b/go.sum @@ -171,6 +171,8 @@ github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/iancoleman/orderedmap v0.3.0 h1:5cbR2grmZR/DiVt+VJopEhtVs9YGInGIxAoMJn+Ichc= +github.com/iancoleman/orderedmap v0.3.0/go.mod h1:XuLcCUkdL5owUCQeF2Ue9uuw1EptkJDkXXS7VoV7XGE= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imdario/mergo v0.3.9/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= diff --git a/pkg/jsonschema/generate_config_docs.go b/pkg/jsonschema/generate_config_docs.go new file mode 100644 index 00000000000..441cc55e71f --- /dev/null +++ b/pkg/jsonschema/generate_config_docs.go @@ -0,0 +1,269 @@ +package jsonschema + +import ( + "bytes" + "encoding/json" + "errors" + "fmt" + "os" + "strings" + + "github.com/iancoleman/orderedmap" + "github.com/jesseduffield/lazycore/pkg/utils" + "github.com/samber/lo" + + "gopkg.in/yaml.v3" +) + +type Node struct { + Name string + Description string + Default any + Children []*Node +} + +const ( + IndentLevel = 2 + DocumentationCommentStart = "\n" + DocumentationCommentEnd = "" + DocumentationCommentStartLen = len(DocumentationCommentStart) +) + +func insertBlankLines(buffer bytes.Buffer) bytes.Buffer { + lines := strings.Split(strings.TrimRight(buffer.String(), "\n"), "\n") + + var newBuffer bytes.Buffer + + previousIndent := -1 + wasComment := false + + for _, line := range lines { + trimmedLine := strings.TrimLeft(line, " ") + indent := len(line) - len(trimmedLine) + isComment := strings.HasPrefix(trimmedLine, "#") + if isComment && !wasComment && indent <= previousIndent { + newBuffer.WriteString("\n") + } + newBuffer.WriteString(line) + newBuffer.WriteString("\n") + previousIndent = indent + wasComment = isComment + } + + return newBuffer +} + +func prepareMarshalledConfig(buffer bytes.Buffer) []byte { + buffer = insertBlankLines(buffer) + + // Remove all `---` lines + lines := strings.Split(strings.TrimRight(buffer.String(), "\n"), "\n") + + var newBuffer bytes.Buffer + + for _, line := range lines { + if strings.TrimSpace(line) != "---" { + newBuffer.WriteString(line) + newBuffer.WriteString("\n") + } + } + + config := newBuffer.Bytes() + + // Add markdown yaml block tag + config = append([]byte("```yaml\n"), config...) + config = append(config, []byte("```\n")...) + + return config +} + +func setComment(yamlNode *yaml.Node, description string) { + // Workaround for the way yaml formats the HeadComment if it contains + // blank lines: it renders these without a leading "#", but we want a + // leading "#" even on blank lines. However, yaml respects it if the + // HeadComment already contains a leading "#", so we prefix all lines + // (including blank ones) with "#". + yamlNode.HeadComment = strings.Join( + lo.Map(strings.Split(description, "\n"), func(s string, _ int) string { + if s == "" { + return "#" // avoid trailing space on blank lines + } + return "# " + s + }), + "\n") +} + +func (n *Node) MarshalYAML() (interface{}, error) { + node := yaml.Node{ + Kind: yaml.MappingNode, + } + + keyNode := yaml.Node{ + Kind: yaml.ScalarNode, + Value: n.Name, + } + if n.Description != "" { + setComment(&keyNode, n.Description) + } + + if n.Default != nil { + valueNode := yaml.Node{ + Kind: yaml.ScalarNode, + } + err := valueNode.Encode(n.Default) + if err != nil { + return nil, err + } + node.Content = append(node.Content, &keyNode, &valueNode) + } else if len(n.Children) > 0 { + childrenNode := yaml.Node{ + Kind: yaml.MappingNode, + } + for _, child := range n.Children { + childYaml, err := child.MarshalYAML() + if err != nil { + return nil, err + } + + childKey := yaml.Node{ + Kind: yaml.ScalarNode, + Value: child.Name, + } + if child.Description != "" { + setComment(&childKey, child.Description) + } + childYaml = childYaml.(*yaml.Node) + childrenNode.Content = append(childrenNode.Content, childYaml.(*yaml.Node).Content...) + } + node.Content = append(node.Content, &keyNode, &childrenNode) + } + + return &node, nil +} + +func getDescription(v *orderedmap.OrderedMap) string { + description, ok := v.Get("description") + if !ok { + description = "" + } + return description.(string) +} + +func getDefault(v *orderedmap.OrderedMap) (error, any) { + defaultValue, ok := v.Get("default") + if ok { + return nil, defaultValue + } + + dataType, ok := v.Get("type") + if ok { + dataTypeString := dataType.(string) + if dataTypeString == "string" { + return nil, "" + } + } + + return errors.New("Failed to get default value"), nil +} + +func parseNode(parent *Node, name string, value *orderedmap.OrderedMap) { + description := getDescription(value) + err, defaultValue := getDefault(value) + if err == nil { + leaf := &Node{Name: name, Description: description, Default: defaultValue} + parent.Children = append(parent.Children, leaf) + } + + properties, ok := value.Get("properties") + if !ok { + return + } + + orderedProperties := properties.(orderedmap.OrderedMap) + + node := &Node{Name: name, Description: description} + parent.Children = append(parent.Children, node) + + keys := orderedProperties.Keys() + for _, name := range keys { + value, _ := orderedProperties.Get(name) + typedValue := value.(orderedmap.OrderedMap) + parseNode(node, name, &typedValue) + } +} + +func writeToConfigDocs(config []byte) error { + configPath := utils.GetLazyRootDirectory() + "/docs/Config.md" + markdown, err := os.ReadFile(configPath) + if err != nil { + return fmt.Errorf("Error reading Config.md file %w", err) + } + + startConfigSectionIndex := bytes.Index(markdown, []byte(DocumentationCommentStart)) + if startConfigSectionIndex == -1 { + return errors.New("Default config starting comment not found") + } + + endConfigSectionIndex := bytes.Index(markdown[startConfigSectionIndex+DocumentationCommentStartLen:], []byte(DocumentationCommentEnd)) + if endConfigSectionIndex == -1 { + return errors.New("Default config closing comment not found") + } + + endConfigSectionIndex = endConfigSectionIndex + startConfigSectionIndex + DocumentationCommentStartLen + + newMarkdown := make([]byte, 0, len(markdown)-endConfigSectionIndex+startConfigSectionIndex+len(config)) + newMarkdown = append(newMarkdown, markdown[:startConfigSectionIndex+DocumentationCommentStartLen]...) + newMarkdown = append(newMarkdown, config...) + newMarkdown = append(newMarkdown, markdown[endConfigSectionIndex:]...) + + if err := os.WriteFile(configPath, newMarkdown, 0o644); err != nil { + return fmt.Errorf("Error writing to file %w", err) + } + return nil +} + +func GenerateConfigDocs() { + content, err := os.ReadFile(GetSchemaDir() + "/config.json") + if err != nil { + panic("Error reading config.json") + } + + schema := orderedmap.New() + + err = json.Unmarshal(content, &schema) + if err != nil { + panic("Failed to unmarshal config.json") + } + + root, ok := schema.Get("properties") + if !ok { + panic("properties key not found in schema") + } + orderedRoot := root.(orderedmap.OrderedMap) + + rootNode := Node{} + for _, name := range orderedRoot.Keys() { + value, _ := orderedRoot.Get(name) + typedValue := value.(orderedmap.OrderedMap) + parseNode(&rootNode, name, &typedValue) + } + + var buffer bytes.Buffer + encoder := yaml.NewEncoder(&buffer) + encoder.SetIndent(IndentLevel) + + for _, child := range rootNode.Children { + err := encoder.Encode(child) + if err != nil { + panic("Failed to Marshal document") + } + } + encoder.Close() + + config := prepareMarshalledConfig(buffer) + + err = writeToConfigDocs(config) + if err != nil { + panic(err) + } +} diff --git a/pkg/jsonschema/generator.go b/pkg/jsonschema/generator.go index 263f4784bb3..df53dee56e2 100644 --- a/pkg/jsonschema/generator.go +++ b/pkg/jsonschema/generator.go @@ -11,4 +11,5 @@ import ( func main() { fmt.Printf("Generating jsonschema in %s...\n", jsonschema.GetSchemaDir()) jsonschema.GenerateSchema() + jsonschema.GenerateConfigDocs() } diff --git a/vendor/github.com/iancoleman/orderedmap/LICENSE b/vendor/github.com/iancoleman/orderedmap/LICENSE new file mode 100644 index 00000000000..2732e3795b3 --- /dev/null +++ b/vendor/github.com/iancoleman/orderedmap/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2017 Ian Coleman + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, Subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or Substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/vendor/github.com/iancoleman/orderedmap/orderedmap.go b/vendor/github.com/iancoleman/orderedmap/orderedmap.go new file mode 100644 index 00000000000..61587d9c744 --- /dev/null +++ b/vendor/github.com/iancoleman/orderedmap/orderedmap.go @@ -0,0 +1,266 @@ +package orderedmap + +import ( + "bytes" + "encoding/json" + "sort" +) + +type Pair struct { + key string + value interface{} +} + +func (kv *Pair) Key() string { + return kv.key +} + +func (kv *Pair) Value() interface{} { + return kv.value +} + +type ByPair struct { + Pairs []*Pair + LessFunc func(a *Pair, j *Pair) bool +} + +func (a ByPair) Len() int { return len(a.Pairs) } +func (a ByPair) Swap(i, j int) { a.Pairs[i], a.Pairs[j] = a.Pairs[j], a.Pairs[i] } +func (a ByPair) Less(i, j int) bool { return a.LessFunc(a.Pairs[i], a.Pairs[j]) } + +type OrderedMap struct { + keys []string + values map[string]interface{} + escapeHTML bool +} + +func New() *OrderedMap { + o := OrderedMap{} + o.keys = []string{} + o.values = map[string]interface{}{} + o.escapeHTML = true + return &o +} + +func (o *OrderedMap) SetEscapeHTML(on bool) { + o.escapeHTML = on +} + +func (o *OrderedMap) Get(key string) (interface{}, bool) { + val, exists := o.values[key] + return val, exists +} + +func (o *OrderedMap) Set(key string, value interface{}) { + _, exists := o.values[key] + if !exists { + o.keys = append(o.keys, key) + } + o.values[key] = value +} + +func (o *OrderedMap) Delete(key string) { + // check key is in use + _, ok := o.values[key] + if !ok { + return + } + // remove from keys + for i, k := range o.keys { + if k == key { + o.keys = append(o.keys[:i], o.keys[i+1:]...) + break + } + } + // remove from values + delete(o.values, key) +} + +func (o *OrderedMap) Keys() []string { + return o.keys +} + +func (o *OrderedMap) Values() map[string]interface{} { + return o.values +} + +// SortKeys Sort the map keys using your sort func +func (o *OrderedMap) SortKeys(sortFunc func(keys []string)) { + sortFunc(o.keys) +} + +// Sort Sort the map using your sort func +func (o *OrderedMap) Sort(lessFunc func(a *Pair, b *Pair) bool) { + pairs := make([]*Pair, len(o.keys)) + for i, key := range o.keys { + pairs[i] = &Pair{key, o.values[key]} + } + + sort.Sort(ByPair{pairs, lessFunc}) + + for i, pair := range pairs { + o.keys[i] = pair.key + } +} + +func (o *OrderedMap) UnmarshalJSON(b []byte) error { + if o.values == nil { + o.values = map[string]interface{}{} + } + err := json.Unmarshal(b, &o.values) + if err != nil { + return err + } + dec := json.NewDecoder(bytes.NewReader(b)) + if _, err = dec.Token(); err != nil { // skip '{' + return err + } + o.keys = make([]string, 0, len(o.values)) + return decodeOrderedMap(dec, o) +} + +func decodeOrderedMap(dec *json.Decoder, o *OrderedMap) error { + hasKey := make(map[string]bool, len(o.values)) + for { + token, err := dec.Token() + if err != nil { + return err + } + if delim, ok := token.(json.Delim); ok && delim == '}' { + return nil + } + key := token.(string) + if hasKey[key] { + // duplicate key + for j, k := range o.keys { + if k == key { + copy(o.keys[j:], o.keys[j+1:]) + break + } + } + o.keys[len(o.keys)-1] = key + } else { + hasKey[key] = true + o.keys = append(o.keys, key) + } + + token, err = dec.Token() + if err != nil { + return err + } + if delim, ok := token.(json.Delim); ok { + switch delim { + case '{': + if values, ok := o.values[key].(map[string]interface{}); ok { + newMap := OrderedMap{ + keys: make([]string, 0, len(values)), + values: values, + escapeHTML: o.escapeHTML, + } + if err = decodeOrderedMap(dec, &newMap); err != nil { + return err + } + o.values[key] = newMap + } else if oldMap, ok := o.values[key].(OrderedMap); ok { + newMap := OrderedMap{ + keys: make([]string, 0, len(oldMap.values)), + values: oldMap.values, + escapeHTML: o.escapeHTML, + } + if err = decodeOrderedMap(dec, &newMap); err != nil { + return err + } + o.values[key] = newMap + } else if err = decodeOrderedMap(dec, &OrderedMap{}); err != nil { + return err + } + case '[': + if values, ok := o.values[key].([]interface{}); ok { + if err = decodeSlice(dec, values, o.escapeHTML); err != nil { + return err + } + } else if err = decodeSlice(dec, []interface{}{}, o.escapeHTML); err != nil { + return err + } + } + } + } +} + +func decodeSlice(dec *json.Decoder, s []interface{}, escapeHTML bool) error { + for index := 0; ; index++ { + token, err := dec.Token() + if err != nil { + return err + } + if delim, ok := token.(json.Delim); ok { + switch delim { + case '{': + if index < len(s) { + if values, ok := s[index].(map[string]interface{}); ok { + newMap := OrderedMap{ + keys: make([]string, 0, len(values)), + values: values, + escapeHTML: escapeHTML, + } + if err = decodeOrderedMap(dec, &newMap); err != nil { + return err + } + s[index] = newMap + } else if oldMap, ok := s[index].(OrderedMap); ok { + newMap := OrderedMap{ + keys: make([]string, 0, len(oldMap.values)), + values: oldMap.values, + escapeHTML: escapeHTML, + } + if err = decodeOrderedMap(dec, &newMap); err != nil { + return err + } + s[index] = newMap + } else if err = decodeOrderedMap(dec, &OrderedMap{}); err != nil { + return err + } + } else if err = decodeOrderedMap(dec, &OrderedMap{}); err != nil { + return err + } + case '[': + if index < len(s) { + if values, ok := s[index].([]interface{}); ok { + if err = decodeSlice(dec, values, escapeHTML); err != nil { + return err + } + } else if err = decodeSlice(dec, []interface{}{}, escapeHTML); err != nil { + return err + } + } else if err = decodeSlice(dec, []interface{}{}, escapeHTML); err != nil { + return err + } + case ']': + return nil + } + } + } +} + +func (o OrderedMap) MarshalJSON() ([]byte, error) { + var buf bytes.Buffer + buf.WriteByte('{') + encoder := json.NewEncoder(&buf) + encoder.SetEscapeHTML(o.escapeHTML) + for i, k := range o.keys { + if i > 0 { + buf.WriteByte(',') + } + // add key + if err := encoder.Encode(k); err != nil { + return nil, err + } + buf.WriteByte(':') + // add value + if err := encoder.Encode(o.values[k]); err != nil { + return nil, err + } + } + buf.WriteByte('}') + return buf.Bytes(), nil +} diff --git a/vendor/github.com/iancoleman/orderedmap/readme.md b/vendor/github.com/iancoleman/orderedmap/readme.md new file mode 100644 index 00000000000..cfe09c2fdb9 --- /dev/null +++ b/vendor/github.com/iancoleman/orderedmap/readme.md @@ -0,0 +1,81 @@ +# orderedmap + +[![Build Status](https://travis-ci.com/iancoleman/orderedmap.svg)](https://travis-ci.com/iancoleman/orderedmap) + +A golang data type equivalent to python's collections.OrderedDict + +Retains order of keys in maps + +Can be JSON serialized / deserialized + +# Usage + +```go +package main + +import ( + "encoding/json" + "github.com/iancoleman/orderedmap" +) + +func main() { + + // use New() instead of o := map[string]interface{}{} + o := orderedmap.New() + + // use SetEscapeHTML() to whether escape problematic HTML characters or not, defaults is true + o.SetEscapeHTML(false) + + // use Set instead of o["a"] = 1 + o.Set("a", 1) + + // add some value with special characters + o.Set("b", "\\.<>[]{}_-") + + // use Get instead of i, ok := o["a"] + val, ok := o.Get("a") + + // use Keys instead of for k, v := range o + keys := o.Keys() + for _, k := range keys { + v, _ := o.Get(k) + } + + // use o.Delete instead of delete(o, key) + o.Delete("a") + + // serialize to a json string using encoding/json + bytes, err := json.Marshal(o) + prettyBytes, err := json.MarshalIndent(o, "", " ") + + // deserialize a json string using encoding/json + // all maps (including nested maps) will be parsed as orderedmaps + s := `{"a": 1}` + err := json.Unmarshal([]byte(s), &o) + + // sort the keys + o.SortKeys(sort.Strings) + + // sort by Pair + o.Sort(func(a *orderedmap.Pair, b *orderedmap.Pair) bool { + return a.Value().(float64) < b.Value().(float64) + }) +} +``` + +# Caveats + +* OrderedMap only takes strings for the key, as per [the JSON spec](http://json.org/). + +# Tests + +``` +go test +``` + +# Alternatives + +None of the alternatives offer JSON serialization. + +* [cevaris/ordered_map](https://github.com/cevaris/ordered_map) +* [mantyr/iterator](https://github.com/mantyr/iterator) diff --git a/vendor/modules.txt b/vendor/modules.txt index 425c1705bb1..881770146ac 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -110,6 +110,9 @@ github.com/gobwas/glob/util/strings # github.com/gookit/color v1.4.2 ## explicit; go 1.12 github.com/gookit/color +# github.com/iancoleman/orderedmap v0.3.0 +## explicit; go 1.16 +github.com/iancoleman/orderedmap # github.com/imdario/mergo v0.3.11 ## explicit; go 1.13 github.com/imdario/mergo From 9b152d7619327da442d733b45075e17b631775e7 Mon Sep 17 00:00:00 2001 From: Karim Khaleel Date: Sun, 19 May 2024 13:47:15 +0300 Subject: [PATCH 004/157] Make Keybindings definition in UserConfig struct last This makes the generated default config in Config.md match the original order. --- docs/Config.md | 118 ++--- pkg/config/user_config.go | 20 +- schema/config.json | 998 +++++++++++++++++++------------------- 3 files changed, 568 insertions(+), 568 deletions(-) diff --git a/docs/Config.md b/docs/Config.md index f9c6a729b23..b9b325e9a65 100644 --- a/docs/Config.md +++ b/docs/Config.md @@ -302,6 +302,65 @@ refresher: # Auto-fetch can be disabled via option 'git.autoFetch'. fetchInterval: 60 +# Config relating to things outside of Lazygit like how files are opened, copying to clipboard, etc +os: + # Command for editing a file. Should contain "{{filename}}". + edit: "" + + # Command for editing a file at a given line number. Should contain + # "{{filename}}", and may optionally contain "{{line}}". + editAtLine: "" + + # Same as EditAtLine, except that the command needs to wait until the + # window is closed. + editAtLineAndWait: "" + + # For opening a directory in an editor + openDirInEditor: "" + + # A built-in preset that sets all of the above settings. Supported presets + # are defined in the getPreset function in editor_presets.go. + editPreset: "" + + # Command for opening a file, as if the file is double-clicked. Should + # contain "{{filename}}", but doesn't support "{{line}}". + open: "" + + # Command for opening a link. Should contain "{{link}}". + openLink: "" + + # EditCommand is the command for editing a file. + # Deprecated: use Edit instead. Note that semantics are different: + # EditCommand is just the command itself, whereas Edit contains a + # "{{filename}}" variable. + editCommand: "" + + # EditCommandTemplate is the command template for editing a file + # Deprecated: use EditAtLine instead. + editCommandTemplate: "" + + # OpenCommand is the command for opening a file + # Deprecated: use Open instead. + openCommand: "" + + # OpenLinkCommand is the command for opening a link + # Deprecated: use OpenLink instead. + openLinkCommand: "" + + # CopyToClipboardCmd is the command for copying to clipboard. + # See https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#custom-command-for-copying-to-clipboard + copyToClipboardCmd: "" + +# What to do when opening Lazygit outside of a git repo. +# - 'prompt': (default) ask whether to initialize a new repo or open in the most recent repo +# - 'create': initialize a new repo +# - 'skip': open most recent repo +# - 'quit': exit Lazygit +notARepository: prompt + +# If true, display a confirmation when subprocess terminates. This allows you to view the output of the subprocess before returning to Lazygit. +promptToReturnFromSubprocess: true + # Keybindings keybinding: universal: @@ -465,65 +524,6 @@ keybinding: bulkMenu: b commitMessage: commitMenu: - -# Config relating to things outside of Lazygit like how files are opened, copying to clipboard, etc -os: - # Command for editing a file. Should contain "{{filename}}". - edit: "" - - # Command for editing a file at a given line number. Should contain - # "{{filename}}", and may optionally contain "{{line}}". - editAtLine: "" - - # Same as EditAtLine, except that the command needs to wait until the - # window is closed. - editAtLineAndWait: "" - - # For opening a directory in an editor - openDirInEditor: "" - - # A built-in preset that sets all of the above settings. Supported presets - # are defined in the getPreset function in editor_presets.go. - editPreset: "" - - # Command for opening a file, as if the file is double-clicked. Should - # contain "{{filename}}", but doesn't support "{{line}}". - open: "" - - # Command for opening a link. Should contain "{{link}}". - openLink: "" - - # EditCommand is the command for editing a file. - # Deprecated: use Edit instead. Note that semantics are different: - # EditCommand is just the command itself, whereas Edit contains a - # "{{filename}}" variable. - editCommand: "" - - # EditCommandTemplate is the command template for editing a file - # Deprecated: use EditAtLine instead. - editCommandTemplate: "" - - # OpenCommand is the command for opening a file - # Deprecated: use Open instead. - openCommand: "" - - # OpenLinkCommand is the command for opening a link - # Deprecated: use OpenLink instead. - openLinkCommand: "" - - # CopyToClipboardCmd is the command for copying to clipboard. - # See https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#custom-command-for-copying-to-clipboard - copyToClipboardCmd: "" - -# What to do when opening Lazygit outside of a git repo. -# - 'prompt': (default) ask whether to initialize a new repo or open in the most recent repo -# - 'create': initialize a new repo -# - 'skip': open most recent repo -# - 'quit': exit Lazygit -notARepository: prompt - -# If true, display a confirmation when subprocess terminates. This allows you to view the output of the subprocess before returning to Lazygit. -promptToReturnFromSubprocess: true ``` diff --git a/pkg/config/user_config.go b/pkg/config/user_config.go index 4c0d50e5204..2df6e60b88e 100644 --- a/pkg/config/user_config.go +++ b/pkg/config/user_config.go @@ -19,8 +19,6 @@ type UserConfig struct { ConfirmOnQuit bool `yaml:"confirmOnQuit"` // If true, exit Lazygit when the user presses escape in a context where there is nothing to cancel/close QuitOnTopLevelReturn bool `yaml:"quitOnTopLevelReturn"` - // Keybindings - Keybinding KeybindingConfig `yaml:"keybinding"` // Config relating to things outside of Lazygit like how files are opened, copying to clipboard, etc OS OSConfig `yaml:"os,omitempty"` // If true, don't display introductory popups upon opening Lazygit. @@ -38,6 +36,8 @@ type UserConfig struct { NotARepository string `yaml:"notARepository" jsonschema:"enum=prompt,enum=create,enum=skip,enum=quit"` // If true, display a confirmation when subprocess terminates. This allows you to view the output of the subprocess before returning to Lazygit. PromptToReturnFromSubprocess bool `yaml:"promptToReturnFromSubprocess"` + // Keybindings + Keybinding KeybindingConfig `yaml:"keybinding"` } type RefresherConfig struct { @@ -736,8 +736,14 @@ func GetDefaultConfig() *UserConfig { Method: "prompt", Days: 14, }, - ConfirmOnQuit: false, - QuitOnTopLevelReturn: false, + ConfirmOnQuit: false, + QuitOnTopLevelReturn: false, + OS: OSConfig{}, + DisableStartupPopups: false, + CustomCommands: []CustomCommand(nil), + Services: map[string]string(nil), + NotARepository: "prompt", + PromptToReturnFromSubprocess: true, Keybinding: KeybindingConfig{ Universal: KeybindingUniversalConfig{ Quit: "q", @@ -904,11 +910,5 @@ func GetDefaultConfig() *UserConfig { CommitMenu: "", }, }, - OS: OSConfig{}, - DisableStartupPopups: false, - CustomCommands: []CustomCommand(nil), - Services: map[string]string(nil), - NotARepository: "prompt", - PromptToReturnFromSubprocess: true, } } diff --git a/schema/config.json b/schema/config.json index 556ce46077e..9764e2286c6 100644 --- a/schema/config.json +++ b/schema/config.json @@ -680,6 +680,291 @@ "type": "boolean", "description": "If true, exit Lazygit when the user presses escape in a context where there is nothing to cancel/close" }, + "os": { + "properties": { + "edit": { + "type": "string", + "description": "Command for editing a file. Should contain \"{{filename}}\"." + }, + "editAtLine": { + "type": "string", + "description": "Command for editing a file at a given line number. Should contain\n\"{{filename}}\", and may optionally contain \"{{line}}\"." + }, + "editAtLineAndWait": { + "type": "string", + "description": "Same as EditAtLine, except that the command needs to wait until the\nwindow is closed." + }, + "editInTerminal": { + "type": "boolean", + "description": "Whether lazygit suspends until an edit process returns\nPointer to bool so that we can distinguish unset (nil) from false.\nWe're naming this `editInTerminal` for backwards compatibility" + }, + "openDirInEditor": { + "type": "string", + "description": "For opening a directory in an editor" + }, + "editPreset": { + "type": "string", + "description": "A built-in preset that sets all of the above settings. Supported presets\nare defined in the getPreset function in editor_presets.go.", + "examples": [ + "vim", + "nvim", + "emacs", + "nano", + "vscode", + "sublime", + "kakoune", + "helix", + "xcode" + ] + }, + "open": { + "type": "string", + "description": "Command for opening a file, as if the file is double-clicked. Should\ncontain \"{{filename}}\", but doesn't support \"{{line}}\"." + }, + "openLink": { + "type": "string", + "description": "Command for opening a link. Should contain \"{{link}}\"." + }, + "editCommand": { + "type": "string", + "description": "EditCommand is the command for editing a file.\nDeprecated: use Edit instead. Note that semantics are different:\nEditCommand is just the command itself, whereas Edit contains a\n\"{{filename}}\" variable." + }, + "editCommandTemplate": { + "type": "string", + "description": "EditCommandTemplate is the command template for editing a file\nDeprecated: use EditAtLine instead." + }, + "openCommand": { + "type": "string", + "description": "OpenCommand is the command for opening a file\nDeprecated: use Open instead." + }, + "openLinkCommand": { + "type": "string", + "description": "OpenLinkCommand is the command for opening a link\nDeprecated: use OpenLink instead." + }, + "copyToClipboardCmd": { + "type": "string", + "description": "CopyToClipboardCmd is the command for copying to clipboard.\nSee https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#custom-command-for-copying-to-clipboard" + } + }, + "additionalProperties": false, + "type": "object", + "description": "Config relating to things outside of Lazygit like how files are opened, copying to clipboard, etc" + }, + "disableStartupPopups": { + "type": "boolean", + "description": "If true, don't display introductory popups upon opening Lazygit.\nLazygit sets this to true upon first runninng the program so that you don't see introductory popups every time you open the program." + }, + "customCommands": { + "items": { + "properties": { + "key": { + "type": "string", + "description": "The key to trigger the command. Use a single letter or one of the values from https://github.com/jesseduffield/lazygit/blob/master/docs/keybindings/Custom_Keybindings.md" + }, + "context": { + "type": "string", + "enum": [ + "status", + "files", + "worktrees", + "localBranches", + "remotes", + "remoteBranches", + "tags", + "commits", + "reflogCommits", + "subCommits", + "commitFiles", + "stash", + "global" + ], + "description": "The context in which to listen for the key" + }, + "command": { + "type": "string", + "description": "The command to run (using Go template syntax for placeholder values)", + "examples": [ + "git fetch {{.Form.Remote}} {{.Form.Branch}} \u0026\u0026 git checkout FETCH_HEAD" + ] + }, + "subprocess": { + "type": "boolean", + "description": "If true, run the command in a subprocess (e.g. if the command requires user input)" + }, + "prompts": { + "items": { + "properties": { + "type": { + "type": "string", + "description": "One of: 'input' | 'menu' | 'confirm' | 'menuFromCommand'" + }, + "key": { + "type": "string", + "description": "Used to reference the entered value from within the custom command. E.g. a prompt with `key: 'Branch'` can be referred to as `{{.Form.Branch}}` in the command" + }, + "title": { + "type": "string", + "description": "The title to display in the popup panel" + }, + "initialValue": { + "type": "string", + "description": "The initial value to appear in the text box.\nOnly for input prompts." + }, + "suggestions": { + "properties": { + "preset": { + "type": "string", + "enum": [ + "authors", + "branches", + "files", + "refs", + "remotes", + "remoteBranches", + "tags" + ], + "description": "Uses built-in logic to obtain the suggestions. One of 'authors' | 'branches' | 'files' | 'refs' | 'remotes' | 'remoteBranches' | 'tags'" + }, + "command": { + "type": "string", + "description": "Command to run such that each line in the output becomes a suggestion. Mutually exclusive with 'preset' field.", + "examples": [ + "git fetch {{.Form.Remote}} {{.Form.Branch}} \u0026\u0026 git checkout FETCH_HEAD" + ] + } + }, + "additionalProperties": false, + "type": "object", + "description": "Shows suggestions as the input is entered\nOnly for input prompts." + }, + "body": { + "type": "string", + "description": "The message of the confirmation prompt.\nOnly for confirm prompts.", + "examples": [ + "Are you sure you want to push to the remote?" + ] + }, + "options": { + "items": { + "properties": { + "name": { + "type": "string", + "description": "The first part of the label" + }, + "description": { + "type": "string", + "description": "The second part of the label" + }, + "value": { + "type": "string", + "minLength": 1, + "description": "The value that will be used in the command", + "examples": [ + "feature" + ] + } + }, + "additionalProperties": false, + "type": "object" + }, + "type": "array", + "description": "Menu options.\nOnly for menu prompts." + }, + "command": { + "type": "string", + "description": "The command to run to generate menu options\nOnly for menuFromCommand prompts.", + "examples": [ + "git fetch {{.Form.Remote}} {{.Form.Branch}} \u0026\u0026 git checkout FETCH_HEAD" + ] + }, + "filter": { + "type": "string", + "description": "The regexp to run specifying groups which are going to be kept from the command's output.\nOnly for menuFromCommand prompts.", + "examples": [ + ".*{{.SelectedRemote.Name }}/(?P\u003cbranch\u003e.*)" + ] + }, + "valueFormat": { + "type": "string", + "description": "How to format matched groups from the filter to construct a menu item's value.\nOnly for menuFromCommand prompts.", + "examples": [ + "{{ .branch }}" + ] + }, + "labelFormat": { + "type": "string", + "description": "Like valueFormat but for the labels. If `labelFormat` is not specified, `valueFormat` is shown instead.\nOnly for menuFromCommand prompts.", + "examples": [ + "{{ .branch | green }}" + ] + } + }, + "additionalProperties": false, + "type": "object" + }, + "type": "array", + "description": "A list of prompts that will request user input before running the final command" + }, + "loadingText": { + "type": "string", + "description": "Text to display while waiting for command to finish", + "examples": [ + "Loading..." + ] + }, + "description": { + "type": "string", + "description": "Label for the custom command when displayed in the keybindings menu" + }, + "stream": { + "type": "boolean", + "description": "If true, stream the command's output to the Command Log panel" + }, + "showOutput": { + "type": "boolean", + "description": "If true, show the command's output in a popup within Lazygit" + }, + "after": { + "properties": { + "checkForConflicts": { + "type": "boolean" + } + }, + "additionalProperties": false, + "type": "object", + "description": "Actions to take after the command has completed" + } + }, + "additionalProperties": false, + "type": "object" + }, + "type": "array", + "uniqueItems": true, + "description": "User-configured commands that can be invoked from within Lazygit" + }, + "services": { + "additionalProperties": { + "type": "string" + }, + "type": "object", + "description": "See https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#custom-pull-request-urls" + }, + "notARepository": { + "type": "string", + "enum": [ + "prompt", + "create", + "skip", + "quit" + ], + "description": "What to do when opening Lazygit outside of a git repo.\n- 'prompt': (default) ask whether to initialize a new repo or open in the most recent repo\n- 'create': initialize a new repo\n- 'skip': open most recent repo\n- 'quit': exit Lazygit", + "default": "prompt" + }, + "promptToReturnFromSubprocess": { + "type": "boolean", + "description": "If true, display a confirmation when subprocess terminates. This allows you to view the output of the subprocess before returning to Lazygit.", + "default": true + }, "keybinding": { "properties": { "universal": { @@ -1099,521 +1384,236 @@ }, "fastForward": { "type": "string", - "default": "f" - }, - "createTag": { - "type": "string", - "default": "T" - }, - "pushTag": { - "type": "string", - "default": "P" - }, - "setUpstream": { - "type": "string", - "default": "u" - }, - "fetchRemote": { - "type": "string", - "default": "f" - }, - "sortOrder": { - "type": "string", - "default": "s" - } - }, - "additionalProperties": false, - "type": "object" - }, - "worktrees": { - "properties": { - "viewWorktreeOptions": { - "type": "string", - "default": "w" - } - }, - "additionalProperties": false, - "type": "object" - }, - "commits": { - "properties": { - "squashDown": { - "type": "string", - "default": "s" - }, - "renameCommit": { - "type": "string", - "default": "r" - }, - "renameCommitWithEditor": { - "type": "string", - "default": "R" - }, - "viewResetOptions": { - "type": "string", - "default": "g" - }, - "markCommitAsFixup": { - "type": "string", - "default": "f" - }, - "createFixupCommit": { - "type": "string", - "default": "F" - }, - "squashAboveCommits": { - "type": "string", - "default": "S" - }, - "moveDownCommit": { - "type": "string", - "default": "\u003cc-j\u003e" - }, - "moveUpCommit": { - "type": "string", - "default": "\u003cc-k\u003e" - }, - "amendToCommit": { - "type": "string", - "default": "A" - }, - "resetCommitAuthor": { - "type": "string", - "default": "a" - }, - "pickCommit": { - "type": "string", - "default": "p" - }, - "revertCommit": { - "type": "string", - "default": "t" - }, - "cherryPickCopy": { - "type": "string", - "default": "C" - }, - "pasteCommits": { - "type": "string", - "default": "V" - }, - "markCommitAsBaseForRebase": { - "type": "string", - "default": "B" - }, - "tagCommit": { - "type": "string", - "default": "T" - }, - "checkoutCommit": { - "type": "string", - "default": "\u003cspace\u003e" - }, - "resetCherryPick": { - "type": "string", - "default": "\u003cc-R\u003e" - }, - "copyCommitAttributeToClipboard": { - "type": "string", - "default": "y" - }, - "openLogMenu": { - "type": "string", - "default": "\u003cc-l\u003e" - }, - "openInBrowser": { - "type": "string", - "default": "o" - }, - "viewBisectOptions": { - "type": "string", - "default": "b" - }, - "startInteractiveRebase": { - "type": "string", - "default": "i" - } - }, - "additionalProperties": false, - "type": "object" - }, - "amendAttribute": { - "properties": { - "resetAuthor": { - "type": "string", - "default": "a" - }, - "setAuthor": { - "type": "string", - "default": "A" - }, - "addCoAuthor": { - "type": "string", - "default": "c" - } - }, - "additionalProperties": false, - "type": "object" - }, - "stash": { - "properties": { - "popStash": { - "type": "string", - "default": "g" - }, - "renameStash": { - "type": "string", - "default": "r" - } - }, - "additionalProperties": false, - "type": "object" - }, - "commitFiles": { - "properties": { - "checkoutCommitFile": { - "type": "string", - "default": "c" - } - }, - "additionalProperties": false, - "type": "object" - }, - "main": { - "properties": { - "toggleSelectHunk": { - "type": "string", - "default": "a" - }, - "pickBothHunks": { - "type": "string", - "default": "b" - }, - "editSelectHunk": { - "type": "string", - "default": "E" - } - }, - "additionalProperties": false, - "type": "object" - }, - "submodules": { - "properties": { - "init": { + "default": "f" + }, + "createTag": { "type": "string", - "default": "i" + "default": "T" }, - "update": { + "pushTag": { "type": "string", - "default": "u" + "default": "P" }, - "bulkMenu": { + "setUpstream": { "type": "string", - "default": "b" - } - }, - "additionalProperties": false, - "type": "object" - }, - "commitMessage": { - "properties": { - "commitMenu": { + "default": "u" + }, + "fetchRemote": { "type": "string", - "default": "\u003cc-o\u003e" - } - }, - "additionalProperties": false, - "type": "object" - } - }, - "additionalProperties": false, - "type": "object", - "description": "Keybindings" - }, - "os": { - "properties": { - "edit": { - "type": "string", - "description": "Command for editing a file. Should contain \"{{filename}}\"." - }, - "editAtLine": { - "type": "string", - "description": "Command for editing a file at a given line number. Should contain\n\"{{filename}}\", and may optionally contain \"{{line}}\"." - }, - "editAtLineAndWait": { - "type": "string", - "description": "Same as EditAtLine, except that the command needs to wait until the\nwindow is closed." - }, - "editInTerminal": { - "type": "boolean", - "description": "Whether lazygit suspends until an edit process returns\nPointer to bool so that we can distinguish unset (nil) from false.\nWe're naming this `editInTerminal` for backwards compatibility" - }, - "openDirInEditor": { - "type": "string", - "description": "For opening a directory in an editor" - }, - "editPreset": { - "type": "string", - "description": "A built-in preset that sets all of the above settings. Supported presets\nare defined in the getPreset function in editor_presets.go.", - "examples": [ - "vim", - "nvim", - "emacs", - "nano", - "vscode", - "sublime", - "kakoune", - "helix", - "xcode" - ] - }, - "open": { - "type": "string", - "description": "Command for opening a file, as if the file is double-clicked. Should\ncontain \"{{filename}}\", but doesn't support \"{{line}}\"." - }, - "openLink": { - "type": "string", - "description": "Command for opening a link. Should contain \"{{link}}\"." - }, - "editCommand": { - "type": "string", - "description": "EditCommand is the command for editing a file.\nDeprecated: use Edit instead. Note that semantics are different:\nEditCommand is just the command itself, whereas Edit contains a\n\"{{filename}}\" variable." - }, - "editCommandTemplate": { - "type": "string", - "description": "EditCommandTemplate is the command template for editing a file\nDeprecated: use EditAtLine instead." - }, - "openCommand": { - "type": "string", - "description": "OpenCommand is the command for opening a file\nDeprecated: use Open instead." - }, - "openLinkCommand": { - "type": "string", - "description": "OpenLinkCommand is the command for opening a link\nDeprecated: use OpenLink instead." - }, - "copyToClipboardCmd": { - "type": "string", - "description": "CopyToClipboardCmd is the command for copying to clipboard.\nSee https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#custom-command-for-copying-to-clipboard" - } - }, - "additionalProperties": false, - "type": "object", - "description": "Config relating to things outside of Lazygit like how files are opened, copying to clipboard, etc" - }, - "disableStartupPopups": { - "type": "boolean", - "description": "If true, don't display introductory popups upon opening Lazygit.\nLazygit sets this to true upon first runninng the program so that you don't see introductory popups every time you open the program." - }, - "customCommands": { - "items": { - "properties": { - "key": { - "type": "string", - "description": "The key to trigger the command. Use a single letter or one of the values from https://github.com/jesseduffield/lazygit/blob/master/docs/keybindings/Custom_Keybindings.md" - }, - "context": { - "type": "string", - "enum": [ - "status", - "files", - "worktrees", - "localBranches", - "remotes", - "remoteBranches", - "tags", - "commits", - "reflogCommits", - "subCommits", - "commitFiles", - "stash", - "global" - ], - "description": "The context in which to listen for the key" - }, - "command": { - "type": "string", - "description": "The command to run (using Go template syntax for placeholder values)", - "examples": [ - "git fetch {{.Form.Remote}} {{.Form.Branch}} \u0026\u0026 git checkout FETCH_HEAD" - ] - }, - "subprocess": { - "type": "boolean", - "description": "If true, run the command in a subprocess (e.g. if the command requires user input)" - }, - "prompts": { - "items": { - "properties": { - "type": { - "type": "string", - "description": "One of: 'input' | 'menu' | 'confirm' | 'menuFromCommand'" - }, - "key": { - "type": "string", - "description": "Used to reference the entered value from within the custom command. E.g. a prompt with `key: 'Branch'` can be referred to as `{{.Form.Branch}}` in the command" - }, - "title": { - "type": "string", - "description": "The title to display in the popup panel" - }, - "initialValue": { - "type": "string", - "description": "The initial value to appear in the text box.\nOnly for input prompts." - }, - "suggestions": { - "properties": { - "preset": { - "type": "string", - "enum": [ - "authors", - "branches", - "files", - "refs", - "remotes", - "remoteBranches", - "tags" - ], - "description": "Uses built-in logic to obtain the suggestions. One of 'authors' | 'branches' | 'files' | 'refs' | 'remotes' | 'remoteBranches' | 'tags'" - }, - "command": { - "type": "string", - "description": "Command to run such that each line in the output becomes a suggestion. Mutually exclusive with 'preset' field.", - "examples": [ - "git fetch {{.Form.Remote}} {{.Form.Branch}} \u0026\u0026 git checkout FETCH_HEAD" - ] - } - }, - "additionalProperties": false, - "type": "object", - "description": "Shows suggestions as the input is entered\nOnly for input prompts." - }, - "body": { - "type": "string", - "description": "The message of the confirmation prompt.\nOnly for confirm prompts.", - "examples": [ - "Are you sure you want to push to the remote?" - ] - }, - "options": { - "items": { - "properties": { - "name": { - "type": "string", - "description": "The first part of the label" - }, - "description": { - "type": "string", - "description": "The second part of the label" - }, - "value": { - "type": "string", - "minLength": 1, - "description": "The value that will be used in the command", - "examples": [ - "feature" - ] - } - }, - "additionalProperties": false, - "type": "object" - }, - "type": "array", - "description": "Menu options.\nOnly for menu prompts." - }, - "command": { - "type": "string", - "description": "The command to run to generate menu options\nOnly for menuFromCommand prompts.", - "examples": [ - "git fetch {{.Form.Remote}} {{.Form.Branch}} \u0026\u0026 git checkout FETCH_HEAD" - ] - }, - "filter": { - "type": "string", - "description": "The regexp to run specifying groups which are going to be kept from the command's output.\nOnly for menuFromCommand prompts.", - "examples": [ - ".*{{.SelectedRemote.Name }}/(?P\u003cbranch\u003e.*)" - ] - }, - "valueFormat": { - "type": "string", - "description": "How to format matched groups from the filter to construct a menu item's value.\nOnly for menuFromCommand prompts.", - "examples": [ - "{{ .branch }}" - ] - }, - "labelFormat": { - "type": "string", - "description": "Like valueFormat but for the labels. If `labelFormat` is not specified, `valueFormat` is shown instead.\nOnly for menuFromCommand prompts.", - "examples": [ - "{{ .branch | green }}" - ] - } - }, - "additionalProperties": false, - "type": "object" + "default": "f" }, - "type": "array", - "description": "A list of prompts that will request user input before running the final command" + "sortOrder": { + "type": "string", + "default": "s" + } }, - "loadingText": { - "type": "string", - "description": "Text to display while waiting for command to finish", - "examples": [ - "Loading..." - ] + "additionalProperties": false, + "type": "object" + }, + "worktrees": { + "properties": { + "viewWorktreeOptions": { + "type": "string", + "default": "w" + } }, - "description": { - "type": "string", - "description": "Label for the custom command when displayed in the keybindings menu" + "additionalProperties": false, + "type": "object" + }, + "commits": { + "properties": { + "squashDown": { + "type": "string", + "default": "s" + }, + "renameCommit": { + "type": "string", + "default": "r" + }, + "renameCommitWithEditor": { + "type": "string", + "default": "R" + }, + "viewResetOptions": { + "type": "string", + "default": "g" + }, + "markCommitAsFixup": { + "type": "string", + "default": "f" + }, + "createFixupCommit": { + "type": "string", + "default": "F" + }, + "squashAboveCommits": { + "type": "string", + "default": "S" + }, + "moveDownCommit": { + "type": "string", + "default": "\u003cc-j\u003e" + }, + "moveUpCommit": { + "type": "string", + "default": "\u003cc-k\u003e" + }, + "amendToCommit": { + "type": "string", + "default": "A" + }, + "resetCommitAuthor": { + "type": "string", + "default": "a" + }, + "pickCommit": { + "type": "string", + "default": "p" + }, + "revertCommit": { + "type": "string", + "default": "t" + }, + "cherryPickCopy": { + "type": "string", + "default": "C" + }, + "pasteCommits": { + "type": "string", + "default": "V" + }, + "markCommitAsBaseForRebase": { + "type": "string", + "default": "B" + }, + "tagCommit": { + "type": "string", + "default": "T" + }, + "checkoutCommit": { + "type": "string", + "default": "\u003cspace\u003e" + }, + "resetCherryPick": { + "type": "string", + "default": "\u003cc-R\u003e" + }, + "copyCommitAttributeToClipboard": { + "type": "string", + "default": "y" + }, + "openLogMenu": { + "type": "string", + "default": "\u003cc-l\u003e" + }, + "openInBrowser": { + "type": "string", + "default": "o" + }, + "viewBisectOptions": { + "type": "string", + "default": "b" + }, + "startInteractiveRebase": { + "type": "string", + "default": "i" + } }, - "stream": { - "type": "boolean", - "description": "If true, stream the command's output to the Command Log panel" + "additionalProperties": false, + "type": "object" + }, + "amendAttribute": { + "properties": { + "resetAuthor": { + "type": "string", + "default": "a" + }, + "setAuthor": { + "type": "string", + "default": "A" + }, + "addCoAuthor": { + "type": "string", + "default": "c" + } }, - "showOutput": { - "type": "boolean", - "description": "If true, show the command's output in a popup within Lazygit" + "additionalProperties": false, + "type": "object" + }, + "stash": { + "properties": { + "popStash": { + "type": "string", + "default": "g" + }, + "renameStash": { + "type": "string", + "default": "r" + } }, - "after": { - "properties": { - "checkForConflicts": { - "type": "boolean" - } + "additionalProperties": false, + "type": "object" + }, + "commitFiles": { + "properties": { + "checkoutCommitFile": { + "type": "string", + "default": "c" + } + }, + "additionalProperties": false, + "type": "object" + }, + "main": { + "properties": { + "toggleSelectHunk": { + "type": "string", + "default": "a" }, - "additionalProperties": false, - "type": "object", - "description": "Actions to take after the command has completed" - } + "pickBothHunks": { + "type": "string", + "default": "b" + }, + "editSelectHunk": { + "type": "string", + "default": "E" + } + }, + "additionalProperties": false, + "type": "object" }, - "additionalProperties": false, - "type": "object" - }, - "type": "array", - "uniqueItems": true, - "description": "User-configured commands that can be invoked from within Lazygit" - }, - "services": { - "additionalProperties": { - "type": "string" + "submodules": { + "properties": { + "init": { + "type": "string", + "default": "i" + }, + "update": { + "type": "string", + "default": "u" + }, + "bulkMenu": { + "type": "string", + "default": "b" + } + }, + "additionalProperties": false, + "type": "object" + }, + "commitMessage": { + "properties": { + "commitMenu": { + "type": "string", + "default": "\u003cc-o\u003e" + } + }, + "additionalProperties": false, + "type": "object" + } }, + "additionalProperties": false, "type": "object", - "description": "See https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#custom-pull-request-urls" - }, - "notARepository": { - "type": "string", - "enum": [ - "prompt", - "create", - "skip", - "quit" - ], - "description": "What to do when opening Lazygit outside of a git repo.\n- 'prompt': (default) ask whether to initialize a new repo or open in the most recent repo\n- 'create': initialize a new repo\n- 'skip': open most recent repo\n- 'quit': exit Lazygit", - "default": "prompt" - }, - "promptToReturnFromSubprocess": { - "type": "boolean", - "description": "If true, display a confirmation when subprocess terminates. This allows you to view the output of the subprocess before returning to Lazygit.", - "default": true + "description": "Keybindings" } }, "additionalProperties": false, From fc7b10f557503e1760c6db9eaf93b32d65bd120a Mon Sep 17 00:00:00 2001 From: Jesse Duffield Date: Mon, 20 May 2024 12:21:07 +1000 Subject: [PATCH 005/157] Update README.md Updated the company sponsors with the new name of my company --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 64e9ce03ef9..c0b68ba8597 100644 --- a/README.md +++ b/README.md @@ -13,11 +13,11 @@

- +
- Zenbu + Subble
- I (Jesse) co-founded Zenbu to save your company time and money by helping you manage its SaaS subscriptions. Check it out! + I (Jesse) co-founded Subble to save your company time and money by helping you manage its software subscriptions. Check it out!

From f5d57f7cc7d47b766603dbb487b077820615eee2 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Sun, 19 May 2024 15:32:33 +0200 Subject: [PATCH 006/157] Remove hint about Config.md from PR template It used to be a common thing to have to update Config.md in a PR (and we often forgot despite the template). As of #3565 this is no longer necessary, so remove this from the template. Updating docs in general is still a good thing to think about, so we leave this in. --- .github/pull_request_template.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 9d789cd78e1..cb517784fc9 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -6,7 +6,7 @@ * [ ] Code has been formatted (see [here](https://github.com/jesseduffield/lazygit/blob/master/CONTRIBUTING.md#code-formatting)) * [ ] Tests have been added/updated (see [here](https://github.com/jesseduffield/lazygit/blob/master/pkg/integration/README.md) for the integration test guide) * [ ] Text is internationalised (see [here](https://github.com/jesseduffield/lazygit/blob/master/CONTRIBUTING.md#internationalisation)) -* [ ] Docs (specifically `docs/Config.md`) have been updated if necessary +* [ ] Docs have been updated if necessary * [ ] You've read through your own file changes for silly mistakes etc R1 + CMP R8, $0 + BEQ docall + SUB $1, R8 + MOVD 0(R7), R1 + + // arg 2 ---> R2 + CMP R8, $0 + BEQ docall + SUB $1, R8 + ADD $8, R7 + MOVD 0(R7), R2 + + // arg 3 --> R3 + CMP R8, $0 + BEQ docall + SUB $1, R8 + ADD $8, R7 + MOVD 0(R7), R3 + + CMP R8, $0 + BEQ docall + MOVD $2176+16, R6 // starting LE stack address-8 to store 4th argument + +repeat: + ADD $8, R7 + MOVD 0(R7), R0 // advance arg pointer by 8 byte + ADD $8, R6 // advance LE argument address by 8 byte + MOVD R0, (R4)(R6*1) // copy argument from go-slice to le-frame + SUB $1, R8 + CMP R8, $0 + BNE repeat + +docall: + MOVD funcdesc+0(FP), R8 // R8-> function descriptor + LMG 0(R8), R5, R6 + MOVD $0, 0(R9) // R9 address of SAVSTACK_ASYNC + LE_CALL // balr R7, R6 (return #1) + NOPH + MOVD R3, ret+32(FP) + CMP R3, $-1 // compare result to -1 + BNE done + + // retrieve errno and errno2 + MOVD zosLibVec<>(SB), R8 + ADD $(__errno), R8 + LMG 0(R8), R5, R6 + LE_CALL // balr R7, R6 __errno (return #3) NOPH - XOR R0, R0 // Restore R0 to $0. - MOVD R4, 0(R9) // Save stack pointer. - - MOVD R3, r1+56(FP) - MOVD R0, r2+64(FP) - MOVD R0, err+72(FP) - MOVW R3, R4 - CMP R4, $-1 - BNE done - BL ·rrno<>(SB) - MOVWZ 0(R3), R3 - MOVD R3, err+72(FP) + MOVWZ 0(R3), R3 + MOVD R3, err+48(FP) + MOVD zosLibVec<>(SB), R8 + ADD $(__err2ad), R8 + LMG 0(R8), R5, R6 + LE_CALL // balr R7, R6 __err2ad (return #2) + NOPH + MOVW (R3), R2 // retrieve errno2 + MOVD R2, errno2+40(FP) // store in return area + done: + MOVD R4, 0(R9) // Save stack pointer. RET -TEXT ·syscall_syscall9(SB),NOSPLIT,$0 - BL runtime·entersyscall(SB) - MOVD a1+8(FP), R1 - MOVD a2+16(FP), R2 - MOVD a3+24(FP), R3 - - // Get library control area (LCA). - MOVW PSALAA, R8 - MOVD LCA64(R8), R8 - - // Get function. - MOVD CAA(R8), R9 - MOVD EDCHPXV(R9), R9 - MOVD trap+0(FP), R5 - SLD $4, R5 - ADD R5, R9 - LMG 0(R9), R5, R6 +// +// Call LE function, if the return is 0 +// errno and errno2 is retrieved +// +TEXT ·CallLeFuncWithPtrReturn(SB), NOSPLIT, $0 + MOVW PSALAA, R8 + MOVD LCA64(R8), R8 + MOVD CAA(R8), R9 + MOVD g, GOCB(R9) // Restore LE stack. - MOVD SAVSTACK_ASYNC(R8), R9 - MOVD 0(R9), R4 - MOVD $0, 0(R9) - - // Fill in parameter list. - MOVD a4+32(FP), R12 - MOVD R12, (2176+24)(R4) - MOVD a5+40(FP), R12 - MOVD R12, (2176+32)(R4) - MOVD a6+48(FP), R12 - MOVD R12, (2176+40)(R4) - MOVD a7+56(FP), R12 - MOVD R12, (2176+48)(R4) - MOVD a8+64(FP), R12 - MOVD R12, (2176+56)(R4) - MOVD a9+72(FP), R12 - MOVD R12, (2176+64)(R4) - - // Call function. - LE_CALL + MOVD SAVSTACK_ASYNC(R8), R9 // R9-> LE stack frame saving address + MOVD 0(R9), R4 // R4-> restore previously saved stack frame pointer + + MOVD parms_base+8(FP), R7 // R7 -> argument array + MOVD parms_len+16(FP), R8 // R8 number of arguments + + // arg 1 ---> R1 + CMP R8, $0 + BEQ docall + SUB $1, R8 + MOVD 0(R7), R1 + + // arg 2 ---> R2 + CMP R8, $0 + BEQ docall + SUB $1, R8 + ADD $8, R7 + MOVD 0(R7), R2 + + // arg 3 --> R3 + CMP R8, $0 + BEQ docall + SUB $1, R8 + ADD $8, R7 + MOVD 0(R7), R3 + + CMP R8, $0 + BEQ docall + MOVD $2176+16, R6 // starting LE stack address-8 to store 4th argument + +repeat: + ADD $8, R7 + MOVD 0(R7), R0 // advance arg pointer by 8 byte + ADD $8, R6 // advance LE argument address by 8 byte + MOVD R0, (R4)(R6*1) // copy argument from go-slice to le-frame + SUB $1, R8 + CMP R8, $0 + BNE repeat + +docall: + MOVD funcdesc+0(FP), R8 // R8-> function descriptor + LMG 0(R8), R5, R6 + MOVD $0, 0(R9) // R9 address of SAVSTACK_ASYNC + LE_CALL // balr R7, R6 (return #1) NOPH - XOR R0, R0 // Restore R0 to $0. - MOVD R4, 0(R9) // Save stack pointer. - - MOVD R3, r1+80(FP) - MOVD R0, r2+88(FP) - MOVD R0, err+96(FP) - MOVW R3, R4 - CMP R4, $-1 - BNE done - BL addrerrno<>(SB) - MOVWZ 0(R3), R3 - MOVD R3, err+96(FP) -done: - BL runtime·exitsyscall(SB) - RET - -TEXT ·syscall_rawsyscall9(SB),NOSPLIT,$0 - MOVD a1+8(FP), R1 - MOVD a2+16(FP), R2 - MOVD a3+24(FP), R3 - - // Get library control area (LCA). - MOVW PSALAA, R8 - MOVD LCA64(R8), R8 - - // Get function. - MOVD CAA(R8), R9 - MOVD EDCHPXV(R9), R9 - MOVD trap+0(FP), R5 - SLD $4, R5 - ADD R5, R9 - LMG 0(R9), R5, R6 - - // Restore LE stack. - MOVD SAVSTACK_ASYNC(R8), R9 - MOVD 0(R9), R4 - MOVD $0, 0(R9) - - // Fill in parameter list. - MOVD a4+32(FP), R12 - MOVD R12, (2176+24)(R4) - MOVD a5+40(FP), R12 - MOVD R12, (2176+32)(R4) - MOVD a6+48(FP), R12 - MOVD R12, (2176+40)(R4) - MOVD a7+56(FP), R12 - MOVD R12, (2176+48)(R4) - MOVD a8+64(FP), R12 - MOVD R12, (2176+56)(R4) - MOVD a9+72(FP), R12 - MOVD R12, (2176+64)(R4) - - // Call function. - LE_CALL + MOVD R3, ret+32(FP) + CMP R3, $0 // compare result to 0 + BNE done + + // retrieve errno and errno2 + MOVD zosLibVec<>(SB), R8 + ADD $(__errno), R8 + LMG 0(R8), R5, R6 + LE_CALL // balr R7, R6 __errno (return #3) NOPH - XOR R0, R0 // Restore R0 to $0. - MOVD R4, 0(R9) // Save stack pointer. - - MOVD R3, r1+80(FP) - MOVD R0, r2+88(FP) - MOVD R0, err+96(FP) - MOVW R3, R4 - CMP R4, $-1 - BNE done - BL addrerrno<>(SB) - MOVWZ 0(R3), R3 - MOVD R3, err+96(FP) -done: - RET - -// func svcCall(fnptr unsafe.Pointer, argv *unsafe.Pointer, dsa *uint64) -TEXT ·svcCall(SB),NOSPLIT,$0 - BL runtime·save_g(SB) // Save g and stack pointer - MOVW PSALAA, R8 - MOVD LCA64(R8), R8 - MOVD SAVSTACK_ASYNC(R8), R9 - MOVD R15, 0(R9) - - MOVD argv+8(FP), R1 // Move function arguments into registers - MOVD dsa+16(FP), g - MOVD fnptr+0(FP), R15 - - BYTE $0x0D // Branch to function - BYTE $0xEF - - BL runtime·load_g(SB) // Restore g and stack pointer - MOVW PSALAA, R8 - MOVD LCA64(R8), R8 - MOVD SAVSTACK_ASYNC(R8), R9 - MOVD 0(R9), R15 - - RET - -// func svcLoad(name *byte) unsafe.Pointer -TEXT ·svcLoad(SB),NOSPLIT,$0 - MOVD R15, R2 // Save go stack pointer - MOVD name+0(FP), R0 // Move SVC args into registers - MOVD $0x80000000, R1 - MOVD $0, R15 - BYTE $0x0A // SVC 08 LOAD - BYTE $0x08 - MOVW R15, R3 // Save return code from SVC - MOVD R2, R15 // Restore go stack pointer - CMP R3, $0 // Check SVC return code - BNE error - - MOVD $-2, R3 // Reset last bit of entry point to zero - AND R0, R3 - MOVD R3, addr+8(FP) // Return entry point returned by SVC - CMP R0, R3 // Check if last bit of entry point was set - BNE done - - MOVD R15, R2 // Save go stack pointer - MOVD $0, R15 // Move SVC args into registers (entry point still in r0 from SVC 08) - BYTE $0x0A // SVC 09 DELETE - BYTE $0x09 - MOVD R2, R15 // Restore go stack pointer + MOVWZ 0(R3), R3 + MOVD R3, err+48(FP) + MOVD zosLibVec<>(SB), R8 + ADD $(__err2ad), R8 + LMG 0(R8), R5, R6 + LE_CALL // balr R7, R6 __err2ad (return #2) + NOPH + MOVW (R3), R2 // retrieve errno2 + MOVD R2, errno2+40(FP) // store in return area + XOR R2, R2 + MOVWZ R2, (R3) // clear errno2 -error: - MOVD $0, addr+8(FP) // Return 0 on failure done: - XOR R0, R0 // Reset r0 to 0 + MOVD R4, 0(R9) // Save stack pointer. RET -// func svcUnload(name *byte, fnptr unsafe.Pointer) int64 -TEXT ·svcUnload(SB),NOSPLIT,$0 - MOVD R15, R2 // Save go stack pointer - MOVD name+0(FP), R0 // Move SVC args into registers - MOVD addr+8(FP), R15 - BYTE $0x0A // SVC 09 - BYTE $0x09 - XOR R0, R0 // Reset r0 to 0 - MOVD R15, R1 // Save SVC return code - MOVD R2, R15 // Restore go stack pointer - MOVD R1, rc+0(FP) // Return SVC return code +// +// function to test if a pointer can be safely dereferenced (content read) +// return 0 for succces +// +TEXT ·ptrtest(SB), NOSPLIT, $0-16 + MOVD arg+0(FP), R10 // test pointer in R10 + + // set up R2 to point to CEECAADMC + BYTE $0xE3; BYTE $0x20; BYTE $0x04; BYTE $0xB8; BYTE $0x00; BYTE $0x17 // llgt 2,1208 + BYTE $0xB9; BYTE $0x17; BYTE $0x00; BYTE $0x22 // llgtr 2,2 + BYTE $0xA5; BYTE $0x26; BYTE $0x7F; BYTE $0xFF // nilh 2,32767 + BYTE $0xE3; BYTE $0x22; BYTE $0x00; BYTE $0x58; BYTE $0x00; BYTE $0x04 // lg 2,88(2) + BYTE $0xE3; BYTE $0x22; BYTE $0x00; BYTE $0x08; BYTE $0x00; BYTE $0x04 // lg 2,8(2) + BYTE $0x41; BYTE $0x22; BYTE $0x03; BYTE $0x68 // la 2,872(2) + + // set up R5 to point to the "shunt" path which set 1 to R3 (failure) + BYTE $0xB9; BYTE $0x82; BYTE $0x00; BYTE $0x33 // xgr 3,3 + BYTE $0xA7; BYTE $0x55; BYTE $0x00; BYTE $0x04 // bras 5,lbl1 + BYTE $0xA7; BYTE $0x39; BYTE $0x00; BYTE $0x01 // lghi 3,1 + + // if r3 is not zero (failed) then branch to finish + BYTE $0xB9; BYTE $0x02; BYTE $0x00; BYTE $0x33 // lbl1 ltgr 3,3 + BYTE $0xA7; BYTE $0x74; BYTE $0x00; BYTE $0x08 // brc b'0111',lbl2 + + // stomic store shunt address in R5 into CEECAADMC + BYTE $0xE3; BYTE $0x52; BYTE $0x00; BYTE $0x00; BYTE $0x00; BYTE $0x24 // stg 5,0(2) + + // now try reading from the test pointer in R10, if it fails it branches to the "lghi" instruction above + BYTE $0xE3; BYTE $0x9A; BYTE $0x00; BYTE $0x00; BYTE $0x00; BYTE $0x04 // lg 9,0(10) + + // finish here, restore 0 into CEECAADMC + BYTE $0xB9; BYTE $0x82; BYTE $0x00; BYTE $0x99 // lbl2 xgr 9,9 + BYTE $0xE3; BYTE $0x92; BYTE $0x00; BYTE $0x00; BYTE $0x00; BYTE $0x24 // stg 9,0(2) + MOVD R3, ret+8(FP) // result in R3 RET -// func gettid() uint64 -TEXT ·gettid(SB), NOSPLIT, $0 - // Get library control area (LCA). - MOVW PSALAA, R8 - MOVD LCA64(R8), R8 - - // Get CEECAATHDID - MOVD CAA(R8), R9 - MOVD 0x3D0(R9), R9 - MOVD R9, ret+0(FP) - +// +// function to test if a untptr can be loaded from a pointer +// return 1: the 8-byte content +// 2: 0 for success, 1 for failure +// +// func safeload(ptr uintptr) ( value uintptr, error uintptr) +TEXT ·safeload(SB), NOSPLIT, $0-24 + MOVD ptr+0(FP), R10 // test pointer in R10 + MOVD $0x0, R6 + BYTE $0xE3; BYTE $0x20; BYTE $0x04; BYTE $0xB8; BYTE $0x00; BYTE $0x17 // llgt 2,1208 + BYTE $0xB9; BYTE $0x17; BYTE $0x00; BYTE $0x22 // llgtr 2,2 + BYTE $0xA5; BYTE $0x26; BYTE $0x7F; BYTE $0xFF // nilh 2,32767 + BYTE $0xE3; BYTE $0x22; BYTE $0x00; BYTE $0x58; BYTE $0x00; BYTE $0x04 // lg 2,88(2) + BYTE $0xE3; BYTE $0x22; BYTE $0x00; BYTE $0x08; BYTE $0x00; BYTE $0x04 // lg 2,8(2) + BYTE $0x41; BYTE $0x22; BYTE $0x03; BYTE $0x68 // la 2,872(2) + BYTE $0xB9; BYTE $0x82; BYTE $0x00; BYTE $0x33 // xgr 3,3 + BYTE $0xA7; BYTE $0x55; BYTE $0x00; BYTE $0x04 // bras 5,lbl1 + BYTE $0xA7; BYTE $0x39; BYTE $0x00; BYTE $0x01 // lghi 3,1 + BYTE $0xB9; BYTE $0x02; BYTE $0x00; BYTE $0x33 // lbl1 ltgr 3,3 + BYTE $0xA7; BYTE $0x74; BYTE $0x00; BYTE $0x08 // brc b'0111',lbl2 + BYTE $0xE3; BYTE $0x52; BYTE $0x00; BYTE $0x00; BYTE $0x00; BYTE $0x24 // stg 5,0(2) + BYTE $0xE3; BYTE $0x6A; BYTE $0x00; BYTE $0x00; BYTE $0x00; BYTE $0x04 // lg 6,0(10) + BYTE $0xB9; BYTE $0x82; BYTE $0x00; BYTE $0x99 // lbl2 xgr 9,9 + BYTE $0xE3; BYTE $0x92; BYTE $0x00; BYTE $0x00; BYTE $0x00; BYTE $0x24 // stg 9,0(2) + MOVD R6, value+8(FP) // result in R6 + MOVD R3, error+16(FP) // error in R3 RET diff --git a/vendor/golang.org/x/sys/unix/bpxsvc_zos.go b/vendor/golang.org/x/sys/unix/bpxsvc_zos.go new file mode 100644 index 00000000000..39d647d863a --- /dev/null +++ b/vendor/golang.org/x/sys/unix/bpxsvc_zos.go @@ -0,0 +1,657 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build zos + +package unix + +import ( + "bytes" + "fmt" + "unsafe" +) + +//go:noescape +func bpxcall(plist []unsafe.Pointer, bpx_offset int64) + +//go:noescape +func A2e([]byte) + +//go:noescape +func E2a([]byte) + +const ( + BPX4STA = 192 // stat + BPX4FST = 104 // fstat + BPX4LST = 132 // lstat + BPX4OPN = 156 // open + BPX4CLO = 72 // close + BPX4CHR = 500 // chattr + BPX4FCR = 504 // fchattr + BPX4LCR = 1180 // lchattr + BPX4CTW = 492 // cond_timed_wait + BPX4GTH = 1056 // __getthent + BPX4PTQ = 412 // pthread_quiesc + BPX4PTR = 320 // ptrace +) + +const ( + //options + //byte1 + BPX_OPNFHIGH = 0x80 + //byte2 + BPX_OPNFEXEC = 0x80 + //byte3 + BPX_O_NOLARGEFILE = 0x08 + BPX_O_LARGEFILE = 0x04 + BPX_O_ASYNCSIG = 0x02 + BPX_O_SYNC = 0x01 + //byte4 + BPX_O_CREXCL = 0xc0 + BPX_O_CREAT = 0x80 + BPX_O_EXCL = 0x40 + BPX_O_NOCTTY = 0x20 + BPX_O_TRUNC = 0x10 + BPX_O_APPEND = 0x08 + BPX_O_NONBLOCK = 0x04 + BPX_FNDELAY = 0x04 + BPX_O_RDWR = 0x03 + BPX_O_RDONLY = 0x02 + BPX_O_WRONLY = 0x01 + BPX_O_ACCMODE = 0x03 + BPX_O_GETFL = 0x0f + + //mode + // byte1 (file type) + BPX_FT_DIR = 1 + BPX_FT_CHARSPEC = 2 + BPX_FT_REGFILE = 3 + BPX_FT_FIFO = 4 + BPX_FT_SYMLINK = 5 + BPX_FT_SOCKET = 6 + //byte3 + BPX_S_ISUID = 0x08 + BPX_S_ISGID = 0x04 + BPX_S_ISVTX = 0x02 + BPX_S_IRWXU1 = 0x01 + BPX_S_IRUSR = 0x01 + //byte4 + BPX_S_IRWXU2 = 0xc0 + BPX_S_IWUSR = 0x80 + BPX_S_IXUSR = 0x40 + BPX_S_IRWXG = 0x38 + BPX_S_IRGRP = 0x20 + BPX_S_IWGRP = 0x10 + BPX_S_IXGRP = 0x08 + BPX_S_IRWXOX = 0x07 + BPX_S_IROTH = 0x04 + BPX_S_IWOTH = 0x02 + BPX_S_IXOTH = 0x01 + + CW_INTRPT = 1 + CW_CONDVAR = 32 + CW_TIMEOUT = 64 + + PGTHA_NEXT = 2 + PGTHA_CURRENT = 1 + PGTHA_FIRST = 0 + PGTHA_LAST = 3 + PGTHA_PROCESS = 0x80 + PGTHA_CONTTY = 0x40 + PGTHA_PATH = 0x20 + PGTHA_COMMAND = 0x10 + PGTHA_FILEDATA = 0x08 + PGTHA_THREAD = 0x04 + PGTHA_PTAG = 0x02 + PGTHA_COMMANDLONG = 0x01 + PGTHA_THREADFAST = 0x80 + PGTHA_FILEPATH = 0x40 + PGTHA_THDSIGMASK = 0x20 + // thread quiece mode + QUIESCE_TERM int32 = 1 + QUIESCE_FORCE int32 = 2 + QUIESCE_QUERY int32 = 3 + QUIESCE_FREEZE int32 = 4 + QUIESCE_UNFREEZE int32 = 5 + FREEZE_THIS_THREAD int32 = 6 + FREEZE_EXIT int32 = 8 + QUIESCE_SRB int32 = 9 +) + +type Pgtha struct { + Pid uint32 // 0 + Tid0 uint32 // 4 + Tid1 uint32 + Accesspid byte // C + Accesstid byte // D + Accessasid uint16 // E + Loginname [8]byte // 10 + Flag1 byte // 18 + Flag1b2 byte // 19 +} + +type Bpxystat_t struct { // DSECT BPXYSTAT + St_id [4]uint8 // 0 + St_length uint16 // 0x4 + St_version uint16 // 0x6 + St_mode uint32 // 0x8 + St_ino uint32 // 0xc + St_dev uint32 // 0x10 + St_nlink uint32 // 0x14 + St_uid uint32 // 0x18 + St_gid uint32 // 0x1c + St_size uint64 // 0x20 + St_atime uint32 // 0x28 + St_mtime uint32 // 0x2c + St_ctime uint32 // 0x30 + St_rdev uint32 // 0x34 + St_auditoraudit uint32 // 0x38 + St_useraudit uint32 // 0x3c + St_blksize uint32 // 0x40 + St_createtime uint32 // 0x44 + St_auditid [4]uint32 // 0x48 + St_res01 uint32 // 0x58 + Ft_ccsid uint16 // 0x5c + Ft_flags uint16 // 0x5e + St_res01a [2]uint32 // 0x60 + St_res02 uint32 // 0x68 + St_blocks uint32 // 0x6c + St_opaque [3]uint8 // 0x70 + St_visible uint8 // 0x73 + St_reftime uint32 // 0x74 + St_fid uint64 // 0x78 + St_filefmt uint8 // 0x80 + St_fspflag2 uint8 // 0x81 + St_res03 [2]uint8 // 0x82 + St_ctimemsec uint32 // 0x84 + St_seclabel [8]uint8 // 0x88 + St_res04 [4]uint8 // 0x90 + // end of version 1 + _ uint32 // 0x94 + St_atime64 uint64 // 0x98 + St_mtime64 uint64 // 0xa0 + St_ctime64 uint64 // 0xa8 + St_createtime64 uint64 // 0xb0 + St_reftime64 uint64 // 0xb8 + _ uint64 // 0xc0 + St_res05 [16]uint8 // 0xc8 + // end of version 2 +} + +type BpxFilestatus struct { + Oflag1 byte + Oflag2 byte + Oflag3 byte + Oflag4 byte +} + +type BpxMode struct { + Ftype byte + Mode1 byte + Mode2 byte + Mode3 byte +} + +// Thr attribute structure for extended attributes +type Bpxyatt_t struct { // DSECT BPXYATT + Att_id [4]uint8 + Att_version uint16 + Att_res01 [2]uint8 + Att_setflags1 uint8 + Att_setflags2 uint8 + Att_setflags3 uint8 + Att_setflags4 uint8 + Att_mode uint32 + Att_uid uint32 + Att_gid uint32 + Att_opaquemask [3]uint8 + Att_visblmaskres uint8 + Att_opaque [3]uint8 + Att_visibleres uint8 + Att_size_h uint32 + Att_size_l uint32 + Att_atime uint32 + Att_mtime uint32 + Att_auditoraudit uint32 + Att_useraudit uint32 + Att_ctime uint32 + Att_reftime uint32 + // end of version 1 + Att_filefmt uint8 + Att_res02 [3]uint8 + Att_filetag uint32 + Att_res03 [8]uint8 + // end of version 2 + Att_atime64 uint64 + Att_mtime64 uint64 + Att_ctime64 uint64 + Att_reftime64 uint64 + Att_seclabel [8]uint8 + Att_ver3res02 [8]uint8 + // end of version 3 +} + +func BpxOpen(name string, options *BpxFilestatus, mode *BpxMode) (rv int32, rc int32, rn int32) { + if len(name) < 1024 { + var namebuf [1024]byte + sz := int32(copy(namebuf[:], name)) + A2e(namebuf[:sz]) + var parms [7]unsafe.Pointer + parms[0] = unsafe.Pointer(&sz) + parms[1] = unsafe.Pointer(&namebuf[0]) + parms[2] = unsafe.Pointer(options) + parms[3] = unsafe.Pointer(mode) + parms[4] = unsafe.Pointer(&rv) + parms[5] = unsafe.Pointer(&rc) + parms[6] = unsafe.Pointer(&rn) + bpxcall(parms[:], BPX4OPN) + return rv, rc, rn + } + return -1, -1, -1 +} + +func BpxClose(fd int32) (rv int32, rc int32, rn int32) { + var parms [4]unsafe.Pointer + parms[0] = unsafe.Pointer(&fd) + parms[1] = unsafe.Pointer(&rv) + parms[2] = unsafe.Pointer(&rc) + parms[3] = unsafe.Pointer(&rn) + bpxcall(parms[:], BPX4CLO) + return rv, rc, rn +} + +func BpxFileFStat(fd int32, st *Bpxystat_t) (rv int32, rc int32, rn int32) { + st.St_id = [4]uint8{0xe2, 0xe3, 0xc1, 0xe3} + st.St_version = 2 + stat_sz := uint32(unsafe.Sizeof(*st)) + var parms [6]unsafe.Pointer + parms[0] = unsafe.Pointer(&fd) + parms[1] = unsafe.Pointer(&stat_sz) + parms[2] = unsafe.Pointer(st) + parms[3] = unsafe.Pointer(&rv) + parms[4] = unsafe.Pointer(&rc) + parms[5] = unsafe.Pointer(&rn) + bpxcall(parms[:], BPX4FST) + return rv, rc, rn +} + +func BpxFileStat(name string, st *Bpxystat_t) (rv int32, rc int32, rn int32) { + if len(name) < 1024 { + var namebuf [1024]byte + sz := int32(copy(namebuf[:], name)) + A2e(namebuf[:sz]) + st.St_id = [4]uint8{0xe2, 0xe3, 0xc1, 0xe3} + st.St_version = 2 + stat_sz := uint32(unsafe.Sizeof(*st)) + var parms [7]unsafe.Pointer + parms[0] = unsafe.Pointer(&sz) + parms[1] = unsafe.Pointer(&namebuf[0]) + parms[2] = unsafe.Pointer(&stat_sz) + parms[3] = unsafe.Pointer(st) + parms[4] = unsafe.Pointer(&rv) + parms[5] = unsafe.Pointer(&rc) + parms[6] = unsafe.Pointer(&rn) + bpxcall(parms[:], BPX4STA) + return rv, rc, rn + } + return -1, -1, -1 +} + +func BpxFileLStat(name string, st *Bpxystat_t) (rv int32, rc int32, rn int32) { + if len(name) < 1024 { + var namebuf [1024]byte + sz := int32(copy(namebuf[:], name)) + A2e(namebuf[:sz]) + st.St_id = [4]uint8{0xe2, 0xe3, 0xc1, 0xe3} + st.St_version = 2 + stat_sz := uint32(unsafe.Sizeof(*st)) + var parms [7]unsafe.Pointer + parms[0] = unsafe.Pointer(&sz) + parms[1] = unsafe.Pointer(&namebuf[0]) + parms[2] = unsafe.Pointer(&stat_sz) + parms[3] = unsafe.Pointer(st) + parms[4] = unsafe.Pointer(&rv) + parms[5] = unsafe.Pointer(&rc) + parms[6] = unsafe.Pointer(&rn) + bpxcall(parms[:], BPX4LST) + return rv, rc, rn + } + return -1, -1, -1 +} + +func BpxChattr(path string, attr *Bpxyatt_t) (rv int32, rc int32, rn int32) { + if len(path) >= 1024 { + return -1, -1, -1 + } + var namebuf [1024]byte + sz := int32(copy(namebuf[:], path)) + A2e(namebuf[:sz]) + attr_sz := uint32(unsafe.Sizeof(*attr)) + var parms [7]unsafe.Pointer + parms[0] = unsafe.Pointer(&sz) + parms[1] = unsafe.Pointer(&namebuf[0]) + parms[2] = unsafe.Pointer(&attr_sz) + parms[3] = unsafe.Pointer(attr) + parms[4] = unsafe.Pointer(&rv) + parms[5] = unsafe.Pointer(&rc) + parms[6] = unsafe.Pointer(&rn) + bpxcall(parms[:], BPX4CHR) + return rv, rc, rn +} + +func BpxLchattr(path string, attr *Bpxyatt_t) (rv int32, rc int32, rn int32) { + if len(path) >= 1024 { + return -1, -1, -1 + } + var namebuf [1024]byte + sz := int32(copy(namebuf[:], path)) + A2e(namebuf[:sz]) + attr_sz := uint32(unsafe.Sizeof(*attr)) + var parms [7]unsafe.Pointer + parms[0] = unsafe.Pointer(&sz) + parms[1] = unsafe.Pointer(&namebuf[0]) + parms[2] = unsafe.Pointer(&attr_sz) + parms[3] = unsafe.Pointer(attr) + parms[4] = unsafe.Pointer(&rv) + parms[5] = unsafe.Pointer(&rc) + parms[6] = unsafe.Pointer(&rn) + bpxcall(parms[:], BPX4LCR) + return rv, rc, rn +} + +func BpxFchattr(fd int32, attr *Bpxyatt_t) (rv int32, rc int32, rn int32) { + attr_sz := uint32(unsafe.Sizeof(*attr)) + var parms [6]unsafe.Pointer + parms[0] = unsafe.Pointer(&fd) + parms[1] = unsafe.Pointer(&attr_sz) + parms[2] = unsafe.Pointer(attr) + parms[3] = unsafe.Pointer(&rv) + parms[4] = unsafe.Pointer(&rc) + parms[5] = unsafe.Pointer(&rn) + bpxcall(parms[:], BPX4FCR) + return rv, rc, rn +} + +func BpxCondTimedWait(sec uint32, nsec uint32, events uint32, secrem *uint32, nsecrem *uint32) (rv int32, rc int32, rn int32) { + var parms [8]unsafe.Pointer + parms[0] = unsafe.Pointer(&sec) + parms[1] = unsafe.Pointer(&nsec) + parms[2] = unsafe.Pointer(&events) + parms[3] = unsafe.Pointer(secrem) + parms[4] = unsafe.Pointer(nsecrem) + parms[5] = unsafe.Pointer(&rv) + parms[6] = unsafe.Pointer(&rc) + parms[7] = unsafe.Pointer(&rn) + bpxcall(parms[:], BPX4CTW) + return rv, rc, rn +} +func BpxGetthent(in *Pgtha, outlen *uint32, out unsafe.Pointer) (rv int32, rc int32, rn int32) { + var parms [7]unsafe.Pointer + inlen := uint32(26) // nothing else will work. Go says Pgtha is 28-byte because of alignment, but Pgtha is "packed" and must be 26-byte + parms[0] = unsafe.Pointer(&inlen) + parms[1] = unsafe.Pointer(&in) + parms[2] = unsafe.Pointer(outlen) + parms[3] = unsafe.Pointer(&out) + parms[4] = unsafe.Pointer(&rv) + parms[5] = unsafe.Pointer(&rc) + parms[6] = unsafe.Pointer(&rn) + bpxcall(parms[:], BPX4GTH) + return rv, rc, rn +} +func ZosJobname() (jobname string, err error) { + var pgtha Pgtha + pgtha.Pid = uint32(Getpid()) + pgtha.Accesspid = PGTHA_CURRENT + pgtha.Flag1 = PGTHA_PROCESS + var out [256]byte + var outlen uint32 + outlen = 256 + rv, rc, rn := BpxGetthent(&pgtha, &outlen, unsafe.Pointer(&out[0])) + if rv == 0 { + gthc := []byte{0x87, 0xa3, 0x88, 0x83} // 'gthc' in ebcdic + ix := bytes.Index(out[:], gthc) + if ix == -1 { + err = fmt.Errorf("BPX4GTH: gthc return data not found") + return + } + jn := out[ix+80 : ix+88] // we didn't declare Pgthc, but jobname is 8-byte at offset 80 + E2a(jn) + jobname = string(bytes.TrimRight(jn, " ")) + + } else { + err = fmt.Errorf("BPX4GTH: rc=%d errno=%d reason=code=0x%x", rv, rc, rn) + } + return +} +func Bpx4ptq(code int32, data string) (rv int32, rc int32, rn int32) { + var userdata [8]byte + var parms [5]unsafe.Pointer + copy(userdata[:], data+" ") + A2e(userdata[:]) + parms[0] = unsafe.Pointer(&code) + parms[1] = unsafe.Pointer(&userdata[0]) + parms[2] = unsafe.Pointer(&rv) + parms[3] = unsafe.Pointer(&rc) + parms[4] = unsafe.Pointer(&rn) + bpxcall(parms[:], BPX4PTQ) + return rv, rc, rn +} + +const ( + PT_TRACE_ME = 0 // Debug this process + PT_READ_I = 1 // Read a full word + PT_READ_D = 2 // Read a full word + PT_READ_U = 3 // Read control info + PT_WRITE_I = 4 //Write a full word + PT_WRITE_D = 5 //Write a full word + PT_CONTINUE = 7 //Continue the process + PT_KILL = 8 //Terminate the process + PT_READ_GPR = 11 // Read GPR, CR, PSW + PT_READ_FPR = 12 // Read FPR + PT_READ_VR = 13 // Read VR + PT_WRITE_GPR = 14 // Write GPR, CR, PSW + PT_WRITE_FPR = 15 // Write FPR + PT_WRITE_VR = 16 // Write VR + PT_READ_BLOCK = 17 // Read storage + PT_WRITE_BLOCK = 19 // Write storage + PT_READ_GPRH = 20 // Read GPRH + PT_WRITE_GPRH = 21 // Write GPRH + PT_REGHSET = 22 // Read all GPRHs + PT_ATTACH = 30 // Attach to a process + PT_DETACH = 31 // Detach from a process + PT_REGSET = 32 // Read all GPRs + PT_REATTACH = 33 // Reattach to a process + PT_LDINFO = 34 // Read loader info + PT_MULTI = 35 // Multi process mode + PT_LD64INFO = 36 // RMODE64 Info Area + PT_BLOCKREQ = 40 // Block request + PT_THREAD_INFO = 60 // Read thread info + PT_THREAD_MODIFY = 61 + PT_THREAD_READ_FOCUS = 62 + PT_THREAD_WRITE_FOCUS = 63 + PT_THREAD_HOLD = 64 + PT_THREAD_SIGNAL = 65 + PT_EXPLAIN = 66 + PT_EVENTS = 67 + PT_THREAD_INFO_EXTENDED = 68 + PT_REATTACH2 = 71 + PT_CAPTURE = 72 + PT_UNCAPTURE = 73 + PT_GET_THREAD_TCB = 74 + PT_GET_ALET = 75 + PT_SWAPIN = 76 + PT_EXTENDED_EVENT = 98 + PT_RECOVER = 99 // Debug a program check + PT_GPR0 = 0 // General purpose register 0 + PT_GPR1 = 1 // General purpose register 1 + PT_GPR2 = 2 // General purpose register 2 + PT_GPR3 = 3 // General purpose register 3 + PT_GPR4 = 4 // General purpose register 4 + PT_GPR5 = 5 // General purpose register 5 + PT_GPR6 = 6 // General purpose register 6 + PT_GPR7 = 7 // General purpose register 7 + PT_GPR8 = 8 // General purpose register 8 + PT_GPR9 = 9 // General purpose register 9 + PT_GPR10 = 10 // General purpose register 10 + PT_GPR11 = 11 // General purpose register 11 + PT_GPR12 = 12 // General purpose register 12 + PT_GPR13 = 13 // General purpose register 13 + PT_GPR14 = 14 // General purpose register 14 + PT_GPR15 = 15 // General purpose register 15 + PT_FPR0 = 16 // Floating point register 0 + PT_FPR1 = 17 // Floating point register 1 + PT_FPR2 = 18 // Floating point register 2 + PT_FPR3 = 19 // Floating point register 3 + PT_FPR4 = 20 // Floating point register 4 + PT_FPR5 = 21 // Floating point register 5 + PT_FPR6 = 22 // Floating point register 6 + PT_FPR7 = 23 // Floating point register 7 + PT_FPR8 = 24 // Floating point register 8 + PT_FPR9 = 25 // Floating point register 9 + PT_FPR10 = 26 // Floating point register 10 + PT_FPR11 = 27 // Floating point register 11 + PT_FPR12 = 28 // Floating point register 12 + PT_FPR13 = 29 // Floating point register 13 + PT_FPR14 = 30 // Floating point register 14 + PT_FPR15 = 31 // Floating point register 15 + PT_FPC = 32 // Floating point control register + PT_PSW = 40 // PSW + PT_PSW0 = 40 // Left half of the PSW + PT_PSW1 = 41 // Right half of the PSW + PT_CR0 = 42 // Control register 0 + PT_CR1 = 43 // Control register 1 + PT_CR2 = 44 // Control register 2 + PT_CR3 = 45 // Control register 3 + PT_CR4 = 46 // Control register 4 + PT_CR5 = 47 // Control register 5 + PT_CR6 = 48 // Control register 6 + PT_CR7 = 49 // Control register 7 + PT_CR8 = 50 // Control register 8 + PT_CR9 = 51 // Control register 9 + PT_CR10 = 52 // Control register 10 + PT_CR11 = 53 // Control register 11 + PT_CR12 = 54 // Control register 12 + PT_CR13 = 55 // Control register 13 + PT_CR14 = 56 // Control register 14 + PT_CR15 = 57 // Control register 15 + PT_GPRH0 = 58 // GP High register 0 + PT_GPRH1 = 59 // GP High register 1 + PT_GPRH2 = 60 // GP High register 2 + PT_GPRH3 = 61 // GP High register 3 + PT_GPRH4 = 62 // GP High register 4 + PT_GPRH5 = 63 // GP High register 5 + PT_GPRH6 = 64 // GP High register 6 + PT_GPRH7 = 65 // GP High register 7 + PT_GPRH8 = 66 // GP High register 8 + PT_GPRH9 = 67 // GP High register 9 + PT_GPRH10 = 68 // GP High register 10 + PT_GPRH11 = 69 // GP High register 11 + PT_GPRH12 = 70 // GP High register 12 + PT_GPRH13 = 71 // GP High register 13 + PT_GPRH14 = 72 // GP High register 14 + PT_GPRH15 = 73 // GP High register 15 + PT_VR0 = 74 // Vector register 0 + PT_VR1 = 75 // Vector register 1 + PT_VR2 = 76 // Vector register 2 + PT_VR3 = 77 // Vector register 3 + PT_VR4 = 78 // Vector register 4 + PT_VR5 = 79 // Vector register 5 + PT_VR6 = 80 // Vector register 6 + PT_VR7 = 81 // Vector register 7 + PT_VR8 = 82 // Vector register 8 + PT_VR9 = 83 // Vector register 9 + PT_VR10 = 84 // Vector register 10 + PT_VR11 = 85 // Vector register 11 + PT_VR12 = 86 // Vector register 12 + PT_VR13 = 87 // Vector register 13 + PT_VR14 = 88 // Vector register 14 + PT_VR15 = 89 // Vector register 15 + PT_VR16 = 90 // Vector register 16 + PT_VR17 = 91 // Vector register 17 + PT_VR18 = 92 // Vector register 18 + PT_VR19 = 93 // Vector register 19 + PT_VR20 = 94 // Vector register 20 + PT_VR21 = 95 // Vector register 21 + PT_VR22 = 96 // Vector register 22 + PT_VR23 = 97 // Vector register 23 + PT_VR24 = 98 // Vector register 24 + PT_VR25 = 99 // Vector register 25 + PT_VR26 = 100 // Vector register 26 + PT_VR27 = 101 // Vector register 27 + PT_VR28 = 102 // Vector register 28 + PT_VR29 = 103 // Vector register 29 + PT_VR30 = 104 // Vector register 30 + PT_VR31 = 105 // Vector register 31 + PT_PSWG = 106 // PSWG + PT_PSWG0 = 106 // Bytes 0-3 + PT_PSWG1 = 107 // Bytes 4-7 + PT_PSWG2 = 108 // Bytes 8-11 (IA high word) + PT_PSWG3 = 109 // Bytes 12-15 (IA low word) +) + +func Bpx4ptr(request int32, pid int32, addr unsafe.Pointer, data unsafe.Pointer, buffer unsafe.Pointer) (rv int32, rc int32, rn int32) { + var parms [8]unsafe.Pointer + parms[0] = unsafe.Pointer(&request) + parms[1] = unsafe.Pointer(&pid) + parms[2] = unsafe.Pointer(&addr) + parms[3] = unsafe.Pointer(&data) + parms[4] = unsafe.Pointer(&buffer) + parms[5] = unsafe.Pointer(&rv) + parms[6] = unsafe.Pointer(&rc) + parms[7] = unsafe.Pointer(&rn) + bpxcall(parms[:], BPX4PTR) + return rv, rc, rn +} + +func copyU8(val uint8, dest []uint8) int { + if len(dest) < 1 { + return 0 + } + dest[0] = val + return 1 +} + +func copyU8Arr(src, dest []uint8) int { + if len(dest) < len(src) { + return 0 + } + for i, v := range src { + dest[i] = v + } + return len(src) +} + +func copyU16(val uint16, dest []uint16) int { + if len(dest) < 1 { + return 0 + } + dest[0] = val + return 1 +} + +func copyU32(val uint32, dest []uint32) int { + if len(dest) < 1 { + return 0 + } + dest[0] = val + return 1 +} + +func copyU32Arr(src, dest []uint32) int { + if len(dest) < len(src) { + return 0 + } + for i, v := range src { + dest[i] = v + } + return len(src) +} + +func copyU64(val uint64, dest []uint64) int { + if len(dest) < 1 { + return 0 + } + dest[0] = val + return 1 +} diff --git a/vendor/golang.org/x/sys/unix/bpxsvc_zos.s b/vendor/golang.org/x/sys/unix/bpxsvc_zos.s new file mode 100644 index 00000000000..4bd4a179821 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/bpxsvc_zos.s @@ -0,0 +1,192 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +#include "go_asm.h" +#include "textflag.h" + +// function to call USS assembly language services +// +// doc: https://www.ibm.com/support/knowledgecenter/en/SSLTBW_3.1.0/com.ibm.zos.v3r1.bpxb100/bit64env.htm +// +// arg1 unsafe.Pointer array that ressembles an OS PLIST +// +// arg2 function offset as in +// doc: https://www.ibm.com/support/knowledgecenter/en/SSLTBW_3.1.0/com.ibm.zos.v3r1.bpxb100/bpx2cr_List_of_offsets.htm +// +// func bpxcall(plist []unsafe.Pointer, bpx_offset int64) + +TEXT ·bpxcall(SB), NOSPLIT|NOFRAME, $0 + MOVD plist_base+0(FP), R1 // r1 points to plist + MOVD bpx_offset+24(FP), R2 // r2 offset to BPX vector table + MOVD R14, R7 // save r14 + MOVD R15, R8 // save r15 + MOVWZ 16(R0), R9 + MOVWZ 544(R9), R9 + MOVWZ 24(R9), R9 // call vector in r9 + ADD R2, R9 // add offset to vector table + MOVWZ (R9), R9 // r9 points to entry point + BYTE $0x0D // BL R14,R9 --> basr r14,r9 + BYTE $0xE9 // clobbers 0,1,14,15 + MOVD R8, R15 // restore 15 + JMP R7 // return via saved return address + +// func A2e(arr [] byte) +// code page conversion from 819 to 1047 +TEXT ·A2e(SB), NOSPLIT|NOFRAME, $0 + MOVD arg_base+0(FP), R2 // pointer to arry of characters + MOVD arg_len+8(FP), R3 // count + XOR R0, R0 + XOR R1, R1 + BYTE $0xA7; BYTE $0x15; BYTE $0x00; BYTE $0x82 // BRAS 1,(2+(256/2)) + + // ASCII -> EBCDIC conversion table: + BYTE $0x00; BYTE $0x01; BYTE $0x02; BYTE $0x03 + BYTE $0x37; BYTE $0x2d; BYTE $0x2e; BYTE $0x2f + BYTE $0x16; BYTE $0x05; BYTE $0x15; BYTE $0x0b + BYTE $0x0c; BYTE $0x0d; BYTE $0x0e; BYTE $0x0f + BYTE $0x10; BYTE $0x11; BYTE $0x12; BYTE $0x13 + BYTE $0x3c; BYTE $0x3d; BYTE $0x32; BYTE $0x26 + BYTE $0x18; BYTE $0x19; BYTE $0x3f; BYTE $0x27 + BYTE $0x1c; BYTE $0x1d; BYTE $0x1e; BYTE $0x1f + BYTE $0x40; BYTE $0x5a; BYTE $0x7f; BYTE $0x7b + BYTE $0x5b; BYTE $0x6c; BYTE $0x50; BYTE $0x7d + BYTE $0x4d; BYTE $0x5d; BYTE $0x5c; BYTE $0x4e + BYTE $0x6b; BYTE $0x60; BYTE $0x4b; BYTE $0x61 + BYTE $0xf0; BYTE $0xf1; BYTE $0xf2; BYTE $0xf3 + BYTE $0xf4; BYTE $0xf5; BYTE $0xf6; BYTE $0xf7 + BYTE $0xf8; BYTE $0xf9; BYTE $0x7a; BYTE $0x5e + BYTE $0x4c; BYTE $0x7e; BYTE $0x6e; BYTE $0x6f + BYTE $0x7c; BYTE $0xc1; BYTE $0xc2; BYTE $0xc3 + BYTE $0xc4; BYTE $0xc5; BYTE $0xc6; BYTE $0xc7 + BYTE $0xc8; BYTE $0xc9; BYTE $0xd1; BYTE $0xd2 + BYTE $0xd3; BYTE $0xd4; BYTE $0xd5; BYTE $0xd6 + BYTE $0xd7; BYTE $0xd8; BYTE $0xd9; BYTE $0xe2 + BYTE $0xe3; BYTE $0xe4; BYTE $0xe5; BYTE $0xe6 + BYTE $0xe7; BYTE $0xe8; BYTE $0xe9; BYTE $0xad + BYTE $0xe0; BYTE $0xbd; BYTE $0x5f; BYTE $0x6d + BYTE $0x79; BYTE $0x81; BYTE $0x82; BYTE $0x83 + BYTE $0x84; BYTE $0x85; BYTE $0x86; BYTE $0x87 + BYTE $0x88; BYTE $0x89; BYTE $0x91; BYTE $0x92 + BYTE $0x93; BYTE $0x94; BYTE $0x95; BYTE $0x96 + BYTE $0x97; BYTE $0x98; BYTE $0x99; BYTE $0xa2 + BYTE $0xa3; BYTE $0xa4; BYTE $0xa5; BYTE $0xa6 + BYTE $0xa7; BYTE $0xa8; BYTE $0xa9; BYTE $0xc0 + BYTE $0x4f; BYTE $0xd0; BYTE $0xa1; BYTE $0x07 + BYTE $0x20; BYTE $0x21; BYTE $0x22; BYTE $0x23 + BYTE $0x24; BYTE $0x25; BYTE $0x06; BYTE $0x17 + BYTE $0x28; BYTE $0x29; BYTE $0x2a; BYTE $0x2b + BYTE $0x2c; BYTE $0x09; BYTE $0x0a; BYTE $0x1b + BYTE $0x30; BYTE $0x31; BYTE $0x1a; BYTE $0x33 + BYTE $0x34; BYTE $0x35; BYTE $0x36; BYTE $0x08 + BYTE $0x38; BYTE $0x39; BYTE $0x3a; BYTE $0x3b + BYTE $0x04; BYTE $0x14; BYTE $0x3e; BYTE $0xff + BYTE $0x41; BYTE $0xaa; BYTE $0x4a; BYTE $0xb1 + BYTE $0x9f; BYTE $0xb2; BYTE $0x6a; BYTE $0xb5 + BYTE $0xbb; BYTE $0xb4; BYTE $0x9a; BYTE $0x8a + BYTE $0xb0; BYTE $0xca; BYTE $0xaf; BYTE $0xbc + BYTE $0x90; BYTE $0x8f; BYTE $0xea; BYTE $0xfa + BYTE $0xbe; BYTE $0xa0; BYTE $0xb6; BYTE $0xb3 + BYTE $0x9d; BYTE $0xda; BYTE $0x9b; BYTE $0x8b + BYTE $0xb7; BYTE $0xb8; BYTE $0xb9; BYTE $0xab + BYTE $0x64; BYTE $0x65; BYTE $0x62; BYTE $0x66 + BYTE $0x63; BYTE $0x67; BYTE $0x9e; BYTE $0x68 + BYTE $0x74; BYTE $0x71; BYTE $0x72; BYTE $0x73 + BYTE $0x78; BYTE $0x75; BYTE $0x76; BYTE $0x77 + BYTE $0xac; BYTE $0x69; BYTE $0xed; BYTE $0xee + BYTE $0xeb; BYTE $0xef; BYTE $0xec; BYTE $0xbf + BYTE $0x80; BYTE $0xfd; BYTE $0xfe; BYTE $0xfb + BYTE $0xfc; BYTE $0xba; BYTE $0xae; BYTE $0x59 + BYTE $0x44; BYTE $0x45; BYTE $0x42; BYTE $0x46 + BYTE $0x43; BYTE $0x47; BYTE $0x9c; BYTE $0x48 + BYTE $0x54; BYTE $0x51; BYTE $0x52; BYTE $0x53 + BYTE $0x58; BYTE $0x55; BYTE $0x56; BYTE $0x57 + BYTE $0x8c; BYTE $0x49; BYTE $0xcd; BYTE $0xce + BYTE $0xcb; BYTE $0xcf; BYTE $0xcc; BYTE $0xe1 + BYTE $0x70; BYTE $0xdd; BYTE $0xde; BYTE $0xdb + BYTE $0xdc; BYTE $0x8d; BYTE $0x8e; BYTE $0xdf + +retry: + WORD $0xB9931022 // TROO 2,2,b'0001' + BVS retry + RET + +// func e2a(arr [] byte) +// code page conversion from 1047 to 819 +TEXT ·E2a(SB), NOSPLIT|NOFRAME, $0 + MOVD arg_base+0(FP), R2 // pointer to arry of characters + MOVD arg_len+8(FP), R3 // count + XOR R0, R0 + XOR R1, R1 + BYTE $0xA7; BYTE $0x15; BYTE $0x00; BYTE $0x82 // BRAS 1,(2+(256/2)) + + // EBCDIC -> ASCII conversion table: + BYTE $0x00; BYTE $0x01; BYTE $0x02; BYTE $0x03 + BYTE $0x9c; BYTE $0x09; BYTE $0x86; BYTE $0x7f + BYTE $0x97; BYTE $0x8d; BYTE $0x8e; BYTE $0x0b + BYTE $0x0c; BYTE $0x0d; BYTE $0x0e; BYTE $0x0f + BYTE $0x10; BYTE $0x11; BYTE $0x12; BYTE $0x13 + BYTE $0x9d; BYTE $0x0a; BYTE $0x08; BYTE $0x87 + BYTE $0x18; BYTE $0x19; BYTE $0x92; BYTE $0x8f + BYTE $0x1c; BYTE $0x1d; BYTE $0x1e; BYTE $0x1f + BYTE $0x80; BYTE $0x81; BYTE $0x82; BYTE $0x83 + BYTE $0x84; BYTE $0x85; BYTE $0x17; BYTE $0x1b + BYTE $0x88; BYTE $0x89; BYTE $0x8a; BYTE $0x8b + BYTE $0x8c; BYTE $0x05; BYTE $0x06; BYTE $0x07 + BYTE $0x90; BYTE $0x91; BYTE $0x16; BYTE $0x93 + BYTE $0x94; BYTE $0x95; BYTE $0x96; BYTE $0x04 + BYTE $0x98; BYTE $0x99; BYTE $0x9a; BYTE $0x9b + BYTE $0x14; BYTE $0x15; BYTE $0x9e; BYTE $0x1a + BYTE $0x20; BYTE $0xa0; BYTE $0xe2; BYTE $0xe4 + BYTE $0xe0; BYTE $0xe1; BYTE $0xe3; BYTE $0xe5 + BYTE $0xe7; BYTE $0xf1; BYTE $0xa2; BYTE $0x2e + BYTE $0x3c; BYTE $0x28; BYTE $0x2b; BYTE $0x7c + BYTE $0x26; BYTE $0xe9; BYTE $0xea; BYTE $0xeb + BYTE $0xe8; BYTE $0xed; BYTE $0xee; BYTE $0xef + BYTE $0xec; BYTE $0xdf; BYTE $0x21; BYTE $0x24 + BYTE $0x2a; BYTE $0x29; BYTE $0x3b; BYTE $0x5e + BYTE $0x2d; BYTE $0x2f; BYTE $0xc2; BYTE $0xc4 + BYTE $0xc0; BYTE $0xc1; BYTE $0xc3; BYTE $0xc5 + BYTE $0xc7; BYTE $0xd1; BYTE $0xa6; BYTE $0x2c + BYTE $0x25; BYTE $0x5f; BYTE $0x3e; BYTE $0x3f + BYTE $0xf8; BYTE $0xc9; BYTE $0xca; BYTE $0xcb + BYTE $0xc8; BYTE $0xcd; BYTE $0xce; BYTE $0xcf + BYTE $0xcc; BYTE $0x60; BYTE $0x3a; BYTE $0x23 + BYTE $0x40; BYTE $0x27; BYTE $0x3d; BYTE $0x22 + BYTE $0xd8; BYTE $0x61; BYTE $0x62; BYTE $0x63 + BYTE $0x64; BYTE $0x65; BYTE $0x66; BYTE $0x67 + BYTE $0x68; BYTE $0x69; BYTE $0xab; BYTE $0xbb + BYTE $0xf0; BYTE $0xfd; BYTE $0xfe; BYTE $0xb1 + BYTE $0xb0; BYTE $0x6a; BYTE $0x6b; BYTE $0x6c + BYTE $0x6d; BYTE $0x6e; BYTE $0x6f; BYTE $0x70 + BYTE $0x71; BYTE $0x72; BYTE $0xaa; BYTE $0xba + BYTE $0xe6; BYTE $0xb8; BYTE $0xc6; BYTE $0xa4 + BYTE $0xb5; BYTE $0x7e; BYTE $0x73; BYTE $0x74 + BYTE $0x75; BYTE $0x76; BYTE $0x77; BYTE $0x78 + BYTE $0x79; BYTE $0x7a; BYTE $0xa1; BYTE $0xbf + BYTE $0xd0; BYTE $0x5b; BYTE $0xde; BYTE $0xae + BYTE $0xac; BYTE $0xa3; BYTE $0xa5; BYTE $0xb7 + BYTE $0xa9; BYTE $0xa7; BYTE $0xb6; BYTE $0xbc + BYTE $0xbd; BYTE $0xbe; BYTE $0xdd; BYTE $0xa8 + BYTE $0xaf; BYTE $0x5d; BYTE $0xb4; BYTE $0xd7 + BYTE $0x7b; BYTE $0x41; BYTE $0x42; BYTE $0x43 + BYTE $0x44; BYTE $0x45; BYTE $0x46; BYTE $0x47 + BYTE $0x48; BYTE $0x49; BYTE $0xad; BYTE $0xf4 + BYTE $0xf6; BYTE $0xf2; BYTE $0xf3; BYTE $0xf5 + BYTE $0x7d; BYTE $0x4a; BYTE $0x4b; BYTE $0x4c + BYTE $0x4d; BYTE $0x4e; BYTE $0x4f; BYTE $0x50 + BYTE $0x51; BYTE $0x52; BYTE $0xb9; BYTE $0xfb + BYTE $0xfc; BYTE $0xf9; BYTE $0xfa; BYTE $0xff + BYTE $0x5c; BYTE $0xf7; BYTE $0x53; BYTE $0x54 + BYTE $0x55; BYTE $0x56; BYTE $0x57; BYTE $0x58 + BYTE $0x59; BYTE $0x5a; BYTE $0xb2; BYTE $0xd4 + BYTE $0xd6; BYTE $0xd2; BYTE $0xd3; BYTE $0xd5 + BYTE $0x30; BYTE $0x31; BYTE $0x32; BYTE $0x33 + BYTE $0x34; BYTE $0x35; BYTE $0x36; BYTE $0x37 + BYTE $0x38; BYTE $0x39; BYTE $0xb3; BYTE $0xdb + BYTE $0xdc; BYTE $0xd9; BYTE $0xda; BYTE $0x9f + +retry: + WORD $0xB9931022 // TROO 2,2,b'0001' + BVS retry + RET diff --git a/vendor/golang.org/x/sys/unix/epoll_zos.go b/vendor/golang.org/x/sys/unix/epoll_zos.go deleted file mode 100644 index 7753fddea81..00000000000 --- a/vendor/golang.org/x/sys/unix/epoll_zos.go +++ /dev/null @@ -1,220 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build zos && s390x - -package unix - -import ( - "sync" -) - -// This file simulates epoll on z/OS using poll. - -// Analogous to epoll_event on Linux. -// TODO(neeilan): Pad is because the Linux kernel expects a 96-bit struct. We never pass this to the kernel; remove? -type EpollEvent struct { - Events uint32 - Fd int32 - Pad int32 -} - -const ( - EPOLLERR = 0x8 - EPOLLHUP = 0x10 - EPOLLIN = 0x1 - EPOLLMSG = 0x400 - EPOLLOUT = 0x4 - EPOLLPRI = 0x2 - EPOLLRDBAND = 0x80 - EPOLLRDNORM = 0x40 - EPOLLWRBAND = 0x200 - EPOLLWRNORM = 0x100 - EPOLL_CTL_ADD = 0x1 - EPOLL_CTL_DEL = 0x2 - EPOLL_CTL_MOD = 0x3 - // The following constants are part of the epoll API, but represent - // currently unsupported functionality on z/OS. - // EPOLL_CLOEXEC = 0x80000 - // EPOLLET = 0x80000000 - // EPOLLONESHOT = 0x40000000 - // EPOLLRDHUP = 0x2000 // Typically used with edge-triggered notis - // EPOLLEXCLUSIVE = 0x10000000 // Exclusive wake-up mode - // EPOLLWAKEUP = 0x20000000 // Relies on Linux's BLOCK_SUSPEND capability -) - -// TODO(neeilan): We can eliminate these epToPoll / pToEpoll calls by using identical mask values for POLL/EPOLL -// constants where possible The lower 16 bits of epoll events (uint32) can fit any system poll event (int16). - -// epToPollEvt converts epoll event field to poll equivalent. -// In epoll, Events is a 32-bit field, while poll uses 16 bits. -func epToPollEvt(events uint32) int16 { - var ep2p = map[uint32]int16{ - EPOLLIN: POLLIN, - EPOLLOUT: POLLOUT, - EPOLLHUP: POLLHUP, - EPOLLPRI: POLLPRI, - EPOLLERR: POLLERR, - } - - var pollEvts int16 = 0 - for epEvt, pEvt := range ep2p { - if (events & epEvt) != 0 { - pollEvts |= pEvt - } - } - - return pollEvts -} - -// pToEpollEvt converts 16 bit poll event bitfields to 32-bit epoll event fields. -func pToEpollEvt(revents int16) uint32 { - var p2ep = map[int16]uint32{ - POLLIN: EPOLLIN, - POLLOUT: EPOLLOUT, - POLLHUP: EPOLLHUP, - POLLPRI: EPOLLPRI, - POLLERR: EPOLLERR, - } - - var epollEvts uint32 = 0 - for pEvt, epEvt := range p2ep { - if (revents & pEvt) != 0 { - epollEvts |= epEvt - } - } - - return epollEvts -} - -// Per-process epoll implementation. -type epollImpl struct { - mu sync.Mutex - epfd2ep map[int]*eventPoll - nextEpfd int -} - -// eventPoll holds a set of file descriptors being watched by the process. A process can have multiple epoll instances. -// On Linux, this is an in-kernel data structure accessed through a fd. -type eventPoll struct { - mu sync.Mutex - fds map[int]*EpollEvent -} - -// epoll impl for this process. -var impl epollImpl = epollImpl{ - epfd2ep: make(map[int]*eventPoll), - nextEpfd: 0, -} - -func (e *epollImpl) epollcreate(size int) (epfd int, err error) { - e.mu.Lock() - defer e.mu.Unlock() - epfd = e.nextEpfd - e.nextEpfd++ - - e.epfd2ep[epfd] = &eventPoll{ - fds: make(map[int]*EpollEvent), - } - return epfd, nil -} - -func (e *epollImpl) epollcreate1(flag int) (fd int, err error) { - return e.epollcreate(4) -} - -func (e *epollImpl) epollctl(epfd int, op int, fd int, event *EpollEvent) (err error) { - e.mu.Lock() - defer e.mu.Unlock() - - ep, ok := e.epfd2ep[epfd] - if !ok { - - return EBADF - } - - switch op { - case EPOLL_CTL_ADD: - // TODO(neeilan): When we make epfds and fds disjoint, detect epoll - // loops here (instances watching each other) and return ELOOP. - if _, ok := ep.fds[fd]; ok { - return EEXIST - } - ep.fds[fd] = event - case EPOLL_CTL_MOD: - if _, ok := ep.fds[fd]; !ok { - return ENOENT - } - ep.fds[fd] = event - case EPOLL_CTL_DEL: - if _, ok := ep.fds[fd]; !ok { - return ENOENT - } - delete(ep.fds, fd) - - } - return nil -} - -// Must be called while holding ep.mu -func (ep *eventPoll) getFds() []int { - fds := make([]int, len(ep.fds)) - for fd := range ep.fds { - fds = append(fds, fd) - } - return fds -} - -func (e *epollImpl) epollwait(epfd int, events []EpollEvent, msec int) (n int, err error) { - e.mu.Lock() // in [rare] case of concurrent epollcreate + epollwait - ep, ok := e.epfd2ep[epfd] - - if !ok { - e.mu.Unlock() - return 0, EBADF - } - - pollfds := make([]PollFd, 4) - for fd, epollevt := range ep.fds { - pollfds = append(pollfds, PollFd{Fd: int32(fd), Events: epToPollEvt(epollevt.Events)}) - } - e.mu.Unlock() - - n, err = Poll(pollfds, msec) - if err != nil { - return n, err - } - - i := 0 - for _, pFd := range pollfds { - if pFd.Revents != 0 { - events[i] = EpollEvent{Fd: pFd.Fd, Events: pToEpollEvt(pFd.Revents)} - i++ - } - - if i == n { - break - } - } - - return n, nil -} - -func EpollCreate(size int) (fd int, err error) { - return impl.epollcreate(size) -} - -func EpollCreate1(flag int) (fd int, err error) { - return impl.epollcreate1(flag) -} - -func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { - return impl.epollctl(epfd, op, fd, event) -} - -// Because EpollWait mutates events, the caller is expected to coordinate -// concurrent access if calling with the same epfd from multiple goroutines. -func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { - return impl.epollwait(epfd, events, msec) -} diff --git a/vendor/golang.org/x/sys/unix/fstatfs_zos.go b/vendor/golang.org/x/sys/unix/fstatfs_zos.go deleted file mode 100644 index c8bde601e77..00000000000 --- a/vendor/golang.org/x/sys/unix/fstatfs_zos.go +++ /dev/null @@ -1,163 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build zos && s390x - -package unix - -import ( - "unsafe" -) - -// This file simulates fstatfs on z/OS using fstatvfs and w_getmntent. - -func Fstatfs(fd int, stat *Statfs_t) (err error) { - var stat_v Statvfs_t - err = Fstatvfs(fd, &stat_v) - if err == nil { - // populate stat - stat.Type = 0 - stat.Bsize = stat_v.Bsize - stat.Blocks = stat_v.Blocks - stat.Bfree = stat_v.Bfree - stat.Bavail = stat_v.Bavail - stat.Files = stat_v.Files - stat.Ffree = stat_v.Ffree - stat.Fsid = stat_v.Fsid - stat.Namelen = stat_v.Namemax - stat.Frsize = stat_v.Frsize - stat.Flags = stat_v.Flag - for passn := 0; passn < 5; passn++ { - switch passn { - case 0: - err = tryGetmntent64(stat) - break - case 1: - err = tryGetmntent128(stat) - break - case 2: - err = tryGetmntent256(stat) - break - case 3: - err = tryGetmntent512(stat) - break - case 4: - err = tryGetmntent1024(stat) - break - default: - break - } - //proceed to return if: err is nil (found), err is nonnil but not ERANGE (another error occurred) - if err == nil || err != nil && err != ERANGE { - break - } - } - } - return err -} - -func tryGetmntent64(stat *Statfs_t) (err error) { - var mnt_ent_buffer struct { - header W_Mnth - filesys_info [64]W_Mntent - } - var buffer_size int = int(unsafe.Sizeof(mnt_ent_buffer)) - fs_count, err := W_Getmntent((*byte)(unsafe.Pointer(&mnt_ent_buffer)), buffer_size) - if err != nil { - return err - } - err = ERANGE //return ERANGE if no match is found in this batch - for i := 0; i < fs_count; i++ { - if stat.Fsid == uint64(mnt_ent_buffer.filesys_info[i].Dev) { - stat.Type = uint32(mnt_ent_buffer.filesys_info[i].Fstname[0]) - err = nil - break - } - } - return err -} - -func tryGetmntent128(stat *Statfs_t) (err error) { - var mnt_ent_buffer struct { - header W_Mnth - filesys_info [128]W_Mntent - } - var buffer_size int = int(unsafe.Sizeof(mnt_ent_buffer)) - fs_count, err := W_Getmntent((*byte)(unsafe.Pointer(&mnt_ent_buffer)), buffer_size) - if err != nil { - return err - } - err = ERANGE //return ERANGE if no match is found in this batch - for i := 0; i < fs_count; i++ { - if stat.Fsid == uint64(mnt_ent_buffer.filesys_info[i].Dev) { - stat.Type = uint32(mnt_ent_buffer.filesys_info[i].Fstname[0]) - err = nil - break - } - } - return err -} - -func tryGetmntent256(stat *Statfs_t) (err error) { - var mnt_ent_buffer struct { - header W_Mnth - filesys_info [256]W_Mntent - } - var buffer_size int = int(unsafe.Sizeof(mnt_ent_buffer)) - fs_count, err := W_Getmntent((*byte)(unsafe.Pointer(&mnt_ent_buffer)), buffer_size) - if err != nil { - return err - } - err = ERANGE //return ERANGE if no match is found in this batch - for i := 0; i < fs_count; i++ { - if stat.Fsid == uint64(mnt_ent_buffer.filesys_info[i].Dev) { - stat.Type = uint32(mnt_ent_buffer.filesys_info[i].Fstname[0]) - err = nil - break - } - } - return err -} - -func tryGetmntent512(stat *Statfs_t) (err error) { - var mnt_ent_buffer struct { - header W_Mnth - filesys_info [512]W_Mntent - } - var buffer_size int = int(unsafe.Sizeof(mnt_ent_buffer)) - fs_count, err := W_Getmntent((*byte)(unsafe.Pointer(&mnt_ent_buffer)), buffer_size) - if err != nil { - return err - } - err = ERANGE //return ERANGE if no match is found in this batch - for i := 0; i < fs_count; i++ { - if stat.Fsid == uint64(mnt_ent_buffer.filesys_info[i].Dev) { - stat.Type = uint32(mnt_ent_buffer.filesys_info[i].Fstname[0]) - err = nil - break - } - } - return err -} - -func tryGetmntent1024(stat *Statfs_t) (err error) { - var mnt_ent_buffer struct { - header W_Mnth - filesys_info [1024]W_Mntent - } - var buffer_size int = int(unsafe.Sizeof(mnt_ent_buffer)) - fs_count, err := W_Getmntent((*byte)(unsafe.Pointer(&mnt_ent_buffer)), buffer_size) - if err != nil { - return err - } - err = ERANGE //return ERANGE if no match is found in this batch - for i := 0; i < fs_count; i++ { - if stat.Fsid == uint64(mnt_ent_buffer.filesys_info[i].Dev) { - stat.Type = uint32(mnt_ent_buffer.filesys_info[i].Fstname[0]) - err = nil - break - } - } - return err -} diff --git a/vendor/golang.org/x/sys/unix/mkerrors.sh b/vendor/golang.org/x/sys/unix/mkerrors.sh index fdcaa974d23..4ed2e488b61 100644 --- a/vendor/golang.org/x/sys/unix/mkerrors.sh +++ b/vendor/golang.org/x/sys/unix/mkerrors.sh @@ -263,6 +263,7 @@ struct ltchars { #include #include #include +#include #include #include #include @@ -549,6 +550,7 @@ ccflags="$@" $2 !~ "NLA_TYPE_MASK" && $2 !~ /^RTC_VL_(ACCURACY|BACKUP|DATA)/ && $2 ~ /^(NETLINK|NLM|NLMSG|NLA|IFA|IFAN|RT|RTC|RTCF|RTN|RTPROT|RTNH|ARPHRD|ETH_P|NETNSA)_/ || + $2 ~ /^SOCK_|SK_DIAG_|SKNLGRP_$/ || $2 ~ /^FIORDCHK$/ || $2 ~ /^SIOC/ || $2 ~ /^TIOC/ || diff --git a/vendor/golang.org/x/sys/unix/pagesize_unix.go b/vendor/golang.org/x/sys/unix/pagesize_unix.go index 4d0a3430edc..0482408d7c6 100644 --- a/vendor/golang.org/x/sys/unix/pagesize_unix.go +++ b/vendor/golang.org/x/sys/unix/pagesize_unix.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris +//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos // For Unix, get the pagesize from the runtime. diff --git a/vendor/golang.org/x/sys/unix/readdirent_getdirentries.go b/vendor/golang.org/x/sys/unix/readdirent_getdirentries.go index 130398b6b76..b903c00604b 100644 --- a/vendor/golang.org/x/sys/unix/readdirent_getdirentries.go +++ b/vendor/golang.org/x/sys/unix/readdirent_getdirentries.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build darwin +//go:build darwin || zos package unix diff --git a/vendor/golang.org/x/sys/unix/sockcmsg_zos.go b/vendor/golang.org/x/sys/unix/sockcmsg_zos.go new file mode 100644 index 00000000000..3e53dbc0286 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/sockcmsg_zos.go @@ -0,0 +1,58 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Socket control messages + +package unix + +import "unsafe" + +// UnixCredentials encodes credentials into a socket control message +// for sending to another process. This can be used for +// authentication. +func UnixCredentials(ucred *Ucred) []byte { + b := make([]byte, CmsgSpace(SizeofUcred)) + h := (*Cmsghdr)(unsafe.Pointer(&b[0])) + h.Level = SOL_SOCKET + h.Type = SCM_CREDENTIALS + h.SetLen(CmsgLen(SizeofUcred)) + *(*Ucred)(h.data(0)) = *ucred + return b +} + +// ParseUnixCredentials decodes a socket control message that contains +// credentials in a Ucred structure. To receive such a message, the +// SO_PASSCRED option must be enabled on the socket. +func ParseUnixCredentials(m *SocketControlMessage) (*Ucred, error) { + if m.Header.Level != SOL_SOCKET { + return nil, EINVAL + } + if m.Header.Type != SCM_CREDENTIALS { + return nil, EINVAL + } + ucred := *(*Ucred)(unsafe.Pointer(&m.Data[0])) + return &ucred, nil +} + +// PktInfo4 encodes Inet4Pktinfo into a socket control message of type IP_PKTINFO. +func PktInfo4(info *Inet4Pktinfo) []byte { + b := make([]byte, CmsgSpace(SizeofInet4Pktinfo)) + h := (*Cmsghdr)(unsafe.Pointer(&b[0])) + h.Level = SOL_IP + h.Type = IP_PKTINFO + h.SetLen(CmsgLen(SizeofInet4Pktinfo)) + *(*Inet4Pktinfo)(h.data(0)) = *info + return b +} + +// PktInfo6 encodes Inet6Pktinfo into a socket control message of type IPV6_PKTINFO. +func PktInfo6(info *Inet6Pktinfo) []byte { + b := make([]byte, CmsgSpace(SizeofInet6Pktinfo)) + h := (*Cmsghdr)(unsafe.Pointer(&b[0])) + h.Level = SOL_IPV6 + h.Type = IPV6_PKTINFO + h.SetLen(CmsgLen(SizeofInet6Pktinfo)) + *(*Inet6Pktinfo)(h.data(0)) = *info + return b +} diff --git a/vendor/golang.org/x/sys/unix/symaddr_zos_s390x.s b/vendor/golang.org/x/sys/unix/symaddr_zos_s390x.s new file mode 100644 index 00000000000..3c4f33cb6a8 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/symaddr_zos_s390x.s @@ -0,0 +1,75 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build zos && s390x && gc + +#include "textflag.h" + +// provide the address of function variable to be fixed up. + +TEXT ·getPipe2Addr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·Pipe2(SB), R8 + MOVD R8, ret+0(FP) + RET + +TEXT ·get_FlockAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·Flock(SB), R8 + MOVD R8, ret+0(FP) + RET + +TEXT ·get_GetxattrAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·Getxattr(SB), R8 + MOVD R8, ret+0(FP) + RET + +TEXT ·get_NanosleepAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·Nanosleep(SB), R8 + MOVD R8, ret+0(FP) + RET + +TEXT ·get_SetxattrAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·Setxattr(SB), R8 + MOVD R8, ret+0(FP) + RET + +TEXT ·get_Wait4Addr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·Wait4(SB), R8 + MOVD R8, ret+0(FP) + RET + +TEXT ·get_MountAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·Mount(SB), R8 + MOVD R8, ret+0(FP) + RET + +TEXT ·get_UnmountAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·Unmount(SB), R8 + MOVD R8, ret+0(FP) + RET + +TEXT ·get_UtimesNanoAtAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·UtimesNanoAt(SB), R8 + MOVD R8, ret+0(FP) + RET + +TEXT ·get_UtimesNanoAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·UtimesNano(SB), R8 + MOVD R8, ret+0(FP) + RET + +TEXT ·get_MkfifoatAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·Mkfifoat(SB), R8 + MOVD R8, ret+0(FP) + RET + +TEXT ·get_ChtagAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·Chtag(SB), R8 + MOVD R8, ret+0(FP) + RET + +TEXT ·get_ReadlinkatAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·Readlinkat(SB), R8 + MOVD R8, ret+0(FP) + RET + diff --git a/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go b/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go index 27c41b6f0a1..312ae6ac1d2 100644 --- a/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go +++ b/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go @@ -4,11 +4,21 @@ //go:build zos && s390x +// Many of the following syscalls are not available on all versions of z/OS. +// Some missing calls have legacy implementations/simulations but others +// will be missing completely. To achieve consistent failing behaviour on +// legacy systems, we first test the function pointer via a safeloading +// mechanism to see if the function exists on a given system. Then execution +// is branched to either continue the function call, or return an error. + package unix import ( "bytes" "fmt" + "os" + "reflect" + "regexp" "runtime" "sort" "strings" @@ -17,17 +27,205 @@ import ( "unsafe" ) +//go:noescape +func initZosLibVec() + +//go:noescape +func GetZosLibVec() uintptr + +func init() { + initZosLibVec() + r0, _, _ := CallLeFuncWithPtrReturn(GetZosLibVec()+SYS_____GETENV_A<<4, uintptr(unsafe.Pointer(&([]byte("__ZOS_XSYSTRACE\x00"))[0]))) + if r0 != 0 { + n, _, _ := CallLeFuncWithPtrReturn(GetZosLibVec()+SYS___ATOI_A<<4, r0) + ZosTraceLevel = int(n) + r0, _, _ := CallLeFuncWithPtrReturn(GetZosLibVec()+SYS_____GETENV_A<<4, uintptr(unsafe.Pointer(&([]byte("__ZOS_XSYSTRACEFD\x00"))[0]))) + if r0 != 0 { + fd, _, _ := CallLeFuncWithPtrReturn(GetZosLibVec()+SYS___ATOI_A<<4, r0) + f := os.NewFile(fd, "zostracefile") + if f != nil { + ZosTracefile = f + } + } + + } +} + +//go:noescape +func CallLeFuncWithErr(funcdesc uintptr, parms ...uintptr) (ret, errno2 uintptr, err Errno) + +//go:noescape +func CallLeFuncWithPtrReturn(funcdesc uintptr, parms ...uintptr) (ret, errno2 uintptr, err Errno) + +// ------------------------------- +// pointer validity test +// good pointer returns 0 +// bad pointer returns 1 +// +//go:nosplit +func ptrtest(uintptr) uint64 + +// Load memory at ptr location with error handling if the location is invalid +// +//go:noescape +func safeload(ptr uintptr) (value uintptr, error uintptr) + const ( - O_CLOEXEC = 0 // Dummy value (not supported). - AF_LOCAL = AF_UNIX // AF_LOCAL is an alias for AF_UNIX + entrypointLocationOffset = 8 // From function descriptor + + xplinkEyecatcher = 0x00c300c500c500f1 // ".C.E.E.1" + eyecatcherOffset = 16 // From function entrypoint (negative) + ppa1LocationOffset = 8 // From function entrypoint (negative) + + nameLenOffset = 0x14 // From PPA1 start + nameOffset = 0x16 // From PPA1 start ) -func syscall_syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno) -func syscall_rawsyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno) -func syscall_syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno) -func syscall_rawsyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno) -func syscall_syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err Errno) -func syscall_rawsyscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err Errno) +func getPpaOffset(funcptr uintptr) int64 { + entrypoint, err := safeload(funcptr + entrypointLocationOffset) + if err != 0 { + return -1 + } + + // XPLink functions have ".C.E.E.1" as the first 8 bytes (EBCDIC) + val, err := safeload(entrypoint - eyecatcherOffset) + if err != 0 { + return -1 + } + if val != xplinkEyecatcher { + return -1 + } + + ppaoff, err := safeload(entrypoint - ppa1LocationOffset) + if err != 0 { + return -1 + } + + ppaoff >>= 32 + return int64(ppaoff) +} + +//------------------------------- +// function descriptor pointer validity test +// good pointer returns 0 +// bad pointer returns 1 + +// TODO: currently mksyscall_zos_s390x.go generate empty string for funcName +// have correct funcName pass to the funcptrtest function +func funcptrtest(funcptr uintptr, funcName string) uint64 { + entrypoint, err := safeload(funcptr + entrypointLocationOffset) + if err != 0 { + return 1 + } + + ppaoff := getPpaOffset(funcptr) + if ppaoff == -1 { + return 1 + } + + // PPA1 offset value is from the start of the entire function block, not the entrypoint + ppa1 := (entrypoint - eyecatcherOffset) + uintptr(ppaoff) + + nameLen, err := safeload(ppa1 + nameLenOffset) + if err != 0 { + return 1 + } + + nameLen >>= 48 + if nameLen > 128 { + return 1 + } + + // no function name input to argument end here + if funcName == "" { + return 0 + } + + var funcname [128]byte + for i := 0; i < int(nameLen); i += 8 { + v, err := safeload(ppa1 + nameOffset + uintptr(i)) + if err != 0 { + return 1 + } + funcname[i] = byte(v >> 56) + funcname[i+1] = byte(v >> 48) + funcname[i+2] = byte(v >> 40) + funcname[i+3] = byte(v >> 32) + funcname[i+4] = byte(v >> 24) + funcname[i+5] = byte(v >> 16) + funcname[i+6] = byte(v >> 8) + funcname[i+7] = byte(v) + } + + runtime.CallLeFuncByPtr(runtime.XplinkLibvec+SYS___E2A_L<<4, // __e2a_l + []uintptr{uintptr(unsafe.Pointer(&funcname[0])), nameLen}) + + name := string(funcname[:nameLen]) + if name != funcName { + return 1 + } + + return 0 +} + +// For detection of capabilities on a system. +// Is function descriptor f a valid function? +func isValidLeFunc(f uintptr) error { + ret := funcptrtest(f, "") + if ret != 0 { + return fmt.Errorf("Bad pointer, not an LE function ") + } + return nil +} + +// Retrieve function name from descriptor +func getLeFuncName(f uintptr) (string, error) { + // assume it has been checked, only check ppa1 validity here + entry := ((*[2]uintptr)(unsafe.Pointer(f)))[1] + preamp := ((*[4]uint32)(unsafe.Pointer(entry - eyecatcherOffset))) + + offsetPpa1 := preamp[2] + if offsetPpa1 > 0x0ffff { + return "", fmt.Errorf("PPA1 offset seems too big 0x%x\n", offsetPpa1) + } + + ppa1 := uintptr(unsafe.Pointer(preamp)) + uintptr(offsetPpa1) + res := ptrtest(ppa1) + if res != 0 { + return "", fmt.Errorf("PPA1 address not valid") + } + + size := *(*uint16)(unsafe.Pointer(ppa1 + nameLenOffset)) + if size > 128 { + return "", fmt.Errorf("Function name seems too long, length=%d\n", size) + } + + var name [128]byte + funcname := (*[128]byte)(unsafe.Pointer(ppa1 + nameOffset)) + copy(name[0:size], funcname[0:size]) + + runtime.CallLeFuncByPtr(runtime.XplinkLibvec+SYS___E2A_L<<4, // __e2a_l + []uintptr{uintptr(unsafe.Pointer(&name[0])), uintptr(size)}) + + return string(name[:size]), nil +} + +// Check z/OS version +func zosLeVersion() (version, release uint32) { + p1 := (*(*uintptr)(unsafe.Pointer(uintptr(1208)))) >> 32 + p1 = *(*uintptr)(unsafe.Pointer(uintptr(p1 + 88))) + p1 = *(*uintptr)(unsafe.Pointer(uintptr(p1 + 8))) + p1 = *(*uintptr)(unsafe.Pointer(uintptr(p1 + 984))) + vrm := *(*uint32)(unsafe.Pointer(p1 + 80)) + version = (vrm & 0x00ff0000) >> 16 + release = (vrm & 0x0000ff00) >> 8 + return +} + +// returns a zos C FILE * for stdio fd 0, 1, 2 +func ZosStdioFilep(fd int32) uintptr { + return uintptr(*(*uint64)(unsafe.Pointer(uintptr(*(*uint64)(unsafe.Pointer(uintptr(*(*uint64)(unsafe.Pointer(uintptr(uint64(*(*uint32)(unsafe.Pointer(uintptr(1208)))) + 80))) + uint64((fd+2)<<3)))))))) +} func copyStat(stat *Stat_t, statLE *Stat_LE_t) { stat.Dev = uint64(statLE.Dev) @@ -65,6 +263,21 @@ func (d *Dirent) NameString() string { } } +func DecodeData(dest []byte, sz int, val uint64) { + for i := 0; i < sz; i++ { + dest[sz-1-i] = byte((val >> (uint64(i * 8))) & 0xff) + } +} + +func EncodeData(data []byte) uint64 { + var value uint64 + sz := len(data) + for i := 0; i < sz; i++ { + value |= uint64(data[i]) << uint64(((sz - i - 1) * 8)) + } + return value +} + func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) { if sa.Port < 0 || sa.Port > 0xFFFF { return nil, 0, EINVAL @@ -74,7 +287,9 @@ func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) { p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) p[0] = byte(sa.Port >> 8) p[1] = byte(sa.Port) - sa.raw.Addr = sa.Addr + for i := 0; i < len(sa.Addr); i++ { + sa.raw.Addr[i] = sa.Addr[i] + } return unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil } @@ -88,7 +303,9 @@ func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) { p[0] = byte(sa.Port >> 8) p[1] = byte(sa.Port) sa.raw.Scope_id = sa.ZoneId - sa.raw.Addr = sa.Addr + for i := 0; i < len(sa.Addr); i++ { + sa.raw.Addr[i] = sa.Addr[i] + } return unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil } @@ -146,7 +363,9 @@ func anyToSockaddr(_ int, rsa *RawSockaddrAny) (Sockaddr, error) { sa := new(SockaddrInet4) p := (*[2]byte)(unsafe.Pointer(&pp.Port)) sa.Port = int(p[0])<<8 + int(p[1]) - sa.Addr = pp.Addr + for i := 0; i < len(sa.Addr); i++ { + sa.Addr[i] = pp.Addr[i] + } return sa, nil case AF_INET6: @@ -155,7 +374,9 @@ func anyToSockaddr(_ int, rsa *RawSockaddrAny) (Sockaddr, error) { p := (*[2]byte)(unsafe.Pointer(&pp.Port)) sa.Port = int(p[0])<<8 + int(p[1]) sa.ZoneId = pp.Scope_id - sa.Addr = pp.Addr + for i := 0; i < len(sa.Addr); i++ { + sa.Addr[i] = pp.Addr[i] + } return sa, nil } return nil, EAFNOSUPPORT @@ -177,6 +398,43 @@ func Accept(fd int) (nfd int, sa Sockaddr, err error) { return } +func Accept4(fd int, flags int) (nfd int, sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + nfd, err = accept4(fd, &rsa, &len, flags) + if err != nil { + return + } + if len > SizeofSockaddrAny { + panic("RawSockaddrAny too small") + } + // TODO(neeilan): Remove 0 in call + sa, err = anyToSockaddr(0, &rsa) + if err != nil { + Close(nfd) + nfd = 0 + } + return +} + +func Ctermid() (tty string, err error) { + var termdev [1025]byte + runtime.EnterSyscall() + r0, err2, err1 := CallLeFuncWithPtrReturn(GetZosLibVec()+SYS___CTERMID_A<<4, uintptr(unsafe.Pointer(&termdev[0]))) + runtime.ExitSyscall() + if r0 == 0 { + return "", fmt.Errorf("%s (errno2=0x%x)\n", err1.Error(), err2) + } + s := string(termdev[:]) + idx := strings.Index(s, string(rune(0))) + if idx == -1 { + tty = s + } else { + tty = s[:idx] + } + return +} + func (iov *Iovec) SetLen(length int) { iov.Len = uint64(length) } @@ -190,10 +448,16 @@ func (cmsg *Cmsghdr) SetLen(length int) { } //sys fcntl(fd int, cmd int, arg int) (val int, err error) +//sys Flistxattr(fd int, dest []byte) (sz int, err error) = SYS___FLISTXATTR_A +//sys Fremovexattr(fd int, attr string) (err error) = SYS___FREMOVEXATTR_A //sys read(fd int, p []byte) (n int, err error) //sys write(fd int, p []byte) (n int, err error) +//sys Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) = SYS___FGETXATTR_A +//sys Fsetxattr(fd int, attr string, data []byte, flag int) (err error) = SYS___FSETXATTR_A + //sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) = SYS___ACCEPT_A +//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) = SYS___ACCEPT4_A //sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) = SYS___BIND_A //sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) = SYS___CONNECT_A //sysnb getgroups(n int, list *_Gid_t) (nn int, err error) @@ -204,6 +468,7 @@ func (cmsg *Cmsghdr) SetLen(length int) { //sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) //sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) = SYS___GETPEERNAME_A //sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) = SYS___GETSOCKNAME_A +//sys Removexattr(path string, attr string) (err error) = SYS___REMOVEXATTR_A //sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) = SYS___RECVFROM_A //sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) = SYS___SENDTO_A //sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) = SYS___RECVMSG_A @@ -212,6 +477,10 @@ func (cmsg *Cmsghdr) SetLen(length int) { //sys munmap(addr uintptr, length uintptr) (err error) = SYS_MUNMAP //sys ioctl(fd int, req int, arg uintptr) (err error) = SYS_IOCTL //sys ioctlPtr(fd int, req int, arg unsafe.Pointer) (err error) = SYS_IOCTL +//sys shmat(id int, addr uintptr, flag int) (ret uintptr, err error) = SYS_SHMAT +//sys shmctl(id int, cmd int, buf *SysvShmDesc) (result int, err error) = SYS_SHMCTL64 +//sys shmdt(addr uintptr) (err error) = SYS_SHMDT +//sys shmget(key int, size int, flag int) (id int, err error) = SYS_SHMGET //sys Access(path string, mode uint32) (err error) = SYS___ACCESS_A //sys Chdir(path string) (err error) = SYS___CHDIR_A @@ -220,14 +489,31 @@ func (cmsg *Cmsghdr) SetLen(length int) { //sys Creat(path string, mode uint32) (fd int, err error) = SYS___CREAT_A //sys Dup(oldfd int) (fd int, err error) //sys Dup2(oldfd int, newfd int) (err error) +//sys Dup3(oldfd int, newfd int, flags int) (err error) = SYS_DUP3 +//sys Dirfd(dirp uintptr) (fd int, err error) = SYS_DIRFD +//sys EpollCreate(size int) (fd int, err error) = SYS_EPOLL_CREATE +//sys EpollCreate1(flags int) (fd int, err error) = SYS_EPOLL_CREATE1 +//sys EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) = SYS_EPOLL_CTL +//sys EpollPwait(epfd int, events []EpollEvent, msec int, sigmask *int) (n int, err error) = SYS_EPOLL_PWAIT +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_WAIT //sys Errno2() (er2 int) = SYS___ERRNO2 -//sys Err2ad() (eadd *int) = SYS___ERR2AD +//sys Eventfd(initval uint, flags int) (fd int, err error) = SYS_EVENTFD //sys Exit(code int) +//sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error) = SYS___FACCESSAT_A + +func Faccessat2(dirfd int, path string, mode uint32, flags int) (err error) { + return Faccessat(dirfd, path, mode, flags) +} + //sys Fchdir(fd int) (err error) //sys Fchmod(fd int, mode uint32) (err error) +//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) = SYS___FCHMODAT_A //sys Fchown(fd int, uid int, gid int) (err error) +//sys Fchownat(fd int, path string, uid int, gid int, flags int) (err error) = SYS___FCHOWNAT_A //sys FcntlInt(fd uintptr, cmd int, arg int) (retval int, err error) = SYS_FCNTL +//sys Fdatasync(fd int) (err error) = SYS_FDATASYNC //sys fstat(fd int, stat *Stat_LE_t) (err error) +//sys fstatat(dirfd int, path string, stat *Stat_LE_t, flags int) (err error) = SYS___FSTATAT_A func Fstat(fd int, stat *Stat_t) (err error) { var statLE Stat_LE_t @@ -236,28 +522,208 @@ func Fstat(fd int, stat *Stat_t) (err error) { return } +func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) { + var statLE Stat_LE_t + err = fstatat(dirfd, path, &statLE, flags) + copyStat(stat, &statLE) + return +} + +func impl_Getxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___GETXATTR_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest))) + sz = int(r0) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +//go:nosplit +func get_GetxattrAddr() *(func(path string, attr string, dest []byte) (sz int, err error)) + +var Getxattr = enter_Getxattr + +func enter_Getxattr(path string, attr string, dest []byte) (sz int, err error) { + funcref := get_GetxattrAddr() + if validGetxattr() { + *funcref = impl_Getxattr + } else { + *funcref = error_Getxattr + } + return (*funcref)(path, attr, dest) +} + +func error_Getxattr(path string, attr string, dest []byte) (sz int, err error) { + return -1, ENOSYS +} + +func validGetxattr() bool { + if funcptrtest(GetZosLibVec()+SYS___GETXATTR_A<<4, "") == 0 { + if name, err := getLeFuncName(GetZosLibVec() + SYS___GETXATTR_A<<4); err == nil { + return name == "__getxattr_a" + } + } + return false +} + +//sys Lgetxattr(link string, attr string, dest []byte) (sz int, err error) = SYS___LGETXATTR_A +//sys Lsetxattr(path string, attr string, data []byte, flags int) (err error) = SYS___LSETXATTR_A + +func impl_Setxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___SETXATTR_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags)) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +//go:nosplit +func get_SetxattrAddr() *(func(path string, attr string, data []byte, flags int) (err error)) + +var Setxattr = enter_Setxattr + +func enter_Setxattr(path string, attr string, data []byte, flags int) (err error) { + funcref := get_SetxattrAddr() + if validSetxattr() { + *funcref = impl_Setxattr + } else { + *funcref = error_Setxattr + } + return (*funcref)(path, attr, data, flags) +} + +func error_Setxattr(path string, attr string, data []byte, flags int) (err error) { + return ENOSYS +} + +func validSetxattr() bool { + if funcptrtest(GetZosLibVec()+SYS___SETXATTR_A<<4, "") == 0 { + if name, err := getLeFuncName(GetZosLibVec() + SYS___SETXATTR_A<<4); err == nil { + return name == "__setxattr_a" + } + } + return false +} + +//sys Fstatfs(fd int, buf *Statfs_t) (err error) = SYS_FSTATFS //sys Fstatvfs(fd int, stat *Statvfs_t) (err error) = SYS_FSTATVFS //sys Fsync(fd int) (err error) +//sys Futimes(fd int, tv []Timeval) (err error) = SYS_FUTIMES +//sys Futimesat(dirfd int, path string, tv []Timeval) (err error) = SYS___FUTIMESAT_A //sys Ftruncate(fd int, length int64) (err error) -//sys Getpagesize() (pgsize int) = SYS_GETPAGESIZE +//sys Getrandom(buf []byte, flags int) (n int, err error) = SYS_GETRANDOM +//sys InotifyInit() (fd int, err error) = SYS_INOTIFY_INIT +//sys InotifyInit1(flags int) (fd int, err error) = SYS_INOTIFY_INIT1 +//sys InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) = SYS___INOTIFY_ADD_WATCH_A +//sys InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) = SYS_INOTIFY_RM_WATCH +//sys Listxattr(path string, dest []byte) (sz int, err error) = SYS___LISTXATTR_A +//sys Llistxattr(path string, dest []byte) (sz int, err error) = SYS___LLISTXATTR_A +//sys Lremovexattr(path string, attr string) (err error) = SYS___LREMOVEXATTR_A +//sys Lutimes(path string, tv []Timeval) (err error) = SYS___LUTIMES_A //sys Mprotect(b []byte, prot int) (err error) = SYS_MPROTECT //sys Msync(b []byte, flags int) (err error) = SYS_MSYNC +//sys Console2(cmsg *ConsMsg2, modstr *byte, concmd *uint32) (err error) = SYS___CONSOLE2 + +// Pipe2 begin + +//go:nosplit +func getPipe2Addr() *(func([]int, int) error) + +var Pipe2 = pipe2Enter + +func pipe2Enter(p []int, flags int) (err error) { + if funcptrtest(GetZosLibVec()+SYS_PIPE2<<4, "") == 0 { + *getPipe2Addr() = pipe2Impl + } else { + *getPipe2Addr() = pipe2Error + } + return (*getPipe2Addr())(p, flags) +} + +func pipe2Impl(p []int, flags int) (err error) { + var pp [2]_C_int + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_PIPE2<<4, uintptr(unsafe.Pointer(&pp[0])), uintptr(flags)) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } else { + p[0] = int(pp[0]) + p[1] = int(pp[1]) + } + return +} +func pipe2Error(p []int, flags int) (err error) { + return fmt.Errorf("Pipe2 is not available on this system") +} + +// Pipe2 end + //sys Poll(fds []PollFd, timeout int) (n int, err error) = SYS_POLL + +func Readdir(dir uintptr) (dirent *Dirent, err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___READDIR_A<<4, uintptr(dir)) + runtime.ExitSyscall() + dirent = (*Dirent)(unsafe.Pointer(r0)) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +//sys Readdir_r(dirp uintptr, entry *direntLE, result **direntLE) (err error) = SYS___READDIR_R_A +//sys Statfs(path string, buf *Statfs_t) (err error) = SYS___STATFS_A +//sys Syncfs(fd int) (err error) = SYS_SYNCFS //sys Times(tms *Tms) (ticks uintptr, err error) = SYS_TIMES //sys W_Getmntent(buff *byte, size int) (lastsys int, err error) = SYS_W_GETMNTENT //sys W_Getmntent_A(buff *byte, size int) (lastsys int, err error) = SYS___W_GETMNTENT_A //sys mount_LE(path string, filesystem string, fstype string, mtm uint32, parmlen int32, parm string) (err error) = SYS___MOUNT_A -//sys unmount(filesystem string, mtm int) (err error) = SYS___UMOUNT_A +//sys unmount_LE(filesystem string, mtm int) (err error) = SYS___UMOUNT_A //sys Chroot(path string) (err error) = SYS___CHROOT_A //sys Select(nmsgsfds int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (ret int, err error) = SYS_SELECT -//sysnb Uname(buf *Utsname) (err error) = SYS___UNAME_A +//sysnb Uname(buf *Utsname) (err error) = SYS_____OSNAME_A +//sys Unshare(flags int) (err error) = SYS_UNSHARE func Ptsname(fd int) (name string, err error) { - r0, _, e1 := syscall_syscall(SYS___PTSNAME_A, uintptr(fd), 0, 0) - name = u2s(unsafe.Pointer(r0)) - if e1 != 0 { - err = errnoErr(e1) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithPtrReturn(GetZosLibVec()+SYS___PTSNAME_A<<4, uintptr(fd)) + runtime.ExitSyscall() + if r0 == 0 { + err = errnoErr2(e1, e2) + } else { + name = u2s(unsafe.Pointer(r0)) } return } @@ -272,13 +738,19 @@ func u2s(cstr unsafe.Pointer) string { } func Close(fd int) (err error) { - _, _, e1 := syscall_syscall(SYS_CLOSE, uintptr(fd), 0, 0) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_CLOSE<<4, uintptr(fd)) + runtime.ExitSyscall() for i := 0; e1 == EAGAIN && i < 10; i++ { - _, _, _ = syscall_syscall(SYS_USLEEP, uintptr(10), 0, 0) - _, _, e1 = syscall_syscall(SYS_CLOSE, uintptr(fd), 0, 0) + runtime.EnterSyscall() + CallLeFuncWithErr(GetZosLibVec()+SYS_USLEEP<<4, uintptr(10)) + runtime.ExitSyscall() + runtime.EnterSyscall() + r0, e2, e1 = CallLeFuncWithErr(GetZosLibVec()+SYS_CLOSE<<4, uintptr(fd)) + runtime.ExitSyscall() } - if e1 != 0 { - err = errnoErr(e1) + if r0 != 0 { + err = errnoErr2(e1, e2) } return } @@ -288,9 +760,15 @@ func Madvise(b []byte, advice int) (err error) { return } +func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { + return mapper.Mmap(fd, offset, length, prot, flags) +} + +func Munmap(b []byte) (err error) { + return mapper.Munmap(b) +} + //sys Gethostname(buf []byte) (err error) = SYS___GETHOSTNAME_A -//sysnb Getegid() (egid int) -//sysnb Geteuid() (uid int) //sysnb Getgid() (gid int) //sysnb Getpid() (pid int) //sysnb Getpgid(pid int) (pgid int, err error) = SYS_GETPGID @@ -317,11 +795,14 @@ func Getrusage(who int, rusage *Rusage) (err error) { return } +//sys Getegid() (egid int) = SYS_GETEGID +//sys Geteuid() (euid int) = SYS_GETEUID //sysnb Getsid(pid int) (sid int, err error) = SYS_GETSID //sysnb Getuid() (uid int) //sysnb Kill(pid int, sig Signal) (err error) //sys Lchown(path string, uid int, gid int) (err error) = SYS___LCHOWN_A //sys Link(path string, link string) (err error) = SYS___LINK_A +//sys Linkat(oldDirFd int, oldPath string, newDirFd int, newPath string, flags int) (err error) = SYS___LINKAT_A //sys Listen(s int, n int) (err error) //sys lstat(path string, stat *Stat_LE_t) (err error) = SYS___LSTAT_A @@ -332,15 +813,150 @@ func Lstat(path string, stat *Stat_t) (err error) { return } +// for checking symlinks begins with $VERSION/ $SYSNAME/ $SYSSYMR/ $SYSSYMA/ +func isSpecialPath(path []byte) (v bool) { + var special = [4][8]byte{ + [8]byte{'V', 'E', 'R', 'S', 'I', 'O', 'N', '/'}, + [8]byte{'S', 'Y', 'S', 'N', 'A', 'M', 'E', '/'}, + [8]byte{'S', 'Y', 'S', 'S', 'Y', 'M', 'R', '/'}, + [8]byte{'S', 'Y', 'S', 'S', 'Y', 'M', 'A', '/'}} + + var i, j int + for i = 0; i < len(special); i++ { + for j = 0; j < len(special[i]); j++ { + if path[j] != special[i][j] { + break + } + } + if j == len(special[i]) { + return true + } + } + return false +} + +func realpath(srcpath string, abspath []byte) (pathlen int, errno int) { + var source [1024]byte + copy(source[:], srcpath) + source[len(srcpath)] = 0 + ret := runtime.CallLeFuncByPtr(runtime.XplinkLibvec+SYS___REALPATH_A<<4, //__realpath_a() + []uintptr{uintptr(unsafe.Pointer(&source[0])), + uintptr(unsafe.Pointer(&abspath[0]))}) + if ret != 0 { + index := bytes.IndexByte(abspath[:], byte(0)) + if index != -1 { + return index, 0 + } + } else { + errptr := (*int)(unsafe.Pointer(runtime.CallLeFuncByPtr(runtime.XplinkLibvec+SYS___ERRNO<<4, []uintptr{}))) //__errno() + return 0, *errptr + } + return 0, 245 // EBADDATA 245 +} + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + n = int(runtime.CallLeFuncByPtr(runtime.XplinkLibvec+SYS___READLINK_A<<4, + []uintptr{uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))})) + runtime.KeepAlive(unsafe.Pointer(_p0)) + if n == -1 { + value := *(*int32)(unsafe.Pointer(runtime.CallLeFuncByPtr(runtime.XplinkLibvec+SYS___ERRNO<<4, []uintptr{}))) + err = errnoErr(Errno(value)) + } else { + if buf[0] == '$' { + if isSpecialPath(buf[1:9]) { + cnt, err1 := realpath(path, buf) + if err1 == 0 { + n = cnt + } + } + } + } + return +} + +func impl_Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___READLINKAT_A<<4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + runtime.ExitSyscall() + n = int(r0) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + return n, err + } else { + if buf[0] == '$' { + if isSpecialPath(buf[1:9]) { + cnt, err1 := realpath(path, buf) + if err1 == 0 { + n = cnt + } + } + } + } + return +} + +//go:nosplit +func get_ReadlinkatAddr() *(func(dirfd int, path string, buf []byte) (n int, err error)) + +var Readlinkat = enter_Readlinkat + +func enter_Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + funcref := get_ReadlinkatAddr() + if funcptrtest(GetZosLibVec()+SYS___READLINKAT_A<<4, "") == 0 { + *funcref = impl_Readlinkat + } else { + *funcref = error_Readlinkat + } + return (*funcref)(dirfd, path, buf) +} + +func error_Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + n = -1 + err = ENOSYS + return +} + //sys Mkdir(path string, mode uint32) (err error) = SYS___MKDIR_A +//sys Mkdirat(dirfd int, path string, mode uint32) (err error) = SYS___MKDIRAT_A //sys Mkfifo(path string, mode uint32) (err error) = SYS___MKFIFO_A //sys Mknod(path string, mode uint32, dev int) (err error) = SYS___MKNOD_A +//sys Mknodat(dirfd int, path string, mode uint32, dev int) (err error) = SYS___MKNODAT_A +//sys PivotRoot(newroot string, oldroot string) (err error) = SYS___PIVOT_ROOT_A //sys Pread(fd int, p []byte, offset int64) (n int, err error) //sys Pwrite(fd int, p []byte, offset int64) (n int, err error) -//sys Readlink(path string, buf []byte) (n int, err error) = SYS___READLINK_A +//sys Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) = SYS___PRCTL_A +//sysnb Prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) = SYS_PRLIMIT //sys Rename(from string, to string) (err error) = SYS___RENAME_A +//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) = SYS___RENAMEAT_A +//sys Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) = SYS___RENAMEAT2_A //sys Rmdir(path string) (err error) = SYS___RMDIR_A //sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK +//sys Setegid(egid int) (err error) = SYS_SETEGID +//sys Seteuid(euid int) (err error) = SYS_SETEUID +//sys Sethostname(p []byte) (err error) = SYS___SETHOSTNAME_A +//sys Setns(fd int, nstype int) (err error) = SYS_SETNS //sys Setpriority(which int, who int, prio int) (err error) //sysnb Setpgid(pid int, pgid int) (err error) = SYS_SETPGID //sysnb Setrlimit(resource int, lim *Rlimit) (err error) @@ -360,32 +976,57 @@ func Stat(path string, sta *Stat_t) (err error) { } //sys Symlink(path string, link string) (err error) = SYS___SYMLINK_A +//sys Symlinkat(oldPath string, dirfd int, newPath string) (err error) = SYS___SYMLINKAT_A //sys Sync() = SYS_SYNC //sys Truncate(path string, length int64) (err error) = SYS___TRUNCATE_A //sys Tcgetattr(fildes int, termptr *Termios) (err error) = SYS_TCGETATTR //sys Tcsetattr(fildes int, when int, termptr *Termios) (err error) = SYS_TCSETATTR //sys Umask(mask int) (oldmask int) //sys Unlink(path string) (err error) = SYS___UNLINK_A +//sys Unlinkat(dirfd int, path string, flags int) (err error) = SYS___UNLINKAT_A //sys Utime(path string, utim *Utimbuf) (err error) = SYS___UTIME_A //sys open(path string, mode int, perm uint32) (fd int, err error) = SYS___OPEN_A func Open(path string, mode int, perm uint32) (fd int, err error) { + if mode&O_ACCMODE == 0 { + mode |= O_RDONLY + } return open(path, mode, perm) } -func Mkfifoat(dirfd int, path string, mode uint32) (err error) { - wd, err := Getwd() - if err != nil { - return err +//sys openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) = SYS___OPENAT_A + +func Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + if flags&O_ACCMODE == 0 { + flags |= O_RDONLY } + return openat(dirfd, path, flags, mode) +} - if err := Fchdir(dirfd); err != nil { - return err +//sys openat2(dirfd int, path string, open_how *OpenHow, size int) (fd int, err error) = SYS___OPENAT2_A + +func Openat2(dirfd int, path string, how *OpenHow) (fd int, err error) { + if how.Flags&O_ACCMODE == 0 { + how.Flags |= O_RDONLY } - defer Chdir(wd) + return openat2(dirfd, path, how, SizeofOpenHow) +} - return Mkfifo(path, mode) +func ZosFdToPath(dirfd int) (path string, err error) { + var buffer [1024]byte + runtime.EnterSyscall() + ret, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_W_IOCTL<<4, uintptr(dirfd), 17, 1024, uintptr(unsafe.Pointer(&buffer[0]))) + runtime.ExitSyscall() + if ret == 0 { + zb := bytes.IndexByte(buffer[:], 0) + if zb == -1 { + zb = len(buffer) + } + CallLeFuncWithErr(GetZosLibVec()+SYS___E2A_L<<4, uintptr(unsafe.Pointer(&buffer[0])), uintptr(zb)) + return string(buffer[:zb]), nil + } + return "", errnoErr2(e1, e2) } //sys remove(path string) (err error) @@ -403,10 +1044,12 @@ func Getcwd(buf []byte) (n int, err error) { } else { p = unsafe.Pointer(&_zero) } - _, _, e := syscall_syscall(SYS___GETCWD_A, uintptr(p), uintptr(len(buf)), 0) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithPtrReturn(GetZosLibVec()+SYS___GETCWD_A<<4, uintptr(p), uintptr(len(buf))) + runtime.ExitSyscall() n = clen(buf) + 1 - if e != 0 { - err = errnoErr(e) + if r0 == 0 { + err = errnoErr2(e1, e2) } return } @@ -520,9 +1163,41 @@ func (w WaitStatus) StopSignal() Signal { func (w WaitStatus) TrapCause() int { return -1 } +//sys waitid(idType int, id int, info *Siginfo, options int) (err error) + +func Waitid(idType int, id int, info *Siginfo, options int, rusage *Rusage) (err error) { + return waitid(idType, id, info, options) +} + //sys waitpid(pid int, wstatus *_C_int, options int) (wpid int, err error) -func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) { +func impl_Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_WAIT4<<4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage))) + runtime.ExitSyscall() + wpid = int(r0) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +//go:nosplit +func get_Wait4Addr() *(func(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error)) + +var Wait4 = enter_Wait4 + +func enter_Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) { + funcref := get_Wait4Addr() + if funcptrtest(GetZosLibVec()+SYS_WAIT4<<4, "") == 0 { + *funcref = impl_Wait4 + } else { + *funcref = legacyWait4 + } + return (*funcref)(pid, wstatus, options, rusage) +} + +func legacyWait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) { // TODO(mundaym): z/OS doesn't have wait4. I don't think getrusage does what we want. // At the moment rusage will not be touched. var status _C_int @@ -571,23 +1246,62 @@ func Pipe(p []int) (err error) { } var pp [2]_C_int err = pipe(&pp) - if err == nil { - p[0] = int(pp[0]) - p[1] = int(pp[1]) - } + p[0] = int(pp[0]) + p[1] = int(pp[1]) return } //sys utimes(path string, timeval *[2]Timeval) (err error) = SYS___UTIMES_A func Utimes(path string, tv []Timeval) (err error) { + if tv == nil { + return utimes(path, nil) + } if len(tv) != 2 { return EINVAL } return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) } -func UtimesNano(path string, ts []Timespec) error { +//sys utimensat(dirfd int, path string, ts *[2]Timespec, flags int) (err error) = SYS___UTIMENSAT_A + +func validUtimensat() bool { + if funcptrtest(GetZosLibVec()+SYS___UTIMENSAT_A<<4, "") == 0 { + if name, err := getLeFuncName(GetZosLibVec() + SYS___UTIMENSAT_A<<4); err == nil { + return name == "__utimensat_a" + } + } + return false +} + +// Begin UtimesNano + +//go:nosplit +func get_UtimesNanoAddr() *(func(path string, ts []Timespec) (err error)) + +var UtimesNano = enter_UtimesNano + +func enter_UtimesNano(path string, ts []Timespec) (err error) { + funcref := get_UtimesNanoAddr() + if validUtimensat() { + *funcref = utimesNanoImpl + } else { + *funcref = legacyUtimesNano + } + return (*funcref)(path, ts) +} + +func utimesNanoImpl(path string, ts []Timespec) (err error) { + if ts == nil { + return utimensat(AT_FDCWD, path, nil, 0) + } + if len(ts) != 2 { + return EINVAL + } + return utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) +} + +func legacyUtimesNano(path string, ts []Timespec) (err error) { if len(ts) != 2 { return EINVAL } @@ -600,6 +1314,70 @@ func UtimesNano(path string, ts []Timespec) error { return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) } +// End UtimesNano + +// Begin UtimesNanoAt + +//go:nosplit +func get_UtimesNanoAtAddr() *(func(dirfd int, path string, ts []Timespec, flags int) (err error)) + +var UtimesNanoAt = enter_UtimesNanoAt + +func enter_UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) (err error) { + funcref := get_UtimesNanoAtAddr() + if validUtimensat() { + *funcref = utimesNanoAtImpl + } else { + *funcref = legacyUtimesNanoAt + } + return (*funcref)(dirfd, path, ts, flags) +} + +func utimesNanoAtImpl(dirfd int, path string, ts []Timespec, flags int) (err error) { + if ts == nil { + return utimensat(dirfd, path, nil, flags) + } + if len(ts) != 2 { + return EINVAL + } + return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags) +} + +func legacyUtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) (err error) { + if path[0] != '/' { + dirPath, err := ZosFdToPath(dirfd) + if err != nil { + return err + } + path = dirPath + "/" + path + } + if flags == AT_SYMLINK_NOFOLLOW { + if len(ts) != 2 { + return EINVAL + } + + if ts[0].Nsec >= 5e8 { + ts[0].Sec++ + } + ts[0].Nsec = 0 + if ts[1].Nsec >= 5e8 { + ts[1].Sec++ + } + ts[1].Nsec = 0 + + // Not as efficient as it could be because Timespec and + // Timeval have different types in the different OSes + tv := []Timeval{ + NsecToTimeval(TimespecToNsec(ts[0])), + NsecToTimeval(TimespecToNsec(ts[1])), + } + return Lutimes(path, tv) + } + return UtimesNano(path, ts) +} + +// End UtimesNanoAt + func Getsockname(fd int) (sa Sockaddr, err error) { var rsa RawSockaddrAny var len _Socklen = SizeofSockaddrAny @@ -1191,62 +1969,41 @@ func Opendir(name string) (uintptr, error) { if err != nil { return 0, err } - dir, _, e := syscall_syscall(SYS___OPENDIR_A, uintptr(unsafe.Pointer(p)), 0, 0) - runtime.KeepAlive(unsafe.Pointer(p)) - if e != 0 { - err = errnoErr(e) - } - return dir, err -} - -// clearsyscall.Errno resets the errno value to 0. -func clearErrno() - -func Readdir(dir uintptr) (*Dirent, error) { - var ent Dirent - var res uintptr - // __readdir_r_a returns errno at the end of the directory stream, rather than 0. - // Therefore to avoid false positives we clear errno before calling it. - - // TODO(neeilan): Commented this out to get sys/unix compiling on z/OS. Uncomment and fix. Error: "undefined: clearsyscall" - //clearsyscall.Errno() // TODO(mundaym): check pre-emption rules. - - e, _, _ := syscall_syscall(SYS___READDIR_R_A, dir, uintptr(unsafe.Pointer(&ent)), uintptr(unsafe.Pointer(&res))) - var err error - if e != 0 { - err = errnoErr(Errno(e)) - } - if res == 0 { - return nil, err - } - return &ent, err -} - -func readdir_r(dirp uintptr, entry *direntLE, result **direntLE) (err error) { - r0, _, e1 := syscall_syscall(SYS___READDIR_R_A, dirp, uintptr(unsafe.Pointer(entry)), uintptr(unsafe.Pointer(result))) - if int64(r0) == -1 { - err = errnoErr(Errno(e1)) + err = nil + runtime.EnterSyscall() + dir, e2, e1 := CallLeFuncWithPtrReturn(GetZosLibVec()+SYS___OPENDIR_A<<4, uintptr(unsafe.Pointer(p))) + runtime.ExitSyscall() + runtime.KeepAlive(unsafe.Pointer(p)) + if dir == 0 { + err = errnoErr2(e1, e2) } - return + return dir, err } +// clearsyscall.Errno resets the errno value to 0. +func clearErrno() + func Closedir(dir uintptr) error { - _, _, e := syscall_syscall(SYS_CLOSEDIR, dir, 0, 0) - if e != 0 { - return errnoErr(e) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_CLOSEDIR<<4, dir) + runtime.ExitSyscall() + if r0 != 0 { + return errnoErr2(e1, e2) } return nil } func Seekdir(dir uintptr, pos int) { - _, _, _ = syscall_syscall(SYS_SEEKDIR, dir, uintptr(pos), 0) + runtime.EnterSyscall() + CallLeFuncWithErr(GetZosLibVec()+SYS_SEEKDIR<<4, dir, uintptr(pos)) + runtime.ExitSyscall() } func Telldir(dir uintptr) (int, error) { - p, _, e := syscall_syscall(SYS_TELLDIR, dir, 0, 0) + p, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_TELLDIR<<4, dir) pos := int(p) - if pos == -1 { - return pos, errnoErr(e) + if int64(p) == -1 { + return pos, errnoErr2(e1, e2) } return pos, nil } @@ -1261,19 +2018,55 @@ func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error { *(*int64)(unsafe.Pointer(&flock[4])) = lk.Start *(*int64)(unsafe.Pointer(&flock[12])) = lk.Len *(*int32)(unsafe.Pointer(&flock[20])) = lk.Pid - _, _, errno := syscall_syscall(SYS_FCNTL, fd, uintptr(cmd), uintptr(unsafe.Pointer(&flock))) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_FCNTL<<4, fd, uintptr(cmd), uintptr(unsafe.Pointer(&flock))) + runtime.ExitSyscall() lk.Type = *(*int16)(unsafe.Pointer(&flock[0])) lk.Whence = *(*int16)(unsafe.Pointer(&flock[2])) lk.Start = *(*int64)(unsafe.Pointer(&flock[4])) lk.Len = *(*int64)(unsafe.Pointer(&flock[12])) lk.Pid = *(*int32)(unsafe.Pointer(&flock[20])) - if errno == 0 { + if r0 == 0 { return nil } - return errno + return errnoErr2(e1, e2) +} + +func impl_Flock(fd int, how int) (err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_FLOCK<<4, uintptr(fd), uintptr(how)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +//go:nosplit +func get_FlockAddr() *(func(fd int, how int) (err error)) + +var Flock = enter_Flock + +func validFlock(fp uintptr) bool { + if funcptrtest(GetZosLibVec()+SYS_FLOCK<<4, "") == 0 { + if name, err := getLeFuncName(GetZosLibVec() + SYS_FLOCK<<4); err == nil { + return name == "flock" + } + } + return false +} + +func enter_Flock(fd int, how int) (err error) { + funcref := get_FlockAddr() + if validFlock(GetZosLibVec() + SYS_FLOCK<<4) { + *funcref = impl_Flock + } else { + *funcref = legacyFlock + } + return (*funcref)(fd, how) } -func Flock(fd int, how int) error { +func legacyFlock(fd int, how int) error { var flock_type int16 var fcntl_cmd int @@ -1307,41 +2100,51 @@ func Flock(fd int, how int) error { } func Mlock(b []byte) (err error) { - _, _, e1 := syscall_syscall(SYS___MLOCKALL, _BPX_NONSWAP, 0, 0) - if e1 != 0 { - err = errnoErr(e1) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___MLOCKALL<<4, _BPX_NONSWAP) + runtime.ExitSyscall() + if r0 != 0 { + err = errnoErr2(e1, e2) } return } func Mlock2(b []byte, flags int) (err error) { - _, _, e1 := syscall_syscall(SYS___MLOCKALL, _BPX_NONSWAP, 0, 0) - if e1 != 0 { - err = errnoErr(e1) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___MLOCKALL<<4, _BPX_NONSWAP) + runtime.ExitSyscall() + if r0 != 0 { + err = errnoErr2(e1, e2) } return } func Mlockall(flags int) (err error) { - _, _, e1 := syscall_syscall(SYS___MLOCKALL, _BPX_NONSWAP, 0, 0) - if e1 != 0 { - err = errnoErr(e1) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___MLOCKALL<<4, _BPX_NONSWAP) + runtime.ExitSyscall() + if r0 != 0 { + err = errnoErr2(e1, e2) } return } func Munlock(b []byte) (err error) { - _, _, e1 := syscall_syscall(SYS___MLOCKALL, _BPX_SWAP, 0, 0) - if e1 != 0 { - err = errnoErr(e1) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___MLOCKALL<<4, _BPX_SWAP) + runtime.ExitSyscall() + if r0 != 0 { + err = errnoErr2(e1, e2) } return } func Munlockall() (err error) { - _, _, e1 := syscall_syscall(SYS___MLOCKALL, _BPX_SWAP, 0, 0) - if e1 != 0 { - err = errnoErr(e1) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___MLOCKALL<<4, _BPX_SWAP) + runtime.ExitSyscall() + if r0 != 0 { + err = errnoErr2(e1, e2) } return } @@ -1372,15 +2175,104 @@ func ClockGettime(clockid int32, ts *Timespec) error { return nil } -func Statfs(path string, stat *Statfs_t) (err error) { - fd, err := open(path, O_RDONLY, 0) - defer Close(fd) - if err != nil { - return err +// Chtag + +//go:nosplit +func get_ChtagAddr() *(func(path string, ccsid uint64, textbit uint64) error) + +var Chtag = enter_Chtag + +func enter_Chtag(path string, ccsid uint64, textbit uint64) error { + funcref := get_ChtagAddr() + if validSetxattr() { + *funcref = impl_Chtag + } else { + *funcref = legacy_Chtag + } + return (*funcref)(path, ccsid, textbit) +} + +func legacy_Chtag(path string, ccsid uint64, textbit uint64) error { + tag := ccsid<<16 | textbit<<15 + var tag_buff [8]byte + DecodeData(tag_buff[:], 8, tag) + return Setxattr(path, "filetag", tag_buff[:], XATTR_REPLACE) +} + +func impl_Chtag(path string, ccsid uint64, textbit uint64) error { + tag := ccsid<<16 | textbit<<15 + var tag_buff [4]byte + DecodeData(tag_buff[:], 4, tag) + return Setxattr(path, "system.filetag", tag_buff[:], XATTR_REPLACE) +} + +// End of Chtag + +// Nanosleep + +//go:nosplit +func get_NanosleepAddr() *(func(time *Timespec, leftover *Timespec) error) + +var Nanosleep = enter_Nanosleep + +func enter_Nanosleep(time *Timespec, leftover *Timespec) error { + funcref := get_NanosleepAddr() + if funcptrtest(GetZosLibVec()+SYS_NANOSLEEP<<4, "") == 0 { + *funcref = impl_Nanosleep + } else { + *funcref = legacyNanosleep + } + return (*funcref)(time, leftover) +} + +func impl_Nanosleep(time *Timespec, leftover *Timespec) error { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_NANOSLEEP<<4, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover))) + runtime.ExitSyscall() + if int64(r0) == -1 { + return errnoErr2(e1, e2) + } + return nil +} + +func legacyNanosleep(time *Timespec, leftover *Timespec) error { + t0 := runtime.Nanotime1() + var secrem uint32 + var nsecrem uint32 + total := time.Sec*1000000000 + time.Nsec + elapsed := runtime.Nanotime1() - t0 + var rv int32 + var rc int32 + var err error + // repeatedly sleep for 1 second until less than 1 second left + for total-elapsed > 1000000000 { + rv, rc, _ = BpxCondTimedWait(uint32(1), uint32(0), uint32(CW_CONDVAR), &secrem, &nsecrem) + if rv != 0 && rc != 112 { // 112 is EAGAIN + if leftover != nil && rc == 120 { // 120 is EINTR + leftover.Sec = int64(secrem) + leftover.Nsec = int64(nsecrem) + } + err = Errno(rc) + return err + } + elapsed = runtime.Nanotime1() - t0 + } + // sleep the remainder + if total > elapsed { + rv, rc, _ = BpxCondTimedWait(uint32(0), uint32(total-elapsed), uint32(CW_CONDVAR), &secrem, &nsecrem) + } + if leftover != nil && rc == 120 { + leftover.Sec = int64(secrem) + leftover.Nsec = int64(nsecrem) } - return Fstatfs(fd, stat) + if rv != 0 && rc != 112 { + err = Errno(rc) + } + return err } +// End of Nanosleep + var ( Stdin = 0 Stdout = 1 @@ -1395,6 +2287,9 @@ var ( errENOENT error = syscall.ENOENT ) +var ZosTraceLevel int +var ZosTracefile *os.File + var ( signalNameMapOnce sync.Once signalNameMap map[string]syscall.Signal @@ -1416,6 +2311,56 @@ func errnoErr(e Errno) error { return e } +var reg *regexp.Regexp + +// enhanced with zos specific errno2 +func errnoErr2(e Errno, e2 uintptr) error { + switch e { + case 0: + return nil + case EAGAIN: + return errEAGAIN + /* + Allow the retrieval of errno2 for EINVAL and ENOENT on zos + case EINVAL: + return errEINVAL + case ENOENT: + return errENOENT + */ + } + if ZosTraceLevel > 0 { + var name string + if reg == nil { + reg = regexp.MustCompile("(^unix\\.[^/]+$|.*\\/unix\\.[^/]+$)") + } + i := 1 + pc, file, line, ok := runtime.Caller(i) + if ok { + name = runtime.FuncForPC(pc).Name() + } + for ok && reg.MatchString(runtime.FuncForPC(pc).Name()) { + i += 1 + pc, file, line, ok = runtime.Caller(i) + } + if ok { + if ZosTracefile == nil { + ZosConsolePrintf("From %s:%d\n", file, line) + ZosConsolePrintf("%s: %s (errno2=0x%x)\n", name, e.Error(), e2) + } else { + fmt.Fprintf(ZosTracefile, "From %s:%d\n", file, line) + fmt.Fprintf(ZosTracefile, "%s: %s (errno2=0x%x)\n", name, e.Error(), e2) + } + } else { + if ZosTracefile == nil { + ZosConsolePrintf("%s (errno2=0x%x)\n", e.Error(), e2) + } else { + fmt.Fprintf(ZosTracefile, "%s (errno2=0x%x)\n", e.Error(), e2) + } + } + } + return e +} + // ErrnoName returns the error name for error number e. func ErrnoName(e Errno) string { i := sort.Search(len(errorList), func(i int) bool { @@ -1474,6 +2419,9 @@ func (m *mmapper) Mmap(fd int, offset int64, length int, prot int, flags int) (d return nil, EINVAL } + // Set __MAP_64 by default + flags |= __MAP_64 + // Map the requested memory. addr, errno := m.mmap(0, uintptr(length), prot, flags, fd, offset) if errno != nil { @@ -1520,14 +2468,6 @@ func (m *mmapper) Munmap(data []byte) (err error) { return nil } -func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { - return mapper.Mmap(fd, offset, length, prot, flags) -} - -func Munmap(b []byte) (err error) { - return mapper.Munmap(b) -} - func Read(fd int, p []byte) (n int, err error) { n, err = read(fd, p) if raceenabled { @@ -1786,83 +2726,170 @@ func Exec(argv0 string, argv []string, envv []string) error { return syscall.Exec(argv0, argv, envv) } -func Mount(source string, target string, fstype string, flags uintptr, data string) (err error) { +func Getag(path string) (ccsid uint16, flag uint16, err error) { + var val [8]byte + sz, err := Getxattr(path, "ccsid", val[:]) + if err != nil { + return + } + ccsid = uint16(EncodeData(val[0:sz])) + sz, err = Getxattr(path, "flags", val[:]) + if err != nil { + return + } + flag = uint16(EncodeData(val[0:sz]) >> 15) + return +} + +// Mount begin +func impl_Mount(source string, target string, fstype string, flags uintptr, data string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(source) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(target) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + var _p3 *byte + _p3, err = BytePtrFromString(data) + if err != nil { + return + } + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___MOUNT1_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(_p3))) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +//go:nosplit +func get_MountAddr() *(func(source string, target string, fstype string, flags uintptr, data string) (err error)) + +var Mount = enter_Mount + +func enter_Mount(source string, target string, fstype string, flags uintptr, data string) (err error) { + funcref := get_MountAddr() + if validMount() { + *funcref = impl_Mount + } else { + *funcref = legacyMount + } + return (*funcref)(source, target, fstype, flags, data) +} + +func legacyMount(source string, target string, fstype string, flags uintptr, data string) (err error) { if needspace := 8 - len(fstype); needspace <= 0 { - fstype = fstype[:8] + fstype = fstype[0:8] } else { - fstype += " "[:needspace] + fstype += " "[0:needspace] } return mount_LE(target, source, fstype, uint32(flags), int32(len(data)), data) } -func Unmount(name string, mtm int) (err error) { +func validMount() bool { + if funcptrtest(GetZosLibVec()+SYS___MOUNT1_A<<4, "") == 0 { + if name, err := getLeFuncName(GetZosLibVec() + SYS___MOUNT1_A<<4); err == nil { + return name == "__mount1_a" + } + } + return false +} + +// Mount end + +// Unmount begin +func impl_Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___UMOUNT2_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +//go:nosplit +func get_UnmountAddr() *(func(target string, flags int) (err error)) + +var Unmount = enter_Unmount + +func enter_Unmount(target string, flags int) (err error) { + funcref := get_UnmountAddr() + if funcptrtest(GetZosLibVec()+SYS___UMOUNT2_A<<4, "") == 0 { + *funcref = impl_Unmount + } else { + *funcref = legacyUnmount + } + return (*funcref)(target, flags) +} + +func legacyUnmount(name string, mtm int) (err error) { // mountpoint is always a full path and starts with a '/' // check if input string is not a mountpoint but a filesystem name if name[0] != '/' { - return unmount(name, mtm) + return unmount_LE(name, mtm) } // treat name as mountpoint b2s := func(arr []byte) string { - nulli := bytes.IndexByte(arr, 0) - if nulli == -1 { - return string(arr) - } else { - return string(arr[:nulli]) + var str string + for i := 0; i < len(arr); i++ { + if arr[i] == 0 { + str = string(arr[:i]) + break + } } + return str } var buffer struct { header W_Mnth fsinfo [64]W_Mntent } - fsCount, err := W_Getmntent_A((*byte)(unsafe.Pointer(&buffer)), int(unsafe.Sizeof(buffer))) - if err != nil { - return err - } - if fsCount == 0 { - return EINVAL - } - for i := 0; i < fsCount; i++ { - if b2s(buffer.fsinfo[i].Mountpoint[:]) == name { - err = unmount(b2s(buffer.fsinfo[i].Fsname[:]), mtm) - break + fs_count, err := W_Getmntent_A((*byte)(unsafe.Pointer(&buffer)), int(unsafe.Sizeof(buffer))) + if err == nil { + err = EINVAL + for i := 0; i < fs_count; i++ { + if b2s(buffer.fsinfo[i].Mountpoint[:]) == name { + err = unmount_LE(b2s(buffer.fsinfo[i].Fsname[:]), mtm) + break + } } + } else if fs_count == 0 { + err = EINVAL } return err } -func fdToPath(dirfd int) (path string, err error) { - var buffer [1024]byte - // w_ctrl() - ret := runtime.CallLeFuncByPtr(runtime.XplinkLibvec+SYS_W_IOCTL<<4, - []uintptr{uintptr(dirfd), 17, 1024, uintptr(unsafe.Pointer(&buffer[0]))}) - if ret == 0 { - zb := bytes.IndexByte(buffer[:], 0) - if zb == -1 { - zb = len(buffer) - } - // __e2a_l() - runtime.CallLeFuncByPtr(runtime.XplinkLibvec+SYS___E2A_L<<4, - []uintptr{uintptr(unsafe.Pointer(&buffer[0])), uintptr(zb)}) - return string(buffer[:zb]), nil - } - // __errno() - errno := int(*(*int32)(unsafe.Pointer(runtime.CallLeFuncByPtr(runtime.XplinkLibvec+SYS___ERRNO<<4, - []uintptr{})))) - // __errno2() - errno2 := int(runtime.CallLeFuncByPtr(runtime.XplinkLibvec+SYS___ERRNO2<<4, - []uintptr{})) - // strerror_r() - ret = runtime.CallLeFuncByPtr(runtime.XplinkLibvec+SYS_STRERROR_R<<4, - []uintptr{uintptr(errno), uintptr(unsafe.Pointer(&buffer[0])), 1024}) - if ret == 0 { - zb := bytes.IndexByte(buffer[:], 0) - if zb == -1 { - zb = len(buffer) - } - return "", fmt.Errorf("%s (errno2=0x%x)", buffer[:zb], errno2) - } else { - return "", fmt.Errorf("fdToPath errno %d (errno2=0x%x)", errno, errno2) +// Unmount end + +func direntIno(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino)) +} + +func direntReclen(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen)) +} + +func direntNamlen(buf []byte) (uint64, bool) { + reclen, ok := direntReclen(buf) + if !ok { + return 0, false } + return reclen - uint64(unsafe.Offsetof(Dirent{}.Name)), true } func direntLeToDirentUnix(dirent *direntLE, dir uintptr, path string) (Dirent, error) { @@ -1904,7 +2931,7 @@ func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { } // Get path from fd to avoid unavailable call (fdopendir) - path, err := fdToPath(fd) + path, err := ZosFdToPath(fd) if err != nil { return 0, err } @@ -1918,7 +2945,7 @@ func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { for { var entryLE direntLE var entrypLE *direntLE - e := readdir_r(d, &entryLE, &entrypLE) + e := Readdir_r(d, &entryLE, &entrypLE) if e != nil { return n, e } @@ -1964,23 +2991,127 @@ func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { return n, nil } -func ReadDirent(fd int, buf []byte) (n int, err error) { - var base = (*uintptr)(unsafe.Pointer(new(uint64))) - return Getdirentries(fd, buf, base) +func Err2ad() (eadd *int) { + r0, _, _ := CallLeFuncWithErr(GetZosLibVec() + SYS___ERR2AD<<4) + eadd = (*int)(unsafe.Pointer(r0)) + return } -func direntIno(buf []byte) (uint64, bool) { - return readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino)) +func ZosConsolePrintf(format string, v ...interface{}) (int, error) { + type __cmsg struct { + _ uint16 + _ [2]uint8 + __msg_length uint32 + __msg uintptr + _ [4]uint8 + } + msg := fmt.Sprintf(format, v...) + strptr := unsafe.Pointer((*reflect.StringHeader)(unsafe.Pointer(&msg)).Data) + len := (*reflect.StringHeader)(unsafe.Pointer(&msg)).Len + cmsg := __cmsg{__msg_length: uint32(len), __msg: uintptr(strptr)} + cmd := uint32(0) + runtime.EnterSyscall() + rc, err2, err1 := CallLeFuncWithErr(GetZosLibVec()+SYS_____CONSOLE_A<<4, uintptr(unsafe.Pointer(&cmsg)), 0, uintptr(unsafe.Pointer(&cmd))) + runtime.ExitSyscall() + if rc != 0 { + return 0, fmt.Errorf("%s (errno2=0x%x)\n", err1.Error(), err2) + } + return 0, nil +} +func ZosStringToEbcdicBytes(str string, nullterm bool) (ebcdicBytes []byte) { + if nullterm { + ebcdicBytes = []byte(str + "\x00") + } else { + ebcdicBytes = []byte(str) + } + A2e(ebcdicBytes) + return +} +func ZosEbcdicBytesToString(b []byte, trimRight bool) (str string) { + res := make([]byte, len(b)) + copy(res, b) + E2a(res) + if trimRight { + str = string(bytes.TrimRight(res, " \x00")) + } else { + str = string(res) + } + return } -func direntReclen(buf []byte) (uint64, bool) { - return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen)) +func fdToPath(dirfd int) (path string, err error) { + var buffer [1024]byte + // w_ctrl() + ret := runtime.CallLeFuncByPtr(runtime.XplinkLibvec+SYS_W_IOCTL<<4, + []uintptr{uintptr(dirfd), 17, 1024, uintptr(unsafe.Pointer(&buffer[0]))}) + if ret == 0 { + zb := bytes.IndexByte(buffer[:], 0) + if zb == -1 { + zb = len(buffer) + } + // __e2a_l() + runtime.CallLeFuncByPtr(runtime.XplinkLibvec+SYS___E2A_L<<4, + []uintptr{uintptr(unsafe.Pointer(&buffer[0])), uintptr(zb)}) + return string(buffer[:zb]), nil + } + // __errno() + errno := int(*(*int32)(unsafe.Pointer(runtime.CallLeFuncByPtr(runtime.XplinkLibvec+SYS___ERRNO<<4, + []uintptr{})))) + // __errno2() + errno2 := int(runtime.CallLeFuncByPtr(runtime.XplinkLibvec+SYS___ERRNO2<<4, + []uintptr{})) + // strerror_r() + ret = runtime.CallLeFuncByPtr(runtime.XplinkLibvec+SYS_STRERROR_R<<4, + []uintptr{uintptr(errno), uintptr(unsafe.Pointer(&buffer[0])), 1024}) + if ret == 0 { + zb := bytes.IndexByte(buffer[:], 0) + if zb == -1 { + zb = len(buffer) + } + return "", fmt.Errorf("%s (errno2=0x%x)", buffer[:zb], errno2) + } else { + return "", fmt.Errorf("fdToPath errno %d (errno2=0x%x)", errno, errno2) + } } -func direntNamlen(buf []byte) (uint64, bool) { - reclen, ok := direntReclen(buf) - if !ok { - return 0, false +func impl_Mkfifoat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return } - return reclen - uint64(unsafe.Offsetof(Dirent{}.Name)), true + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___MKFIFOAT_A<<4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +//go:nosplit +func get_MkfifoatAddr() *(func(dirfd int, path string, mode uint32) (err error)) + +var Mkfifoat = enter_Mkfifoat + +func enter_Mkfifoat(dirfd int, path string, mode uint32) (err error) { + funcref := get_MkfifoatAddr() + if funcptrtest(GetZosLibVec()+SYS___MKFIFOAT_A<<4, "") == 0 { + *funcref = impl_Mkfifoat + } else { + *funcref = legacy_Mkfifoat + } + return (*funcref)(dirfd, path, mode) +} + +func legacy_Mkfifoat(dirfd int, path string, mode uint32) (err error) { + dirname, err := ZosFdToPath(dirfd) + if err != nil { + return err + } + return Mkfifo(dirname+"/"+path, mode) } + +//sys Posix_openpt(oflag int) (fd int, err error) = SYS_POSIX_OPENPT +//sys Grantpt(fildes int) (rc int, err error) = SYS_GRANTPT +//sys Unlockpt(fildes int) (rc int, err error) = SYS_UNLOCKPT diff --git a/vendor/golang.org/x/sys/unix/sysvshm_unix.go b/vendor/golang.org/x/sys/unix/sysvshm_unix.go index 79a84f18b46..672d6b0a880 100644 --- a/vendor/golang.org/x/sys/unix/sysvshm_unix.go +++ b/vendor/golang.org/x/sys/unix/sysvshm_unix.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build (darwin && !ios) || linux +//go:build (darwin && !ios) || linux || zos package unix diff --git a/vendor/golang.org/x/sys/unix/sysvshm_unix_other.go b/vendor/golang.org/x/sys/unix/sysvshm_unix_other.go index 9eb0db664cb..8b7977a28c0 100644 --- a/vendor/golang.org/x/sys/unix/sysvshm_unix_other.go +++ b/vendor/golang.org/x/sys/unix/sysvshm_unix_other.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build darwin && !ios +//go:build (darwin && !ios) || zos package unix diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux.go b/vendor/golang.org/x/sys/unix/zerrors_linux.go index 36bf8399f4f..877a62b479a 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux.go @@ -491,6 +491,7 @@ const ( BPF_F_REPLACE = 0x4 BPF_F_SLEEPABLE = 0x10 BPF_F_STRICT_ALIGNMENT = 0x1 + BPF_F_TEST_REG_INVARIANTS = 0x80 BPF_F_TEST_RND_HI32 = 0x4 BPF_F_TEST_RUN_ON_CPU = 0x1 BPF_F_TEST_STATE_FREQ = 0x8 @@ -501,6 +502,7 @@ const ( BPF_IMM = 0x0 BPF_IND = 0x40 BPF_JA = 0x0 + BPF_JCOND = 0xe0 BPF_JEQ = 0x10 BPF_JGE = 0x30 BPF_JGT = 0x20 @@ -656,6 +658,9 @@ const ( CAN_NPROTO = 0x8 CAN_RAW = 0x1 CAN_RAW_FILTER_MAX = 0x200 + CAN_RAW_XL_VCID_RX_FILTER = 0x4 + CAN_RAW_XL_VCID_TX_PASS = 0x2 + CAN_RAW_XL_VCID_TX_SET = 0x1 CAN_RTR_FLAG = 0x40000000 CAN_SFF_ID_BITS = 0xb CAN_SFF_MASK = 0x7ff @@ -1338,6 +1343,7 @@ const ( F_OFD_SETLK = 0x25 F_OFD_SETLKW = 0x26 F_OK = 0x0 + F_SEAL_EXEC = 0x20 F_SEAL_FUTURE_WRITE = 0x10 F_SEAL_GROW = 0x4 F_SEAL_SEAL = 0x1 @@ -1626,6 +1632,7 @@ const ( IP_FREEBIND = 0xf IP_HDRINCL = 0x3 IP_IPSEC_POLICY = 0x10 + IP_LOCAL_PORT_RANGE = 0x33 IP_MAXPACKET = 0xffff IP_MAX_MEMBERSHIPS = 0x14 IP_MF = 0x2000 @@ -1652,6 +1659,7 @@ const ( IP_PMTUDISC_OMIT = 0x5 IP_PMTUDISC_PROBE = 0x3 IP_PMTUDISC_WANT = 0x1 + IP_PROTOCOL = 0x34 IP_RECVERR = 0xb IP_RECVERR_RFC4884 = 0x1a IP_RECVFRAGSIZE = 0x19 @@ -1697,6 +1705,7 @@ const ( KEXEC_ARCH_S390 = 0x160000 KEXEC_ARCH_SH = 0x2a0000 KEXEC_ARCH_X86_64 = 0x3e0000 + KEXEC_FILE_DEBUG = 0x8 KEXEC_FILE_NO_INITRAMFS = 0x4 KEXEC_FILE_ON_CRASH = 0x2 KEXEC_FILE_UNLOAD = 0x1 @@ -1898,6 +1907,7 @@ const ( MNT_DETACH = 0x2 MNT_EXPIRE = 0x4 MNT_FORCE = 0x1 + MNT_ID_REQ_SIZE_VER0 = 0x18 MODULE_INIT_COMPRESSED_FILE = 0x4 MODULE_INIT_IGNORE_MODVERSIONS = 0x1 MODULE_INIT_IGNORE_VERMAGIC = 0x2 @@ -2166,7 +2176,7 @@ const ( NFT_SECMARK_CTX_MAXLEN = 0x100 NFT_SET_MAXNAMELEN = 0x100 NFT_SOCKET_MAX = 0x3 - NFT_TABLE_F_MASK = 0x3 + NFT_TABLE_F_MASK = 0x7 NFT_TABLE_MAXNAMELEN = 0x100 NFT_TRACETYPE_MAX = 0x3 NFT_TUNNEL_F_MASK = 0x7 @@ -2302,6 +2312,7 @@ const ( PERF_AUX_FLAG_PARTIAL = 0x4 PERF_AUX_FLAG_PMU_FORMAT_TYPE_MASK = 0xff00 PERF_AUX_FLAG_TRUNCATED = 0x1 + PERF_BRANCH_ENTRY_INFO_BITS_MAX = 0x21 PERF_BR_ARM64_DEBUG_DATA = 0x7 PERF_BR_ARM64_DEBUG_EXIT = 0x5 PERF_BR_ARM64_DEBUG_HALT = 0x4 @@ -2399,6 +2410,7 @@ const ( PERF_RECORD_MISC_USER = 0x2 PERF_SAMPLE_BRANCH_PLM_ALL = 0x7 PERF_SAMPLE_WEIGHT_TYPE = 0x1004000 + PID_FS_MAGIC = 0x50494446 PIPEFS_MAGIC = 0x50495045 PPPIOCGNPMODE = 0xc008744c PPPIOCNEWUNIT = 0xc004743e @@ -2892,8 +2904,9 @@ const ( RWF_APPEND = 0x10 RWF_DSYNC = 0x2 RWF_HIPRI = 0x1 + RWF_NOAPPEND = 0x20 RWF_NOWAIT = 0x8 - RWF_SUPPORTED = 0x1f + RWF_SUPPORTED = 0x3f RWF_SYNC = 0x4 RWF_WRITE_LIFE_NOT_SET = 0x0 SCHED_BATCH = 0x3 @@ -2914,7 +2927,9 @@ const ( SCHED_RESET_ON_FORK = 0x40000000 SCHED_RR = 0x2 SCM_CREDENTIALS = 0x2 + SCM_PIDFD = 0x4 SCM_RIGHTS = 0x1 + SCM_SECURITY = 0x3 SCM_TIMESTAMP = 0x1d SC_LOG_FLUSH = 0x100000 SECCOMP_ADDFD_FLAG_SEND = 0x2 @@ -3047,6 +3062,8 @@ const ( SIOCSMIIREG = 0x8949 SIOCSRARP = 0x8962 SIOCWANDEV = 0x894a + SK_DIAG_BPF_STORAGE_MAX = 0x3 + SK_DIAG_BPF_STORAGE_REQ_MAX = 0x1 SMACK_MAGIC = 0x43415d53 SMART_AUTOSAVE = 0xd2 SMART_AUTO_OFFLINE = 0xdb @@ -3067,6 +3084,8 @@ const ( SOCKFS_MAGIC = 0x534f434b SOCK_BUF_LOCK_MASK = 0x3 SOCK_DCCP = 0x6 + SOCK_DESTROY = 0x15 + SOCK_DIAG_BY_FAMILY = 0x14 SOCK_IOC_TYPE = 0x89 SOCK_PACKET = 0xa SOCK_RAW = 0x3 @@ -3168,6 +3187,7 @@ const ( STATX_GID = 0x10 STATX_INO = 0x100 STATX_MNT_ID = 0x1000 + STATX_MNT_ID_UNIQUE = 0x4000 STATX_MODE = 0x2 STATX_MTIME = 0x40 STATX_NLINK = 0x4 @@ -3255,6 +3275,7 @@ const ( TCP_MAX_WINSHIFT = 0xe TCP_MD5SIG = 0xe TCP_MD5SIG_EXT = 0x20 + TCP_MD5SIG_FLAG_IFINDEX = 0x2 TCP_MD5SIG_FLAG_PREFIX = 0x1 TCP_MD5SIG_MAXKEYLEN = 0x50 TCP_MSS = 0x200 @@ -3562,12 +3583,16 @@ const ( XDP_RX_RING = 0x2 XDP_SHARED_UMEM = 0x1 XDP_STATISTICS = 0x7 + XDP_TXMD_FLAGS_CHECKSUM = 0x2 + XDP_TXMD_FLAGS_TIMESTAMP = 0x1 + XDP_TX_METADATA = 0x2 XDP_TX_RING = 0x3 XDP_UMEM_COMPLETION_RING = 0x6 XDP_UMEM_FILL_RING = 0x5 XDP_UMEM_PGOFF_COMPLETION_RING = 0x180000000 XDP_UMEM_PGOFF_FILL_RING = 0x100000000 XDP_UMEM_REG = 0x4 + XDP_UMEM_TX_SW_CSUM = 0x2 XDP_UMEM_UNALIGNED_CHUNK_FLAG = 0x1 XDP_USE_NEED_WAKEUP = 0x8 XDP_USE_SG = 0x10 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go index 42ff8c3c1b0..e4bc0bd57c7 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go @@ -118,6 +118,7 @@ const ( IXOFF = 0x1000 IXON = 0x400 MAP_32BIT = 0x40 + MAP_ABOVE4G = 0x80 MAP_ANON = 0x20 MAP_ANONYMOUS = 0x20 MAP_DENYWRITE = 0x800 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go index dca436004fa..689317afdbf 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go @@ -118,6 +118,7 @@ const ( IXOFF = 0x1000 IXON = 0x400 MAP_32BIT = 0x40 + MAP_ABOVE4G = 0x80 MAP_ANON = 0x20 MAP_ANONYMOUS = 0x20 MAP_DENYWRITE = 0x800 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go index d8cae6d1534..14270508b04 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go @@ -87,6 +87,7 @@ const ( FICLONE = 0x40049409 FICLONERANGE = 0x4020940d FLUSHO = 0x1000 + FPMR_MAGIC = 0x46504d52 FPSIMD_MAGIC = 0x46508001 FS_IOC_ENABLE_VERITY = 0x40806685 FS_IOC_GETFLAGS = 0x80086601 diff --git a/vendor/golang.org/x/sys/unix/zerrors_zos_s390x.go b/vendor/golang.org/x/sys/unix/zerrors_zos_s390x.go index 4dfd2e051d3..da08b2ab3d9 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_zos_s390x.go +++ b/vendor/golang.org/x/sys/unix/zerrors_zos_s390x.go @@ -10,41 +10,99 @@ package unix const ( - BRKINT = 0x0001 - CLOCK_MONOTONIC = 0x1 - CLOCK_PROCESS_CPUTIME_ID = 0x2 - CLOCK_REALTIME = 0x0 - CLOCK_THREAD_CPUTIME_ID = 0x3 - CS8 = 0x0030 - CSIZE = 0x0030 - ECHO = 0x00000008 - ECHONL = 0x00000001 - FD_CLOEXEC = 0x01 - FD_CLOFORK = 0x02 - FNDELAY = 0x04 - F_CLOSFD = 9 - F_CONTROL_CVT = 13 - F_DUPFD = 0 - F_DUPFD2 = 8 - F_GETFD = 1 - F_GETFL = 259 - F_GETLK = 5 - F_GETOWN = 10 - F_OK = 0x0 - F_RDLCK = 1 - F_SETFD = 2 - F_SETFL = 4 - F_SETLK = 6 - F_SETLKW = 7 - F_SETOWN = 11 - F_SETTAG = 12 - F_UNLCK = 3 - F_WRLCK = 2 - FSTYPE_ZFS = 0xe9 //"Z" - FSTYPE_HFS = 0xc8 //"H" - FSTYPE_NFS = 0xd5 //"N" - FSTYPE_TFS = 0xe3 //"T" - FSTYPE_AUTOMOUNT = 0xc1 //"A" + BRKINT = 0x0001 + CLOCAL = 0x1 + CLOCK_MONOTONIC = 0x1 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_THREAD_CPUTIME_ID = 0x3 + CLONE_NEWIPC = 0x08000000 + CLONE_NEWNET = 0x40000000 + CLONE_NEWNS = 0x00020000 + CLONE_NEWPID = 0x20000000 + CLONE_NEWUTS = 0x04000000 + CLONE_PARENT = 0x00008000 + CS8 = 0x0030 + CSIZE = 0x0030 + ECHO = 0x00000008 + ECHONL = 0x00000001 + EFD_SEMAPHORE = 0x00002000 + EFD_CLOEXEC = 0x00001000 + EFD_NONBLOCK = 0x00000004 + EPOLL_CLOEXEC = 0x00001000 + EPOLL_CTL_ADD = 0 + EPOLL_CTL_MOD = 1 + EPOLL_CTL_DEL = 2 + EPOLLRDNORM = 0x0001 + EPOLLRDBAND = 0x0002 + EPOLLIN = 0x0003 + EPOLLOUT = 0x0004 + EPOLLWRBAND = 0x0008 + EPOLLPRI = 0x0010 + EPOLLERR = 0x0020 + EPOLLHUP = 0x0040 + EPOLLEXCLUSIVE = 0x20000000 + EPOLLONESHOT = 0x40000000 + FD_CLOEXEC = 0x01 + FD_CLOFORK = 0x02 + FD_SETSIZE = 0x800 + FNDELAY = 0x04 + F_CLOSFD = 9 + F_CONTROL_CVT = 13 + F_DUPFD = 0 + F_DUPFD2 = 8 + F_GETFD = 1 + F_GETFL = 259 + F_GETLK = 5 + F_GETOWN = 10 + F_OK = 0x0 + F_RDLCK = 1 + F_SETFD = 2 + F_SETFL = 4 + F_SETLK = 6 + F_SETLKW = 7 + F_SETOWN = 11 + F_SETTAG = 12 + F_UNLCK = 3 + F_WRLCK = 2 + FSTYPE_ZFS = 0xe9 //"Z" + FSTYPE_HFS = 0xc8 //"H" + FSTYPE_NFS = 0xd5 //"N" + FSTYPE_TFS = 0xe3 //"T" + FSTYPE_AUTOMOUNT = 0xc1 //"A" + GRND_NONBLOCK = 1 + GRND_RANDOM = 2 + HUPCL = 0x0100 // Hang up on last close + IN_CLOEXEC = 0x00001000 + IN_NONBLOCK = 0x00000004 + IN_ACCESS = 0x00000001 + IN_MODIFY = 0x00000002 + IN_ATTRIB = 0x00000004 + IN_CLOSE_WRITE = 0x00000008 + IN_CLOSE_NOWRITE = 0x00000010 + IN_OPEN = 0x00000020 + IN_MOVED_FROM = 0x00000040 + IN_MOVED_TO = 0x00000080 + IN_CREATE = 0x00000100 + IN_DELETE = 0x00000200 + IN_DELETE_SELF = 0x00000400 + IN_MOVE_SELF = 0x00000800 + IN_UNMOUNT = 0x00002000 + IN_Q_OVERFLOW = 0x00004000 + IN_IGNORED = 0x00008000 + IN_CLOSE = (IN_CLOSE_WRITE | IN_CLOSE_NOWRITE) + IN_MOVE = (IN_MOVED_FROM | IN_MOVED_TO) + IN_ALL_EVENTS = (IN_ACCESS | IN_MODIFY | IN_ATTRIB | + IN_CLOSE | IN_OPEN | IN_MOVE | + IN_CREATE | IN_DELETE | IN_DELETE_SELF | + IN_MOVE_SELF) + IN_ONLYDIR = 0x01000000 + IN_DONT_FOLLOW = 0x02000000 + IN_EXCL_UNLINK = 0x04000000 + IN_MASK_CREATE = 0x10000000 + IN_MASK_ADD = 0x20000000 + IN_ISDIR = 0x40000000 + IN_ONESHOT = 0x80000000 IP6F_MORE_FRAG = 0x0001 IP6F_OFF_MASK = 0xfff8 IP6F_RESERVED_MASK = 0x0006 @@ -152,10 +210,18 @@ const ( IP_PKTINFO = 101 IP_RECVPKTINFO = 102 IP_TOS = 2 - IP_TTL = 3 + IP_TTL = 14 IP_UNBLOCK_SOURCE = 11 + ICMP6_FILTER = 1 + MCAST_INCLUDE = 0 + MCAST_EXCLUDE = 1 + MCAST_JOIN_GROUP = 40 + MCAST_LEAVE_GROUP = 41 + MCAST_JOIN_SOURCE_GROUP = 42 + MCAST_LEAVE_SOURCE_GROUP = 43 + MCAST_BLOCK_SOURCE = 44 + MCAST_UNBLOCK_SOURCE = 46 ICANON = 0x0010 - ICMP6_FILTER = 0x26 ICRNL = 0x0002 IEXTEN = 0x0020 IGNBRK = 0x0004 @@ -165,10 +231,10 @@ const ( ISTRIP = 0x0080 IXON = 0x0200 IXOFF = 0x0100 - LOCK_SH = 0x1 // Not exist on zOS - LOCK_EX = 0x2 // Not exist on zOS - LOCK_NB = 0x4 // Not exist on zOS - LOCK_UN = 0x8 // Not exist on zOS + LOCK_SH = 0x1 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_UN = 0x8 POLLIN = 0x0003 POLLOUT = 0x0004 POLLPRI = 0x0010 @@ -182,15 +248,29 @@ const ( MAP_PRIVATE = 0x1 // changes are private MAP_SHARED = 0x2 // changes are shared MAP_FIXED = 0x4 // place exactly - MCAST_JOIN_GROUP = 40 - MCAST_LEAVE_GROUP = 41 - MCAST_JOIN_SOURCE_GROUP = 42 - MCAST_LEAVE_SOURCE_GROUP = 43 - MCAST_BLOCK_SOURCE = 44 - MCAST_UNBLOCK_SOURCE = 45 + __MAP_MEGA = 0x8 + __MAP_64 = 0x10 + MAP_ANON = 0x20 + MAP_ANONYMOUS = 0x20 MS_SYNC = 0x1 // msync - synchronous writes MS_ASYNC = 0x2 // asynchronous writes MS_INVALIDATE = 0x4 // invalidate mappings + MS_BIND = 0x00001000 + MS_MOVE = 0x00002000 + MS_NOSUID = 0x00000002 + MS_PRIVATE = 0x00040000 + MS_REC = 0x00004000 + MS_REMOUNT = 0x00008000 + MS_RDONLY = 0x00000001 + MS_UNBINDABLE = 0x00020000 + MNT_DETACH = 0x00000004 + ZOSDSFS_SUPER_MAGIC = 0x44534653 // zOS DSFS + NFS_SUPER_MAGIC = 0x6969 // NFS + NSFS_MAGIC = 0x6e736673 // PROCNS + PROC_SUPER_MAGIC = 0x9fa0 // proc FS + ZOSTFS_SUPER_MAGIC = 0x544653 // zOS TFS + ZOSUFS_SUPER_MAGIC = 0x554653 // zOS UFS + ZOSZFS_SUPER_MAGIC = 0x5A4653 // zOS ZFS MTM_RDONLY = 0x80000000 MTM_RDWR = 0x40000000 MTM_UMOUNT = 0x10000000 @@ -205,13 +285,20 @@ const ( MTM_REMOUNT = 0x00000100 MTM_NOSECURITY = 0x00000080 NFDBITS = 0x20 + ONLRET = 0x0020 // NL performs CR function O_ACCMODE = 0x03 O_APPEND = 0x08 O_ASYNCSIG = 0x0200 O_CREAT = 0x80 + O_DIRECT = 0x00002000 + O_NOFOLLOW = 0x00004000 + O_DIRECTORY = 0x00008000 + O_PATH = 0x00080000 + O_CLOEXEC = 0x00001000 O_EXCL = 0x40 O_GETFL = 0x0F O_LARGEFILE = 0x0400 + O_NDELAY = 0x4 O_NONBLOCK = 0x04 O_RDONLY = 0x02 O_RDWR = 0x03 @@ -248,6 +335,7 @@ const ( AF_IUCV = 17 AF_LAT = 14 AF_LINK = 18 + AF_LOCAL = AF_UNIX // AF_LOCAL is an alias for AF_UNIX AF_MAX = 30 AF_NBS = 7 AF_NDD = 23 @@ -285,15 +373,33 @@ const ( RLIMIT_AS = 5 RLIMIT_NOFILE = 6 RLIMIT_MEMLIMIT = 7 + RLIMIT_MEMLOCK = 0x8 RLIM_INFINITY = 2147483647 + SCHED_FIFO = 0x2 + SCM_CREDENTIALS = 0x2 SCM_RIGHTS = 0x01 SF_CLOSE = 0x00000002 SF_REUSE = 0x00000001 + SHM_RND = 0x2 + SHM_RDONLY = 0x1 + SHMLBA = 0x1000 + IPC_STAT = 0x3 + IPC_SET = 0x2 + IPC_RMID = 0x1 + IPC_PRIVATE = 0x0 + IPC_CREAT = 0x1000000 + __IPC_MEGA = 0x4000000 + __IPC_SHAREAS = 0x20000000 + __IPC_BELOWBAR = 0x10000000 + IPC_EXCL = 0x2000000 + __IPC_GIGA = 0x8000000 SHUT_RD = 0 SHUT_RDWR = 2 SHUT_WR = 1 + SOCK_CLOEXEC = 0x00001000 SOCK_CONN_DGRAM = 6 SOCK_DGRAM = 2 + SOCK_NONBLOCK = 0x800 SOCK_RAW = 3 SOCK_RDM = 4 SOCK_SEQPACKET = 5 @@ -378,8 +484,6 @@ const ( S_IFMST = 0x00FF0000 TCP_KEEPALIVE = 0x8 TCP_NODELAY = 0x1 - TCP_INFO = 0xb - TCP_USER_TIMEOUT = 0x1 TIOCGWINSZ = 0x4008a368 TIOCSWINSZ = 0x8008a367 TIOCSBRK = 0x2000a77b @@ -427,7 +531,10 @@ const ( VSUSP = 9 VTIME = 10 WCONTINUED = 0x4 + WEXITED = 0x8 WNOHANG = 0x1 + WNOWAIT = 0x20 + WSTOPPED = 0x10 WUNTRACED = 0x2 _BPX_SWAP = 1 _BPX_NONSWAP = 2 @@ -452,8 +559,28 @@ const ( MADV_FREE = 15 // for Linux compatibility -- no zos semantics MADV_WIPEONFORK = 16 // for Linux compatibility -- no zos semantics MADV_KEEPONFORK = 17 // for Linux compatibility -- no zos semantics - AT_SYMLINK_NOFOLLOW = 1 // for Unix compatibility -- no zos semantics - AT_FDCWD = 2 // for Unix compatibility -- no zos semantics + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x100 + XATTR_CREATE = 0x1 + XATTR_REPLACE = 0x2 + P_PID = 0 + P_PGID = 1 + P_ALL = 2 + PR_SET_NAME = 15 + PR_GET_NAME = 16 + PR_SET_NO_NEW_PRIVS = 38 + PR_GET_NO_NEW_PRIVS = 39 + PR_SET_DUMPABLE = 4 + PR_GET_DUMPABLE = 3 + PR_SET_PDEATHSIG = 1 + PR_GET_PDEATHSIG = 2 + PR_SET_CHILD_SUBREAPER = 36 + PR_GET_CHILD_SUBREAPER = 37 + AT_FDCWD = -100 + AT_EACCESS = 0x200 + AT_EMPTY_PATH = 0x1000 + AT_REMOVEDIR = 0x200 + RENAME_NOREPLACE = 1 << 0 ) const ( @@ -476,6 +603,7 @@ const ( EMLINK = Errno(125) ENAMETOOLONG = Errno(126) ENFILE = Errno(127) + ENOATTR = Errno(265) ENODEV = Errno(128) ENOENT = Errno(129) ENOEXEC = Errno(130) @@ -700,7 +828,7 @@ var errorList = [...]struct { {145, "EDC5145I", "The parameter list is too long, or the message to receive was too large for the buffer."}, {146, "EDC5146I", "Too many levels of symbolic links."}, {147, "EDC5147I", "Illegal byte sequence."}, - {148, "", ""}, + {148, "EDC5148I", "The named attribute or data not available."}, {149, "EDC5149I", "Value Overflow Error."}, {150, "EDC5150I", "UNIX System Services is not active."}, {151, "EDC5151I", "Dynamic allocation error."}, @@ -743,6 +871,7 @@ var errorList = [...]struct { {259, "EDC5259I", "A CUN_RS_NO_CONVERSION error was issued by Unicode Services."}, {260, "EDC5260I", "A CUN_RS_TABLE_NOT_ALIGNED error was issued by Unicode Services."}, {262, "EDC5262I", "An iconv() function encountered an unexpected error while using Unicode Services."}, + {265, "EDC5265I", "The named attribute not available."}, {1000, "EDC8000I", "A bad socket-call constant was found in the IUCV header."}, {1001, "EDC8001I", "An error was found in the IUCV header."}, {1002, "EDC8002I", "A socket descriptor is out of range."}, diff --git a/vendor/golang.org/x/sys/unix/zsymaddr_zos_s390x.s b/vendor/golang.org/x/sys/unix/zsymaddr_zos_s390x.s new file mode 100644 index 00000000000..b77ff5db90d --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsymaddr_zos_s390x.s @@ -0,0 +1,364 @@ +// go run mksyscall_zos_s390x.go -o_sysnum zsysnum_zos_s390x.go -o_syscall zsyscall_zos_s390x.go -i_syscall syscall_zos_s390x.go -o_asm zsymaddr_zos_s390x.s +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build zos && s390x +#include "textflag.h" + +// provide the address of function variable to be fixed up. + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_FlistxattrAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·Flistxattr(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_FremovexattrAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·Fremovexattr(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_FgetxattrAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·Fgetxattr(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_FsetxattrAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·Fsetxattr(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_accept4Addr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·accept4(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_RemovexattrAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·Removexattr(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_Dup3Addr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·Dup3(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_DirfdAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·Dirfd(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_EpollCreateAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·EpollCreate(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_EpollCreate1Addr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·EpollCreate1(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_EpollCtlAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·EpollCtl(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_EpollPwaitAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·EpollPwait(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_EpollWaitAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·EpollWait(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_EventfdAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·Eventfd(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_FaccessatAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·Faccessat(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_FchmodatAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·Fchmodat(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_FchownatAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·Fchownat(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_FdatasyncAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·Fdatasync(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_fstatatAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·fstatat(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_LgetxattrAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·Lgetxattr(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_LsetxattrAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·Lsetxattr(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_FstatfsAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·Fstatfs(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_FutimesAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·Futimes(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_FutimesatAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·Futimesat(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_GetrandomAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·Getrandom(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_InotifyInitAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·InotifyInit(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_InotifyInit1Addr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·InotifyInit1(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_InotifyAddWatchAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·InotifyAddWatch(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_InotifyRmWatchAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·InotifyRmWatch(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_ListxattrAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·Listxattr(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_LlistxattrAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·Llistxattr(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_LremovexattrAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·Lremovexattr(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_LutimesAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·Lutimes(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_StatfsAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·Statfs(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_SyncfsAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·Syncfs(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_UnshareAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·Unshare(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_LinkatAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·Linkat(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_MkdiratAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·Mkdirat(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_MknodatAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·Mknodat(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_PivotRootAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·PivotRoot(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_PrctlAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·Prctl(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_PrlimitAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·Prlimit(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_RenameatAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·Renameat(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_Renameat2Addr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·Renameat2(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_SethostnameAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·Sethostname(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_SetnsAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·Setns(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_SymlinkatAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·Symlinkat(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_UnlinkatAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·Unlinkat(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_openatAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·openat(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_openat2Addr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·openat2(SB), R8 + MOVD R8, ret+0(FP) + RET + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +TEXT ·get_utimensatAddr(SB), NOSPLIT|NOFRAME, $0-8 + MOVD $·utimensat(SB), R8 + MOVD R8, ret+0(FP) + RET diff --git a/vendor/golang.org/x/sys/unix/zsyscall_zos_s390x.go b/vendor/golang.org/x/sys/unix/zsyscall_zos_s390x.go index 94f01123831..7ccf66b7ee0 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_zos_s390x.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_zos_s390x.go @@ -1,4 +1,4 @@ -// go run mksyscall.go -tags zos,s390x syscall_zos_s390x.go +// go run mksyscall_zos_s390x.go -o_sysnum zsysnum_zos_s390x.go -o_syscall zsyscall_zos_s390x.go -i_syscall syscall_zos_s390x.go -o_asm zsymaddr_zos_s390x.s // Code generated by the command above; see README.md. DO NOT EDIT. //go:build zos && s390x @@ -6,17 +6,100 @@ package unix import ( + "runtime" + "syscall" "unsafe" ) +var _ syscall.Errno + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func fcntl(fd int, cmd int, arg int) (val int, err error) { - r0, _, e1 := syscall_syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_FCNTL<<4, uintptr(fd), uintptr(cmd), uintptr(arg)) + runtime.ExitSyscall() val = int(r0) - if e1 != 0 { - err = errnoErr(e1) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func impl_Flistxattr(fd int, dest []byte) (sz int, err error) { + var _p0 unsafe.Pointer + if len(dest) > 0 { + _p0 = unsafe.Pointer(&dest[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___FLISTXATTR_A<<4, uintptr(fd), uintptr(_p0), uintptr(len(dest))) + runtime.ExitSyscall() + sz = int(r0) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +//go:nosplit +func get_FlistxattrAddr() *(func(fd int, dest []byte) (sz int, err error)) + +var Flistxattr = enter_Flistxattr + +func enter_Flistxattr(fd int, dest []byte) (sz int, err error) { + funcref := get_FlistxattrAddr() + if funcptrtest(GetZosLibVec()+SYS___FLISTXATTR_A<<4, "") == 0 { + *funcref = impl_Flistxattr + } else { + *funcref = error_Flistxattr + } + return (*funcref)(fd, dest) +} + +func error_Flistxattr(fd int, dest []byte) (sz int, err error) { + sz = -1 + err = ENOSYS + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func impl_Fremovexattr(fd int, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___FREMOVEXATTR_A<<4, uintptr(fd), uintptr(unsafe.Pointer(_p0))) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +//go:nosplit +func get_FremovexattrAddr() *(func(fd int, attr string) (err error)) + +var Fremovexattr = enter_Fremovexattr + +func enter_Fremovexattr(fd int, attr string) (err error) { + funcref := get_FremovexattrAddr() + if funcptrtest(GetZosLibVec()+SYS___FREMOVEXATTR_A<<4, "") == 0 { + *funcref = impl_Fremovexattr + } else { + *funcref = error_Fremovexattr } + return (*funcref)(fd, attr) +} + +func error_Fremovexattr(fd int, attr string) (err error) { + err = ENOSYS return } @@ -29,10 +112,12 @@ func read(fd int, p []byte) (n int, err error) { } else { _p0 = unsafe.Pointer(&_zero) } - r0, _, e1 := syscall_syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_READ<<4, uintptr(fd), uintptr(_p0), uintptr(len(p))) + runtime.ExitSyscall() n = int(r0) - if e1 != 0 { - err = errnoErr(e1) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } @@ -46,31 +131,159 @@ func write(fd int, p []byte) (n int, err error) { } else { _p0 = unsafe.Pointer(&_zero) } - r0, _, e1 := syscall_syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_WRITE<<4, uintptr(fd), uintptr(_p0), uintptr(len(p))) + runtime.ExitSyscall() n = int(r0) - if e1 != 0 { - err = errnoErr(e1) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func impl_Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___FGETXATTR_A<<4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + runtime.ExitSyscall() + sz = int(r0) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +//go:nosplit +func get_FgetxattrAddr() *(func(fd int, attr string, dest []byte) (sz int, err error)) + +var Fgetxattr = enter_Fgetxattr + +func enter_Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) { + funcref := get_FgetxattrAddr() + if funcptrtest(GetZosLibVec()+SYS___FGETXATTR_A<<4, "") == 0 { + *funcref = impl_Fgetxattr + } else { + *funcref = error_Fgetxattr + } + return (*funcref)(fd, attr, dest) +} + +func error_Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) { + sz = -1 + err = ENOSYS + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func impl_Fsetxattr(fd int, attr string, data []byte, flag int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(data) > 0 { + _p1 = unsafe.Pointer(&data[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___FSETXATTR_A<<4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(data)), uintptr(flag)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +//go:nosplit +func get_FsetxattrAddr() *(func(fd int, attr string, data []byte, flag int) (err error)) + +var Fsetxattr = enter_Fsetxattr + +func enter_Fsetxattr(fd int, attr string, data []byte, flag int) (err error) { + funcref := get_FsetxattrAddr() + if funcptrtest(GetZosLibVec()+SYS___FSETXATTR_A<<4, "") == 0 { + *funcref = impl_Fsetxattr + } else { + *funcref = error_Fsetxattr } + return (*funcref)(fd, attr, data, flag) +} + +func error_Fsetxattr(fd int, attr string, data []byte, flag int) (err error) { + err = ENOSYS return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { - r0, _, e1 := syscall_syscall(SYS___ACCEPT_A, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___ACCEPT_A<<4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + runtime.ExitSyscall() + fd = int(r0) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func impl_accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___ACCEPT4_A<<4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags)) + runtime.ExitSyscall() fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +//go:nosplit +func get_accept4Addr() *(func(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)) + +var accept4 = enter_accept4 + +func enter_accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + funcref := get_accept4Addr() + if funcptrtest(GetZosLibVec()+SYS___ACCEPT4_A<<4, "") == 0 { + *funcref = impl_accept4 + } else { + *funcref = error_accept4 } + return (*funcref)(s, rsa, addrlen, flags) +} + +func error_accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + fd = -1 + err = ENOSYS return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := syscall_syscall(SYS___BIND_A, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___BIND_A<<4, uintptr(s), uintptr(addr), uintptr(addrlen)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } @@ -78,9 +291,11 @@ func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := syscall_syscall(SYS___CONNECT_A, uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___CONNECT_A<<4, uintptr(s), uintptr(addr), uintptr(addrlen)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } @@ -88,10 +303,10 @@ func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func getgroups(n int, list *_Gid_t) (nn int, err error) { - r0, _, e1 := syscall_rawsyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_GETGROUPS<<4, uintptr(n), uintptr(unsafe.Pointer(list))) nn = int(r0) - if e1 != 0 { - err = errnoErr(e1) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } @@ -99,9 +314,9 @@ func getgroups(n int, list *_Gid_t) (nn int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func setgroups(n int, list *_Gid_t) (err error) { - _, _, e1 := syscall_rawsyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) - if e1 != 0 { - err = errnoErr(e1) + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SETGROUPS<<4, uintptr(n), uintptr(unsafe.Pointer(list))) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } @@ -109,9 +324,11 @@ func setgroups(n int, list *_Gid_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { - _, _, e1 := syscall_syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) - if e1 != 0 { - err = errnoErr(e1) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_GETSOCKOPT<<4, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen))) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } @@ -119,9 +336,11 @@ func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { - _, _, e1 := syscall_syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) - if e1 != 0 { - err = errnoErr(e1) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SETSOCKOPT<<4, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } @@ -129,10 +348,10 @@ func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func socket(domain int, typ int, proto int) (fd int, err error) { - r0, _, e1 := syscall_rawsyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SOCKET<<4, uintptr(domain), uintptr(typ), uintptr(proto)) fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } @@ -140,9 +359,9 @@ func socket(domain int, typ int, proto int) (fd int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { - _, _, e1 := syscall_rawsyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SOCKETPAIR<<4, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd))) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } @@ -150,9 +369,9 @@ func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := syscall_rawsyscall(SYS___GETPEERNAME_A, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___GETPEERNAME_A<<4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } @@ -160,10 +379,52 @@ func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := syscall_rawsyscall(SYS___GETSOCKNAME_A, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___GETSOCKNAME_A<<4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func impl_Removexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___REMOVEXATTR_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1))) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +//go:nosplit +func get_RemovexattrAddr() *(func(path string, attr string) (err error)) + +var Removexattr = enter_Removexattr + +func enter_Removexattr(path string, attr string) (err error) { + funcref := get_RemovexattrAddr() + if funcptrtest(GetZosLibVec()+SYS___REMOVEXATTR_A<<4, "") == 0 { + *funcref = impl_Removexattr + } else { + *funcref = error_Removexattr } + return (*funcref)(path, attr) +} + +func error_Removexattr(path string, attr string) (err error) { + err = ENOSYS return } @@ -176,10 +437,12 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl } else { _p0 = unsafe.Pointer(&_zero) } - r0, _, e1 := syscall_syscall6(SYS___RECVFROM_A, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___RECVFROM_A<<4, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + runtime.ExitSyscall() n = int(r0) - if e1 != 0 { - err = errnoErr(e1) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } @@ -193,9 +456,11 @@ func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) ( } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := syscall_syscall6(SYS___SENDTO_A, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___SENDTO_A<<4, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } @@ -203,10 +468,12 @@ func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) ( // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := syscall_syscall(SYS___RECVMSG_A, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___RECVMSG_A<<4, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + runtime.ExitSyscall() n = int(r0) - if e1 != 0 { - err = errnoErr(e1) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } @@ -214,10 +481,12 @@ func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := syscall_syscall(SYS___SENDMSG_A, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___SENDMSG_A<<4, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + runtime.ExitSyscall() n = int(r0) - if e1 != 0 { - err = errnoErr(e1) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } @@ -225,10 +494,12 @@ func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { - r0, _, e1 := syscall_syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos)) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_MMAP<<4, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos)) + runtime.ExitSyscall() ret = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } @@ -236,9 +507,11 @@ func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) ( // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func munmap(addr uintptr, length uintptr) (err error) { - _, _, e1 := syscall_syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_MUNMAP<<4, uintptr(addr), uintptr(length)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } @@ -246,9 +519,11 @@ func munmap(addr uintptr, length uintptr) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func ioctl(fd int, req int, arg uintptr) (err error) { - _, _, e1 := syscall_syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) - if e1 != 0 { - err = errnoErr(e1) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_IOCTL<<4, uintptr(fd), uintptr(req), uintptr(arg)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } @@ -256,9 +531,62 @@ func ioctl(fd int, req int, arg uintptr) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func ioctlPtr(fd int, req int, arg unsafe.Pointer) (err error) { - _, _, e1 := syscall_syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) - if e1 != 0 { - err = errnoErr(e1) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_IOCTL<<4, uintptr(fd), uintptr(req), uintptr(arg)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func shmat(id int, addr uintptr, flag int) (ret uintptr, err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SHMAT<<4, uintptr(id), uintptr(addr), uintptr(flag)) + runtime.ExitSyscall() + ret = uintptr(r0) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func shmctl(id int, cmd int, buf *SysvShmDesc) (result int, err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SHMCTL64<<4, uintptr(id), uintptr(cmd), uintptr(unsafe.Pointer(buf))) + runtime.ExitSyscall() + result = int(r0) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func shmdt(addr uintptr) (err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SHMDT<<4, uintptr(addr)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func shmget(key int, size int, flag int) (id int, err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SHMGET<<4, uintptr(key), uintptr(size), uintptr(flag)) + runtime.ExitSyscall() + id = int(r0) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } @@ -271,9 +599,11 @@ func Access(path string, mode uint32) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(SYS___ACCESS_A, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___ACCESS_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } @@ -286,9 +616,11 @@ func Chdir(path string) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(SYS___CHDIR_A, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___CHDIR_A<<4, uintptr(unsafe.Pointer(_p0))) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } @@ -301,9 +633,11 @@ func Chown(path string, uid int, gid int) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(SYS___CHOWN_A, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___CHOWN_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } @@ -316,9 +650,11 @@ func Chmod(path string, mode uint32) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(SYS___CHMOD_A, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___CHMOD_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } @@ -331,10 +667,12 @@ func Creat(path string, mode uint32) (fd int, err error) { if err != nil { return } - r0, _, e1 := syscall_syscall(SYS___CREAT_A, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___CREAT_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + runtime.ExitSyscall() fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } @@ -342,10 +680,12 @@ func Creat(path string, mode uint32) (fd int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Dup(oldfd int) (fd int, err error) { - r0, _, e1 := syscall_syscall(SYS_DUP, uintptr(oldfd), 0, 0) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_DUP<<4, uintptr(oldfd)) + runtime.ExitSyscall() fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } @@ -353,617 +693,2216 @@ func Dup(oldfd int) (fd int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Dup2(oldfd int, newfd int) (err error) { - _, _, e1 := syscall_syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) - if e1 != 0 { - err = errnoErr(e1) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_DUP2<<4, uintptr(oldfd), uintptr(newfd)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Errno2() (er2 int) { - uer2, _, _ := syscall_syscall(SYS___ERRNO2, 0, 0, 0) - er2 = int(uer2) +func impl_Dup3(oldfd int, newfd int, flags int) (err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_DUP3<<4, uintptr(oldfd), uintptr(newfd), uintptr(flags)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } return } -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +//go:nosplit +func get_Dup3Addr() *(func(oldfd int, newfd int, flags int) (err error)) -func Err2ad() (eadd *int) { - ueadd, _, _ := syscall_syscall(SYS___ERR2AD, 0, 0, 0) - eadd = (*int)(unsafe.Pointer(ueadd)) - return -} +var Dup3 = enter_Dup3 -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func enter_Dup3(oldfd int, newfd int, flags int) (err error) { + funcref := get_Dup3Addr() + if funcptrtest(GetZosLibVec()+SYS_DUP3<<4, "") == 0 { + *funcref = impl_Dup3 + } else { + *funcref = error_Dup3 + } + return (*funcref)(oldfd, newfd, flags) +} -func Exit(code int) { - syscall_syscall(SYS_EXIT, uintptr(code), 0, 0) +func error_Dup3(oldfd int, newfd int, flags int) (err error) { + err = ENOSYS return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Fchdir(fd int) (err error) { - _, _, e1 := syscall_syscall(SYS_FCHDIR, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) +func impl_Dirfd(dirp uintptr) (fd int, err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_DIRFD<<4, uintptr(dirp)) + runtime.ExitSyscall() + fd = int(r0) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +//go:nosplit +func get_DirfdAddr() *(func(dirp uintptr) (fd int, err error)) -func Fchmod(fd int, mode uint32) (err error) { - _, _, e1 := syscall_syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) +var Dirfd = enter_Dirfd + +func enter_Dirfd(dirp uintptr) (fd int, err error) { + funcref := get_DirfdAddr() + if funcptrtest(GetZosLibVec()+SYS_DIRFD<<4, "") == 0 { + *funcref = impl_Dirfd + } else { + *funcref = error_Dirfd } + return (*funcref)(dirp) +} + +func error_Dirfd(dirp uintptr) (fd int, err error) { + fd = -1 + err = ENOSYS return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Fchown(fd int, uid int, gid int) (err error) { - _, _, e1 := syscall_syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) +func impl_EpollCreate(size int) (fd int, err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_EPOLL_CREATE<<4, uintptr(size)) + runtime.ExitSyscall() + fd = int(r0) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +//go:nosplit +func get_EpollCreateAddr() *(func(size int) (fd int, err error)) -func FcntlInt(fd uintptr, cmd int, arg int) (retval int, err error) { - r0, _, e1 := syscall_syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) - retval = int(r0) - if e1 != 0 { - err = errnoErr(e1) +var EpollCreate = enter_EpollCreate + +func enter_EpollCreate(size int) (fd int, err error) { + funcref := get_EpollCreateAddr() + if funcptrtest(GetZosLibVec()+SYS_EPOLL_CREATE<<4, "") == 0 { + *funcref = impl_EpollCreate + } else { + *funcref = error_EpollCreate } + return (*funcref)(size) +} + +func error_EpollCreate(size int) (fd int, err error) { + fd = -1 + err = ENOSYS return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func fstat(fd int, stat *Stat_LE_t) (err error) { - _, _, e1 := syscall_syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) +func impl_EpollCreate1(flags int) (fd int, err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_EPOLL_CREATE1<<4, uintptr(flags)) + runtime.ExitSyscall() + fd = int(r0) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +//go:nosplit +func get_EpollCreate1Addr() *(func(flags int) (fd int, err error)) -func Fstatvfs(fd int, stat *Statvfs_t) (err error) { - _, _, e1 := syscall_syscall(SYS_FSTATVFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) +var EpollCreate1 = enter_EpollCreate1 + +func enter_EpollCreate1(flags int) (fd int, err error) { + funcref := get_EpollCreate1Addr() + if funcptrtest(GetZosLibVec()+SYS_EPOLL_CREATE1<<4, "") == 0 { + *funcref = impl_EpollCreate1 + } else { + *funcref = error_EpollCreate1 } + return (*funcref)(flags) +} + +func error_EpollCreate1(flags int) (fd int, err error) { + fd = -1 + err = ENOSYS return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Fsync(fd int) (err error) { - _, _, e1 := syscall_syscall(SYS_FSYNC, uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) +func impl_EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_EPOLL_CTL<<4, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event))) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +//go:nosplit +func get_EpollCtlAddr() *(func(epfd int, op int, fd int, event *EpollEvent) (err error)) -func Ftruncate(fd int, length int64) (err error) { - _, _, e1 := syscall_syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) +var EpollCtl = enter_EpollCtl + +func enter_EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + funcref := get_EpollCtlAddr() + if funcptrtest(GetZosLibVec()+SYS_EPOLL_CTL<<4, "") == 0 { + *funcref = impl_EpollCtl + } else { + *funcref = error_EpollCtl } - return + return (*funcref)(epfd, op, fd, event) } -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpagesize() (pgsize int) { - r0, _, _ := syscall_syscall(SYS_GETPAGESIZE, 0, 0, 0) - pgsize = int(r0) +func error_EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + err = ENOSYS return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Mprotect(b []byte, prot int) (err error) { +func impl_EpollPwait(epfd int, events []EpollEvent, msec int, sigmask *int) (n int, err error) { var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := syscall_syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) - if e1 != 0 { - err = errnoErr(e1) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_EPOLL_PWAIT<<4, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), uintptr(unsafe.Pointer(sigmask))) + runtime.ExitSyscall() + n = int(r0) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +//go:nosplit +func get_EpollPwaitAddr() *(func(epfd int, events []EpollEvent, msec int, sigmask *int) (n int, err error)) -func Msync(b []byte, flags int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) +var EpollPwait = enter_EpollPwait + +func enter_EpollPwait(epfd int, events []EpollEvent, msec int, sigmask *int) (n int, err error) { + funcref := get_EpollPwaitAddr() + if funcptrtest(GetZosLibVec()+SYS_EPOLL_PWAIT<<4, "") == 0 { + *funcref = impl_EpollPwait } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) + *funcref = error_EpollPwait } + return (*funcref)(epfd, events, msec, sigmask) +} + +func error_EpollPwait(epfd int, events []EpollEvent, msec int, sigmask *int) (n int, err error) { + n = -1 + err = ENOSYS return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Poll(fds []PollFd, timeout int) (n int, err error) { +func impl_EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { var _p0 unsafe.Pointer - if len(fds) > 0 { - _p0 = unsafe.Pointer(&fds[0]) + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) } else { _p0 = unsafe.Pointer(&_zero) } - r0, _, e1 := syscall_syscall(SYS_POLL, uintptr(_p0), uintptr(len(fds)), uintptr(timeout)) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_EPOLL_WAIT<<4, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec)) + runtime.ExitSyscall() n = int(r0) - if e1 != 0 { - err = errnoErr(e1) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +//go:nosplit +func get_EpollWaitAddr() *(func(epfd int, events []EpollEvent, msec int) (n int, err error)) -func Times(tms *Tms) (ticks uintptr, err error) { - r0, _, e1 := syscall_syscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) - ticks = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) +var EpollWait = enter_EpollWait + +func enter_EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + funcref := get_EpollWaitAddr() + if funcptrtest(GetZosLibVec()+SYS_EPOLL_WAIT<<4, "") == 0 { + *funcref = impl_EpollWait + } else { + *funcref = error_EpollWait } + return (*funcref)(epfd, events, msec) +} + +func error_EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + n = -1 + err = ENOSYS return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func W_Getmntent(buff *byte, size int) (lastsys int, err error) { - r0, _, e1 := syscall_syscall(SYS_W_GETMNTENT, uintptr(unsafe.Pointer(buff)), uintptr(size), 0) - lastsys = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } +func Errno2() (er2 int) { + runtime.EnterSyscall() + r0, _, _ := CallLeFuncWithErr(GetZosLibVec() + SYS___ERRNO2<<4) + runtime.ExitSyscall() + er2 = int(r0) return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func W_Getmntent_A(buff *byte, size int) (lastsys int, err error) { - r0, _, e1 := syscall_syscall(SYS___W_GETMNTENT_A, uintptr(unsafe.Pointer(buff)), uintptr(size), 0) - lastsys = int(r0) - if e1 != 0 { - err = errnoErr(e1) +func impl_Eventfd(initval uint, flags int) (fd int, err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_EVENTFD<<4, uintptr(initval), uintptr(flags)) + runtime.ExitSyscall() + fd = int(r0) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } +//go:nosplit +func get_EventfdAddr() *(func(initval uint, flags int) (fd int, err error)) + +var Eventfd = enter_Eventfd + +func enter_Eventfd(initval uint, flags int) (fd int, err error) { + funcref := get_EventfdAddr() + if funcptrtest(GetZosLibVec()+SYS_EVENTFD<<4, "") == 0 { + *funcref = impl_Eventfd + } else { + *funcref = error_Eventfd + } + return (*funcref)(initval, flags) +} + +func error_Eventfd(initval uint, flags int) (fd int, err error) { + fd = -1 + err = ENOSYS + return +} + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func mount_LE(path string, filesystem string, fstype string, mtm uint32, parmlen int32, parm string) (err error) { +func Exit(code int) { + runtime.EnterSyscall() + CallLeFuncWithErr(GetZosLibVec()+SYS_EXIT<<4, uintptr(code)) + runtime.ExitSyscall() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func impl_Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { return } - var _p1 *byte - _p1, err = BytePtrFromString(filesystem) - if err != nil { - return - } - var _p2 *byte - _p2, err = BytePtrFromString(fstype) - if err != nil { - return - } - var _p3 *byte - _p3, err = BytePtrFromString(parm) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(SYS___MOUNT_A, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(mtm), uintptr(parmlen), uintptr(unsafe.Pointer(_p3))) - if e1 != 0 { - err = errnoErr(e1) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___FACCESSAT_A<<4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +//go:nosplit +func get_FaccessatAddr() *(func(dirfd int, path string, mode uint32, flags int) (err error)) -func unmount(filesystem string, mtm int) (err error) { +var Faccessat = enter_Faccessat + +func enter_Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + funcref := get_FaccessatAddr() + if funcptrtest(GetZosLibVec()+SYS___FACCESSAT_A<<4, "") == 0 { + *funcref = impl_Faccessat + } else { + *funcref = error_Faccessat + } + return (*funcref)(dirfd, path, mode, flags) +} + +func error_Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + err = ENOSYS + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_FCHDIR<<4, uintptr(fd)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_FCHMOD<<4, uintptr(fd), uintptr(mode)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func impl_Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { var _p0 *byte - _p0, err = BytePtrFromString(filesystem) + _p0, err = BytePtrFromString(path) if err != nil { return } - _, _, e1 := syscall_syscall(SYS___UMOUNT_A, uintptr(unsafe.Pointer(_p0)), uintptr(mtm), 0) - if e1 != 0 { - err = errnoErr(e1) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___FCHMODAT_A<<4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +//go:nosplit +func get_FchmodatAddr() *(func(dirfd int, path string, mode uint32, flags int) (err error)) + +var Fchmodat = enter_Fchmodat + +func enter_Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + funcref := get_FchmodatAddr() + if funcptrtest(GetZosLibVec()+SYS___FCHMODAT_A<<4, "") == 0 { + *funcref = impl_Fchmodat + } else { + *funcref = error_Fchmodat + } + return (*funcref)(dirfd, path, mode, flags) +} + +func error_Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + err = ENOSYS + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_FCHOWN<<4, uintptr(fd), uintptr(uid), uintptr(gid)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Chroot(path string) (err error) { +func impl_Fchownat(fd int, path string, uid int, gid int, flags int) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { return } - _, _, e1 := syscall_syscall(SYS___CHROOT_A, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___FCHOWNAT_A<<4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +//go:nosplit +func get_FchownatAddr() *(func(fd int, path string, uid int, gid int, flags int) (err error)) + +var Fchownat = enter_Fchownat + +func enter_Fchownat(fd int, path string, uid int, gid int, flags int) (err error) { + funcref := get_FchownatAddr() + if funcptrtest(GetZosLibVec()+SYS___FCHOWNAT_A<<4, "") == 0 { + *funcref = impl_Fchownat + } else { + *funcref = error_Fchownat } + return (*funcref)(fd, path, uid, gid, flags) +} + +func error_Fchownat(fd int, path string, uid int, gid int, flags int) (err error) { + err = ENOSYS return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Uname(buf *Utsname) (err error) { - _, _, e1 := syscall_rawsyscall(SYS___UNAME_A, uintptr(unsafe.Pointer(buf)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) +func FcntlInt(fd uintptr, cmd int, arg int) (retval int, err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_FCNTL<<4, uintptr(fd), uintptr(cmd), uintptr(arg)) + runtime.ExitSyscall() + retval = int(r0) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Gethostname(buf []byte) (err error) { +func impl_Fdatasync(fd int) (err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_FDATASYNC<<4, uintptr(fd)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +//go:nosplit +func get_FdatasyncAddr() *(func(fd int) (err error)) + +var Fdatasync = enter_Fdatasync + +func enter_Fdatasync(fd int) (err error) { + funcref := get_FdatasyncAddr() + if funcptrtest(GetZosLibVec()+SYS_FDATASYNC<<4, "") == 0 { + *funcref = impl_Fdatasync + } else { + *funcref = error_Fdatasync + } + return (*funcref)(fd) +} + +func error_Fdatasync(fd int) (err error) { + err = ENOSYS + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstat(fd int, stat *Stat_LE_t) (err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_FSTAT<<4, uintptr(fd), uintptr(unsafe.Pointer(stat))) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func impl_fstatat(dirfd int, path string, stat *Stat_LE_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___FSTATAT_A<<4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +//go:nosplit +func get_fstatatAddr() *(func(dirfd int, path string, stat *Stat_LE_t, flags int) (err error)) + +var fstatat = enter_fstatat + +func enter_fstatat(dirfd int, path string, stat *Stat_LE_t, flags int) (err error) { + funcref := get_fstatatAddr() + if funcptrtest(GetZosLibVec()+SYS___FSTATAT_A<<4, "") == 0 { + *funcref = impl_fstatat + } else { + *funcref = error_fstatat + } + return (*funcref)(dirfd, path, stat, flags) +} + +func error_fstatat(dirfd int, path string, stat *Stat_LE_t, flags int) (err error) { + err = ENOSYS + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func impl_Lgetxattr(link string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___LGETXATTR_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest))) + runtime.ExitSyscall() + sz = int(r0) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +//go:nosplit +func get_LgetxattrAddr() *(func(link string, attr string, dest []byte) (sz int, err error)) + +var Lgetxattr = enter_Lgetxattr + +func enter_Lgetxattr(link string, attr string, dest []byte) (sz int, err error) { + funcref := get_LgetxattrAddr() + if funcptrtest(GetZosLibVec()+SYS___LGETXATTR_A<<4, "") == 0 { + *funcref = impl_Lgetxattr + } else { + *funcref = error_Lgetxattr + } + return (*funcref)(link, attr, dest) +} + +func error_Lgetxattr(link string, attr string, dest []byte) (sz int, err error) { + sz = -1 + err = ENOSYS + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func impl_Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___LSETXATTR_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +//go:nosplit +func get_LsetxattrAddr() *(func(path string, attr string, data []byte, flags int) (err error)) + +var Lsetxattr = enter_Lsetxattr + +func enter_Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + funcref := get_LsetxattrAddr() + if funcptrtest(GetZosLibVec()+SYS___LSETXATTR_A<<4, "") == 0 { + *funcref = impl_Lsetxattr + } else { + *funcref = error_Lsetxattr + } + return (*funcref)(path, attr, data, flags) +} + +func error_Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + err = ENOSYS + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func impl_Fstatfs(fd int, buf *Statfs_t) (err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_FSTATFS<<4, uintptr(fd), uintptr(unsafe.Pointer(buf))) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +//go:nosplit +func get_FstatfsAddr() *(func(fd int, buf *Statfs_t) (err error)) + +var Fstatfs = enter_Fstatfs + +func enter_Fstatfs(fd int, buf *Statfs_t) (err error) { + funcref := get_FstatfsAddr() + if funcptrtest(GetZosLibVec()+SYS_FSTATFS<<4, "") == 0 { + *funcref = impl_Fstatfs + } else { + *funcref = error_Fstatfs + } + return (*funcref)(fd, buf) +} + +func error_Fstatfs(fd int, buf *Statfs_t) (err error) { + err = ENOSYS + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatvfs(fd int, stat *Statvfs_t) (err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_FSTATVFS<<4, uintptr(fd), uintptr(unsafe.Pointer(stat))) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_FSYNC<<4, uintptr(fd)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func impl_Futimes(fd int, tv []Timeval) (err error) { var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) + if len(tv) > 0 { + _p0 = unsafe.Pointer(&tv[0]) } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := syscall_syscall(SYS___GETHOSTNAME_A, uintptr(_p0), uintptr(len(buf)), 0) - if e1 != 0 { - err = errnoErr(e1) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_FUTIMES<<4, uintptr(fd), uintptr(_p0), uintptr(len(tv))) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +//go:nosplit +func get_FutimesAddr() *(func(fd int, tv []Timeval) (err error)) -func Getegid() (egid int) { - r0, _, _ := syscall_rawsyscall(SYS_GETEGID, 0, 0, 0) - egid = int(r0) +var Futimes = enter_Futimes + +func enter_Futimes(fd int, tv []Timeval) (err error) { + funcref := get_FutimesAddr() + if funcptrtest(GetZosLibVec()+SYS_FUTIMES<<4, "") == 0 { + *funcref = impl_Futimes + } else { + *funcref = error_Futimes + } + return (*funcref)(fd, tv) +} + +func error_Futimes(fd int, tv []Timeval) (err error) { + err = ENOSYS return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Geteuid() (uid int) { - r0, _, _ := syscall_rawsyscall(SYS_GETEUID, 0, 0, 0) - uid = int(r0) +func impl_Futimesat(dirfd int, path string, tv []Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(tv) > 0 { + _p1 = unsafe.Pointer(&tv[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___FUTIMESAT_A<<4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(tv))) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +//go:nosplit +func get_FutimesatAddr() *(func(dirfd int, path string, tv []Timeval) (err error)) + +var Futimesat = enter_Futimesat + +func enter_Futimesat(dirfd int, path string, tv []Timeval) (err error) { + funcref := get_FutimesatAddr() + if funcptrtest(GetZosLibVec()+SYS___FUTIMESAT_A<<4, "") == 0 { + *funcref = impl_Futimesat + } else { + *funcref = error_Futimesat + } + return (*funcref)(dirfd, path, tv) +} + +func error_Futimesat(dirfd int, path string, tv []Timeval) (err error) { + err = ENOSYS return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Getgid() (gid int) { - r0, _, _ := syscall_rawsyscall(SYS_GETGID, 0, 0, 0) - gid = int(r0) +func Ftruncate(fd int, length int64) (err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_FTRUNCATE<<4, uintptr(fd), uintptr(length)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Getpid() (pid int) { - r0, _, _ := syscall_rawsyscall(SYS_GETPID, 0, 0, 0) - pid = int(r0) +func impl_Getrandom(buf []byte, flags int) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_GETRANDOM<<4, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) + runtime.ExitSyscall() + n = int(r0) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +//go:nosplit +func get_GetrandomAddr() *(func(buf []byte, flags int) (n int, err error)) + +var Getrandom = enter_Getrandom + +func enter_Getrandom(buf []byte, flags int) (n int, err error) { + funcref := get_GetrandomAddr() + if funcptrtest(GetZosLibVec()+SYS_GETRANDOM<<4, "") == 0 { + *funcref = impl_Getrandom + } else { + *funcref = error_Getrandom + } + return (*funcref)(buf, flags) +} + +func error_Getrandom(buf []byte, flags int) (n int, err error) { + n = -1 + err = ENOSYS return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Getpgid(pid int) (pgid int, err error) { - r0, _, e1 := syscall_rawsyscall(SYS_GETPGID, uintptr(pid), 0, 0) - pgid = int(r0) - if e1 != 0 { - err = errnoErr(e1) +func impl_InotifyInit() (fd int, err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec() + SYS_INOTIFY_INIT<<4) + runtime.ExitSyscall() + fd = int(r0) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +//go:nosplit +func get_InotifyInitAddr() *(func() (fd int, err error)) + +var InotifyInit = enter_InotifyInit + +func enter_InotifyInit() (fd int, err error) { + funcref := get_InotifyInitAddr() + if funcptrtest(GetZosLibVec()+SYS_INOTIFY_INIT<<4, "") == 0 { + *funcref = impl_InotifyInit + } else { + *funcref = error_InotifyInit } + return (*funcref)() +} + +func error_InotifyInit() (fd int, err error) { + fd = -1 + err = ENOSYS return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Getppid() (pid int) { - r0, _, _ := syscall_rawsyscall(SYS_GETPPID, 0, 0, 0) - pid = int(r0) +func impl_InotifyInit1(flags int) (fd int, err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_INOTIFY_INIT1<<4, uintptr(flags)) + runtime.ExitSyscall() + fd = int(r0) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +//go:nosplit +func get_InotifyInit1Addr() *(func(flags int) (fd int, err error)) + +var InotifyInit1 = enter_InotifyInit1 + +func enter_InotifyInit1(flags int) (fd int, err error) { + funcref := get_InotifyInit1Addr() + if funcptrtest(GetZosLibVec()+SYS_INOTIFY_INIT1<<4, "") == 0 { + *funcref = impl_InotifyInit1 + } else { + *funcref = error_InotifyInit1 + } + return (*funcref)(flags) +} + +func error_InotifyInit1(flags int) (fd int, err error) { + fd = -1 + err = ENOSYS + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func impl_InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___INOTIFY_ADD_WATCH_A<<4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) + runtime.ExitSyscall() + watchdesc = int(r0) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +//go:nosplit +func get_InotifyAddWatchAddr() *(func(fd int, pathname string, mask uint32) (watchdesc int, err error)) + +var InotifyAddWatch = enter_InotifyAddWatch + +func enter_InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + funcref := get_InotifyAddWatchAddr() + if funcptrtest(GetZosLibVec()+SYS___INOTIFY_ADD_WATCH_A<<4, "") == 0 { + *funcref = impl_InotifyAddWatch + } else { + *funcref = error_InotifyAddWatch + } + return (*funcref)(fd, pathname, mask) +} + +func error_InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + watchdesc = -1 + err = ENOSYS + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func impl_InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_INOTIFY_RM_WATCH<<4, uintptr(fd), uintptr(watchdesc)) + runtime.ExitSyscall() + success = int(r0) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +//go:nosplit +func get_InotifyRmWatchAddr() *(func(fd int, watchdesc uint32) (success int, err error)) + +var InotifyRmWatch = enter_InotifyRmWatch + +func enter_InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + funcref := get_InotifyRmWatchAddr() + if funcptrtest(GetZosLibVec()+SYS_INOTIFY_RM_WATCH<<4, "") == 0 { + *funcref = impl_InotifyRmWatch + } else { + *funcref = error_InotifyRmWatch + } + return (*funcref)(fd, watchdesc) +} + +func error_InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + success = -1 + err = ENOSYS + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func impl_Listxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___LISTXATTR_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + runtime.ExitSyscall() + sz = int(r0) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +//go:nosplit +func get_ListxattrAddr() *(func(path string, dest []byte) (sz int, err error)) + +var Listxattr = enter_Listxattr + +func enter_Listxattr(path string, dest []byte) (sz int, err error) { + funcref := get_ListxattrAddr() + if funcptrtest(GetZosLibVec()+SYS___LISTXATTR_A<<4, "") == 0 { + *funcref = impl_Listxattr + } else { + *funcref = error_Listxattr + } + return (*funcref)(path, dest) +} + +func error_Listxattr(path string, dest []byte) (sz int, err error) { + sz = -1 + err = ENOSYS + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func impl_Llistxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___LLISTXATTR_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + runtime.ExitSyscall() + sz = int(r0) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +//go:nosplit +func get_LlistxattrAddr() *(func(path string, dest []byte) (sz int, err error)) + +var Llistxattr = enter_Llistxattr + +func enter_Llistxattr(path string, dest []byte) (sz int, err error) { + funcref := get_LlistxattrAddr() + if funcptrtest(GetZosLibVec()+SYS___LLISTXATTR_A<<4, "") == 0 { + *funcref = impl_Llistxattr + } else { + *funcref = error_Llistxattr + } + return (*funcref)(path, dest) +} + +func error_Llistxattr(path string, dest []byte) (sz int, err error) { + sz = -1 + err = ENOSYS + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func impl_Lremovexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___LREMOVEXATTR_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1))) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +//go:nosplit +func get_LremovexattrAddr() *(func(path string, attr string) (err error)) + +var Lremovexattr = enter_Lremovexattr + +func enter_Lremovexattr(path string, attr string) (err error) { + funcref := get_LremovexattrAddr() + if funcptrtest(GetZosLibVec()+SYS___LREMOVEXATTR_A<<4, "") == 0 { + *funcref = impl_Lremovexattr + } else { + *funcref = error_Lremovexattr + } + return (*funcref)(path, attr) +} + +func error_Lremovexattr(path string, attr string) (err error) { + err = ENOSYS + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func impl_Lutimes(path string, tv []Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(tv) > 0 { + _p1 = unsafe.Pointer(&tv[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___LUTIMES_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(tv))) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +//go:nosplit +func get_LutimesAddr() *(func(path string, tv []Timeval) (err error)) + +var Lutimes = enter_Lutimes + +func enter_Lutimes(path string, tv []Timeval) (err error) { + funcref := get_LutimesAddr() + if funcptrtest(GetZosLibVec()+SYS___LUTIMES_A<<4, "") == 0 { + *funcref = impl_Lutimes + } else { + *funcref = error_Lutimes + } + return (*funcref)(path, tv) +} + +func error_Lutimes(path string, tv []Timeval) (err error) { + err = ENOSYS + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_MPROTECT<<4, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_MSYNC<<4, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Console2(cmsg *ConsMsg2, modstr *byte, concmd *uint32) (err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___CONSOLE2<<4, uintptr(unsafe.Pointer(cmsg)), uintptr(unsafe.Pointer(modstr)), uintptr(unsafe.Pointer(concmd))) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Poll(fds []PollFd, timeout int) (n int, err error) { + var _p0 unsafe.Pointer + if len(fds) > 0 { + _p0 = unsafe.Pointer(&fds[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_POLL<<4, uintptr(_p0), uintptr(len(fds)), uintptr(timeout)) + runtime.ExitSyscall() + n = int(r0) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readdir_r(dirp uintptr, entry *direntLE, result **direntLE) (err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___READDIR_R_A<<4, uintptr(dirp), uintptr(unsafe.Pointer(entry)), uintptr(unsafe.Pointer(result))) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func impl_Statfs(path string, buf *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___STATFS_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf))) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +//go:nosplit +func get_StatfsAddr() *(func(path string, buf *Statfs_t) (err error)) + +var Statfs = enter_Statfs + +func enter_Statfs(path string, buf *Statfs_t) (err error) { + funcref := get_StatfsAddr() + if funcptrtest(GetZosLibVec()+SYS___STATFS_A<<4, "") == 0 { + *funcref = impl_Statfs + } else { + *funcref = error_Statfs + } + return (*funcref)(path, buf) +} + +func error_Statfs(path string, buf *Statfs_t) (err error) { + err = ENOSYS + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func impl_Syncfs(fd int) (err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SYNCFS<<4, uintptr(fd)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +//go:nosplit +func get_SyncfsAddr() *(func(fd int) (err error)) + +var Syncfs = enter_Syncfs + +func enter_Syncfs(fd int) (err error) { + funcref := get_SyncfsAddr() + if funcptrtest(GetZosLibVec()+SYS_SYNCFS<<4, "") == 0 { + *funcref = impl_Syncfs + } else { + *funcref = error_Syncfs + } + return (*funcref)(fd) +} + +func error_Syncfs(fd int) (err error) { + err = ENOSYS + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_TIMES<<4, uintptr(unsafe.Pointer(tms))) + runtime.ExitSyscall() + ticks = uintptr(r0) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func W_Getmntent(buff *byte, size int) (lastsys int, err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_W_GETMNTENT<<4, uintptr(unsafe.Pointer(buff)), uintptr(size)) + runtime.ExitSyscall() + lastsys = int(r0) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func W_Getmntent_A(buff *byte, size int) (lastsys int, err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___W_GETMNTENT_A<<4, uintptr(unsafe.Pointer(buff)), uintptr(size)) + runtime.ExitSyscall() + lastsys = int(r0) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount_LE(path string, filesystem string, fstype string, mtm uint32, parmlen int32, parm string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(filesystem) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + var _p3 *byte + _p3, err = BytePtrFromString(parm) + if err != nil { + return + } + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___MOUNT_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(mtm), uintptr(parmlen), uintptr(unsafe.Pointer(_p3))) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func unmount_LE(filesystem string, mtm int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(filesystem) + if err != nil { + return + } + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___UMOUNT_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(mtm)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___CHROOT_A<<4, uintptr(unsafe.Pointer(_p0))) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nmsgsfds int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (ret int, err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SELECT<<4, uintptr(nmsgsfds), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout))) + runtime.ExitSyscall() + ret = int(r0) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_____OSNAME_A<<4, uintptr(unsafe.Pointer(buf))) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func impl_Unshare(flags int) (err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_UNSHARE<<4, uintptr(flags)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +//go:nosplit +func get_UnshareAddr() *(func(flags int) (err error)) + +var Unshare = enter_Unshare + +func enter_Unshare(flags int) (err error) { + funcref := get_UnshareAddr() + if funcptrtest(GetZosLibVec()+SYS_UNSHARE<<4, "") == 0 { + *funcref = impl_Unshare + } else { + *funcref = error_Unshare + } + return (*funcref)(flags) +} + +func error_Unshare(flags int) (err error) { + err = ENOSYS + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gethostname(buf []byte) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___GETHOSTNAME_A<<4, uintptr(_p0), uintptr(len(buf))) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := CallLeFuncWithErr(GetZosLibVec() + SYS_GETGID<<4) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := CallLeFuncWithErr(GetZosLibVec() + SYS_GETPID<<4) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_GETPGID<<4, uintptr(pid)) + pgid = int(r0) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (pid int) { + r0, _, _ := CallLeFuncWithErr(GetZosLibVec() + SYS_GETPPID<<4) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_GETPRIORITY<<4, uintptr(which), uintptr(who)) + runtime.ExitSyscall() + prio = int(r0) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_GETRLIMIT<<4, uintptr(resource), uintptr(unsafe.Pointer(rlim))) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getrusage(who int, rusage *rusage_zos) (err error) { + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_GETRUSAGE<<4, uintptr(who), uintptr(unsafe.Pointer(rusage))) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + runtime.EnterSyscall() + r0, _, _ := CallLeFuncWithErr(GetZosLibVec() + SYS_GETEGID<<4) + runtime.ExitSyscall() + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + runtime.EnterSyscall() + r0, _, _ := CallLeFuncWithErr(GetZosLibVec() + SYS_GETEUID<<4) + runtime.ExitSyscall() + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_GETSID<<4, uintptr(pid)) + sid = int(r0) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := CallLeFuncWithErr(GetZosLibVec() + SYS_GETUID<<4) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig Signal) (err error) { + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_KILL<<4, uintptr(pid), uintptr(sig)) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___LCHOWN_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___LINK_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1))) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func impl_Linkat(oldDirFd int, oldPath string, newDirFd int, newPath string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldPath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newPath) + if err != nil { + return + } + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___LINKAT_A<<4, uintptr(oldDirFd), uintptr(unsafe.Pointer(_p0)), uintptr(newDirFd), uintptr(unsafe.Pointer(_p1)), uintptr(flags)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +//go:nosplit +func get_LinkatAddr() *(func(oldDirFd int, oldPath string, newDirFd int, newPath string, flags int) (err error)) + +var Linkat = enter_Linkat + +func enter_Linkat(oldDirFd int, oldPath string, newDirFd int, newPath string, flags int) (err error) { + funcref := get_LinkatAddr() + if funcptrtest(GetZosLibVec()+SYS___LINKAT_A<<4, "") == 0 { + *funcref = impl_Linkat + } else { + *funcref = error_Linkat + } + return (*funcref)(oldDirFd, oldPath, newDirFd, newPath, flags) +} + +func error_Linkat(oldDirFd int, oldPath string, newDirFd int, newPath string, flags int) (err error) { + err = ENOSYS + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_LISTEN<<4, uintptr(s), uintptr(n)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func lstat(path string, stat *Stat_LE_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___LSTAT_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat))) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___MKDIR_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func impl_Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___MKDIRAT_A<<4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +//go:nosplit +func get_MkdiratAddr() *(func(dirfd int, path string, mode uint32) (err error)) + +var Mkdirat = enter_Mkdirat + +func enter_Mkdirat(dirfd int, path string, mode uint32) (err error) { + funcref := get_MkdiratAddr() + if funcptrtest(GetZosLibVec()+SYS___MKDIRAT_A<<4, "") == 0 { + *funcref = impl_Mkdirat + } else { + *funcref = error_Mkdirat + } + return (*funcref)(dirfd, path, mode) +} + +func error_Mkdirat(dirfd int, path string, mode uint32) (err error) { + err = ENOSYS + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___MKFIFO_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___MKNOD_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func impl_Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___MKNODAT_A<<4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +//go:nosplit +func get_MknodatAddr() *(func(dirfd int, path string, mode uint32, dev int) (err error)) + +var Mknodat = enter_Mknodat + +func enter_Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + funcref := get_MknodatAddr() + if funcptrtest(GetZosLibVec()+SYS___MKNODAT_A<<4, "") == 0 { + *funcref = impl_Mknodat + } else { + *funcref = error_Mknodat + } + return (*funcref)(dirfd, path, mode, dev) +} + +func error_Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + err = ENOSYS + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func impl_PivotRoot(newroot string, oldroot string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(newroot) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(oldroot) + if err != nil { + return + } + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___PIVOT_ROOT_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1))) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +//go:nosplit +func get_PivotRootAddr() *(func(newroot string, oldroot string) (err error)) + +var PivotRoot = enter_PivotRoot + +func enter_PivotRoot(newroot string, oldroot string) (err error) { + funcref := get_PivotRootAddr() + if funcptrtest(GetZosLibVec()+SYS___PIVOT_ROOT_A<<4, "") == 0 { + *funcref = impl_PivotRoot + } else { + *funcref = error_PivotRoot + } + return (*funcref)(newroot, oldroot) +} + +func error_PivotRoot(newroot string, oldroot string) (err error) { + err = ENOSYS + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_PREAD<<4, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset)) + runtime.ExitSyscall() + n = int(r0) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Getpriority(which int, who int) (prio int, err error) { - r0, _, e1 := syscall_syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) - prio = int(r0) - if e1 != 0 { - err = errnoErr(e1) +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_PWRITE<<4, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset)) + runtime.ExitSyscall() + n = int(r0) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Getrlimit(resource int, rlim *Rlimit) (err error) { - _, _, e1 := syscall_rawsyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) - if e1 != 0 { - err = errnoErr(e1) +func impl_Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___PRCTL_A<<4, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +//go:nosplit +func get_PrctlAddr() *(func(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error)) -func getrusage(who int, rusage *rusage_zos) (err error) { - _, _, e1 := syscall_rawsyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) - if e1 != 0 { - err = errnoErr(e1) +var Prctl = enter_Prctl + +func enter_Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + funcref := get_PrctlAddr() + if funcptrtest(GetZosLibVec()+SYS___PRCTL_A<<4, "") == 0 { + *funcref = impl_Prctl + } else { + *funcref = error_Prctl } - return + return (*funcref)(option, arg2, arg3, arg4, arg5) } -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getsid(pid int) (sid int, err error) { - r0, _, e1 := syscall_rawsyscall(SYS_GETSID, uintptr(pid), 0, 0) - sid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } +func error_Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + err = ENOSYS return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Getuid() (uid int) { - r0, _, _ := syscall_rawsyscall(SYS_GETUID, 0, 0, 0) - uid = int(r0) +func impl_Prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) { + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_PRLIMIT<<4, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old))) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } return } -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +//go:nosplit +func get_PrlimitAddr() *(func(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error)) -func Kill(pid int, sig Signal) (err error) { - _, _, e1 := syscall_rawsyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) - if e1 != 0 { - err = errnoErr(e1) +var Prlimit = enter_Prlimit + +func enter_Prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) { + funcref := get_PrlimitAddr() + if funcptrtest(GetZosLibVec()+SYS_PRLIMIT<<4, "") == 0 { + *funcref = impl_Prlimit + } else { + *funcref = error_Prlimit } + return (*funcref)(pid, resource, newlimit, old) +} + +func error_Prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) { + err = ENOSYS return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Lchown(path string, uid int, gid int) (err error) { +func Rename(from string, to string) (err error) { var _p0 *byte - _p0, err = BytePtrFromString(path) + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) if err != nil { return } - _, _, e1 := syscall_syscall(SYS___LCHOWN_A, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___RENAME_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1))) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Link(path string, link string) (err error) { +func impl_Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { var _p0 *byte - _p0, err = BytePtrFromString(path) + _p0, err = BytePtrFromString(oldpath) if err != nil { return } var _p1 *byte - _p1, err = BytePtrFromString(link) + _p1, err = BytePtrFromString(newpath) if err != nil { return } - _, _, e1 := syscall_syscall(SYS___LINK_A, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___RENAMEAT_A<<4, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +//go:nosplit +func get_RenameatAddr() *(func(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)) -func Listen(s int, n int) (err error) { - _, _, e1 := syscall_syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) - if e1 != 0 { - err = errnoErr(e1) +var Renameat = enter_Renameat + +func enter_Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + funcref := get_RenameatAddr() + if funcptrtest(GetZosLibVec()+SYS___RENAMEAT_A<<4, "") == 0 { + *funcref = impl_Renameat + } else { + *funcref = error_Renameat } + return (*funcref)(olddirfd, oldpath, newdirfd, newpath) +} + +func error_Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + err = ENOSYS return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func lstat(path string, stat *Stat_LE_t) (err error) { +func impl_Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) { var _p0 *byte - _p0, err = BytePtrFromString(path) + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) if err != nil { return } - _, _, e1 := syscall_syscall(SYS___LSTAT_A, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___RENAMEAT2_A<<4, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +//go:nosplit +func get_Renameat2Addr() *(func(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error)) -func Mkdir(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(SYS___MKDIR_A, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) +var Renameat2 = enter_Renameat2 + +func enter_Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) { + funcref := get_Renameat2Addr() + if funcptrtest(GetZosLibVec()+SYS___RENAMEAT2_A<<4, "") == 0 { + *funcref = impl_Renameat2 + } else { + *funcref = error_Renameat2 } + return (*funcref)(olddirfd, oldpath, newdirfd, newpath, flags) +} + +func error_Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) { + err = ENOSYS return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Mkfifo(path string, mode uint32) (err error) { +func Rmdir(path string) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { return } - _, _, e1 := syscall_syscall(SYS___MKFIFO_A, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___RMDIR_A<<4, uintptr(unsafe.Pointer(_p0))) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Mknod(path string, mode uint32, dev int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(SYS___MKNOD_A, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) - if e1 != 0 { - err = errnoErr(e1) +func Seek(fd int, offset int64, whence int) (off int64, err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_LSEEK<<4, uintptr(fd), uintptr(offset), uintptr(whence)) + runtime.ExitSyscall() + off = int64(r0) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pread(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) +func Setegid(egid int) (err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SETEGID<<4, uintptr(egid)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } - r0, _, e1 := syscall_syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SETEUID<<4, uintptr(euid)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pwrite(fd int, p []byte, offset int64) (n int, err error) { +func impl_Sethostname(p []byte) (err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) } else { _p0 = unsafe.Pointer(&_zero) } - r0, _, e1 := syscall_syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___SETHOSTNAME_A<<4, uintptr(_p0), uintptr(len(p))) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +//go:nosplit +func get_SethostnameAddr() *(func(p []byte) (err error)) -func Readlink(path string, buf []byte) (n int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 unsafe.Pointer - if len(buf) > 0 { - _p1 = unsafe.Pointer(&buf[0]) +var Sethostname = enter_Sethostname + +func enter_Sethostname(p []byte) (err error) { + funcref := get_SethostnameAddr() + if funcptrtest(GetZosLibVec()+SYS___SETHOSTNAME_A<<4, "") == 0 { + *funcref = impl_Sethostname } else { - _p1 = unsafe.Pointer(&_zero) + *funcref = error_Sethostname } - r0, _, e1 := syscall_syscall(SYS___READLINK_A, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return + return (*funcref)(p) } -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Rename(from string, to string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(from) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(to) - if err != nil { - return - } - _, _, e1 := syscall_syscall(SYS___RENAME_A, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } +func error_Sethostname(p []byte) (err error) { + err = ENOSYS return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Rmdir(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(SYS___RMDIR_A, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) +func impl_Setns(fd int, nstype int) (err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SETNS<<4, uintptr(fd), uintptr(nstype)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +//go:nosplit +func get_SetnsAddr() *(func(fd int, nstype int) (err error)) -func Seek(fd int, offset int64, whence int) (off int64, err error) { - r0, _, e1 := syscall_syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) - off = int64(r0) - if e1 != 0 { - err = errnoErr(e1) +var Setns = enter_Setns + +func enter_Setns(fd int, nstype int) (err error) { + funcref := get_SetnsAddr() + if funcptrtest(GetZosLibVec()+SYS_SETNS<<4, "") == 0 { + *funcref = impl_Setns + } else { + *funcref = error_Setns } + return (*funcref)(fd, nstype) +} + +func error_Setns(fd int, nstype int) (err error) { + err = ENOSYS return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setpriority(which int, who int, prio int) (err error) { - _, _, e1 := syscall_syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) - if e1 != 0 { - err = errnoErr(e1) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SETPRIORITY<<4, uintptr(which), uintptr(who), uintptr(prio)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } @@ -971,9 +2910,9 @@ func Setpriority(which int, who int, prio int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setpgid(pid int, pgid int) (err error) { - _, _, e1 := syscall_rawsyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) - if e1 != 0 { - err = errnoErr(e1) + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SETPGID<<4, uintptr(pid), uintptr(pgid)) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } @@ -981,9 +2920,9 @@ func Setpgid(pid int, pgid int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setrlimit(resource int, lim *Rlimit) (err error) { - _, _, e1 := syscall_rawsyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SETRLIMIT<<4, uintptr(resource), uintptr(unsafe.Pointer(lim))) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } @@ -991,9 +2930,9 @@ func Setrlimit(resource int, lim *Rlimit) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setregid(rgid int, egid int) (err error) { - _, _, e1 := syscall_rawsyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) - if e1 != 0 { - err = errnoErr(e1) + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SETREGID<<4, uintptr(rgid), uintptr(egid)) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } @@ -1001,9 +2940,9 @@ func Setregid(rgid int, egid int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setreuid(ruid int, euid int) (err error) { - _, _, e1 := syscall_rawsyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) - if e1 != 0 { - err = errnoErr(e1) + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SETREUID<<4, uintptr(ruid), uintptr(euid)) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } @@ -1011,10 +2950,10 @@ func Setreuid(ruid int, euid int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setsid() (pid int, err error) { - r0, _, e1 := syscall_rawsyscall(SYS_SETSID, 0, 0, 0) + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec() + SYS_SETSID<<4) pid = int(r0) - if e1 != 0 { - err = errnoErr(e1) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } @@ -1022,9 +2961,11 @@ func Setsid() (pid int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setuid(uid int) (err error) { - _, _, e1 := syscall_syscall(SYS_SETUID, uintptr(uid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SETUID<<4, uintptr(uid)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } @@ -1032,9 +2973,11 @@ func Setuid(uid int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setgid(uid int) (err error) { - _, _, e1 := syscall_syscall(SYS_SETGID, uintptr(uid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SETGID<<4, uintptr(uid)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } @@ -1042,9 +2985,11 @@ func Setgid(uid int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Shutdown(fd int, how int) (err error) { - _, _, e1 := syscall_syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SHUTDOWN<<4, uintptr(fd), uintptr(how)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } @@ -1057,9 +3002,11 @@ func stat(path string, statLE *Stat_LE_t) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(SYS___STAT_A, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(statLE)), 0) - if e1 != 0 { - err = errnoErr(e1) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___STAT_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(statLE))) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } @@ -1077,17 +3024,63 @@ func Symlink(path string, link string) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(SYS___SYMLINK_A, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___SYMLINK_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1))) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func impl_Symlinkat(oldPath string, dirfd int, newPath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldPath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newPath) + if err != nil { + return + } + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___SYMLINKAT_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(dirfd), uintptr(unsafe.Pointer(_p1))) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } +//go:nosplit +func get_SymlinkatAddr() *(func(oldPath string, dirfd int, newPath string) (err error)) + +var Symlinkat = enter_Symlinkat + +func enter_Symlinkat(oldPath string, dirfd int, newPath string) (err error) { + funcref := get_SymlinkatAddr() + if funcptrtest(GetZosLibVec()+SYS___SYMLINKAT_A<<4, "") == 0 { + *funcref = impl_Symlinkat + } else { + *funcref = error_Symlinkat + } + return (*funcref)(oldPath, dirfd, newPath) +} + +func error_Symlinkat(oldPath string, dirfd int, newPath string) (err error) { + err = ENOSYS + return +} + // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Sync() { - syscall_syscall(SYS_SYNC, 0, 0, 0) + runtime.EnterSyscall() + CallLeFuncWithErr(GetZosLibVec() + SYS_SYNC<<4) + runtime.ExitSyscall() return } @@ -1099,9 +3092,11 @@ func Truncate(path string, length int64) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(SYS___TRUNCATE_A, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___TRUNCATE_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(length)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } @@ -1109,9 +3104,11 @@ func Truncate(path string, length int64) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Tcgetattr(fildes int, termptr *Termios) (err error) { - _, _, e1 := syscall_syscall(SYS_TCGETATTR, uintptr(fildes), uintptr(unsafe.Pointer(termptr)), 0) - if e1 != 0 { - err = errnoErr(e1) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_TCGETATTR<<4, uintptr(fildes), uintptr(unsafe.Pointer(termptr))) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } @@ -1119,9 +3116,11 @@ func Tcgetattr(fildes int, termptr *Termios) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Tcsetattr(fildes int, when int, termptr *Termios) (err error) { - _, _, e1 := syscall_syscall(SYS_TCSETATTR, uintptr(fildes), uintptr(when), uintptr(unsafe.Pointer(termptr))) - if e1 != 0 { - err = errnoErr(e1) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_TCSETATTR<<4, uintptr(fildes), uintptr(when), uintptr(unsafe.Pointer(termptr))) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } @@ -1129,7 +3128,9 @@ func Tcsetattr(fildes int, when int, termptr *Termios) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Umask(mask int) (oldmask int) { - r0, _, _ := syscall_syscall(SYS_UMASK, uintptr(mask), 0, 0) + runtime.EnterSyscall() + r0, _, _ := CallLeFuncWithErr(GetZosLibVec()+SYS_UMASK<<4, uintptr(mask)) + runtime.ExitSyscall() oldmask = int(r0) return } @@ -1142,10 +3143,49 @@ func Unlink(path string) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(SYS___UNLINK_A, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___UNLINK_A<<4, uintptr(unsafe.Pointer(_p0))) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func impl_Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___UNLINKAT_A<<4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +//go:nosplit +func get_UnlinkatAddr() *(func(dirfd int, path string, flags int) (err error)) + +var Unlinkat = enter_Unlinkat + +func enter_Unlinkat(dirfd int, path string, flags int) (err error) { + funcref := get_UnlinkatAddr() + if funcptrtest(GetZosLibVec()+SYS___UNLINKAT_A<<4, "") == 0 { + *funcref = impl_Unlinkat + } else { + *funcref = error_Unlinkat } + return (*funcref)(dirfd, path, flags) +} + +func error_Unlinkat(dirfd int, path string, flags int) (err error) { + err = ENOSYS return } @@ -1157,9 +3197,11 @@ func Utime(path string, utim *Utimbuf) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(SYS___UTIME_A, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(utim)), 0) - if e1 != 0 { - err = errnoErr(e1) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___UTIME_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(utim))) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } @@ -1172,11 +3214,91 @@ func open(path string, mode int, perm uint32) (fd int, err error) { if err != nil { return } - r0, _, e1 := syscall_syscall(SYS___OPEN_A, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___OPEN_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + runtime.ExitSyscall() + fd = int(r0) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func impl_openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___OPENAT_A<<4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode)) + runtime.ExitSyscall() + fd = int(r0) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +//go:nosplit +func get_openatAddr() *(func(dirfd int, path string, flags int, mode uint32) (fd int, err error)) + +var openat = enter_openat + +func enter_openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + funcref := get_openatAddr() + if funcptrtest(GetZosLibVec()+SYS___OPENAT_A<<4, "") == 0 { + *funcref = impl_openat + } else { + *funcref = error_openat + } + return (*funcref)(dirfd, path, flags, mode) +} + +func error_openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + fd = -1 + err = ENOSYS + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func impl_openat2(dirfd int, path string, open_how *OpenHow, size int) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___OPENAT2_A<<4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(open_how)), uintptr(size)) + runtime.ExitSyscall() fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +//go:nosplit +func get_openat2Addr() *(func(dirfd int, path string, open_how *OpenHow, size int) (fd int, err error)) + +var openat2 = enter_openat2 + +func enter_openat2(dirfd int, path string, open_how *OpenHow, size int) (fd int, err error) { + funcref := get_openat2Addr() + if funcptrtest(GetZosLibVec()+SYS___OPENAT2_A<<4, "") == 0 { + *funcref = impl_openat2 + } else { + *funcref = error_openat2 } + return (*funcref)(dirfd, path, open_how, size) +} + +func error_openat2(dirfd int, path string, open_how *OpenHow, size int) (fd int, err error) { + fd = -1 + err = ENOSYS return } @@ -1188,9 +3310,23 @@ func remove(path string) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(SYS_REMOVE, uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_REMOVE<<4, uintptr(unsafe.Pointer(_p0))) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func waitid(idType int, id int, info *Siginfo, options int) (err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_WAITID<<4, uintptr(idType), uintptr(id), uintptr(unsafe.Pointer(info)), uintptr(options)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } @@ -1198,10 +3334,12 @@ func remove(path string) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func waitpid(pid int, wstatus *_C_int, options int) (wpid int, err error) { - r0, _, e1 := syscall_syscall(SYS_WAITPID, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options)) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_WAITPID<<4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options)) + runtime.ExitSyscall() wpid = int(r0) - if e1 != 0 { - err = errnoErr(e1) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } @@ -1209,9 +3347,9 @@ func waitpid(pid int, wstatus *_C_int, options int) (wpid int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func gettimeofday(tv *timeval_zos) (err error) { - _, _, e1 := syscall_rawsyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_GETTIMEOFDAY<<4, uintptr(unsafe.Pointer(tv))) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } @@ -1219,9 +3357,9 @@ func gettimeofday(tv *timeval_zos) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func pipe(p *[2]_C_int) (err error) { - _, _, e1 := syscall_rawsyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_PIPE<<4, uintptr(unsafe.Pointer(p))) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } @@ -1234,20 +3372,87 @@ func utimes(path string, timeval *[2]Timeval) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(SYS___UTIMES_A, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) - if e1 != 0 { - err = errnoErr(e1) + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___UTIMES_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval))) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Select(nmsgsfds int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (ret int, err error) { - r0, _, e1 := syscall_syscall6(SYS_SELECT, uintptr(nmsgsfds), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) - ret = int(r0) - if e1 != 0 { - err = errnoErr(e1) +func impl_utimensat(dirfd int, path string, ts *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___UTIMENSAT_A<<4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(ts)), uintptr(flags)) + runtime.ExitSyscall() + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +//go:nosplit +func get_utimensatAddr() *(func(dirfd int, path string, ts *[2]Timespec, flags int) (err error)) + +var utimensat = enter_utimensat + +func enter_utimensat(dirfd int, path string, ts *[2]Timespec, flags int) (err error) { + funcref := get_utimensatAddr() + if funcptrtest(GetZosLibVec()+SYS___UTIMENSAT_A<<4, "") == 0 { + *funcref = impl_utimensat + } else { + *funcref = error_utimensat + } + return (*funcref)(dirfd, path, ts, flags) +} + +func error_utimensat(dirfd int, path string, ts *[2]Timespec, flags int) (err error) { + err = ENOSYS + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Posix_openpt(oflag int) (fd int, err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_POSIX_OPENPT<<4, uintptr(oflag)) + runtime.ExitSyscall() + fd = int(r0) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Grantpt(fildes int) (rc int, err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_GRANTPT<<4, uintptr(fildes)) + runtime.ExitSyscall() + rc = int(r0) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlockpt(fildes int) (rc int, err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_UNLOCKPT<<4, uintptr(fildes)) + runtime.ExitSyscall() + rc = int(r0) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) } return } diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go index 0cc3ce496e2..53aef5dc58d 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go @@ -452,4 +452,9 @@ const ( SYS_FUTEX_WAKE = 454 SYS_FUTEX_WAIT = 455 SYS_FUTEX_REQUEUE = 456 + SYS_STATMOUNT = 457 + SYS_LISTMOUNT = 458 + SYS_LSM_GET_SELF_ATTR = 459 + SYS_LSM_SET_SELF_ATTR = 460 + SYS_LSM_LIST_MODULES = 461 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go index 856d92d69ef..71d524763d3 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go @@ -374,4 +374,9 @@ const ( SYS_FUTEX_WAKE = 454 SYS_FUTEX_WAIT = 455 SYS_FUTEX_REQUEUE = 456 + SYS_STATMOUNT = 457 + SYS_LISTMOUNT = 458 + SYS_LSM_GET_SELF_ATTR = 459 + SYS_LSM_SET_SELF_ATTR = 460 + SYS_LSM_LIST_MODULES = 461 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go index 8d467094cf5..c747706131c 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go @@ -416,4 +416,9 @@ const ( SYS_FUTEX_WAKE = 454 SYS_FUTEX_WAIT = 455 SYS_FUTEX_REQUEUE = 456 + SYS_STATMOUNT = 457 + SYS_LISTMOUNT = 458 + SYS_LSM_GET_SELF_ATTR = 459 + SYS_LSM_SET_SELF_ATTR = 460 + SYS_LSM_LIST_MODULES = 461 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go index edc173244d0..f96e214f6d4 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go @@ -319,4 +319,9 @@ const ( SYS_FUTEX_WAKE = 454 SYS_FUTEX_WAIT = 455 SYS_FUTEX_REQUEUE = 456 + SYS_STATMOUNT = 457 + SYS_LISTMOUNT = 458 + SYS_LSM_GET_SELF_ATTR = 459 + SYS_LSM_SET_SELF_ATTR = 460 + SYS_LSM_LIST_MODULES = 461 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go index 445eba20615..28425346cf1 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go @@ -313,4 +313,9 @@ const ( SYS_FUTEX_WAKE = 454 SYS_FUTEX_WAIT = 455 SYS_FUTEX_REQUEUE = 456 + SYS_STATMOUNT = 457 + SYS_LISTMOUNT = 458 + SYS_LSM_GET_SELF_ATTR = 459 + SYS_LSM_SET_SELF_ATTR = 460 + SYS_LSM_LIST_MODULES = 461 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go index adba01bca70..d0953018dae 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go @@ -436,4 +436,9 @@ const ( SYS_FUTEX_WAKE = 4454 SYS_FUTEX_WAIT = 4455 SYS_FUTEX_REQUEUE = 4456 + SYS_STATMOUNT = 4457 + SYS_LISTMOUNT = 4458 + SYS_LSM_GET_SELF_ATTR = 4459 + SYS_LSM_SET_SELF_ATTR = 4460 + SYS_LSM_LIST_MODULES = 4461 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go index 014c4e9c7a7..295c7f4b818 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go @@ -366,4 +366,9 @@ const ( SYS_FUTEX_WAKE = 5454 SYS_FUTEX_WAIT = 5455 SYS_FUTEX_REQUEUE = 5456 + SYS_STATMOUNT = 5457 + SYS_LISTMOUNT = 5458 + SYS_LSM_GET_SELF_ATTR = 5459 + SYS_LSM_SET_SELF_ATTR = 5460 + SYS_LSM_LIST_MODULES = 5461 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go index ccc97d74d05..d1a9eaca7a4 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go @@ -366,4 +366,9 @@ const ( SYS_FUTEX_WAKE = 5454 SYS_FUTEX_WAIT = 5455 SYS_FUTEX_REQUEUE = 5456 + SYS_STATMOUNT = 5457 + SYS_LISTMOUNT = 5458 + SYS_LSM_GET_SELF_ATTR = 5459 + SYS_LSM_SET_SELF_ATTR = 5460 + SYS_LSM_LIST_MODULES = 5461 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go index ec2b64a95d7..bec157c39fd 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go @@ -436,4 +436,9 @@ const ( SYS_FUTEX_WAKE = 4454 SYS_FUTEX_WAIT = 4455 SYS_FUTEX_REQUEUE = 4456 + SYS_STATMOUNT = 4457 + SYS_LISTMOUNT = 4458 + SYS_LSM_GET_SELF_ATTR = 4459 + SYS_LSM_SET_SELF_ATTR = 4460 + SYS_LSM_LIST_MODULES = 4461 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go index 21a839e338b..7ee7bdc435c 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go @@ -443,4 +443,9 @@ const ( SYS_FUTEX_WAKE = 454 SYS_FUTEX_WAIT = 455 SYS_FUTEX_REQUEUE = 456 + SYS_STATMOUNT = 457 + SYS_LISTMOUNT = 458 + SYS_LSM_GET_SELF_ATTR = 459 + SYS_LSM_SET_SELF_ATTR = 460 + SYS_LSM_LIST_MODULES = 461 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go index c11121ec3b4..fad1f25b449 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go @@ -415,4 +415,9 @@ const ( SYS_FUTEX_WAKE = 454 SYS_FUTEX_WAIT = 455 SYS_FUTEX_REQUEUE = 456 + SYS_STATMOUNT = 457 + SYS_LISTMOUNT = 458 + SYS_LSM_GET_SELF_ATTR = 459 + SYS_LSM_SET_SELF_ATTR = 460 + SYS_LSM_LIST_MODULES = 461 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go index 909b631fcb4..7d3e16357d6 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go @@ -415,4 +415,9 @@ const ( SYS_FUTEX_WAKE = 454 SYS_FUTEX_WAIT = 455 SYS_FUTEX_REQUEUE = 456 + SYS_STATMOUNT = 457 + SYS_LISTMOUNT = 458 + SYS_LSM_GET_SELF_ATTR = 459 + SYS_LSM_SET_SELF_ATTR = 460 + SYS_LSM_LIST_MODULES = 461 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go index e49bed16ea6..0ed53ad9f7e 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go @@ -320,4 +320,9 @@ const ( SYS_FUTEX_WAKE = 454 SYS_FUTEX_WAIT = 455 SYS_FUTEX_REQUEUE = 456 + SYS_STATMOUNT = 457 + SYS_LISTMOUNT = 458 + SYS_LSM_GET_SELF_ATTR = 459 + SYS_LSM_SET_SELF_ATTR = 460 + SYS_LSM_LIST_MODULES = 461 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go index 66017d2d32b..2fba04ad500 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go @@ -381,4 +381,9 @@ const ( SYS_FUTEX_WAKE = 454 SYS_FUTEX_WAIT = 455 SYS_FUTEX_REQUEUE = 456 + SYS_STATMOUNT = 457 + SYS_LISTMOUNT = 458 + SYS_LSM_GET_SELF_ATTR = 459 + SYS_LSM_SET_SELF_ATTR = 460 + SYS_LSM_LIST_MODULES = 461 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go index 47bab18dced..621d00d741b 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go @@ -394,4 +394,9 @@ const ( SYS_FUTEX_WAKE = 454 SYS_FUTEX_WAIT = 455 SYS_FUTEX_REQUEUE = 456 + SYS_STATMOUNT = 457 + SYS_LISTMOUNT = 458 + SYS_LSM_GET_SELF_ATTR = 459 + SYS_LSM_SET_SELF_ATTR = 460 + SYS_LSM_LIST_MODULES = 461 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_zos_s390x.go b/vendor/golang.org/x/sys/unix/zsysnum_zos_s390x.go index b2e30858199..5e8c263ca9c 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_zos_s390x.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_zos_s390x.go @@ -1,2669 +1,2852 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. +// go run mksyscall_zos_s390x.go -o_sysnum zsysnum_zos_s390x.go -o_syscall zsyscall_zos_s390x.go -i_syscall syscall_zos_s390x.go -o_asm zsymaddr_zos_s390x.s +// Code generated by the command above; see README.md. DO NOT EDIT. //go:build zos && s390x package unix -// TODO: auto-generate. - const ( - SYS_ACOSD128 = 0xB80 - SYS_ACOSD32 = 0xB7E - SYS_ACOSD64 = 0xB7F - SYS_ACOSHD128 = 0xB83 - SYS_ACOSHD32 = 0xB81 - SYS_ACOSHD64 = 0xB82 - SYS_AIO_FSYNC = 0xC69 - SYS_ASCTIME = 0x0AE - SYS_ASCTIME64 = 0xCD7 - SYS_ASCTIME64_R = 0xCD8 - SYS_ASIND128 = 0xB86 - SYS_ASIND32 = 0xB84 - SYS_ASIND64 = 0xB85 - SYS_ASINHD128 = 0xB89 - SYS_ASINHD32 = 0xB87 - SYS_ASINHD64 = 0xB88 - SYS_ATAN2D128 = 0xB8F - SYS_ATAN2D32 = 0xB8D - SYS_ATAN2D64 = 0xB8E - SYS_ATAND128 = 0xB8C - SYS_ATAND32 = 0xB8A - SYS_ATAND64 = 0xB8B - SYS_ATANHD128 = 0xB92 - SYS_ATANHD32 = 0xB90 - SYS_ATANHD64 = 0xB91 - SYS_BIND2ADDRSEL = 0xD59 - SYS_C16RTOMB = 0xD40 - SYS_C32RTOMB = 0xD41 - SYS_CBRTD128 = 0xB95 - SYS_CBRTD32 = 0xB93 - SYS_CBRTD64 = 0xB94 - SYS_CEILD128 = 0xB98 - SYS_CEILD32 = 0xB96 - SYS_CEILD64 = 0xB97 - SYS_CLEARENV = 0x0C9 - SYS_CLEARERR_UNLOCKED = 0xCA1 - SYS_CLOCK = 0x0AA - SYS_CLOGL = 0xA00 - SYS_CLRMEMF = 0x0BD - SYS_CONJ = 0xA03 - SYS_CONJF = 0xA06 - SYS_CONJL = 0xA09 - SYS_COPYSIGND128 = 0xB9E - SYS_COPYSIGND32 = 0xB9C - SYS_COPYSIGND64 = 0xB9D - SYS_COSD128 = 0xBA1 - SYS_COSD32 = 0xB9F - SYS_COSD64 = 0xBA0 - SYS_COSHD128 = 0xBA4 - SYS_COSHD32 = 0xBA2 - SYS_COSHD64 = 0xBA3 - SYS_CPOW = 0xA0C - SYS_CPOWF = 0xA0F - SYS_CPOWL = 0xA12 - SYS_CPROJ = 0xA15 - SYS_CPROJF = 0xA18 - SYS_CPROJL = 0xA1B - SYS_CREAL = 0xA1E - SYS_CREALF = 0xA21 - SYS_CREALL = 0xA24 - SYS_CSIN = 0xA27 - SYS_CSINF = 0xA2A - SYS_CSINH = 0xA30 - SYS_CSINHF = 0xA33 - SYS_CSINHL = 0xA36 - SYS_CSINL = 0xA2D - SYS_CSNAP = 0x0C5 - SYS_CSQRT = 0xA39 - SYS_CSQRTF = 0xA3C - SYS_CSQRTL = 0xA3F - SYS_CTAN = 0xA42 - SYS_CTANF = 0xA45 - SYS_CTANH = 0xA4B - SYS_CTANHF = 0xA4E - SYS_CTANHL = 0xA51 - SYS_CTANL = 0xA48 - SYS_CTIME = 0x0AB - SYS_CTIME64 = 0xCD9 - SYS_CTIME64_R = 0xCDA - SYS_CTRACE = 0x0C6 - SYS_DIFFTIME = 0x0A7 - SYS_DIFFTIME64 = 0xCDB - SYS_DLADDR = 0xC82 - SYS_DYNALLOC = 0x0C3 - SYS_DYNFREE = 0x0C2 - SYS_ERFCD128 = 0xBAA - SYS_ERFCD32 = 0xBA8 - SYS_ERFCD64 = 0xBA9 - SYS_ERFD128 = 0xBA7 - SYS_ERFD32 = 0xBA5 - SYS_ERFD64 = 0xBA6 - SYS_EXP2D128 = 0xBB0 - SYS_EXP2D32 = 0xBAE - SYS_EXP2D64 = 0xBAF - SYS_EXPD128 = 0xBAD - SYS_EXPD32 = 0xBAB - SYS_EXPD64 = 0xBAC - SYS_EXPM1D128 = 0xBB3 - SYS_EXPM1D32 = 0xBB1 - SYS_EXPM1D64 = 0xBB2 - SYS_FABSD128 = 0xBB6 - SYS_FABSD32 = 0xBB4 - SYS_FABSD64 = 0xBB5 - SYS_FDELREC_UNLOCKED = 0xCA2 - SYS_FDIMD128 = 0xBB9 - SYS_FDIMD32 = 0xBB7 - SYS_FDIMD64 = 0xBB8 - SYS_FDOPEN_UNLOCKED = 0xCFC - SYS_FECLEAREXCEPT = 0xAEA - SYS_FEGETENV = 0xAEB - SYS_FEGETEXCEPTFLAG = 0xAEC - SYS_FEGETROUND = 0xAED - SYS_FEHOLDEXCEPT = 0xAEE - SYS_FEOF_UNLOCKED = 0xCA3 - SYS_FERAISEEXCEPT = 0xAEF - SYS_FERROR_UNLOCKED = 0xCA4 - SYS_FESETENV = 0xAF0 - SYS_FESETEXCEPTFLAG = 0xAF1 - SYS_FESETROUND = 0xAF2 - SYS_FETCHEP = 0x0BF - SYS_FETESTEXCEPT = 0xAF3 - SYS_FEUPDATEENV = 0xAF4 - SYS_FE_DEC_GETROUND = 0xBBA - SYS_FE_DEC_SETROUND = 0xBBB - SYS_FFLUSH_UNLOCKED = 0xCA5 - SYS_FGETC_UNLOCKED = 0xC80 - SYS_FGETPOS64 = 0xCEE - SYS_FGETPOS64_UNLOCKED = 0xCF4 - SYS_FGETPOS_UNLOCKED = 0xCA6 - SYS_FGETS_UNLOCKED = 0xC7C - SYS_FGETWC_UNLOCKED = 0xCA7 - SYS_FGETWS_UNLOCKED = 0xCA8 - SYS_FILENO_UNLOCKED = 0xCA9 - SYS_FLDATA = 0x0C1 - SYS_FLDATA_UNLOCKED = 0xCAA - SYS_FLOCATE_UNLOCKED = 0xCAB - SYS_FLOORD128 = 0xBBE - SYS_FLOORD32 = 0xBBC - SYS_FLOORD64 = 0xBBD - SYS_FMA = 0xA63 - SYS_FMAD128 = 0xBC1 - SYS_FMAD32 = 0xBBF - SYS_FMAD64 = 0xBC0 - SYS_FMAF = 0xA66 - SYS_FMAL = 0xA69 - SYS_FMAX = 0xA6C - SYS_FMAXD128 = 0xBC4 - SYS_FMAXD32 = 0xBC2 - SYS_FMAXD64 = 0xBC3 - SYS_FMAXF = 0xA6F - SYS_FMAXL = 0xA72 - SYS_FMIN = 0xA75 - SYS_FMIND128 = 0xBC7 - SYS_FMIND32 = 0xBC5 - SYS_FMIND64 = 0xBC6 - SYS_FMINF = 0xA78 - SYS_FMINL = 0xA7B - SYS_FMODD128 = 0xBCA - SYS_FMODD32 = 0xBC8 - SYS_FMODD64 = 0xBC9 - SYS_FOPEN64 = 0xD49 - SYS_FOPEN64_UNLOCKED = 0xD4A - SYS_FOPEN_UNLOCKED = 0xCFA - SYS_FPRINTF_UNLOCKED = 0xCAC - SYS_FPUTC_UNLOCKED = 0xC81 - SYS_FPUTS_UNLOCKED = 0xC7E - SYS_FPUTWC_UNLOCKED = 0xCAD - SYS_FPUTWS_UNLOCKED = 0xCAE - SYS_FREAD_NOUPDATE = 0xCEC - SYS_FREAD_NOUPDATE_UNLOCKED = 0xCED - SYS_FREAD_UNLOCKED = 0xC7B - SYS_FREEIFADDRS = 0xCE6 - SYS_FREOPEN64 = 0xD4B - SYS_FREOPEN64_UNLOCKED = 0xD4C - SYS_FREOPEN_UNLOCKED = 0xCFB - SYS_FREXPD128 = 0xBCE - SYS_FREXPD32 = 0xBCC - SYS_FREXPD64 = 0xBCD - SYS_FSCANF_UNLOCKED = 0xCAF - SYS_FSEEK64 = 0xCEF - SYS_FSEEK64_UNLOCKED = 0xCF5 - SYS_FSEEKO64 = 0xCF0 - SYS_FSEEKO64_UNLOCKED = 0xCF6 - SYS_FSEEKO_UNLOCKED = 0xCB1 - SYS_FSEEK_UNLOCKED = 0xCB0 - SYS_FSETPOS64 = 0xCF1 - SYS_FSETPOS64_UNLOCKED = 0xCF7 - SYS_FSETPOS_UNLOCKED = 0xCB3 - SYS_FTELL64 = 0xCF2 - SYS_FTELL64_UNLOCKED = 0xCF8 - SYS_FTELLO64 = 0xCF3 - SYS_FTELLO64_UNLOCKED = 0xCF9 - SYS_FTELLO_UNLOCKED = 0xCB5 - SYS_FTELL_UNLOCKED = 0xCB4 - SYS_FUPDATE = 0x0B5 - SYS_FUPDATE_UNLOCKED = 0xCB7 - SYS_FWIDE_UNLOCKED = 0xCB8 - SYS_FWPRINTF_UNLOCKED = 0xCB9 - SYS_FWRITE_UNLOCKED = 0xC7A - SYS_FWSCANF_UNLOCKED = 0xCBA - SYS_GETDATE64 = 0xD4F - SYS_GETIFADDRS = 0xCE7 - SYS_GETIPV4SOURCEFILTER = 0xC77 - SYS_GETSOURCEFILTER = 0xC79 - SYS_GETSYNTX = 0x0FD - SYS_GETS_UNLOCKED = 0xC7D - SYS_GETTIMEOFDAY64 = 0xD50 - SYS_GETWCHAR_UNLOCKED = 0xCBC - SYS_GETWC_UNLOCKED = 0xCBB - SYS_GMTIME = 0x0B0 - SYS_GMTIME64 = 0xCDC - SYS_GMTIME64_R = 0xCDD - SYS_HYPOTD128 = 0xBD1 - SYS_HYPOTD32 = 0xBCF - SYS_HYPOTD64 = 0xBD0 - SYS_ILOGBD128 = 0xBD4 - SYS_ILOGBD32 = 0xBD2 - SYS_ILOGBD64 = 0xBD3 - SYS_ILOGBF = 0xA7E - SYS_ILOGBL = 0xA81 - SYS_INET6_IS_SRCADDR = 0xD5A - SYS_ISBLANK = 0x0FE - SYS_ISWALNUM = 0x0FF - SYS_LDEXPD128 = 0xBD7 - SYS_LDEXPD32 = 0xBD5 - SYS_LDEXPD64 = 0xBD6 - SYS_LGAMMAD128 = 0xBDA - SYS_LGAMMAD32 = 0xBD8 - SYS_LGAMMAD64 = 0xBD9 - SYS_LIO_LISTIO = 0xC6A - SYS_LLRINT = 0xA84 - SYS_LLRINTD128 = 0xBDD - SYS_LLRINTD32 = 0xBDB - SYS_LLRINTD64 = 0xBDC - SYS_LLRINTF = 0xA87 - SYS_LLRINTL = 0xA8A - SYS_LLROUND = 0xA8D - SYS_LLROUNDD128 = 0xBE0 - SYS_LLROUNDD32 = 0xBDE - SYS_LLROUNDD64 = 0xBDF - SYS_LLROUNDF = 0xA90 - SYS_LLROUNDL = 0xA93 - SYS_LOCALTIM = 0x0B1 - SYS_LOCALTIME = 0x0B1 - SYS_LOCALTIME64 = 0xCDE - SYS_LOCALTIME64_R = 0xCDF - SYS_LOG10D128 = 0xBE6 - SYS_LOG10D32 = 0xBE4 - SYS_LOG10D64 = 0xBE5 - SYS_LOG1PD128 = 0xBE9 - SYS_LOG1PD32 = 0xBE7 - SYS_LOG1PD64 = 0xBE8 - SYS_LOG2D128 = 0xBEC - SYS_LOG2D32 = 0xBEA - SYS_LOG2D64 = 0xBEB - SYS_LOGBD128 = 0xBEF - SYS_LOGBD32 = 0xBED - SYS_LOGBD64 = 0xBEE - SYS_LOGBF = 0xA96 - SYS_LOGBL = 0xA99 - SYS_LOGD128 = 0xBE3 - SYS_LOGD32 = 0xBE1 - SYS_LOGD64 = 0xBE2 - SYS_LRINT = 0xA9C - SYS_LRINTD128 = 0xBF2 - SYS_LRINTD32 = 0xBF0 - SYS_LRINTD64 = 0xBF1 - SYS_LRINTF = 0xA9F - SYS_LRINTL = 0xAA2 - SYS_LROUNDD128 = 0xBF5 - SYS_LROUNDD32 = 0xBF3 - SYS_LROUNDD64 = 0xBF4 - SYS_LROUNDL = 0xAA5 - SYS_MBLEN = 0x0AF - SYS_MBRTOC16 = 0xD42 - SYS_MBRTOC32 = 0xD43 - SYS_MEMSET = 0x0A3 - SYS_MKTIME = 0x0AC - SYS_MKTIME64 = 0xCE0 - SYS_MODFD128 = 0xBF8 - SYS_MODFD32 = 0xBF6 - SYS_MODFD64 = 0xBF7 - SYS_NAN = 0xAA8 - SYS_NAND128 = 0xBFB - SYS_NAND32 = 0xBF9 - SYS_NAND64 = 0xBFA - SYS_NANF = 0xAAA - SYS_NANL = 0xAAC - SYS_NEARBYINT = 0xAAE - SYS_NEARBYINTD128 = 0xBFE - SYS_NEARBYINTD32 = 0xBFC - SYS_NEARBYINTD64 = 0xBFD - SYS_NEARBYINTF = 0xAB1 - SYS_NEARBYINTL = 0xAB4 - SYS_NEXTAFTERD128 = 0xC01 - SYS_NEXTAFTERD32 = 0xBFF - SYS_NEXTAFTERD64 = 0xC00 - SYS_NEXTAFTERF = 0xAB7 - SYS_NEXTAFTERL = 0xABA - SYS_NEXTTOWARD = 0xABD - SYS_NEXTTOWARDD128 = 0xC04 - SYS_NEXTTOWARDD32 = 0xC02 - SYS_NEXTTOWARDD64 = 0xC03 - SYS_NEXTTOWARDF = 0xAC0 - SYS_NEXTTOWARDL = 0xAC3 - SYS_NL_LANGINFO = 0x0FC - SYS_PERROR_UNLOCKED = 0xCBD - SYS_POSIX_FALLOCATE = 0xCE8 - SYS_POSIX_MEMALIGN = 0xCE9 - SYS_POSIX_OPENPT = 0xC66 - SYS_POWD128 = 0xC07 - SYS_POWD32 = 0xC05 - SYS_POWD64 = 0xC06 - SYS_PRINTF_UNLOCKED = 0xCBE - SYS_PSELECT = 0xC67 - SYS_PTHREAD_ATTR_GETSTACK = 0xB3E - SYS_PTHREAD_ATTR_SETSTACK = 0xB3F - SYS_PTHREAD_SECURITY_APPLID_NP = 0xCE4 - SYS_PUTS_UNLOCKED = 0xC7F - SYS_PUTWCHAR_UNLOCKED = 0xCC0 - SYS_PUTWC_UNLOCKED = 0xCBF - SYS_QUANTEXPD128 = 0xD46 - SYS_QUANTEXPD32 = 0xD44 - SYS_QUANTEXPD64 = 0xD45 - SYS_QUANTIZED128 = 0xC0A - SYS_QUANTIZED32 = 0xC08 - SYS_QUANTIZED64 = 0xC09 - SYS_REMAINDERD128 = 0xC0D - SYS_REMAINDERD32 = 0xC0B - SYS_REMAINDERD64 = 0xC0C - SYS_RESIZE_ALLOC = 0xCEB - SYS_REWIND_UNLOCKED = 0xCC1 - SYS_RINTD128 = 0xC13 - SYS_RINTD32 = 0xC11 - SYS_RINTD64 = 0xC12 - SYS_RINTF = 0xACB - SYS_RINTL = 0xACD - SYS_ROUND = 0xACF - SYS_ROUNDD128 = 0xC16 - SYS_ROUNDD32 = 0xC14 - SYS_ROUNDD64 = 0xC15 - SYS_ROUNDF = 0xAD2 - SYS_ROUNDL = 0xAD5 - SYS_SAMEQUANTUMD128 = 0xC19 - SYS_SAMEQUANTUMD32 = 0xC17 - SYS_SAMEQUANTUMD64 = 0xC18 - SYS_SCALBLN = 0xAD8 - SYS_SCALBLND128 = 0xC1C - SYS_SCALBLND32 = 0xC1A - SYS_SCALBLND64 = 0xC1B - SYS_SCALBLNF = 0xADB - SYS_SCALBLNL = 0xADE - SYS_SCALBND128 = 0xC1F - SYS_SCALBND32 = 0xC1D - SYS_SCALBND64 = 0xC1E - SYS_SCALBNF = 0xAE3 - SYS_SCALBNL = 0xAE6 - SYS_SCANF_UNLOCKED = 0xCC2 - SYS_SCHED_YIELD = 0xB32 - SYS_SETENV = 0x0C8 - SYS_SETIPV4SOURCEFILTER = 0xC76 - SYS_SETSOURCEFILTER = 0xC78 - SYS_SHM_OPEN = 0xC8C - SYS_SHM_UNLINK = 0xC8D - SYS_SIND128 = 0xC22 - SYS_SIND32 = 0xC20 - SYS_SIND64 = 0xC21 - SYS_SINHD128 = 0xC25 - SYS_SINHD32 = 0xC23 - SYS_SINHD64 = 0xC24 - SYS_SIZEOF_ALLOC = 0xCEA - SYS_SOCKATMARK = 0xC68 - SYS_SQRTD128 = 0xC28 - SYS_SQRTD32 = 0xC26 - SYS_SQRTD64 = 0xC27 - SYS_STRCHR = 0x0A0 - SYS_STRCSPN = 0x0A1 - SYS_STRERROR = 0x0A8 - SYS_STRERROR_R = 0xB33 - SYS_STRFTIME = 0x0B2 - SYS_STRLEN = 0x0A9 - SYS_STRPBRK = 0x0A2 - SYS_STRSPN = 0x0A4 - SYS_STRSTR = 0x0A5 - SYS_STRTOD128 = 0xC2B - SYS_STRTOD32 = 0xC29 - SYS_STRTOD64 = 0xC2A - SYS_STRTOK = 0x0A6 - SYS_TAND128 = 0xC2E - SYS_TAND32 = 0xC2C - SYS_TAND64 = 0xC2D - SYS_TANHD128 = 0xC31 - SYS_TANHD32 = 0xC2F - SYS_TANHD64 = 0xC30 - SYS_TGAMMAD128 = 0xC34 - SYS_TGAMMAD32 = 0xC32 - SYS_TGAMMAD64 = 0xC33 - SYS_TIME = 0x0AD - SYS_TIME64 = 0xCE1 - SYS_TMPFILE64 = 0xD4D - SYS_TMPFILE64_UNLOCKED = 0xD4E - SYS_TMPFILE_UNLOCKED = 0xCFD - SYS_TRUNCD128 = 0xC40 - SYS_TRUNCD32 = 0xC3E - SYS_TRUNCD64 = 0xC3F - SYS_UNGETC_UNLOCKED = 0xCC3 - SYS_UNGETWC_UNLOCKED = 0xCC4 - SYS_UNSETENV = 0xB34 - SYS_VFPRINTF_UNLOCKED = 0xCC5 - SYS_VFSCANF_UNLOCKED = 0xCC7 - SYS_VFWPRINTF_UNLOCKED = 0xCC9 - SYS_VFWSCANF_UNLOCKED = 0xCCB - SYS_VPRINTF_UNLOCKED = 0xCCD - SYS_VSCANF_UNLOCKED = 0xCCF - SYS_VWPRINTF_UNLOCKED = 0xCD1 - SYS_VWSCANF_UNLOCKED = 0xCD3 - SYS_WCSTOD128 = 0xC43 - SYS_WCSTOD32 = 0xC41 - SYS_WCSTOD64 = 0xC42 - SYS_WPRINTF_UNLOCKED = 0xCD5 - SYS_WSCANF_UNLOCKED = 0xCD6 - SYS__FLUSHLBF = 0xD68 - SYS__FLUSHLBF_UNLOCKED = 0xD6F - SYS___ACOSHF_H = 0xA54 - SYS___ACOSHL_H = 0xA55 - SYS___ASINHF_H = 0xA56 - SYS___ASINHL_H = 0xA57 - SYS___ATANPID128 = 0xC6D - SYS___ATANPID32 = 0xC6B - SYS___ATANPID64 = 0xC6C - SYS___CBRTF_H = 0xA58 - SYS___CBRTL_H = 0xA59 - SYS___CDUMP = 0x0C4 - SYS___CLASS = 0xAFA - SYS___CLASS2 = 0xB99 - SYS___CLASS2D128 = 0xC99 - SYS___CLASS2D32 = 0xC97 - SYS___CLASS2D64 = 0xC98 - SYS___CLASS2F = 0xC91 - SYS___CLASS2F_B = 0xC93 - SYS___CLASS2F_H = 0xC94 - SYS___CLASS2L = 0xC92 - SYS___CLASS2L_B = 0xC95 - SYS___CLASS2L_H = 0xC96 - SYS___CLASS2_B = 0xB9A - SYS___CLASS2_H = 0xB9B - SYS___CLASS_B = 0xAFB - SYS___CLASS_H = 0xAFC - SYS___CLOGL_B = 0xA01 - SYS___CLOGL_H = 0xA02 - SYS___CLRENV = 0x0C9 - SYS___CLRMF = 0x0BD - SYS___CODEPAGE_INFO = 0xC64 - SYS___CONJF_B = 0xA07 - SYS___CONJF_H = 0xA08 - SYS___CONJL_B = 0xA0A - SYS___CONJL_H = 0xA0B - SYS___CONJ_B = 0xA04 - SYS___CONJ_H = 0xA05 - SYS___COPYSIGN_B = 0xA5A - SYS___COPYSIGN_H = 0xAF5 - SYS___COSPID128 = 0xC70 - SYS___COSPID32 = 0xC6E - SYS___COSPID64 = 0xC6F - SYS___CPOWF_B = 0xA10 - SYS___CPOWF_H = 0xA11 - SYS___CPOWL_B = 0xA13 - SYS___CPOWL_H = 0xA14 - SYS___CPOW_B = 0xA0D - SYS___CPOW_H = 0xA0E - SYS___CPROJF_B = 0xA19 - SYS___CPROJF_H = 0xA1A - SYS___CPROJL_B = 0xA1C - SYS___CPROJL_H = 0xA1D - SYS___CPROJ_B = 0xA16 - SYS___CPROJ_H = 0xA17 - SYS___CREALF_B = 0xA22 - SYS___CREALF_H = 0xA23 - SYS___CREALL_B = 0xA25 - SYS___CREALL_H = 0xA26 - SYS___CREAL_B = 0xA1F - SYS___CREAL_H = 0xA20 - SYS___CSINF_B = 0xA2B - SYS___CSINF_H = 0xA2C - SYS___CSINHF_B = 0xA34 - SYS___CSINHF_H = 0xA35 - SYS___CSINHL_B = 0xA37 - SYS___CSINHL_H = 0xA38 - SYS___CSINH_B = 0xA31 - SYS___CSINH_H = 0xA32 - SYS___CSINL_B = 0xA2E - SYS___CSINL_H = 0xA2F - SYS___CSIN_B = 0xA28 - SYS___CSIN_H = 0xA29 - SYS___CSNAP = 0x0C5 - SYS___CSQRTF_B = 0xA3D - SYS___CSQRTF_H = 0xA3E - SYS___CSQRTL_B = 0xA40 - SYS___CSQRTL_H = 0xA41 - SYS___CSQRT_B = 0xA3A - SYS___CSQRT_H = 0xA3B - SYS___CTANF_B = 0xA46 - SYS___CTANF_H = 0xA47 - SYS___CTANHF_B = 0xA4F - SYS___CTANHF_H = 0xA50 - SYS___CTANHL_B = 0xA52 - SYS___CTANHL_H = 0xA53 - SYS___CTANH_B = 0xA4C - SYS___CTANH_H = 0xA4D - SYS___CTANL_B = 0xA49 - SYS___CTANL_H = 0xA4A - SYS___CTAN_B = 0xA43 - SYS___CTAN_H = 0xA44 - SYS___CTEST = 0x0C7 - SYS___CTRACE = 0x0C6 - SYS___D1TOP = 0xC9B - SYS___D2TOP = 0xC9C - SYS___D4TOP = 0xC9D - SYS___DYNALL = 0x0C3 - SYS___DYNFRE = 0x0C2 - SYS___EXP2F_H = 0xA5E - SYS___EXP2L_H = 0xA5F - SYS___EXP2_H = 0xA5D - SYS___EXPM1F_H = 0xA5B - SYS___EXPM1L_H = 0xA5C - SYS___FBUFSIZE = 0xD60 - SYS___FLBF = 0xD62 - SYS___FLDATA = 0x0C1 - SYS___FMAF_B = 0xA67 - SYS___FMAF_H = 0xA68 - SYS___FMAL_B = 0xA6A - SYS___FMAL_H = 0xA6B - SYS___FMAXF_B = 0xA70 - SYS___FMAXF_H = 0xA71 - SYS___FMAXL_B = 0xA73 - SYS___FMAXL_H = 0xA74 - SYS___FMAX_B = 0xA6D - SYS___FMAX_H = 0xA6E - SYS___FMA_B = 0xA64 - SYS___FMA_H = 0xA65 - SYS___FMINF_B = 0xA79 - SYS___FMINF_H = 0xA7A - SYS___FMINL_B = 0xA7C - SYS___FMINL_H = 0xA7D - SYS___FMIN_B = 0xA76 - SYS___FMIN_H = 0xA77 - SYS___FPENDING = 0xD61 - SYS___FPENDING_UNLOCKED = 0xD6C - SYS___FPURGE = 0xD69 - SYS___FPURGE_UNLOCKED = 0xD70 - SYS___FP_CAST_D = 0xBCB - SYS___FREADABLE = 0xD63 - SYS___FREADAHEAD = 0xD6A - SYS___FREADAHEAD_UNLOCKED = 0xD71 - SYS___FREADING = 0xD65 - SYS___FREADING_UNLOCKED = 0xD6D - SYS___FSEEK2 = 0xB3C - SYS___FSETERR = 0xD6B - SYS___FSETLOCKING = 0xD67 - SYS___FTCHEP = 0x0BF - SYS___FTELL2 = 0xB3B - SYS___FUPDT = 0x0B5 - SYS___FWRITABLE = 0xD64 - SYS___FWRITING = 0xD66 - SYS___FWRITING_UNLOCKED = 0xD6E - SYS___GETCB = 0x0B4 - SYS___GETGRGID1 = 0xD5B - SYS___GETGRNAM1 = 0xD5C - SYS___GETTHENT = 0xCE5 - SYS___GETTOD = 0xD3E - SYS___HYPOTF_H = 0xAF6 - SYS___HYPOTL_H = 0xAF7 - SYS___ILOGBF_B = 0xA7F - SYS___ILOGBF_H = 0xA80 - SYS___ILOGBL_B = 0xA82 - SYS___ILOGBL_H = 0xA83 - SYS___ISBLANK_A = 0xB2E - SYS___ISBLNK = 0x0FE - SYS___ISWBLANK_A = 0xB2F - SYS___LE_CEEGTJS = 0xD72 - SYS___LE_TRACEBACK = 0xB7A - SYS___LGAMMAL_H = 0xA62 - SYS___LGAMMA_B_C99 = 0xB39 - SYS___LGAMMA_H_C99 = 0xB38 - SYS___LGAMMA_R_C99 = 0xB3A - SYS___LLRINTF_B = 0xA88 - SYS___LLRINTF_H = 0xA89 - SYS___LLRINTL_B = 0xA8B - SYS___LLRINTL_H = 0xA8C - SYS___LLRINT_B = 0xA85 - SYS___LLRINT_H = 0xA86 - SYS___LLROUNDF_B = 0xA91 - SYS___LLROUNDF_H = 0xA92 - SYS___LLROUNDL_B = 0xA94 - SYS___LLROUNDL_H = 0xA95 - SYS___LLROUND_B = 0xA8E - SYS___LLROUND_H = 0xA8F - SYS___LOCALE_CTL = 0xD47 - SYS___LOG1PF_H = 0xA60 - SYS___LOG1PL_H = 0xA61 - SYS___LOGBF_B = 0xA97 - SYS___LOGBF_H = 0xA98 - SYS___LOGBL_B = 0xA9A - SYS___LOGBL_H = 0xA9B - SYS___LOGIN_APPLID = 0xCE2 - SYS___LRINTF_B = 0xAA0 - SYS___LRINTF_H = 0xAA1 - SYS___LRINTL_B = 0xAA3 - SYS___LRINTL_H = 0xAA4 - SYS___LRINT_B = 0xA9D - SYS___LRINT_H = 0xA9E - SYS___LROUNDF_FIXUP = 0xB31 - SYS___LROUNDL_B = 0xAA6 - SYS___LROUNDL_H = 0xAA7 - SYS___LROUND_FIXUP = 0xB30 - SYS___MOSERVICES = 0xD3D - SYS___MUST_STAY_CLEAN = 0xB7C - SYS___NANF_B = 0xAAB - SYS___NANL_B = 0xAAD - SYS___NAN_B = 0xAA9 - SYS___NEARBYINTF_B = 0xAB2 - SYS___NEARBYINTF_H = 0xAB3 - SYS___NEARBYINTL_B = 0xAB5 - SYS___NEARBYINTL_H = 0xAB6 - SYS___NEARBYINT_B = 0xAAF - SYS___NEARBYINT_H = 0xAB0 - SYS___NEXTAFTERF_B = 0xAB8 - SYS___NEXTAFTERF_H = 0xAB9 - SYS___NEXTAFTERL_B = 0xABB - SYS___NEXTAFTERL_H = 0xABC - SYS___NEXTTOWARDF_B = 0xAC1 - SYS___NEXTTOWARDF_H = 0xAC2 - SYS___NEXTTOWARDL_B = 0xAC4 - SYS___NEXTTOWARDL_H = 0xAC5 - SYS___NEXTTOWARD_B = 0xABE - SYS___NEXTTOWARD_H = 0xABF - SYS___O_ENV = 0xB7D - SYS___PASSWD_APPLID = 0xCE3 - SYS___PTOD1 = 0xC9E - SYS___PTOD2 = 0xC9F - SYS___PTOD4 = 0xCA0 - SYS___REGCOMP_STD = 0x0EA - SYS___REMAINDERF_H = 0xAC6 - SYS___REMAINDERL_H = 0xAC7 - SYS___REMQUOD128 = 0xC10 - SYS___REMQUOD32 = 0xC0E - SYS___REMQUOD64 = 0xC0F - SYS___REMQUOF_H = 0xAC9 - SYS___REMQUOL_H = 0xACA - SYS___REMQUO_H = 0xAC8 - SYS___RINTF_B = 0xACC - SYS___RINTL_B = 0xACE - SYS___ROUNDF_B = 0xAD3 - SYS___ROUNDF_H = 0xAD4 - SYS___ROUNDL_B = 0xAD6 - SYS___ROUNDL_H = 0xAD7 - SYS___ROUND_B = 0xAD0 - SYS___ROUND_H = 0xAD1 - SYS___SCALBLNF_B = 0xADC - SYS___SCALBLNF_H = 0xADD - SYS___SCALBLNL_B = 0xADF - SYS___SCALBLNL_H = 0xAE0 - SYS___SCALBLN_B = 0xAD9 - SYS___SCALBLN_H = 0xADA - SYS___SCALBNF_B = 0xAE4 - SYS___SCALBNF_H = 0xAE5 - SYS___SCALBNL_B = 0xAE7 - SYS___SCALBNL_H = 0xAE8 - SYS___SCALBN_B = 0xAE1 - SYS___SCALBN_H = 0xAE2 - SYS___SETENV = 0x0C8 - SYS___SINPID128 = 0xC73 - SYS___SINPID32 = 0xC71 - SYS___SINPID64 = 0xC72 - SYS___SMF_RECORD2 = 0xD48 - SYS___STATIC_REINIT = 0xB3D - SYS___TGAMMAF_H_C99 = 0xB79 - SYS___TGAMMAL_H = 0xAE9 - SYS___TGAMMA_H_C99 = 0xB78 - SYS___TOCSNAME2 = 0xC9A - SYS_CEIL = 0x01F - SYS_CHAUDIT = 0x1E0 - SYS_EXP = 0x01A - SYS_FCHAUDIT = 0x1E1 - SYS_FREXP = 0x01D - SYS_GETGROUPSBYNAME = 0x1E2 - SYS_GETPWUID = 0x1A0 - SYS_GETUID = 0x1A1 - SYS_ISATTY = 0x1A3 - SYS_KILL = 0x1A4 - SYS_LDEXP = 0x01E - SYS_LINK = 0x1A5 - SYS_LOG10 = 0x01C - SYS_LSEEK = 0x1A6 - SYS_LSTAT = 0x1A7 - SYS_MKDIR = 0x1A8 - SYS_MKFIFO = 0x1A9 - SYS_MKNOD = 0x1AA - SYS_MODF = 0x01B - SYS_MOUNT = 0x1AB - SYS_OPEN = 0x1AC - SYS_OPENDIR = 0x1AD - SYS_PATHCONF = 0x1AE - SYS_PAUSE = 0x1AF - SYS_PIPE = 0x1B0 - SYS_PTHREAD_ATTR_DESTROY = 0x1E7 - SYS_PTHREAD_ATTR_GETDETACHSTATE = 0x1EB - SYS_PTHREAD_ATTR_GETSTACKSIZE = 0x1E9 - SYS_PTHREAD_ATTR_GETWEIGHT_NP = 0x1ED - SYS_PTHREAD_ATTR_INIT = 0x1E6 - SYS_PTHREAD_ATTR_SETDETACHSTATE = 0x1EA - SYS_PTHREAD_ATTR_SETSTACKSIZE = 0x1E8 - SYS_PTHREAD_ATTR_SETWEIGHT_NP = 0x1EC - SYS_PTHREAD_CANCEL = 0x1EE - SYS_PTHREAD_CLEANUP_POP = 0x1F0 - SYS_PTHREAD_CLEANUP_PUSH = 0x1EF - SYS_PTHREAD_CONDATTR_DESTROY = 0x1F2 - SYS_PTHREAD_CONDATTR_INIT = 0x1F1 - SYS_PTHREAD_COND_BROADCAST = 0x1F6 - SYS_PTHREAD_COND_DESTROY = 0x1F4 - SYS_PTHREAD_COND_INIT = 0x1F3 - SYS_PTHREAD_COND_SIGNAL = 0x1F5 - SYS_PTHREAD_COND_TIMEDWAIT = 0x1F8 - SYS_PTHREAD_COND_WAIT = 0x1F7 - SYS_PTHREAD_CREATE = 0x1F9 - SYS_PTHREAD_DETACH = 0x1FA - SYS_PTHREAD_EQUAL = 0x1FB - SYS_PTHREAD_EXIT = 0x1E4 - SYS_PTHREAD_GETSPECIFIC = 0x1FC - SYS_PTHREAD_JOIN = 0x1FD - SYS_PTHREAD_KEY_CREATE = 0x1FE - SYS_PTHREAD_KILL = 0x1E5 - SYS_PTHREAD_MUTEXATTR_INIT = 0x1FF - SYS_READ = 0x1B2 - SYS_READDIR = 0x1B3 - SYS_READLINK = 0x1B4 - SYS_REWINDDIR = 0x1B5 - SYS_RMDIR = 0x1B6 - SYS_SETEGID = 0x1B7 - SYS_SETEUID = 0x1B8 - SYS_SETGID = 0x1B9 - SYS_SETPGID = 0x1BA - SYS_SETSID = 0x1BB - SYS_SETUID = 0x1BC - SYS_SIGACTION = 0x1BD - SYS_SIGADDSET = 0x1BE - SYS_SIGDELSET = 0x1BF - SYS_SIGEMPTYSET = 0x1C0 - SYS_SIGFILLSET = 0x1C1 - SYS_SIGISMEMBER = 0x1C2 - SYS_SIGLONGJMP = 0x1C3 - SYS_SIGPENDING = 0x1C4 - SYS_SIGPROCMASK = 0x1C5 - SYS_SIGSETJMP = 0x1C6 - SYS_SIGSUSPEND = 0x1C7 - SYS_SIGWAIT = 0x1E3 - SYS_SLEEP = 0x1C8 - SYS_STAT = 0x1C9 - SYS_SYMLINK = 0x1CB - SYS_SYSCONF = 0x1CC - SYS_TCDRAIN = 0x1CD - SYS_TCFLOW = 0x1CE - SYS_TCFLUSH = 0x1CF - SYS_TCGETATTR = 0x1D0 - SYS_TCGETPGRP = 0x1D1 - SYS_TCSENDBREAK = 0x1D2 - SYS_TCSETATTR = 0x1D3 - SYS_TCSETPGRP = 0x1D4 - SYS_TIMES = 0x1D5 - SYS_TTYNAME = 0x1D6 - SYS_TZSET = 0x1D7 - SYS_UMASK = 0x1D8 - SYS_UMOUNT = 0x1D9 - SYS_UNAME = 0x1DA - SYS_UNLINK = 0x1DB - SYS_UTIME = 0x1DC - SYS_WAIT = 0x1DD - SYS_WAITPID = 0x1DE - SYS_WRITE = 0x1DF - SYS_W_GETPSENT = 0x1B1 - SYS_W_IOCTL = 0x1A2 - SYS_W_STATFS = 0x1CA - SYS_A64L = 0x2EF - SYS_BCMP = 0x2B9 - SYS_BCOPY = 0x2BA - SYS_BZERO = 0x2BB - SYS_CATCLOSE = 0x2B6 - SYS_CATGETS = 0x2B7 - SYS_CATOPEN = 0x2B8 - SYS_CRYPT = 0x2AC - SYS_DBM_CLEARERR = 0x2F7 - SYS_DBM_CLOSE = 0x2F8 - SYS_DBM_DELETE = 0x2F9 - SYS_DBM_ERROR = 0x2FA - SYS_DBM_FETCH = 0x2FB - SYS_DBM_FIRSTKEY = 0x2FC - SYS_DBM_NEXTKEY = 0x2FD - SYS_DBM_OPEN = 0x2FE - SYS_DBM_STORE = 0x2FF - SYS_DRAND48 = 0x2B2 - SYS_ENCRYPT = 0x2AD - SYS_ENDUTXENT = 0x2E1 - SYS_ERAND48 = 0x2B3 - SYS_ERF = 0x02C - SYS_ERFC = 0x02D - SYS_FCHDIR = 0x2D9 - SYS_FFS = 0x2BC - SYS_FMTMSG = 0x2E5 - SYS_FSTATVFS = 0x2B4 - SYS_FTIME = 0x2F5 - SYS_GAMMA = 0x02E - SYS_GETDATE = 0x2A6 - SYS_GETPAGESIZE = 0x2D8 - SYS_GETTIMEOFDAY = 0x2F6 - SYS_GETUTXENT = 0x2E0 - SYS_GETUTXID = 0x2E2 - SYS_GETUTXLINE = 0x2E3 - SYS_HCREATE = 0x2C6 - SYS_HDESTROY = 0x2C7 - SYS_HSEARCH = 0x2C8 - SYS_HYPOT = 0x02B - SYS_INDEX = 0x2BD - SYS_INITSTATE = 0x2C2 - SYS_INSQUE = 0x2CF - SYS_ISASCII = 0x2ED - SYS_JRAND48 = 0x2E6 - SYS_L64A = 0x2F0 - SYS_LCONG48 = 0x2EA - SYS_LFIND = 0x2C9 - SYS_LRAND48 = 0x2E7 - SYS_LSEARCH = 0x2CA - SYS_MEMCCPY = 0x2D4 - SYS_MRAND48 = 0x2E8 - SYS_NRAND48 = 0x2E9 - SYS_PCLOSE = 0x2D2 - SYS_POPEN = 0x2D1 - SYS_PUTUTXLINE = 0x2E4 - SYS_RANDOM = 0x2C4 - SYS_REMQUE = 0x2D0 - SYS_RINDEX = 0x2BE - SYS_SEED48 = 0x2EC - SYS_SETKEY = 0x2AE - SYS_SETSTATE = 0x2C3 - SYS_SETUTXENT = 0x2DF - SYS_SRAND48 = 0x2EB - SYS_SRANDOM = 0x2C5 - SYS_STATVFS = 0x2B5 - SYS_STRCASECMP = 0x2BF - SYS_STRDUP = 0x2C0 - SYS_STRNCASECMP = 0x2C1 - SYS_SWAB = 0x2D3 - SYS_TDELETE = 0x2CB - SYS_TFIND = 0x2CC - SYS_TOASCII = 0x2EE - SYS_TSEARCH = 0x2CD - SYS_TWALK = 0x2CE - SYS_UALARM = 0x2F1 - SYS_USLEEP = 0x2F2 - SYS_WAIT3 = 0x2A7 - SYS_WAITID = 0x2A8 - SYS_Y1 = 0x02A - SYS___ATOE = 0x2DB - SYS___ATOE_L = 0x2DC - SYS___CATTRM = 0x2A9 - SYS___CNVBLK = 0x2AF - SYS___CRYTRM = 0x2B0 - SYS___DLGHT = 0x2A1 - SYS___ECRTRM = 0x2B1 - SYS___ETOA = 0x2DD - SYS___ETOA_L = 0x2DE - SYS___GDTRM = 0x2AA - SYS___OCLCK = 0x2DA - SYS___OPARGF = 0x2A2 - SYS___OPERRF = 0x2A5 - SYS___OPINDF = 0x2A4 - SYS___OPOPTF = 0x2A3 - SYS___RNDTRM = 0x2AB - SYS___SRCTRM = 0x2F4 - SYS___TZONE = 0x2A0 - SYS___UTXTRM = 0x2F3 - SYS_ASIN = 0x03E - SYS_ISXDIGIT = 0x03B - SYS_SETLOCAL = 0x03A - SYS_SETLOCALE = 0x03A - SYS_SIN = 0x03F - SYS_TOLOWER = 0x03C - SYS_TOUPPER = 0x03D - SYS_ACCEPT_AND_RECV = 0x4F7 - SYS_ATOL = 0x04E - SYS_CHECKSCH = 0x4BC - SYS_CHECKSCHENV = 0x4BC - SYS_CLEARERR = 0x04C - SYS_CONNECTS = 0x4B5 - SYS_CONNECTSERVER = 0x4B5 - SYS_CONNECTW = 0x4B4 - SYS_CONNECTWORKMGR = 0x4B4 - SYS_CONTINUE = 0x4B3 - SYS_CONTINUEWORKUNIT = 0x4B3 - SYS_COPYSIGN = 0x4C2 - SYS_CREATEWO = 0x4B2 - SYS_CREATEWORKUNIT = 0x4B2 - SYS_DELETEWO = 0x4B9 - SYS_DELETEWORKUNIT = 0x4B9 - SYS_DISCONNE = 0x4B6 - SYS_DISCONNECTSERVER = 0x4B6 - SYS_FEOF = 0x04D - SYS_FERROR = 0x04A - SYS_FINITE = 0x4C8 - SYS_GAMMA_R = 0x4E2 - SYS_JOINWORK = 0x4B7 - SYS_JOINWORKUNIT = 0x4B7 - SYS_LEAVEWOR = 0x4B8 - SYS_LEAVEWORKUNIT = 0x4B8 - SYS_LGAMMA_R = 0x4EB - SYS_MATHERR = 0x4D0 - SYS_PERROR = 0x04F - SYS_QUERYMET = 0x4BA - SYS_QUERYMETRICS = 0x4BA - SYS_QUERYSCH = 0x4BB - SYS_QUERYSCHENV = 0x4BB - SYS_REWIND = 0x04B - SYS_SCALBN = 0x4D4 - SYS_SIGNIFIC = 0x4D5 - SYS_SIGNIFICAND = 0x4D5 - SYS___ACOSH_B = 0x4DA - SYS___ACOS_B = 0x4D9 - SYS___ASINH_B = 0x4BE - SYS___ASIN_B = 0x4DB - SYS___ATAN2_B = 0x4DC - SYS___ATANH_B = 0x4DD - SYS___ATAN_B = 0x4BF - SYS___CBRT_B = 0x4C0 - SYS___CEIL_B = 0x4C1 - SYS___COSH_B = 0x4DE - SYS___COS_B = 0x4C3 - SYS___DGHT = 0x4A8 - SYS___ENVN = 0x4B0 - SYS___ERFC_B = 0x4C5 - SYS___ERF_B = 0x4C4 - SYS___EXPM1_B = 0x4C6 - SYS___EXP_B = 0x4DF - SYS___FABS_B = 0x4C7 - SYS___FLOOR_B = 0x4C9 - SYS___FMOD_B = 0x4E0 - SYS___FP_SETMODE = 0x4F8 - SYS___FREXP_B = 0x4CA - SYS___GAMMA_B = 0x4E1 - SYS___GDRR = 0x4A1 - SYS___HRRNO = 0x4A2 - SYS___HYPOT_B = 0x4E3 - SYS___ILOGB_B = 0x4CB - SYS___ISNAN_B = 0x4CC - SYS___J0_B = 0x4E4 - SYS___J1_B = 0x4E6 - SYS___JN_B = 0x4E8 - SYS___LDEXP_B = 0x4CD - SYS___LGAMMA_B = 0x4EA - SYS___LOG10_B = 0x4ED - SYS___LOG1P_B = 0x4CE - SYS___LOGB_B = 0x4CF - SYS___LOGIN = 0x4F5 - SYS___LOG_B = 0x4EC - SYS___MLOCKALL = 0x4B1 - SYS___MODF_B = 0x4D1 - SYS___NEXTAFTER_B = 0x4D2 - SYS___OPENDIR2 = 0x4F3 - SYS___OPEN_STAT = 0x4F6 - SYS___OPND = 0x4A5 - SYS___OPPT = 0x4A6 - SYS___OPRG = 0x4A3 - SYS___OPRR = 0x4A4 - SYS___PID_AFFINITY = 0x4BD - SYS___POW_B = 0x4EE - SYS___READDIR2 = 0x4F4 - SYS___REMAINDER_B = 0x4EF - SYS___RINT_B = 0x4D3 - SYS___SCALB_B = 0x4F0 - SYS___SIGACTIONSET = 0x4FB - SYS___SIGGM = 0x4A7 - SYS___SINH_B = 0x4F1 - SYS___SIN_B = 0x4D6 - SYS___SQRT_B = 0x4F2 - SYS___TANH_B = 0x4D8 - SYS___TAN_B = 0x4D7 - SYS___TRRNO = 0x4AF - SYS___TZNE = 0x4A9 - SYS___TZZN = 0x4AA - SYS___UCREATE = 0x4FC - SYS___UFREE = 0x4FE - SYS___UHEAPREPORT = 0x4FF - SYS___UMALLOC = 0x4FD - SYS___Y0_B = 0x4E5 - SYS___Y1_B = 0x4E7 - SYS___YN_B = 0x4E9 - SYS_ABORT = 0x05C - SYS_ASCTIME_R = 0x5E0 - SYS_ATEXIT = 0x05D - SYS_CONNECTE = 0x5AE - SYS_CONNECTEXPORTIMPORT = 0x5AE - SYS_CTIME_R = 0x5E1 - SYS_DN_COMP = 0x5DF - SYS_DN_EXPAND = 0x5DD - SYS_DN_SKIPNAME = 0x5DE - SYS_EXIT = 0x05A - SYS_EXPORTWO = 0x5A1 - SYS_EXPORTWORKUNIT = 0x5A1 - SYS_EXTRACTW = 0x5A5 - SYS_EXTRACTWORKUNIT = 0x5A5 - SYS_FSEEKO = 0x5C9 - SYS_FTELLO = 0x5C8 - SYS_GETGRGID_R = 0x5E7 - SYS_GETGRNAM_R = 0x5E8 - SYS_GETLOGIN_R = 0x5E9 - SYS_GETPWNAM_R = 0x5EA - SYS_GETPWUID_R = 0x5EB - SYS_GMTIME_R = 0x5E2 - SYS_IMPORTWO = 0x5A3 - SYS_IMPORTWORKUNIT = 0x5A3 - SYS_INET_NTOP = 0x5D3 - SYS_INET_PTON = 0x5D4 - SYS_LLABS = 0x5CE - SYS_LLDIV = 0x5CB - SYS_LOCALTIME_R = 0x5E3 - SYS_PTHREAD_ATFORK = 0x5ED - SYS_PTHREAD_ATTR_GETDETACHSTATE_U98 = 0x5FB - SYS_PTHREAD_ATTR_GETGUARDSIZE = 0x5EE - SYS_PTHREAD_ATTR_GETSCHEDPARAM = 0x5F9 - SYS_PTHREAD_ATTR_GETSTACKADDR = 0x5EF - SYS_PTHREAD_ATTR_SETDETACHSTATE_U98 = 0x5FC - SYS_PTHREAD_ATTR_SETGUARDSIZE = 0x5F0 - SYS_PTHREAD_ATTR_SETSCHEDPARAM = 0x5FA - SYS_PTHREAD_ATTR_SETSTACKADDR = 0x5F1 - SYS_PTHREAD_CONDATTR_GETPSHARED = 0x5F2 - SYS_PTHREAD_CONDATTR_SETPSHARED = 0x5F3 - SYS_PTHREAD_DETACH_U98 = 0x5FD - SYS_PTHREAD_GETCONCURRENCY = 0x5F4 - SYS_PTHREAD_GETSPECIFIC_U98 = 0x5FE - SYS_PTHREAD_KEY_DELETE = 0x5F5 - SYS_PTHREAD_SETCANCELSTATE = 0x5FF - SYS_PTHREAD_SETCONCURRENCY = 0x5F6 - SYS_PTHREAD_SIGMASK = 0x5F7 - SYS_QUERYENC = 0x5AD - SYS_QUERYWORKUNITCLASSIFICATION = 0x5AD - SYS_RAISE = 0x05E - SYS_RAND_R = 0x5E4 - SYS_READDIR_R = 0x5E6 - SYS_REALLOC = 0x05B - SYS_RES_INIT = 0x5D8 - SYS_RES_MKQUERY = 0x5D7 - SYS_RES_QUERY = 0x5D9 - SYS_RES_QUERYDOMAIN = 0x5DC - SYS_RES_SEARCH = 0x5DA - SYS_RES_SEND = 0x5DB - SYS_SETJMP = 0x05F - SYS_SIGQUEUE = 0x5A9 - SYS_STRTOK_R = 0x5E5 - SYS_STRTOLL = 0x5B0 - SYS_STRTOULL = 0x5B1 - SYS_TTYNAME_R = 0x5EC - SYS_UNDOEXPO = 0x5A2 - SYS_UNDOEXPORTWORKUNIT = 0x5A2 - SYS_UNDOIMPO = 0x5A4 - SYS_UNDOIMPORTWORKUNIT = 0x5A4 - SYS_WCSTOLL = 0x5CC - SYS_WCSTOULL = 0x5CD - SYS___ABORT = 0x05C - SYS___CONSOLE2 = 0x5D2 - SYS___CPL = 0x5A6 - SYS___DISCARDDATA = 0x5F8 - SYS___DSA_PREV = 0x5B2 - SYS___EP_FIND = 0x5B3 - SYS___FP_SWAPMODE = 0x5AF - SYS___GETUSERID = 0x5AB - SYS___GET_CPUID = 0x5B9 - SYS___GET_SYSTEM_SETTINGS = 0x5BA - SYS___IPDOMAINNAME = 0x5AC - SYS___MAP_INIT = 0x5A7 - SYS___MAP_SERVICE = 0x5A8 - SYS___MOUNT = 0x5AA - SYS___MSGRCV_TIMED = 0x5B7 - SYS___RES = 0x5D6 - SYS___SEMOP_TIMED = 0x5B8 - SYS___SERVER_THREADS_QUERY = 0x5B4 - SYS_FPRINTF = 0x06D - SYS_FSCANF = 0x06A - SYS_PRINTF = 0x06F - SYS_SETBUF = 0x06B - SYS_SETVBUF = 0x06C - SYS_SSCANF = 0x06E - SYS___CATGETS_A = 0x6C0 - SYS___CHAUDIT_A = 0x6F4 - SYS___CHMOD_A = 0x6E8 - SYS___COLLATE_INIT_A = 0x6AC - SYS___CREAT_A = 0x6F6 - SYS___CTYPE_INIT_A = 0x6AF - SYS___DLLLOAD_A = 0x6DF - SYS___DLLQUERYFN_A = 0x6E0 - SYS___DLLQUERYVAR_A = 0x6E1 - SYS___E2A_L = 0x6E3 - SYS___EXECLE_A = 0x6A0 - SYS___EXECLP_A = 0x6A4 - SYS___EXECVE_A = 0x6C1 - SYS___EXECVP_A = 0x6C2 - SYS___EXECV_A = 0x6B1 - SYS___FPRINTF_A = 0x6FA - SYS___GETADDRINFO_A = 0x6BF - SYS___GETNAMEINFO_A = 0x6C4 - SYS___GET_WCTYPE_STD_A = 0x6AE - SYS___ICONV_OPEN_A = 0x6DE - SYS___IF_INDEXTONAME_A = 0x6DC - SYS___IF_NAMETOINDEX_A = 0x6DB - SYS___ISWCTYPE_A = 0x6B0 - SYS___IS_WCTYPE_STD_A = 0x6B2 - SYS___LOCALECONV_A = 0x6B8 - SYS___LOCALECONV_STD_A = 0x6B9 - SYS___LOCALE_INIT_A = 0x6B7 - SYS___LSTAT_A = 0x6EE - SYS___LSTAT_O_A = 0x6EF - SYS___MKDIR_A = 0x6E9 - SYS___MKFIFO_A = 0x6EC - SYS___MKNOD_A = 0x6F0 - SYS___MONETARY_INIT_A = 0x6BC - SYS___MOUNT_A = 0x6F1 - SYS___NL_CSINFO_A = 0x6D6 - SYS___NL_LANGINFO_A = 0x6BA - SYS___NL_LNAGINFO_STD_A = 0x6BB - SYS___NL_MONINFO_A = 0x6D7 - SYS___NL_NUMINFO_A = 0x6D8 - SYS___NL_RESPINFO_A = 0x6D9 - SYS___NL_TIMINFO_A = 0x6DA - SYS___NUMERIC_INIT_A = 0x6C6 - SYS___OPEN_A = 0x6F7 - SYS___PRINTF_A = 0x6DD - SYS___RESP_INIT_A = 0x6C7 - SYS___RPMATCH_A = 0x6C8 - SYS___RPMATCH_C_A = 0x6C9 - SYS___RPMATCH_STD_A = 0x6CA - SYS___SETLOCALE_A = 0x6F9 - SYS___SPAWNP_A = 0x6C5 - SYS___SPAWN_A = 0x6C3 - SYS___SPRINTF_A = 0x6FB - SYS___STAT_A = 0x6EA - SYS___STAT_O_A = 0x6EB - SYS___STRCOLL_STD_A = 0x6A1 - SYS___STRFMON_A = 0x6BD - SYS___STRFMON_STD_A = 0x6BE - SYS___STRFTIME_A = 0x6CC - SYS___STRFTIME_STD_A = 0x6CD - SYS___STRPTIME_A = 0x6CE - SYS___STRPTIME_STD_A = 0x6CF - SYS___STRXFRM_A = 0x6A2 - SYS___STRXFRM_C_A = 0x6A3 - SYS___STRXFRM_STD_A = 0x6A5 - SYS___SYNTAX_INIT_A = 0x6D4 - SYS___TIME_INIT_A = 0x6CB - SYS___TOD_INIT_A = 0x6D5 - SYS___TOWLOWER_A = 0x6B3 - SYS___TOWLOWER_STD_A = 0x6B4 - SYS___TOWUPPER_A = 0x6B5 - SYS___TOWUPPER_STD_A = 0x6B6 - SYS___UMOUNT_A = 0x6F2 - SYS___VFPRINTF_A = 0x6FC - SYS___VPRINTF_A = 0x6FD - SYS___VSPRINTF_A = 0x6FE - SYS___VSWPRINTF_A = 0x6FF - SYS___WCSCOLL_A = 0x6A6 - SYS___WCSCOLL_C_A = 0x6A7 - SYS___WCSCOLL_STD_A = 0x6A8 - SYS___WCSFTIME_A = 0x6D0 - SYS___WCSFTIME_STD_A = 0x6D1 - SYS___WCSXFRM_A = 0x6A9 - SYS___WCSXFRM_C_A = 0x6AA - SYS___WCSXFRM_STD_A = 0x6AB - SYS___WCTYPE_A = 0x6AD - SYS___W_GETMNTENT_A = 0x6F5 - SYS_____CCSIDTYPE_A = 0x6E6 - SYS_____CHATTR_A = 0x6E2 - SYS_____CSNAMETYPE_A = 0x6E7 - SYS_____OPEN_STAT_A = 0x6ED - SYS_____SPAWN2_A = 0x6D2 - SYS_____SPAWNP2_A = 0x6D3 - SYS_____TOCCSID_A = 0x6E4 - SYS_____TOCSNAME_A = 0x6E5 - SYS_ACL_FREE = 0x7FF - SYS_ACL_INIT = 0x7FE - SYS_FWIDE = 0x7DF - SYS_FWPRINTF = 0x7D1 - SYS_FWRITE = 0x07E - SYS_FWSCANF = 0x7D5 - SYS_GETCHAR = 0x07B - SYS_GETS = 0x07C - SYS_M_CREATE_LAYOUT = 0x7C9 - SYS_M_DESTROY_LAYOUT = 0x7CA - SYS_M_GETVALUES_LAYOUT = 0x7CB - SYS_M_SETVALUES_LAYOUT = 0x7CC - SYS_M_TRANSFORM_LAYOUT = 0x7CD - SYS_M_WTRANSFORM_LAYOUT = 0x7CE - SYS_PREAD = 0x7C7 - SYS_PUTC = 0x07D - SYS_PUTCHAR = 0x07A - SYS_PUTS = 0x07F - SYS_PWRITE = 0x7C8 - SYS_TOWCTRAN = 0x7D8 - SYS_TOWCTRANS = 0x7D8 - SYS_UNATEXIT = 0x7B5 - SYS_VFWPRINT = 0x7D3 - SYS_VFWPRINTF = 0x7D3 - SYS_VWPRINTF = 0x7D4 - SYS_WCTRANS = 0x7D7 - SYS_WPRINTF = 0x7D2 - SYS_WSCANF = 0x7D6 - SYS___ASCTIME_R_A = 0x7A1 - SYS___BASENAME_A = 0x7DC - SYS___BTOWC_A = 0x7E4 - SYS___CDUMP_A = 0x7B7 - SYS___CEE3DMP_A = 0x7B6 - SYS___CEILF_H = 0x7F4 - SYS___CEILL_H = 0x7F5 - SYS___CEIL_H = 0x7EA - SYS___CRYPT_A = 0x7BE - SYS___CSNAP_A = 0x7B8 - SYS___CTEST_A = 0x7B9 - SYS___CTIME_R_A = 0x7A2 - SYS___CTRACE_A = 0x7BA - SYS___DBM_OPEN_A = 0x7E6 - SYS___DIRNAME_A = 0x7DD - SYS___FABSF_H = 0x7FA - SYS___FABSL_H = 0x7FB - SYS___FABS_H = 0x7ED - SYS___FGETWC_A = 0x7AA - SYS___FGETWS_A = 0x7AD - SYS___FLOORF_H = 0x7F6 - SYS___FLOORL_H = 0x7F7 - SYS___FLOOR_H = 0x7EB - SYS___FPUTWC_A = 0x7A5 - SYS___FPUTWS_A = 0x7A8 - SYS___GETTIMEOFDAY_A = 0x7AE - SYS___GETWCHAR_A = 0x7AC - SYS___GETWC_A = 0x7AB - SYS___GLOB_A = 0x7DE - SYS___GMTIME_A = 0x7AF - SYS___GMTIME_R_A = 0x7B0 - SYS___INET_PTON_A = 0x7BC - SYS___J0_H = 0x7EE - SYS___J1_H = 0x7EF - SYS___JN_H = 0x7F0 - SYS___LOCALTIME_A = 0x7B1 - SYS___LOCALTIME_R_A = 0x7B2 - SYS___MALLOC24 = 0x7FC - SYS___MALLOC31 = 0x7FD - SYS___MKTIME_A = 0x7B3 - SYS___MODFF_H = 0x7F8 - SYS___MODFL_H = 0x7F9 - SYS___MODF_H = 0x7EC - SYS___OPENDIR_A = 0x7C2 - SYS___OSNAME = 0x7E0 - SYS___PUTWCHAR_A = 0x7A7 - SYS___PUTWC_A = 0x7A6 - SYS___READDIR_A = 0x7C3 - SYS___STRTOLL_A = 0x7A3 - SYS___STRTOULL_A = 0x7A4 - SYS___SYSLOG_A = 0x7BD - SYS___TZZNA = 0x7B4 - SYS___UNGETWC_A = 0x7A9 - SYS___UTIME_A = 0x7A0 - SYS___VFPRINTF2_A = 0x7E7 - SYS___VPRINTF2_A = 0x7E8 - SYS___VSPRINTF2_A = 0x7E9 - SYS___VSWPRNTF2_A = 0x7BB - SYS___WCSTOD_A = 0x7D9 - SYS___WCSTOL_A = 0x7DA - SYS___WCSTOUL_A = 0x7DB - SYS___WCTOB_A = 0x7E5 - SYS___Y0_H = 0x7F1 - SYS___Y1_H = 0x7F2 - SYS___YN_H = 0x7F3 - SYS_____OPENDIR2_A = 0x7BF - SYS_____OSNAME_A = 0x7E1 - SYS_____READDIR2_A = 0x7C0 - SYS_DLCLOSE = 0x8DF - SYS_DLERROR = 0x8E0 - SYS_DLOPEN = 0x8DD - SYS_DLSYM = 0x8DE - SYS_FLOCKFILE = 0x8D3 - SYS_FTRYLOCKFILE = 0x8D4 - SYS_FUNLOCKFILE = 0x8D5 - SYS_GETCHAR_UNLOCKED = 0x8D7 - SYS_GETC_UNLOCKED = 0x8D6 - SYS_PUTCHAR_UNLOCKED = 0x8D9 - SYS_PUTC_UNLOCKED = 0x8D8 - SYS_SNPRINTF = 0x8DA - SYS_VSNPRINTF = 0x8DB - SYS_WCSCSPN = 0x08B - SYS_WCSLEN = 0x08C - SYS_WCSNCAT = 0x08D - SYS_WCSNCMP = 0x08A - SYS_WCSNCPY = 0x08F - SYS_WCSSPN = 0x08E - SYS___ABSF_H = 0x8E7 - SYS___ABSL_H = 0x8E8 - SYS___ABS_H = 0x8E6 - SYS___ACOSF_H = 0x8EA - SYS___ACOSH_H = 0x8EC - SYS___ACOSL_H = 0x8EB - SYS___ACOS_H = 0x8E9 - SYS___ASINF_H = 0x8EE - SYS___ASINH_H = 0x8F0 - SYS___ASINL_H = 0x8EF - SYS___ASIN_H = 0x8ED - SYS___ATAN2F_H = 0x8F8 - SYS___ATAN2L_H = 0x8F9 - SYS___ATAN2_H = 0x8F7 - SYS___ATANF_H = 0x8F2 - SYS___ATANHF_H = 0x8F5 - SYS___ATANHL_H = 0x8F6 - SYS___ATANH_H = 0x8F4 - SYS___ATANL_H = 0x8F3 - SYS___ATAN_H = 0x8F1 - SYS___CBRT_H = 0x8FA - SYS___COPYSIGNF_H = 0x8FB - SYS___COPYSIGNL_H = 0x8FC - SYS___COSF_H = 0x8FE - SYS___COSL_H = 0x8FF - SYS___COS_H = 0x8FD - SYS___DLERROR_A = 0x8D2 - SYS___DLOPEN_A = 0x8D0 - SYS___DLSYM_A = 0x8D1 - SYS___GETUTXENT_A = 0x8C6 - SYS___GETUTXID_A = 0x8C7 - SYS___GETUTXLINE_A = 0x8C8 - SYS___ITOA = 0x8AA - SYS___ITOA_A = 0x8B0 - SYS___LE_CONDITION_TOKEN_BUILD = 0x8A5 - SYS___LE_MSG_ADD_INSERT = 0x8A6 - SYS___LE_MSG_GET = 0x8A7 - SYS___LE_MSG_GET_AND_WRITE = 0x8A8 - SYS___LE_MSG_WRITE = 0x8A9 - SYS___LLTOA = 0x8AE - SYS___LLTOA_A = 0x8B4 - SYS___LTOA = 0x8AC - SYS___LTOA_A = 0x8B2 - SYS___PUTCHAR_UNLOCKED_A = 0x8CC - SYS___PUTC_UNLOCKED_A = 0x8CB - SYS___PUTUTXLINE_A = 0x8C9 - SYS___RESET_EXCEPTION_HANDLER = 0x8E3 - SYS___REXEC_A = 0x8C4 - SYS___REXEC_AF_A = 0x8C5 - SYS___SET_EXCEPTION_HANDLER = 0x8E2 - SYS___SNPRINTF_A = 0x8CD - SYS___SUPERKILL = 0x8A4 - SYS___TCGETATTR_A = 0x8A1 - SYS___TCSETATTR_A = 0x8A2 - SYS___ULLTOA = 0x8AF - SYS___ULLTOA_A = 0x8B5 - SYS___ULTOA = 0x8AD - SYS___ULTOA_A = 0x8B3 - SYS___UTOA = 0x8AB - SYS___UTOA_A = 0x8B1 - SYS___VHM_EVENT = 0x8E4 - SYS___VSNPRINTF_A = 0x8CE - SYS_____GETENV_A = 0x8C3 - SYS_____UTMPXNAME_A = 0x8CA - SYS_CACOSH = 0x9A0 - SYS_CACOSHF = 0x9A3 - SYS_CACOSHL = 0x9A6 - SYS_CARG = 0x9A9 - SYS_CARGF = 0x9AC - SYS_CARGL = 0x9AF - SYS_CASIN = 0x9B2 - SYS_CASINF = 0x9B5 - SYS_CASINH = 0x9BB - SYS_CASINHF = 0x9BE - SYS_CASINHL = 0x9C1 - SYS_CASINL = 0x9B8 - SYS_CATAN = 0x9C4 - SYS_CATANF = 0x9C7 - SYS_CATANH = 0x9CD - SYS_CATANHF = 0x9D0 - SYS_CATANHL = 0x9D3 - SYS_CATANL = 0x9CA - SYS_CCOS = 0x9D6 - SYS_CCOSF = 0x9D9 - SYS_CCOSH = 0x9DF - SYS_CCOSHF = 0x9E2 - SYS_CCOSHL = 0x9E5 - SYS_CCOSL = 0x9DC - SYS_CEXP = 0x9E8 - SYS_CEXPF = 0x9EB - SYS_CEXPL = 0x9EE - SYS_CIMAG = 0x9F1 - SYS_CIMAGF = 0x9F4 - SYS_CIMAGL = 0x9F7 - SYS_CLOGF = 0x9FD - SYS_MEMCHR = 0x09B - SYS_MEMCMP = 0x09A - SYS_STRCOLL = 0x09C - SYS_STRNCMP = 0x09D - SYS_STRRCHR = 0x09F - SYS_STRXFRM = 0x09E - SYS___CACOSHF_B = 0x9A4 - SYS___CACOSHF_H = 0x9A5 - SYS___CACOSHL_B = 0x9A7 - SYS___CACOSHL_H = 0x9A8 - SYS___CACOSH_B = 0x9A1 - SYS___CACOSH_H = 0x9A2 - SYS___CARGF_B = 0x9AD - SYS___CARGF_H = 0x9AE - SYS___CARGL_B = 0x9B0 - SYS___CARGL_H = 0x9B1 - SYS___CARG_B = 0x9AA - SYS___CARG_H = 0x9AB - SYS___CASINF_B = 0x9B6 - SYS___CASINF_H = 0x9B7 - SYS___CASINHF_B = 0x9BF - SYS___CASINHF_H = 0x9C0 - SYS___CASINHL_B = 0x9C2 - SYS___CASINHL_H = 0x9C3 - SYS___CASINH_B = 0x9BC - SYS___CASINH_H = 0x9BD - SYS___CASINL_B = 0x9B9 - SYS___CASINL_H = 0x9BA - SYS___CASIN_B = 0x9B3 - SYS___CASIN_H = 0x9B4 - SYS___CATANF_B = 0x9C8 - SYS___CATANF_H = 0x9C9 - SYS___CATANHF_B = 0x9D1 - SYS___CATANHF_H = 0x9D2 - SYS___CATANHL_B = 0x9D4 - SYS___CATANHL_H = 0x9D5 - SYS___CATANH_B = 0x9CE - SYS___CATANH_H = 0x9CF - SYS___CATANL_B = 0x9CB - SYS___CATANL_H = 0x9CC - SYS___CATAN_B = 0x9C5 - SYS___CATAN_H = 0x9C6 - SYS___CCOSF_B = 0x9DA - SYS___CCOSF_H = 0x9DB - SYS___CCOSHF_B = 0x9E3 - SYS___CCOSHF_H = 0x9E4 - SYS___CCOSHL_B = 0x9E6 - SYS___CCOSHL_H = 0x9E7 - SYS___CCOSH_B = 0x9E0 - SYS___CCOSH_H = 0x9E1 - SYS___CCOSL_B = 0x9DD - SYS___CCOSL_H = 0x9DE - SYS___CCOS_B = 0x9D7 - SYS___CCOS_H = 0x9D8 - SYS___CEXPF_B = 0x9EC - SYS___CEXPF_H = 0x9ED - SYS___CEXPL_B = 0x9EF - SYS___CEXPL_H = 0x9F0 - SYS___CEXP_B = 0x9E9 - SYS___CEXP_H = 0x9EA - SYS___CIMAGF_B = 0x9F5 - SYS___CIMAGF_H = 0x9F6 - SYS___CIMAGL_B = 0x9F8 - SYS___CIMAGL_H = 0x9F9 - SYS___CIMAG_B = 0x9F2 - SYS___CIMAG_H = 0x9F3 - SYS___CLOG = 0x9FA - SYS___CLOGF_B = 0x9FE - SYS___CLOGF_H = 0x9FF - SYS___CLOG_B = 0x9FB - SYS___CLOG_H = 0x9FC - SYS_ISWCTYPE = 0x10C - SYS_ISWXDIGI = 0x10A - SYS_ISWXDIGIT = 0x10A - SYS_MBSINIT = 0x10F - SYS_TOWLOWER = 0x10D - SYS_TOWUPPER = 0x10E - SYS_WCTYPE = 0x10B - SYS_WCSSTR = 0x11B - SYS___RPMTCH = 0x11A - SYS_WCSTOD = 0x12E - SYS_WCSTOK = 0x12C - SYS_WCSTOL = 0x12D - SYS_WCSTOUL = 0x12F - SYS_FGETWC = 0x13C - SYS_FGETWS = 0x13D - SYS_FPUTWC = 0x13E - SYS_FPUTWS = 0x13F - SYS_REGERROR = 0x13B - SYS_REGFREE = 0x13A - SYS_COLLEQUIV = 0x14F - SYS_COLLTOSTR = 0x14E - SYS_ISMCCOLLEL = 0x14C - SYS_STRTOCOLL = 0x14D - SYS_DLLFREE = 0x16F - SYS_DLLQUERYFN = 0x16D - SYS_DLLQUERYVAR = 0x16E - SYS_GETMCCOLL = 0x16A - SYS_GETWMCCOLL = 0x16B - SYS___ERR2AD = 0x16C - SYS_CFSETOSPEED = 0x17A - SYS_CHDIR = 0x17B - SYS_CHMOD = 0x17C - SYS_CHOWN = 0x17D - SYS_CLOSE = 0x17E - SYS_CLOSEDIR = 0x17F - SYS_LOG = 0x017 - SYS_COSH = 0x018 - SYS_FCHMOD = 0x18A - SYS_FCHOWN = 0x18B - SYS_FCNTL = 0x18C - SYS_FILENO = 0x18D - SYS_FORK = 0x18E - SYS_FPATHCONF = 0x18F - SYS_GETLOGIN = 0x19A - SYS_GETPGRP = 0x19C - SYS_GETPID = 0x19D - SYS_GETPPID = 0x19E - SYS_GETPWNAM = 0x19F - SYS_TANH = 0x019 - SYS_W_GETMNTENT = 0x19B - SYS_POW = 0x020 - SYS_PTHREAD_SELF = 0x20A - SYS_PTHREAD_SETINTR = 0x20B - SYS_PTHREAD_SETINTRTYPE = 0x20C - SYS_PTHREAD_SETSPECIFIC = 0x20D - SYS_PTHREAD_TESTINTR = 0x20E - SYS_PTHREAD_YIELD = 0x20F - SYS_SQRT = 0x021 - SYS_FLOOR = 0x022 - SYS_J1 = 0x023 - SYS_WCSPBRK = 0x23F - SYS_BSEARCH = 0x24C - SYS_FABS = 0x024 - SYS_GETENV = 0x24A - SYS_LDIV = 0x24D - SYS_SYSTEM = 0x24B - SYS_FMOD = 0x025 - SYS___RETHROW = 0x25F - SYS___THROW = 0x25E - SYS_J0 = 0x026 - SYS_PUTENV = 0x26A - SYS___GETENV = 0x26F - SYS_SEMCTL = 0x27A - SYS_SEMGET = 0x27B - SYS_SEMOP = 0x27C - SYS_SHMAT = 0x27D - SYS_SHMCTL = 0x27E - SYS_SHMDT = 0x27F - SYS_YN = 0x027 - SYS_JN = 0x028 - SYS_SIGALTSTACK = 0x28A - SYS_SIGHOLD = 0x28B - SYS_SIGIGNORE = 0x28C - SYS_SIGINTERRUPT = 0x28D - SYS_SIGPAUSE = 0x28E - SYS_SIGRELSE = 0x28F - SYS_GETOPT = 0x29A - SYS_GETSUBOPT = 0x29D - SYS_LCHOWN = 0x29B - SYS_SETPGRP = 0x29E - SYS_TRUNCATE = 0x29C - SYS_Y0 = 0x029 - SYS___GDERR = 0x29F - SYS_ISALPHA = 0x030 - SYS_VFORK = 0x30F - SYS__LONGJMP = 0x30D - SYS__SETJMP = 0x30E - SYS_GLOB = 0x31A - SYS_GLOBFREE = 0x31B - SYS_ISALNUM = 0x031 - SYS_PUTW = 0x31C - SYS_SEEKDIR = 0x31D - SYS_TELLDIR = 0x31E - SYS_TEMPNAM = 0x31F - SYS_GETTIMEOFDAY_R = 0x32E - SYS_ISLOWER = 0x032 - SYS_LGAMMA = 0x32C - SYS_REMAINDER = 0x32A - SYS_SCALB = 0x32B - SYS_SYNC = 0x32F - SYS_TTYSLOT = 0x32D - SYS_ENDPROTOENT = 0x33A - SYS_ENDSERVENT = 0x33B - SYS_GETHOSTBYADDR = 0x33D - SYS_GETHOSTBYADDR_R = 0x33C - SYS_GETHOSTBYNAME = 0x33F - SYS_GETHOSTBYNAME_R = 0x33E - SYS_ISCNTRL = 0x033 - SYS_GETSERVBYNAME = 0x34A - SYS_GETSERVBYPORT = 0x34B - SYS_GETSERVENT = 0x34C - SYS_GETSOCKNAME = 0x34D - SYS_GETSOCKOPT = 0x34E - SYS_INET_ADDR = 0x34F - SYS_ISDIGIT = 0x034 - SYS_ISGRAPH = 0x035 - SYS_SELECT = 0x35B - SYS_SELECTEX = 0x35C - SYS_SEND = 0x35D - SYS_SENDTO = 0x35F - SYS_CHROOT = 0x36A - SYS_ISNAN = 0x36D - SYS_ISUPPER = 0x036 - SYS_ULIMIT = 0x36C - SYS_UTIMES = 0x36E - SYS_W_STATVFS = 0x36B - SYS___H_ERRNO = 0x36F - SYS_GRANTPT = 0x37A - SYS_ISPRINT = 0x037 - SYS_TCGETSID = 0x37C - SYS_UNLOCKPT = 0x37B - SYS___TCGETCP = 0x37D - SYS___TCSETCP = 0x37E - SYS___TCSETTABLES = 0x37F - SYS_ISPUNCT = 0x038 - SYS_NLIST = 0x38C - SYS___IPDBCS = 0x38D - SYS___IPDSPX = 0x38E - SYS___IPMSGC = 0x38F - SYS___STHOSTENT = 0x38B - SYS___STSERVENT = 0x38A - SYS_ISSPACE = 0x039 - SYS_COS = 0x040 - SYS_T_ALLOC = 0x40A - SYS_T_BIND = 0x40B - SYS_T_CLOSE = 0x40C - SYS_T_CONNECT = 0x40D - SYS_T_ERROR = 0x40E - SYS_T_FREE = 0x40F - SYS_TAN = 0x041 - SYS_T_RCVREL = 0x41A - SYS_T_RCVUDATA = 0x41B - SYS_T_RCVUDERR = 0x41C - SYS_T_SND = 0x41D - SYS_T_SNDDIS = 0x41E - SYS_T_SNDREL = 0x41F - SYS_GETPMSG = 0x42A - SYS_ISASTREAM = 0x42B - SYS_PUTMSG = 0x42C - SYS_PUTPMSG = 0x42D - SYS_SINH = 0x042 - SYS___ISPOSIXON = 0x42E - SYS___OPENMVSREL = 0x42F - SYS_ACOS = 0x043 - SYS_ATAN = 0x044 - SYS_ATAN2 = 0x045 - SYS_FTELL = 0x046 - SYS_FGETPOS = 0x047 - SYS_SOCK_DEBUG = 0x47A - SYS_SOCK_DO_TESTSTOR = 0x47D - SYS_TAKESOCKET = 0x47E - SYS___SERVER_INIT = 0x47F - SYS_FSEEK = 0x048 - SYS___IPHOST = 0x48B - SYS___IPNODE = 0x48C - SYS___SERVER_CLASSIFY_CREATE = 0x48D - SYS___SERVER_CLASSIFY_DESTROY = 0x48E - SYS___SERVER_CLASSIFY_RESET = 0x48F - SYS___SMF_RECORD = 0x48A - SYS_FSETPOS = 0x049 - SYS___FNWSA = 0x49B - SYS___SPAWN2 = 0x49D - SYS___SPAWNP2 = 0x49E - SYS_ATOF = 0x050 - SYS_PTHREAD_MUTEXATTR_GETPSHARED = 0x50A - SYS_PTHREAD_MUTEXATTR_SETPSHARED = 0x50B - SYS_PTHREAD_RWLOCK_DESTROY = 0x50C - SYS_PTHREAD_RWLOCK_INIT = 0x50D - SYS_PTHREAD_RWLOCK_RDLOCK = 0x50E - SYS_PTHREAD_RWLOCK_TRYRDLOCK = 0x50F - SYS_ATOI = 0x051 - SYS___FP_CLASS = 0x51D - SYS___FP_CLR_FLAG = 0x51A - SYS___FP_FINITE = 0x51E - SYS___FP_ISNAN = 0x51F - SYS___FP_RAISE_XCP = 0x51C - SYS___FP_READ_FLAG = 0x51B - SYS_RAND = 0x052 - SYS_SIGTIMEDWAIT = 0x52D - SYS_SIGWAITINFO = 0x52E - SYS___CHKBFP = 0x52F - SYS___FPC_RS = 0x52C - SYS___FPC_RW = 0x52A - SYS___FPC_SM = 0x52B - SYS_STRTOD = 0x053 - SYS_STRTOL = 0x054 - SYS_STRTOUL = 0x055 - SYS_MALLOC = 0x056 - SYS_SRAND = 0x057 - SYS_CALLOC = 0x058 - SYS_FREE = 0x059 - SYS___OSENV = 0x59F - SYS___W_PIOCTL = 0x59E - SYS_LONGJMP = 0x060 - SYS___FLOORF_B = 0x60A - SYS___FLOORL_B = 0x60B - SYS___FREXPF_B = 0x60C - SYS___FREXPL_B = 0x60D - SYS___LDEXPF_B = 0x60E - SYS___LDEXPL_B = 0x60F - SYS_SIGNAL = 0x061 - SYS___ATAN2F_B = 0x61A - SYS___ATAN2L_B = 0x61B - SYS___COSHF_B = 0x61C - SYS___COSHL_B = 0x61D - SYS___EXPF_B = 0x61E - SYS___EXPL_B = 0x61F - SYS_TMPNAM = 0x062 - SYS___ABSF_B = 0x62A - SYS___ABSL_B = 0x62C - SYS___ABS_B = 0x62B - SYS___FMODF_B = 0x62D - SYS___FMODL_B = 0x62E - SYS___MODFF_B = 0x62F - SYS_ATANL = 0x63A - SYS_CEILF = 0x63B - SYS_CEILL = 0x63C - SYS_COSF = 0x63D - SYS_COSHF = 0x63F - SYS_COSL = 0x63E - SYS_REMOVE = 0x063 - SYS_POWL = 0x64A - SYS_RENAME = 0x064 - SYS_SINF = 0x64B - SYS_SINHF = 0x64F - SYS_SINL = 0x64C - SYS_SQRTF = 0x64D - SYS_SQRTL = 0x64E - SYS_BTOWC = 0x65F - SYS_FREXPL = 0x65A - SYS_LDEXPF = 0x65B - SYS_LDEXPL = 0x65C - SYS_MODFF = 0x65D - SYS_MODFL = 0x65E - SYS_TMPFILE = 0x065 - SYS_FREOPEN = 0x066 - SYS___CHARMAP_INIT_A = 0x66E - SYS___GETHOSTBYADDR_R_A = 0x66C - SYS___GETHOSTBYNAME_A = 0x66A - SYS___GETHOSTBYNAME_R_A = 0x66D - SYS___MBLEN_A = 0x66F - SYS___RES_INIT_A = 0x66B - SYS_FCLOSE = 0x067 - SYS___GETGRGID_R_A = 0x67D - SYS___WCSTOMBS_A = 0x67A - SYS___WCSTOMBS_STD_A = 0x67B - SYS___WCSWIDTH_A = 0x67C - SYS___WCSWIDTH_ASIA = 0x67F - SYS___WCSWIDTH_STD_A = 0x67E - SYS_FFLUSH = 0x068 - SYS___GETLOGIN_R_A = 0x68E - SYS___GETPWNAM_R_A = 0x68C - SYS___GETPWUID_R_A = 0x68D - SYS___TTYNAME_R_A = 0x68F - SYS___WCWIDTH_ASIA = 0x68B - SYS___WCWIDTH_STD_A = 0x68A - SYS_FOPEN = 0x069 - SYS___REGEXEC_A = 0x69A - SYS___REGEXEC_STD_A = 0x69B - SYS___REGFREE_A = 0x69C - SYS___REGFREE_STD_A = 0x69D - SYS___STRCOLL_A = 0x69E - SYS___STRCOLL_C_A = 0x69F - SYS_SCANF = 0x070 - SYS___A64L_A = 0x70C - SYS___ECVT_A = 0x70D - SYS___FCVT_A = 0x70E - SYS___GCVT_A = 0x70F - SYS___STRTOUL_A = 0x70A - SYS_____AE_CORRESTBL_QUERY_A = 0x70B - SYS_SPRINTF = 0x071 - SYS___ACCESS_A = 0x71F - SYS___CATOPEN_A = 0x71E - SYS___GETOPT_A = 0x71D - SYS___REALPATH_A = 0x71A - SYS___SETENV_A = 0x71B - SYS___SYSTEM_A = 0x71C - SYS_FGETC = 0x072 - SYS___GAI_STRERROR_A = 0x72F - SYS___RMDIR_A = 0x72A - SYS___STATVFS_A = 0x72B - SYS___SYMLINK_A = 0x72C - SYS___TRUNCATE_A = 0x72D - SYS___UNLINK_A = 0x72E - SYS_VFPRINTF = 0x073 - SYS___ISSPACE_A = 0x73A - SYS___ISUPPER_A = 0x73B - SYS___ISWALNUM_A = 0x73F - SYS___ISXDIGIT_A = 0x73C - SYS___TOLOWER_A = 0x73D - SYS___TOUPPER_A = 0x73E - SYS_VPRINTF = 0x074 - SYS___CONFSTR_A = 0x74B - SYS___FDOPEN_A = 0x74E - SYS___FLDATA_A = 0x74F - SYS___FTOK_A = 0x74C - SYS___ISWXDIGIT_A = 0x74A - SYS___MKTEMP_A = 0x74D - SYS_VSPRINTF = 0x075 - SYS___GETGRGID_A = 0x75A - SYS___GETGRNAM_A = 0x75B - SYS___GETGROUPSBYNAME_A = 0x75C - SYS___GETHOSTENT_A = 0x75D - SYS___GETHOSTNAME_A = 0x75E - SYS___GETLOGIN_A = 0x75F - SYS_GETC = 0x076 - SYS___CREATEWORKUNIT_A = 0x76A - SYS___CTERMID_A = 0x76B - SYS___FMTMSG_A = 0x76C - SYS___INITGROUPS_A = 0x76D - SYS___MSGRCV_A = 0x76F - SYS_____LOGIN_A = 0x76E - SYS_FGETS = 0x077 - SYS___STRCASECMP_A = 0x77B - SYS___STRNCASECMP_A = 0x77C - SYS___TTYNAME_A = 0x77D - SYS___UNAME_A = 0x77E - SYS___UTIMES_A = 0x77F - SYS_____SERVER_PWU_A = 0x77A - SYS_FPUTC = 0x078 - SYS___CREAT_O_A = 0x78E - SYS___ENVNA = 0x78F - SYS___FREAD_A = 0x78A - SYS___FWRITE_A = 0x78B - SYS___ISASCII = 0x78D - SYS___OPEN_O_A = 0x78C - SYS_FPUTS = 0x079 - SYS___ASCTIME_A = 0x79C - SYS___CTIME_A = 0x79D - SYS___GETDATE_A = 0x79E - SYS___GETSERVBYPORT_A = 0x79A - SYS___GETSERVENT_A = 0x79B - SYS___TZSET_A = 0x79F - SYS_ACL_FROM_TEXT = 0x80C - SYS_ACL_SET_FD = 0x80A - SYS_ACL_SET_FILE = 0x80B - SYS_ACL_SORT = 0x80E - SYS_ACL_TO_TEXT = 0x80D - SYS_UNGETC = 0x080 - SYS___SHUTDOWN_REGISTRATION = 0x80F - SYS_FREAD = 0x081 - SYS_FREEADDRINFO = 0x81A - SYS_GAI_STRERROR = 0x81B - SYS_REXEC_AF = 0x81C - SYS___DYNALLOC_A = 0x81F - SYS___POE = 0x81D - SYS_WCSTOMBS = 0x082 - SYS___INET_ADDR_A = 0x82F - SYS___NLIST_A = 0x82A - SYS_____TCGETCP_A = 0x82B - SYS_____TCSETCP_A = 0x82C - SYS_____W_PIOCTL_A = 0x82E - SYS_MBTOWC = 0x083 - SYS___CABEND = 0x83D - SYS___LE_CIB_GET = 0x83E - SYS___RECVMSG_A = 0x83B - SYS___SENDMSG_A = 0x83A - SYS___SET_LAA_FOR_JIT = 0x83F - SYS_____LCHATTR_A = 0x83C - SYS_WCTOMB = 0x084 - SYS___CBRTL_B = 0x84A - SYS___COPYSIGNF_B = 0x84B - SYS___COPYSIGNL_B = 0x84C - SYS___COTANF_B = 0x84D - SYS___COTANL_B = 0x84F - SYS___COTAN_B = 0x84E - SYS_MBSTOWCS = 0x085 - SYS___LOG1PL_B = 0x85A - SYS___LOG2F_B = 0x85B - SYS___LOG2L_B = 0x85D - SYS___LOG2_B = 0x85C - SYS___REMAINDERF_B = 0x85E - SYS___REMAINDERL_B = 0x85F - SYS_ACOSHF = 0x86E - SYS_ACOSHL = 0x86F - SYS_WCSCPY = 0x086 - SYS___ERFCF_B = 0x86D - SYS___ERFF_B = 0x86C - SYS___LROUNDF_B = 0x86A - SYS___LROUND_B = 0x86B - SYS_COTANL = 0x87A - SYS_EXP2F = 0x87B - SYS_EXP2L = 0x87C - SYS_EXPM1F = 0x87D - SYS_EXPM1L = 0x87E - SYS_FDIMF = 0x87F - SYS_WCSCAT = 0x087 - SYS___COTANL = 0x87A - SYS_REMAINDERF = 0x88A - SYS_REMAINDERL = 0x88B - SYS_REMAINDF = 0x88A - SYS_REMAINDL = 0x88B - SYS_REMQUO = 0x88D - SYS_REMQUOF = 0x88C - SYS_REMQUOL = 0x88E - SYS_TGAMMAF = 0x88F - SYS_WCSCHR = 0x088 - SYS_ERFCF = 0x89B - SYS_ERFCL = 0x89C - SYS_ERFL = 0x89A - SYS_EXP2 = 0x89E - SYS_WCSCMP = 0x089 - SYS___EXP2_B = 0x89D - SYS___FAR_JUMP = 0x89F - SYS_ABS = 0x090 - SYS___ERFCL_H = 0x90A - SYS___EXPF_H = 0x90C - SYS___EXPL_H = 0x90D - SYS___EXPM1_H = 0x90E - SYS___EXP_H = 0x90B - SYS___FDIM_H = 0x90F - SYS_DIV = 0x091 - SYS___LOG2F_H = 0x91F - SYS___LOG2_H = 0x91E - SYS___LOGB_H = 0x91D - SYS___LOGF_H = 0x91B - SYS___LOGL_H = 0x91C - SYS___LOG_H = 0x91A - SYS_LABS = 0x092 - SYS___POWL_H = 0x92A - SYS___REMAINDER_H = 0x92B - SYS___RINT_H = 0x92C - SYS___SCALB_H = 0x92D - SYS___SINF_H = 0x92F - SYS___SIN_H = 0x92E - SYS_STRNCPY = 0x093 - SYS___TANHF_H = 0x93B - SYS___TANHL_H = 0x93C - SYS___TANH_H = 0x93A - SYS___TGAMMAF_H = 0x93E - SYS___TGAMMA_H = 0x93D - SYS___TRUNC_H = 0x93F - SYS_MEMCPY = 0x094 - SYS_VFWSCANF = 0x94A - SYS_VSWSCANF = 0x94E - SYS_VWSCANF = 0x94C - SYS_INET6_RTH_ADD = 0x95D - SYS_INET6_RTH_INIT = 0x95C - SYS_INET6_RTH_REVERSE = 0x95E - SYS_INET6_RTH_SEGMENTS = 0x95F - SYS_INET6_RTH_SPACE = 0x95B - SYS_MEMMOVE = 0x095 - SYS_WCSTOLD = 0x95A - SYS_STRCPY = 0x096 - SYS_STRCMP = 0x097 - SYS_CABS = 0x98E - SYS_STRCAT = 0x098 - SYS___CABS_B = 0x98F - SYS___POW_II = 0x98A - SYS___POW_II_B = 0x98B - SYS___POW_II_H = 0x98C - SYS_CACOSF = 0x99A - SYS_CACOSL = 0x99D - SYS_STRNCAT = 0x099 - SYS___CACOSF_B = 0x99B - SYS___CACOSF_H = 0x99C - SYS___CACOSL_B = 0x99E - SYS___CACOSL_H = 0x99F - SYS_ISWALPHA = 0x100 - SYS_ISWBLANK = 0x101 - SYS___ISWBLK = 0x101 - SYS_ISWCNTRL = 0x102 - SYS_ISWDIGIT = 0x103 - SYS_ISWGRAPH = 0x104 - SYS_ISWLOWER = 0x105 - SYS_ISWPRINT = 0x106 - SYS_ISWPUNCT = 0x107 - SYS_ISWSPACE = 0x108 - SYS_ISWUPPER = 0x109 - SYS_WCTOB = 0x110 - SYS_MBRLEN = 0x111 - SYS_MBRTOWC = 0x112 - SYS_MBSRTOWC = 0x113 - SYS_MBSRTOWCS = 0x113 - SYS_WCRTOMB = 0x114 - SYS_WCSRTOMB = 0x115 - SYS_WCSRTOMBS = 0x115 - SYS___CSID = 0x116 - SYS___WCSID = 0x117 - SYS_STRPTIME = 0x118 - SYS___STRPTM = 0x118 - SYS_STRFMON = 0x119 - SYS_WCSCOLL = 0x130 - SYS_WCSXFRM = 0x131 - SYS_WCSWIDTH = 0x132 - SYS_WCWIDTH = 0x133 - SYS_WCSFTIME = 0x134 - SYS_SWPRINTF = 0x135 - SYS_VSWPRINT = 0x136 - SYS_VSWPRINTF = 0x136 - SYS_SWSCANF = 0x137 - SYS_REGCOMP = 0x138 - SYS_REGEXEC = 0x139 - SYS_GETWC = 0x140 - SYS_GETWCHAR = 0x141 - SYS_PUTWC = 0x142 - SYS_PUTWCHAR = 0x143 - SYS_UNGETWC = 0x144 - SYS_ICONV_OPEN = 0x145 - SYS_ICONV = 0x146 - SYS_ICONV_CLOSE = 0x147 - SYS_COLLRANGE = 0x150 - SYS_CCLASS = 0x151 - SYS_COLLORDER = 0x152 - SYS___DEMANGLE = 0x154 - SYS_FDOPEN = 0x155 - SYS___ERRNO = 0x156 - SYS___ERRNO2 = 0x157 - SYS___TERROR = 0x158 - SYS_MAXCOLL = 0x169 - SYS_DLLLOAD = 0x170 - SYS__EXIT = 0x174 - SYS_ACCESS = 0x175 - SYS_ALARM = 0x176 - SYS_CFGETISPEED = 0x177 - SYS_CFGETOSPEED = 0x178 - SYS_CFSETISPEED = 0x179 - SYS_CREAT = 0x180 - SYS_CTERMID = 0x181 - SYS_DUP = 0x182 - SYS_DUP2 = 0x183 - SYS_EXECL = 0x184 - SYS_EXECLE = 0x185 - SYS_EXECLP = 0x186 - SYS_EXECV = 0x187 - SYS_EXECVE = 0x188 - SYS_EXECVP = 0x189 - SYS_FSTAT = 0x190 - SYS_FSYNC = 0x191 - SYS_FTRUNCATE = 0x192 - SYS_GETCWD = 0x193 - SYS_GETEGID = 0x194 - SYS_GETEUID = 0x195 - SYS_GETGID = 0x196 - SYS_GETGRGID = 0x197 - SYS_GETGRNAM = 0x198 - SYS_GETGROUPS = 0x199 - SYS_PTHREAD_MUTEXATTR_DESTROY = 0x200 - SYS_PTHREAD_MUTEXATTR_SETKIND_NP = 0x201 - SYS_PTHREAD_MUTEXATTR_GETKIND_NP = 0x202 - SYS_PTHREAD_MUTEX_INIT = 0x203 - SYS_PTHREAD_MUTEX_DESTROY = 0x204 - SYS_PTHREAD_MUTEX_LOCK = 0x205 - SYS_PTHREAD_MUTEX_TRYLOCK = 0x206 - SYS_PTHREAD_MUTEX_UNLOCK = 0x207 - SYS_PTHREAD_ONCE = 0x209 - SYS_TW_OPEN = 0x210 - SYS_TW_FCNTL = 0x211 - SYS_PTHREAD_JOIN_D4_NP = 0x212 - SYS_PTHREAD_CONDATTR_SETKIND_NP = 0x213 - SYS_PTHREAD_CONDATTR_GETKIND_NP = 0x214 - SYS_EXTLINK_NP = 0x215 - SYS___PASSWD = 0x216 - SYS_SETGROUPS = 0x217 - SYS_INITGROUPS = 0x218 - SYS_WCSRCHR = 0x240 - SYS_SVC99 = 0x241 - SYS___SVC99 = 0x241 - SYS_WCSWCS = 0x242 - SYS_LOCALECO = 0x243 - SYS_LOCALECONV = 0x243 - SYS___LIBREL = 0x244 - SYS_RELEASE = 0x245 - SYS___RLSE = 0x245 - SYS_FLOCATE = 0x246 - SYS___FLOCT = 0x246 - SYS_FDELREC = 0x247 - SYS___FDLREC = 0x247 - SYS_FETCH = 0x248 - SYS___FETCH = 0x248 - SYS_QSORT = 0x249 - SYS___CLEANUPCATCH = 0x260 - SYS___CATCHMATCH = 0x261 - SYS___CLEAN2UPCATCH = 0x262 - SYS_GETPRIORITY = 0x270 - SYS_NICE = 0x271 - SYS_SETPRIORITY = 0x272 - SYS_GETITIMER = 0x273 - SYS_SETITIMER = 0x274 - SYS_MSGCTL = 0x275 - SYS_MSGGET = 0x276 - SYS_MSGRCV = 0x277 - SYS_MSGSND = 0x278 - SYS_MSGXRCV = 0x279 - SYS___MSGXR = 0x279 - SYS_SHMGET = 0x280 - SYS___GETIPC = 0x281 - SYS_SETGRENT = 0x282 - SYS_GETGRENT = 0x283 - SYS_ENDGRENT = 0x284 - SYS_SETPWENT = 0x285 - SYS_GETPWENT = 0x286 - SYS_ENDPWENT = 0x287 - SYS_BSD_SIGNAL = 0x288 - SYS_KILLPG = 0x289 - SYS_SIGSET = 0x290 - SYS_SIGSTACK = 0x291 - SYS_GETRLIMIT = 0x292 - SYS_SETRLIMIT = 0x293 - SYS_GETRUSAGE = 0x294 - SYS_MMAP = 0x295 - SYS_MPROTECT = 0x296 - SYS_MSYNC = 0x297 - SYS_MUNMAP = 0x298 - SYS_CONFSTR = 0x299 - SYS___NDMTRM = 0x300 - SYS_FTOK = 0x301 - SYS_BASENAME = 0x302 - SYS_DIRNAME = 0x303 - SYS_GETDTABLESIZE = 0x304 - SYS_MKSTEMP = 0x305 - SYS_MKTEMP = 0x306 - SYS_NFTW = 0x307 - SYS_GETWD = 0x308 - SYS_LOCKF = 0x309 - SYS_WORDEXP = 0x310 - SYS_WORDFREE = 0x311 - SYS_GETPGID = 0x312 - SYS_GETSID = 0x313 - SYS___UTMPXNAME = 0x314 - SYS_CUSERID = 0x315 - SYS_GETPASS = 0x316 - SYS_FNMATCH = 0x317 - SYS_FTW = 0x318 - SYS_GETW = 0x319 - SYS_ACOSH = 0x320 - SYS_ASINH = 0x321 - SYS_ATANH = 0x322 - SYS_CBRT = 0x323 - SYS_EXPM1 = 0x324 - SYS_ILOGB = 0x325 - SYS_LOGB = 0x326 - SYS_LOG1P = 0x327 - SYS_NEXTAFTER = 0x328 - SYS_RINT = 0x329 - SYS_SPAWN = 0x330 - SYS_SPAWNP = 0x331 - SYS_GETLOGIN_UU = 0x332 - SYS_ECVT = 0x333 - SYS_FCVT = 0x334 - SYS_GCVT = 0x335 - SYS_ACCEPT = 0x336 - SYS_BIND = 0x337 - SYS_CONNECT = 0x338 - SYS_ENDHOSTENT = 0x339 - SYS_GETHOSTENT = 0x340 - SYS_GETHOSTID = 0x341 - SYS_GETHOSTNAME = 0x342 - SYS_GETNETBYADDR = 0x343 - SYS_GETNETBYNAME = 0x344 - SYS_GETNETENT = 0x345 - SYS_GETPEERNAME = 0x346 - SYS_GETPROTOBYNAME = 0x347 - SYS_GETPROTOBYNUMBER = 0x348 - SYS_GETPROTOENT = 0x349 - SYS_INET_LNAOF = 0x350 - SYS_INET_MAKEADDR = 0x351 - SYS_INET_NETOF = 0x352 - SYS_INET_NETWORK = 0x353 - SYS_INET_NTOA = 0x354 - SYS_IOCTL = 0x355 - SYS_LISTEN = 0x356 - SYS_READV = 0x357 - SYS_RECV = 0x358 - SYS_RECVFROM = 0x359 - SYS_SETHOSTENT = 0x360 - SYS_SETNETENT = 0x361 - SYS_SETPEER = 0x362 - SYS_SETPROTOENT = 0x363 - SYS_SETSERVENT = 0x364 - SYS_SETSOCKOPT = 0x365 - SYS_SHUTDOWN = 0x366 - SYS_SOCKET = 0x367 - SYS_SOCKETPAIR = 0x368 - SYS_WRITEV = 0x369 - SYS_ENDNETENT = 0x370 - SYS_CLOSELOG = 0x371 - SYS_OPENLOG = 0x372 - SYS_SETLOGMASK = 0x373 - SYS_SYSLOG = 0x374 - SYS_PTSNAME = 0x375 - SYS_SETREUID = 0x376 - SYS_SETREGID = 0x377 - SYS_REALPATH = 0x378 - SYS___SIGNGAM = 0x379 - SYS_POLL = 0x380 - SYS_REXEC = 0x381 - SYS___ISASCII2 = 0x382 - SYS___TOASCII2 = 0x383 - SYS_CHPRIORITY = 0x384 - SYS_PTHREAD_ATTR_SETSYNCTYPE_NP = 0x385 - SYS_PTHREAD_ATTR_GETSYNCTYPE_NP = 0x386 - SYS_PTHREAD_SET_LIMIT_NP = 0x387 - SYS___STNETENT = 0x388 - SYS___STPROTOENT = 0x389 - SYS___SELECT1 = 0x390 - SYS_PTHREAD_SECURITY_NP = 0x391 - SYS___CHECK_RESOURCE_AUTH_NP = 0x392 - SYS___CONVERT_ID_NP = 0x393 - SYS___OPENVMREL = 0x394 - SYS_WMEMCHR = 0x395 - SYS_WMEMCMP = 0x396 - SYS_WMEMCPY = 0x397 - SYS_WMEMMOVE = 0x398 - SYS_WMEMSET = 0x399 - SYS___FPUTWC = 0x400 - SYS___PUTWC = 0x401 - SYS___PWCHAR = 0x402 - SYS___WCSFTM = 0x403 - SYS___WCSTOK = 0x404 - SYS___WCWDTH = 0x405 - SYS_T_ACCEPT = 0x409 - SYS_T_GETINFO = 0x410 - SYS_T_GETPROTADDR = 0x411 - SYS_T_GETSTATE = 0x412 - SYS_T_LISTEN = 0x413 - SYS_T_LOOK = 0x414 - SYS_T_OPEN = 0x415 - SYS_T_OPTMGMT = 0x416 - SYS_T_RCV = 0x417 - SYS_T_RCVCONNECT = 0x418 - SYS_T_RCVDIS = 0x419 - SYS_T_SNDUDATA = 0x420 - SYS_T_STRERROR = 0x421 - SYS_T_SYNC = 0x422 - SYS_T_UNBIND = 0x423 - SYS___T_ERRNO = 0x424 - SYS___RECVMSG2 = 0x425 - SYS___SENDMSG2 = 0x426 - SYS_FATTACH = 0x427 - SYS_FDETACH = 0x428 - SYS_GETMSG = 0x429 - SYS_GETCONTEXT = 0x430 - SYS_SETCONTEXT = 0x431 - SYS_MAKECONTEXT = 0x432 - SYS_SWAPCONTEXT = 0x433 - SYS_PTHREAD_GETSPECIFIC_D8_NP = 0x434 - SYS_GETCLIENTID = 0x470 - SYS___GETCLIENTID = 0x471 - SYS_GETSTABLESIZE = 0x472 - SYS_GETIBMOPT = 0x473 - SYS_GETIBMSOCKOPT = 0x474 - SYS_GIVESOCKET = 0x475 - SYS_IBMSFLUSH = 0x476 - SYS_MAXDESC = 0x477 - SYS_SETIBMOPT = 0x478 - SYS_SETIBMSOCKOPT = 0x479 - SYS___SERVER_PWU = 0x480 - SYS_PTHREAD_TAG_NP = 0x481 - SYS___CONSOLE = 0x482 - SYS___WSINIT = 0x483 - SYS___IPTCPN = 0x489 - SYS___SERVER_CLASSIFY = 0x490 - SYS___HEAPRPT = 0x496 - SYS___ISBFP = 0x500 - SYS___FP_CAST = 0x501 - SYS___CERTIFICATE = 0x502 - SYS_SEND_FILE = 0x503 - SYS_AIO_CANCEL = 0x504 - SYS_AIO_ERROR = 0x505 - SYS_AIO_READ = 0x506 - SYS_AIO_RETURN = 0x507 - SYS_AIO_SUSPEND = 0x508 - SYS_AIO_WRITE = 0x509 - SYS_PTHREAD_RWLOCK_TRYWRLOCK = 0x510 - SYS_PTHREAD_RWLOCK_UNLOCK = 0x511 - SYS_PTHREAD_RWLOCK_WRLOCK = 0x512 - SYS_PTHREAD_RWLOCKATTR_GETPSHARED = 0x513 - SYS_PTHREAD_RWLOCKATTR_SETPSHARED = 0x514 - SYS_PTHREAD_RWLOCKATTR_INIT = 0x515 - SYS_PTHREAD_RWLOCKATTR_DESTROY = 0x516 - SYS___CTTBL = 0x517 - SYS_PTHREAD_MUTEXATTR_SETTYPE = 0x518 - SYS_PTHREAD_MUTEXATTR_GETTYPE = 0x519 - SYS___FP_UNORDERED = 0x520 - SYS___FP_READ_RND = 0x521 - SYS___FP_READ_RND_B = 0x522 - SYS___FP_SWAP_RND = 0x523 - SYS___FP_SWAP_RND_B = 0x524 - SYS___FP_LEVEL = 0x525 - SYS___FP_BTOH = 0x526 - SYS___FP_HTOB = 0x527 - SYS___FPC_RD = 0x528 - SYS___FPC_WR = 0x529 - SYS_PTHREAD_SETCANCELTYPE = 0x600 - SYS_PTHREAD_TESTCANCEL = 0x601 - SYS___ATANF_B = 0x602 - SYS___ATANL_B = 0x603 - SYS___CEILF_B = 0x604 - SYS___CEILL_B = 0x605 - SYS___COSF_B = 0x606 - SYS___COSL_B = 0x607 - SYS___FABSF_B = 0x608 - SYS___FABSL_B = 0x609 - SYS___SINF_B = 0x610 - SYS___SINL_B = 0x611 - SYS___TANF_B = 0x612 - SYS___TANL_B = 0x613 - SYS___TANHF_B = 0x614 - SYS___TANHL_B = 0x615 - SYS___ACOSF_B = 0x616 - SYS___ACOSL_B = 0x617 - SYS___ASINF_B = 0x618 - SYS___ASINL_B = 0x619 - SYS___LOGF_B = 0x620 - SYS___LOGL_B = 0x621 - SYS___LOG10F_B = 0x622 - SYS___LOG10L_B = 0x623 - SYS___POWF_B = 0x624 - SYS___POWL_B = 0x625 - SYS___SINHF_B = 0x626 - SYS___SINHL_B = 0x627 - SYS___SQRTF_B = 0x628 - SYS___SQRTL_B = 0x629 - SYS___MODFL_B = 0x630 - SYS_ABSF = 0x631 - SYS_ABSL = 0x632 - SYS_ACOSF = 0x633 - SYS_ACOSL = 0x634 - SYS_ASINF = 0x635 - SYS_ASINL = 0x636 - SYS_ATAN2F = 0x637 - SYS_ATAN2L = 0x638 - SYS_ATANF = 0x639 - SYS_COSHL = 0x640 - SYS_EXPF = 0x641 - SYS_EXPL = 0x642 - SYS_TANHF = 0x643 - SYS_TANHL = 0x644 - SYS_LOG10F = 0x645 - SYS_LOG10L = 0x646 - SYS_LOGF = 0x647 - SYS_LOGL = 0x648 - SYS_POWF = 0x649 - SYS_SINHL = 0x650 - SYS_TANF = 0x651 - SYS_TANL = 0x652 - SYS_FABSF = 0x653 - SYS_FABSL = 0x654 - SYS_FLOORF = 0x655 - SYS_FLOORL = 0x656 - SYS_FMODF = 0x657 - SYS_FMODL = 0x658 - SYS_FREXPF = 0x659 - SYS___CHATTR = 0x660 - SYS___FCHATTR = 0x661 - SYS___TOCCSID = 0x662 - SYS___CSNAMETYPE = 0x663 - SYS___TOCSNAME = 0x664 - SYS___CCSIDTYPE = 0x665 - SYS___AE_CORRESTBL_QUERY = 0x666 - SYS___AE_AUTOCONVERT_STATE = 0x667 - SYS_DN_FIND = 0x668 - SYS___GETHOSTBYADDR_A = 0x669 - SYS___MBLEN_SB_A = 0x670 - SYS___MBLEN_STD_A = 0x671 - SYS___MBLEN_UTF = 0x672 - SYS___MBSTOWCS_A = 0x673 - SYS___MBSTOWCS_STD_A = 0x674 - SYS___MBTOWC_A = 0x675 - SYS___MBTOWC_ISO1 = 0x676 - SYS___MBTOWC_SBCS = 0x677 - SYS___MBTOWC_MBCS = 0x678 - SYS___MBTOWC_UTF = 0x679 - SYS___CSID_A = 0x680 - SYS___CSID_STD_A = 0x681 - SYS___WCSID_A = 0x682 - SYS___WCSID_STD_A = 0x683 - SYS___WCTOMB_A = 0x684 - SYS___WCTOMB_ISO1 = 0x685 - SYS___WCTOMB_STD_A = 0x686 - SYS___WCTOMB_UTF = 0x687 - SYS___WCWIDTH_A = 0x688 - SYS___GETGRNAM_R_A = 0x689 - SYS___READDIR_R_A = 0x690 - SYS___E2A_S = 0x691 - SYS___FNMATCH_A = 0x692 - SYS___FNMATCH_C_A = 0x693 - SYS___EXECL_A = 0x694 - SYS___FNMATCH_STD_A = 0x695 - SYS___REGCOMP_A = 0x696 - SYS___REGCOMP_STD_A = 0x697 - SYS___REGERROR_A = 0x698 - SYS___REGERROR_STD_A = 0x699 - SYS___SWPRINTF_A = 0x700 - SYS___FSCANF_A = 0x701 - SYS___SCANF_A = 0x702 - SYS___SSCANF_A = 0x703 - SYS___SWSCANF_A = 0x704 - SYS___ATOF_A = 0x705 - SYS___ATOI_A = 0x706 - SYS___ATOL_A = 0x707 - SYS___STRTOD_A = 0x708 - SYS___STRTOL_A = 0x709 - SYS___L64A_A = 0x710 - SYS___STRERROR_A = 0x711 - SYS___PERROR_A = 0x712 - SYS___FETCH_A = 0x713 - SYS___GETENV_A = 0x714 - SYS___MKSTEMP_A = 0x717 - SYS___PTSNAME_A = 0x718 - SYS___PUTENV_A = 0x719 - SYS___CHDIR_A = 0x720 - SYS___CHOWN_A = 0x721 - SYS___CHROOT_A = 0x722 - SYS___GETCWD_A = 0x723 - SYS___GETWD_A = 0x724 - SYS___LCHOWN_A = 0x725 - SYS___LINK_A = 0x726 - SYS___PATHCONF_A = 0x727 - SYS___IF_NAMEINDEX_A = 0x728 - SYS___READLINK_A = 0x729 - SYS___EXTLINK_NP_A = 0x730 - SYS___ISALNUM_A = 0x731 - SYS___ISALPHA_A = 0x732 - SYS___A2E_S = 0x733 - SYS___ISCNTRL_A = 0x734 - SYS___ISDIGIT_A = 0x735 - SYS___ISGRAPH_A = 0x736 - SYS___ISLOWER_A = 0x737 - SYS___ISPRINT_A = 0x738 - SYS___ISPUNCT_A = 0x739 - SYS___ISWALPHA_A = 0x740 - SYS___A2E_L = 0x741 - SYS___ISWCNTRL_A = 0x742 - SYS___ISWDIGIT_A = 0x743 - SYS___ISWGRAPH_A = 0x744 - SYS___ISWLOWER_A = 0x745 - SYS___ISWPRINT_A = 0x746 - SYS___ISWPUNCT_A = 0x747 - SYS___ISWSPACE_A = 0x748 - SYS___ISWUPPER_A = 0x749 - SYS___REMOVE_A = 0x750 - SYS___RENAME_A = 0x751 - SYS___TMPNAM_A = 0x752 - SYS___FOPEN_A = 0x753 - SYS___FREOPEN_A = 0x754 - SYS___CUSERID_A = 0x755 - SYS___POPEN_A = 0x756 - SYS___TEMPNAM_A = 0x757 - SYS___FTW_A = 0x758 - SYS___GETGRENT_A = 0x759 - SYS___INET_NTOP_A = 0x760 - SYS___GETPASS_A = 0x761 - SYS___GETPWENT_A = 0x762 - SYS___GETPWNAM_A = 0x763 - SYS___GETPWUID_A = 0x764 - SYS_____CHECK_RESOURCE_AUTH_NP_A = 0x765 - SYS___CHECKSCHENV_A = 0x766 - SYS___CONNECTSERVER_A = 0x767 - SYS___CONNECTWORKMGR_A = 0x768 - SYS_____CONSOLE_A = 0x769 - SYS___MSGSND_A = 0x770 - SYS___MSGXRCV_A = 0x771 - SYS___NFTW_A = 0x772 - SYS_____PASSWD_A = 0x773 - SYS___PTHREAD_SECURITY_NP_A = 0x774 - SYS___QUERYMETRICS_A = 0x775 - SYS___QUERYSCHENV = 0x776 - SYS___READV_A = 0x777 - SYS_____SERVER_CLASSIFY_A = 0x778 - SYS_____SERVER_INIT_A = 0x779 - SYS___W_GETPSENT_A = 0x780 - SYS___WRITEV_A = 0x781 - SYS___W_STATFS_A = 0x782 - SYS___W_STATVFS_A = 0x783 - SYS___FPUTC_A = 0x784 - SYS___PUTCHAR_A = 0x785 - SYS___PUTS_A = 0x786 - SYS___FGETS_A = 0x787 - SYS___GETS_A = 0x788 - SYS___FPUTS_A = 0x789 - SYS___PUTC_A = 0x790 - SYS___AE_THREAD_SETMODE = 0x791 - SYS___AE_THREAD_SWAPMODE = 0x792 - SYS___GETNETBYADDR_A = 0x793 - SYS___GETNETBYNAME_A = 0x794 - SYS___GETNETENT_A = 0x795 - SYS___GETPROTOBYNAME_A = 0x796 - SYS___GETPROTOBYNUMBER_A = 0x797 - SYS___GETPROTOENT_A = 0x798 - SYS___GETSERVBYNAME_A = 0x799 - SYS_ACL_FIRST_ENTRY = 0x800 - SYS_ACL_GET_ENTRY = 0x801 - SYS_ACL_VALID = 0x802 - SYS_ACL_CREATE_ENTRY = 0x803 - SYS_ACL_DELETE_ENTRY = 0x804 - SYS_ACL_UPDATE_ENTRY = 0x805 - SYS_ACL_DELETE_FD = 0x806 - SYS_ACL_DELETE_FILE = 0x807 - SYS_ACL_GET_FD = 0x808 - SYS_ACL_GET_FILE = 0x809 - SYS___ERFL_B = 0x810 - SYS___ERFCL_B = 0x811 - SYS___LGAMMAL_B = 0x812 - SYS___SETHOOKEVENTS = 0x813 - SYS_IF_NAMETOINDEX = 0x814 - SYS_IF_INDEXTONAME = 0x815 - SYS_IF_NAMEINDEX = 0x816 - SYS_IF_FREENAMEINDEX = 0x817 - SYS_GETADDRINFO = 0x818 - SYS_GETNAMEINFO = 0x819 - SYS___DYNFREE_A = 0x820 - SYS___RES_QUERY_A = 0x821 - SYS___RES_SEARCH_A = 0x822 - SYS___RES_QUERYDOMAIN_A = 0x823 - SYS___RES_MKQUERY_A = 0x824 - SYS___RES_SEND_A = 0x825 - SYS___DN_EXPAND_A = 0x826 - SYS___DN_SKIPNAME_A = 0x827 - SYS___DN_COMP_A = 0x828 - SYS___DN_FIND_A = 0x829 - SYS___INET_NTOA_A = 0x830 - SYS___INET_NETWORK_A = 0x831 - SYS___ACCEPT_A = 0x832 - SYS___ACCEPT_AND_RECV_A = 0x833 - SYS___BIND_A = 0x834 - SYS___CONNECT_A = 0x835 - SYS___GETPEERNAME_A = 0x836 - SYS___GETSOCKNAME_A = 0x837 - SYS___RECVFROM_A = 0x838 - SYS___SENDTO_A = 0x839 - SYS___LCHATTR = 0x840 - SYS___WRITEDOWN = 0x841 - SYS_PTHREAD_MUTEX_INIT2 = 0x842 - SYS___ACOSHF_B = 0x843 - SYS___ACOSHL_B = 0x844 - SYS___ASINHF_B = 0x845 - SYS___ASINHL_B = 0x846 - SYS___ATANHF_B = 0x847 - SYS___ATANHL_B = 0x848 - SYS___CBRTF_B = 0x849 - SYS___EXP2F_B = 0x850 - SYS___EXP2L_B = 0x851 - SYS___EXPM1F_B = 0x852 - SYS___EXPM1L_B = 0x853 - SYS___FDIMF_B = 0x854 - SYS___FDIM_B = 0x855 - SYS___FDIML_B = 0x856 - SYS___HYPOTF_B = 0x857 - SYS___HYPOTL_B = 0x858 - SYS___LOG1PF_B = 0x859 - SYS___REMQUOF_B = 0x860 - SYS___REMQUO_B = 0x861 - SYS___REMQUOL_B = 0x862 - SYS___TGAMMAF_B = 0x863 - SYS___TGAMMA_B = 0x864 - SYS___TGAMMAL_B = 0x865 - SYS___TRUNCF_B = 0x866 - SYS___TRUNC_B = 0x867 - SYS___TRUNCL_B = 0x868 - SYS___LGAMMAF_B = 0x869 - SYS_ASINHF = 0x870 - SYS_ASINHL = 0x871 - SYS_ATANHF = 0x872 - SYS_ATANHL = 0x873 - SYS_CBRTF = 0x874 - SYS_CBRTL = 0x875 - SYS_COPYSIGNF = 0x876 - SYS_CPYSIGNF = 0x876 - SYS_COPYSIGNL = 0x877 - SYS_CPYSIGNL = 0x877 - SYS_COTANF = 0x878 - SYS___COTANF = 0x878 - SYS_COTAN = 0x879 - SYS___COTAN = 0x879 - SYS_FDIM = 0x881 - SYS_FDIML = 0x882 - SYS_HYPOTF = 0x883 - SYS_HYPOTL = 0x884 - SYS_LOG1PF = 0x885 - SYS_LOG1PL = 0x886 - SYS_LOG2F = 0x887 - SYS_LOG2 = 0x888 - SYS_LOG2L = 0x889 - SYS_TGAMMA = 0x890 - SYS_TGAMMAL = 0x891 - SYS_TRUNCF = 0x892 - SYS_TRUNC = 0x893 - SYS_TRUNCL = 0x894 - SYS_LGAMMAF = 0x895 - SYS_LGAMMAL = 0x896 - SYS_LROUNDF = 0x897 - SYS_LROUND = 0x898 - SYS_ERFF = 0x899 - SYS___COSHF_H = 0x900 - SYS___COSHL_H = 0x901 - SYS___COTAN_H = 0x902 - SYS___COTANF_H = 0x903 - SYS___COTANL_H = 0x904 - SYS___ERF_H = 0x905 - SYS___ERFF_H = 0x906 - SYS___ERFL_H = 0x907 - SYS___ERFC_H = 0x908 - SYS___ERFCF_H = 0x909 - SYS___FDIMF_H = 0x910 - SYS___FDIML_H = 0x911 - SYS___FMOD_H = 0x912 - SYS___FMODF_H = 0x913 - SYS___FMODL_H = 0x914 - SYS___GAMMA_H = 0x915 - SYS___HYPOT_H = 0x916 - SYS___ILOGB_H = 0x917 - SYS___LGAMMA_H = 0x918 - SYS___LGAMMAF_H = 0x919 - SYS___LOG2L_H = 0x920 - SYS___LOG1P_H = 0x921 - SYS___LOG10_H = 0x922 - SYS___LOG10F_H = 0x923 - SYS___LOG10L_H = 0x924 - SYS___LROUND_H = 0x925 - SYS___LROUNDF_H = 0x926 - SYS___NEXTAFTER_H = 0x927 - SYS___POW_H = 0x928 - SYS___POWF_H = 0x929 - SYS___SINL_H = 0x930 - SYS___SINH_H = 0x931 - SYS___SINHF_H = 0x932 - SYS___SINHL_H = 0x933 - SYS___SQRT_H = 0x934 - SYS___SQRTF_H = 0x935 - SYS___SQRTL_H = 0x936 - SYS___TAN_H = 0x937 - SYS___TANF_H = 0x938 - SYS___TANL_H = 0x939 - SYS___TRUNCF_H = 0x940 - SYS___TRUNCL_H = 0x941 - SYS___COSH_H = 0x942 - SYS___LE_DEBUG_SET_RESUME_MCH = 0x943 - SYS_VFSCANF = 0x944 - SYS_VSCANF = 0x946 - SYS_VSSCANF = 0x948 - SYS_IMAXABS = 0x950 - SYS_IMAXDIV = 0x951 - SYS_STRTOIMAX = 0x952 - SYS_STRTOUMAX = 0x953 - SYS_WCSTOIMAX = 0x954 - SYS_WCSTOUMAX = 0x955 - SYS_ATOLL = 0x956 - SYS_STRTOF = 0x957 - SYS_STRTOLD = 0x958 - SYS_WCSTOF = 0x959 - SYS_INET6_RTH_GETADDR = 0x960 - SYS_INET6_OPT_INIT = 0x961 - SYS_INET6_OPT_APPEND = 0x962 - SYS_INET6_OPT_FINISH = 0x963 - SYS_INET6_OPT_SET_VAL = 0x964 - SYS_INET6_OPT_NEXT = 0x965 - SYS_INET6_OPT_FIND = 0x966 - SYS_INET6_OPT_GET_VAL = 0x967 - SYS___POW_I = 0x987 - SYS___POW_I_B = 0x988 - SYS___POW_I_H = 0x989 - SYS___CABS_H = 0x990 - SYS_CABSF = 0x991 - SYS___CABSF_B = 0x992 - SYS___CABSF_H = 0x993 - SYS_CABSL = 0x994 - SYS___CABSL_B = 0x995 - SYS___CABSL_H = 0x996 - SYS_CACOS = 0x997 - SYS___CACOS_B = 0x998 - SYS___CACOS_H = 0x999 + SYS_LOG = 0x17 // 23 + SYS_COSH = 0x18 // 24 + SYS_TANH = 0x19 // 25 + SYS_EXP = 0x1A // 26 + SYS_MODF = 0x1B // 27 + SYS_LOG10 = 0x1C // 28 + SYS_FREXP = 0x1D // 29 + SYS_LDEXP = 0x1E // 30 + SYS_CEIL = 0x1F // 31 + SYS_POW = 0x20 // 32 + SYS_SQRT = 0x21 // 33 + SYS_FLOOR = 0x22 // 34 + SYS_J1 = 0x23 // 35 + SYS_FABS = 0x24 // 36 + SYS_FMOD = 0x25 // 37 + SYS_J0 = 0x26 // 38 + SYS_YN = 0x27 // 39 + SYS_JN = 0x28 // 40 + SYS_Y0 = 0x29 // 41 + SYS_Y1 = 0x2A // 42 + SYS_HYPOT = 0x2B // 43 + SYS_ERF = 0x2C // 44 + SYS_ERFC = 0x2D // 45 + SYS_GAMMA = 0x2E // 46 + SYS_ISALPHA = 0x30 // 48 + SYS_ISALNUM = 0x31 // 49 + SYS_ISLOWER = 0x32 // 50 + SYS_ISCNTRL = 0x33 // 51 + SYS_ISDIGIT = 0x34 // 52 + SYS_ISGRAPH = 0x35 // 53 + SYS_ISUPPER = 0x36 // 54 + SYS_ISPRINT = 0x37 // 55 + SYS_ISPUNCT = 0x38 // 56 + SYS_ISSPACE = 0x39 // 57 + SYS_SETLOCAL = 0x3A // 58 + SYS_SETLOCALE = 0x3A // 58 + SYS_ISXDIGIT = 0x3B // 59 + SYS_TOLOWER = 0x3C // 60 + SYS_TOUPPER = 0x3D // 61 + SYS_ASIN = 0x3E // 62 + SYS_SIN = 0x3F // 63 + SYS_COS = 0x40 // 64 + SYS_TAN = 0x41 // 65 + SYS_SINH = 0x42 // 66 + SYS_ACOS = 0x43 // 67 + SYS_ATAN = 0x44 // 68 + SYS_ATAN2 = 0x45 // 69 + SYS_FTELL = 0x46 // 70 + SYS_FGETPOS = 0x47 // 71 + SYS_FSEEK = 0x48 // 72 + SYS_FSETPOS = 0x49 // 73 + SYS_FERROR = 0x4A // 74 + SYS_REWIND = 0x4B // 75 + SYS_CLEARERR = 0x4C // 76 + SYS_FEOF = 0x4D // 77 + SYS_ATOL = 0x4E // 78 + SYS_PERROR = 0x4F // 79 + SYS_ATOF = 0x50 // 80 + SYS_ATOI = 0x51 // 81 + SYS_RAND = 0x52 // 82 + SYS_STRTOD = 0x53 // 83 + SYS_STRTOL = 0x54 // 84 + SYS_STRTOUL = 0x55 // 85 + SYS_MALLOC = 0x56 // 86 + SYS_SRAND = 0x57 // 87 + SYS_CALLOC = 0x58 // 88 + SYS_FREE = 0x59 // 89 + SYS_EXIT = 0x5A // 90 + SYS_REALLOC = 0x5B // 91 + SYS_ABORT = 0x5C // 92 + SYS___ABORT = 0x5C // 92 + SYS_ATEXIT = 0x5D // 93 + SYS_RAISE = 0x5E // 94 + SYS_SETJMP = 0x5F // 95 + SYS_LONGJMP = 0x60 // 96 + SYS_SIGNAL = 0x61 // 97 + SYS_TMPNAM = 0x62 // 98 + SYS_REMOVE = 0x63 // 99 + SYS_RENAME = 0x64 // 100 + SYS_TMPFILE = 0x65 // 101 + SYS_FREOPEN = 0x66 // 102 + SYS_FCLOSE = 0x67 // 103 + SYS_FFLUSH = 0x68 // 104 + SYS_FOPEN = 0x69 // 105 + SYS_FSCANF = 0x6A // 106 + SYS_SETBUF = 0x6B // 107 + SYS_SETVBUF = 0x6C // 108 + SYS_FPRINTF = 0x6D // 109 + SYS_SSCANF = 0x6E // 110 + SYS_PRINTF = 0x6F // 111 + SYS_SCANF = 0x70 // 112 + SYS_SPRINTF = 0x71 // 113 + SYS_FGETC = 0x72 // 114 + SYS_VFPRINTF = 0x73 // 115 + SYS_VPRINTF = 0x74 // 116 + SYS_VSPRINTF = 0x75 // 117 + SYS_GETC = 0x76 // 118 + SYS_FGETS = 0x77 // 119 + SYS_FPUTC = 0x78 // 120 + SYS_FPUTS = 0x79 // 121 + SYS_PUTCHAR = 0x7A // 122 + SYS_GETCHAR = 0x7B // 123 + SYS_GETS = 0x7C // 124 + SYS_PUTC = 0x7D // 125 + SYS_FWRITE = 0x7E // 126 + SYS_PUTS = 0x7F // 127 + SYS_UNGETC = 0x80 // 128 + SYS_FREAD = 0x81 // 129 + SYS_WCSTOMBS = 0x82 // 130 + SYS_MBTOWC = 0x83 // 131 + SYS_WCTOMB = 0x84 // 132 + SYS_MBSTOWCS = 0x85 // 133 + SYS_WCSCPY = 0x86 // 134 + SYS_WCSCAT = 0x87 // 135 + SYS_WCSCHR = 0x88 // 136 + SYS_WCSCMP = 0x89 // 137 + SYS_WCSNCMP = 0x8A // 138 + SYS_WCSCSPN = 0x8B // 139 + SYS_WCSLEN = 0x8C // 140 + SYS_WCSNCAT = 0x8D // 141 + SYS_WCSSPN = 0x8E // 142 + SYS_WCSNCPY = 0x8F // 143 + SYS_ABS = 0x90 // 144 + SYS_DIV = 0x91 // 145 + SYS_LABS = 0x92 // 146 + SYS_STRNCPY = 0x93 // 147 + SYS_MEMCPY = 0x94 // 148 + SYS_MEMMOVE = 0x95 // 149 + SYS_STRCPY = 0x96 // 150 + SYS_STRCMP = 0x97 // 151 + SYS_STRCAT = 0x98 // 152 + SYS_STRNCAT = 0x99 // 153 + SYS_MEMCMP = 0x9A // 154 + SYS_MEMCHR = 0x9B // 155 + SYS_STRCOLL = 0x9C // 156 + SYS_STRNCMP = 0x9D // 157 + SYS_STRXFRM = 0x9E // 158 + SYS_STRRCHR = 0x9F // 159 + SYS_STRCHR = 0xA0 // 160 + SYS_STRCSPN = 0xA1 // 161 + SYS_STRPBRK = 0xA2 // 162 + SYS_MEMSET = 0xA3 // 163 + SYS_STRSPN = 0xA4 // 164 + SYS_STRSTR = 0xA5 // 165 + SYS_STRTOK = 0xA6 // 166 + SYS_DIFFTIME = 0xA7 // 167 + SYS_STRERROR = 0xA8 // 168 + SYS_STRLEN = 0xA9 // 169 + SYS_CLOCK = 0xAA // 170 + SYS_CTIME = 0xAB // 171 + SYS_MKTIME = 0xAC // 172 + SYS_TIME = 0xAD // 173 + SYS_ASCTIME = 0xAE // 174 + SYS_MBLEN = 0xAF // 175 + SYS_GMTIME = 0xB0 // 176 + SYS_LOCALTIM = 0xB1 // 177 + SYS_LOCALTIME = 0xB1 // 177 + SYS_STRFTIME = 0xB2 // 178 + SYS___GETCB = 0xB4 // 180 + SYS_FUPDATE = 0xB5 // 181 + SYS___FUPDT = 0xB5 // 181 + SYS_CLRMEMF = 0xBD // 189 + SYS___CLRMF = 0xBD // 189 + SYS_FETCHEP = 0xBF // 191 + SYS___FTCHEP = 0xBF // 191 + SYS_FLDATA = 0xC1 // 193 + SYS___FLDATA = 0xC1 // 193 + SYS_DYNFREE = 0xC2 // 194 + SYS___DYNFRE = 0xC2 // 194 + SYS_DYNALLOC = 0xC3 // 195 + SYS___DYNALL = 0xC3 // 195 + SYS___CDUMP = 0xC4 // 196 + SYS_CSNAP = 0xC5 // 197 + SYS___CSNAP = 0xC5 // 197 + SYS_CTRACE = 0xC6 // 198 + SYS___CTRACE = 0xC6 // 198 + SYS___CTEST = 0xC7 // 199 + SYS_SETENV = 0xC8 // 200 + SYS___SETENV = 0xC8 // 200 + SYS_CLEARENV = 0xC9 // 201 + SYS___CLRENV = 0xC9 // 201 + SYS___REGCOMP_STD = 0xEA // 234 + SYS_NL_LANGINFO = 0xFC // 252 + SYS_GETSYNTX = 0xFD // 253 + SYS_ISBLANK = 0xFE // 254 + SYS___ISBLNK = 0xFE // 254 + SYS_ISWALNUM = 0xFF // 255 + SYS_ISWALPHA = 0x100 // 256 + SYS_ISWBLANK = 0x101 // 257 + SYS___ISWBLK = 0x101 // 257 + SYS_ISWCNTRL = 0x102 // 258 + SYS_ISWDIGIT = 0x103 // 259 + SYS_ISWGRAPH = 0x104 // 260 + SYS_ISWLOWER = 0x105 // 261 + SYS_ISWPRINT = 0x106 // 262 + SYS_ISWPUNCT = 0x107 // 263 + SYS_ISWSPACE = 0x108 // 264 + SYS_ISWUPPER = 0x109 // 265 + SYS_ISWXDIGI = 0x10A // 266 + SYS_ISWXDIGIT = 0x10A // 266 + SYS_WCTYPE = 0x10B // 267 + SYS_ISWCTYPE = 0x10C // 268 + SYS_TOWLOWER = 0x10D // 269 + SYS_TOWUPPER = 0x10E // 270 + SYS_MBSINIT = 0x10F // 271 + SYS_WCTOB = 0x110 // 272 + SYS_MBRLEN = 0x111 // 273 + SYS_MBRTOWC = 0x112 // 274 + SYS_MBSRTOWC = 0x113 // 275 + SYS_MBSRTOWCS = 0x113 // 275 + SYS_WCRTOMB = 0x114 // 276 + SYS_WCSRTOMB = 0x115 // 277 + SYS_WCSRTOMBS = 0x115 // 277 + SYS___CSID = 0x116 // 278 + SYS___WCSID = 0x117 // 279 + SYS_STRPTIME = 0x118 // 280 + SYS___STRPTM = 0x118 // 280 + SYS_STRFMON = 0x119 // 281 + SYS___RPMTCH = 0x11A // 282 + SYS_WCSSTR = 0x11B // 283 + SYS_WCSTOK = 0x12C // 300 + SYS_WCSTOL = 0x12D // 301 + SYS_WCSTOD = 0x12E // 302 + SYS_WCSTOUL = 0x12F // 303 + SYS_WCSCOLL = 0x130 // 304 + SYS_WCSXFRM = 0x131 // 305 + SYS_WCSWIDTH = 0x132 // 306 + SYS_WCWIDTH = 0x133 // 307 + SYS_WCSFTIME = 0x134 // 308 + SYS_SWPRINTF = 0x135 // 309 + SYS_VSWPRINT = 0x136 // 310 + SYS_VSWPRINTF = 0x136 // 310 + SYS_SWSCANF = 0x137 // 311 + SYS_REGCOMP = 0x138 // 312 + SYS_REGEXEC = 0x139 // 313 + SYS_REGFREE = 0x13A // 314 + SYS_REGERROR = 0x13B // 315 + SYS_FGETWC = 0x13C // 316 + SYS_FGETWS = 0x13D // 317 + SYS_FPUTWC = 0x13E // 318 + SYS_FPUTWS = 0x13F // 319 + SYS_GETWC = 0x140 // 320 + SYS_GETWCHAR = 0x141 // 321 + SYS_PUTWC = 0x142 // 322 + SYS_PUTWCHAR = 0x143 // 323 + SYS_UNGETWC = 0x144 // 324 + SYS_ICONV_OPEN = 0x145 // 325 + SYS_ICONV = 0x146 // 326 + SYS_ICONV_CLOSE = 0x147 // 327 + SYS_ISMCCOLLEL = 0x14C // 332 + SYS_STRTOCOLL = 0x14D // 333 + SYS_COLLTOSTR = 0x14E // 334 + SYS_COLLEQUIV = 0x14F // 335 + SYS_COLLRANGE = 0x150 // 336 + SYS_CCLASS = 0x151 // 337 + SYS_COLLORDER = 0x152 // 338 + SYS___DEMANGLE = 0x154 // 340 + SYS_FDOPEN = 0x155 // 341 + SYS___ERRNO = 0x156 // 342 + SYS___ERRNO2 = 0x157 // 343 + SYS___TERROR = 0x158 // 344 + SYS_MAXCOLL = 0x169 // 361 + SYS_GETMCCOLL = 0x16A // 362 + SYS_GETWMCCOLL = 0x16B // 363 + SYS___ERR2AD = 0x16C // 364 + SYS_DLLQUERYFN = 0x16D // 365 + SYS_DLLQUERYVAR = 0x16E // 366 + SYS_DLLFREE = 0x16F // 367 + SYS_DLLLOAD = 0x170 // 368 + SYS__EXIT = 0x174 // 372 + SYS_ACCESS = 0x175 // 373 + SYS_ALARM = 0x176 // 374 + SYS_CFGETISPEED = 0x177 // 375 + SYS_CFGETOSPEED = 0x178 // 376 + SYS_CFSETISPEED = 0x179 // 377 + SYS_CFSETOSPEED = 0x17A // 378 + SYS_CHDIR = 0x17B // 379 + SYS_CHMOD = 0x17C // 380 + SYS_CHOWN = 0x17D // 381 + SYS_CLOSE = 0x17E // 382 + SYS_CLOSEDIR = 0x17F // 383 + SYS_CREAT = 0x180 // 384 + SYS_CTERMID = 0x181 // 385 + SYS_DUP = 0x182 // 386 + SYS_DUP2 = 0x183 // 387 + SYS_EXECL = 0x184 // 388 + SYS_EXECLE = 0x185 // 389 + SYS_EXECLP = 0x186 // 390 + SYS_EXECV = 0x187 // 391 + SYS_EXECVE = 0x188 // 392 + SYS_EXECVP = 0x189 // 393 + SYS_FCHMOD = 0x18A // 394 + SYS_FCHOWN = 0x18B // 395 + SYS_FCNTL = 0x18C // 396 + SYS_FILENO = 0x18D // 397 + SYS_FORK = 0x18E // 398 + SYS_FPATHCONF = 0x18F // 399 + SYS_FSTAT = 0x190 // 400 + SYS_FSYNC = 0x191 // 401 + SYS_FTRUNCATE = 0x192 // 402 + SYS_GETCWD = 0x193 // 403 + SYS_GETEGID = 0x194 // 404 + SYS_GETEUID = 0x195 // 405 + SYS_GETGID = 0x196 // 406 + SYS_GETGRGID = 0x197 // 407 + SYS_GETGRNAM = 0x198 // 408 + SYS_GETGROUPS = 0x199 // 409 + SYS_GETLOGIN = 0x19A // 410 + SYS_W_GETMNTENT = 0x19B // 411 + SYS_GETPGRP = 0x19C // 412 + SYS_GETPID = 0x19D // 413 + SYS_GETPPID = 0x19E // 414 + SYS_GETPWNAM = 0x19F // 415 + SYS_GETPWUID = 0x1A0 // 416 + SYS_GETUID = 0x1A1 // 417 + SYS_W_IOCTL = 0x1A2 // 418 + SYS_ISATTY = 0x1A3 // 419 + SYS_KILL = 0x1A4 // 420 + SYS_LINK = 0x1A5 // 421 + SYS_LSEEK = 0x1A6 // 422 + SYS_LSTAT = 0x1A7 // 423 + SYS_MKDIR = 0x1A8 // 424 + SYS_MKFIFO = 0x1A9 // 425 + SYS_MKNOD = 0x1AA // 426 + SYS_MOUNT = 0x1AB // 427 + SYS_OPEN = 0x1AC // 428 + SYS_OPENDIR = 0x1AD // 429 + SYS_PATHCONF = 0x1AE // 430 + SYS_PAUSE = 0x1AF // 431 + SYS_PIPE = 0x1B0 // 432 + SYS_W_GETPSENT = 0x1B1 // 433 + SYS_READ = 0x1B2 // 434 + SYS_READDIR = 0x1B3 // 435 + SYS_READLINK = 0x1B4 // 436 + SYS_REWINDDIR = 0x1B5 // 437 + SYS_RMDIR = 0x1B6 // 438 + SYS_SETEGID = 0x1B7 // 439 + SYS_SETEUID = 0x1B8 // 440 + SYS_SETGID = 0x1B9 // 441 + SYS_SETPGID = 0x1BA // 442 + SYS_SETSID = 0x1BB // 443 + SYS_SETUID = 0x1BC // 444 + SYS_SIGACTION = 0x1BD // 445 + SYS_SIGADDSET = 0x1BE // 446 + SYS_SIGDELSET = 0x1BF // 447 + SYS_SIGEMPTYSET = 0x1C0 // 448 + SYS_SIGFILLSET = 0x1C1 // 449 + SYS_SIGISMEMBER = 0x1C2 // 450 + SYS_SIGLONGJMP = 0x1C3 // 451 + SYS_SIGPENDING = 0x1C4 // 452 + SYS_SIGPROCMASK = 0x1C5 // 453 + SYS_SIGSETJMP = 0x1C6 // 454 + SYS_SIGSUSPEND = 0x1C7 // 455 + SYS_SLEEP = 0x1C8 // 456 + SYS_STAT = 0x1C9 // 457 + SYS_W_STATFS = 0x1CA // 458 + SYS_SYMLINK = 0x1CB // 459 + SYS_SYSCONF = 0x1CC // 460 + SYS_TCDRAIN = 0x1CD // 461 + SYS_TCFLOW = 0x1CE // 462 + SYS_TCFLUSH = 0x1CF // 463 + SYS_TCGETATTR = 0x1D0 // 464 + SYS_TCGETPGRP = 0x1D1 // 465 + SYS_TCSENDBREAK = 0x1D2 // 466 + SYS_TCSETATTR = 0x1D3 // 467 + SYS_TCSETPGRP = 0x1D4 // 468 + SYS_TIMES = 0x1D5 // 469 + SYS_TTYNAME = 0x1D6 // 470 + SYS_TZSET = 0x1D7 // 471 + SYS_UMASK = 0x1D8 // 472 + SYS_UMOUNT = 0x1D9 // 473 + SYS_UNAME = 0x1DA // 474 + SYS_UNLINK = 0x1DB // 475 + SYS_UTIME = 0x1DC // 476 + SYS_WAIT = 0x1DD // 477 + SYS_WAITPID = 0x1DE // 478 + SYS_WRITE = 0x1DF // 479 + SYS_CHAUDIT = 0x1E0 // 480 + SYS_FCHAUDIT = 0x1E1 // 481 + SYS_GETGROUPSBYNAME = 0x1E2 // 482 + SYS_SIGWAIT = 0x1E3 // 483 + SYS_PTHREAD_EXIT = 0x1E4 // 484 + SYS_PTHREAD_KILL = 0x1E5 // 485 + SYS_PTHREAD_ATTR_INIT = 0x1E6 // 486 + SYS_PTHREAD_ATTR_DESTROY = 0x1E7 // 487 + SYS_PTHREAD_ATTR_SETSTACKSIZE = 0x1E8 // 488 + SYS_PTHREAD_ATTR_GETSTACKSIZE = 0x1E9 // 489 + SYS_PTHREAD_ATTR_SETDETACHSTATE = 0x1EA // 490 + SYS_PTHREAD_ATTR_GETDETACHSTATE = 0x1EB // 491 + SYS_PTHREAD_ATTR_SETWEIGHT_NP = 0x1EC // 492 + SYS_PTHREAD_ATTR_GETWEIGHT_NP = 0x1ED // 493 + SYS_PTHREAD_CANCEL = 0x1EE // 494 + SYS_PTHREAD_CLEANUP_PUSH = 0x1EF // 495 + SYS_PTHREAD_CLEANUP_POP = 0x1F0 // 496 + SYS_PTHREAD_CONDATTR_INIT = 0x1F1 // 497 + SYS_PTHREAD_CONDATTR_DESTROY = 0x1F2 // 498 + SYS_PTHREAD_COND_INIT = 0x1F3 // 499 + SYS_PTHREAD_COND_DESTROY = 0x1F4 // 500 + SYS_PTHREAD_COND_SIGNAL = 0x1F5 // 501 + SYS_PTHREAD_COND_BROADCAST = 0x1F6 // 502 + SYS_PTHREAD_COND_WAIT = 0x1F7 // 503 + SYS_PTHREAD_COND_TIMEDWAIT = 0x1F8 // 504 + SYS_PTHREAD_CREATE = 0x1F9 // 505 + SYS_PTHREAD_DETACH = 0x1FA // 506 + SYS_PTHREAD_EQUAL = 0x1FB // 507 + SYS_PTHREAD_GETSPECIFIC = 0x1FC // 508 + SYS_PTHREAD_JOIN = 0x1FD // 509 + SYS_PTHREAD_KEY_CREATE = 0x1FE // 510 + SYS_PTHREAD_MUTEXATTR_INIT = 0x1FF // 511 + SYS_PTHREAD_MUTEXATTR_DESTROY = 0x200 // 512 + SYS_PTHREAD_MUTEXATTR_SETKIND_NP = 0x201 // 513 + SYS_PTHREAD_MUTEXATTR_GETKIND_NP = 0x202 // 514 + SYS_PTHREAD_MUTEX_INIT = 0x203 // 515 + SYS_PTHREAD_MUTEX_DESTROY = 0x204 // 516 + SYS_PTHREAD_MUTEX_LOCK = 0x205 // 517 + SYS_PTHREAD_MUTEX_TRYLOCK = 0x206 // 518 + SYS_PTHREAD_MUTEX_UNLOCK = 0x207 // 519 + SYS_PTHREAD_ONCE = 0x209 // 521 + SYS_PTHREAD_SELF = 0x20A // 522 + SYS_PTHREAD_SETINTR = 0x20B // 523 + SYS_PTHREAD_SETINTRTYPE = 0x20C // 524 + SYS_PTHREAD_SETSPECIFIC = 0x20D // 525 + SYS_PTHREAD_TESTINTR = 0x20E // 526 + SYS_PTHREAD_YIELD = 0x20F // 527 + SYS_TW_OPEN = 0x210 // 528 + SYS_TW_FCNTL = 0x211 // 529 + SYS_PTHREAD_JOIN_D4_NP = 0x212 // 530 + SYS_PTHREAD_CONDATTR_SETKIND_NP = 0x213 // 531 + SYS_PTHREAD_CONDATTR_GETKIND_NP = 0x214 // 532 + SYS_EXTLINK_NP = 0x215 // 533 + SYS___PASSWD = 0x216 // 534 + SYS_SETGROUPS = 0x217 // 535 + SYS_INITGROUPS = 0x218 // 536 + SYS_WCSPBRK = 0x23F // 575 + SYS_WCSRCHR = 0x240 // 576 + SYS_SVC99 = 0x241 // 577 + SYS___SVC99 = 0x241 // 577 + SYS_WCSWCS = 0x242 // 578 + SYS_LOCALECO = 0x243 // 579 + SYS_LOCALECONV = 0x243 // 579 + SYS___LIBREL = 0x244 // 580 + SYS_RELEASE = 0x245 // 581 + SYS___RLSE = 0x245 // 581 + SYS_FLOCATE = 0x246 // 582 + SYS___FLOCT = 0x246 // 582 + SYS_FDELREC = 0x247 // 583 + SYS___FDLREC = 0x247 // 583 + SYS_FETCH = 0x248 // 584 + SYS___FETCH = 0x248 // 584 + SYS_QSORT = 0x249 // 585 + SYS_GETENV = 0x24A // 586 + SYS_SYSTEM = 0x24B // 587 + SYS_BSEARCH = 0x24C // 588 + SYS_LDIV = 0x24D // 589 + SYS___THROW = 0x25E // 606 + SYS___RETHROW = 0x25F // 607 + SYS___CLEANUPCATCH = 0x260 // 608 + SYS___CATCHMATCH = 0x261 // 609 + SYS___CLEAN2UPCATCH = 0x262 // 610 + SYS_PUTENV = 0x26A // 618 + SYS___GETENV = 0x26F // 623 + SYS_GETPRIORITY = 0x270 // 624 + SYS_NICE = 0x271 // 625 + SYS_SETPRIORITY = 0x272 // 626 + SYS_GETITIMER = 0x273 // 627 + SYS_SETITIMER = 0x274 // 628 + SYS_MSGCTL = 0x275 // 629 + SYS_MSGGET = 0x276 // 630 + SYS_MSGRCV = 0x277 // 631 + SYS_MSGSND = 0x278 // 632 + SYS_MSGXRCV = 0x279 // 633 + SYS___MSGXR = 0x279 // 633 + SYS_SEMCTL = 0x27A // 634 + SYS_SEMGET = 0x27B // 635 + SYS_SEMOP = 0x27C // 636 + SYS_SHMAT = 0x27D // 637 + SYS_SHMCTL = 0x27E // 638 + SYS_SHMDT = 0x27F // 639 + SYS_SHMGET = 0x280 // 640 + SYS___GETIPC = 0x281 // 641 + SYS_SETGRENT = 0x282 // 642 + SYS_GETGRENT = 0x283 // 643 + SYS_ENDGRENT = 0x284 // 644 + SYS_SETPWENT = 0x285 // 645 + SYS_GETPWENT = 0x286 // 646 + SYS_ENDPWENT = 0x287 // 647 + SYS_BSD_SIGNAL = 0x288 // 648 + SYS_KILLPG = 0x289 // 649 + SYS_SIGALTSTACK = 0x28A // 650 + SYS_SIGHOLD = 0x28B // 651 + SYS_SIGIGNORE = 0x28C // 652 + SYS_SIGINTERRUPT = 0x28D // 653 + SYS_SIGPAUSE = 0x28E // 654 + SYS_SIGRELSE = 0x28F // 655 + SYS_SIGSET = 0x290 // 656 + SYS_SIGSTACK = 0x291 // 657 + SYS_GETRLIMIT = 0x292 // 658 + SYS_SETRLIMIT = 0x293 // 659 + SYS_GETRUSAGE = 0x294 // 660 + SYS_MMAP = 0x295 // 661 + SYS_MPROTECT = 0x296 // 662 + SYS_MSYNC = 0x297 // 663 + SYS_MUNMAP = 0x298 // 664 + SYS_CONFSTR = 0x299 // 665 + SYS_GETOPT = 0x29A // 666 + SYS_LCHOWN = 0x29B // 667 + SYS_TRUNCATE = 0x29C // 668 + SYS_GETSUBOPT = 0x29D // 669 + SYS_SETPGRP = 0x29E // 670 + SYS___GDERR = 0x29F // 671 + SYS___TZONE = 0x2A0 // 672 + SYS___DLGHT = 0x2A1 // 673 + SYS___OPARGF = 0x2A2 // 674 + SYS___OPOPTF = 0x2A3 // 675 + SYS___OPINDF = 0x2A4 // 676 + SYS___OPERRF = 0x2A5 // 677 + SYS_GETDATE = 0x2A6 // 678 + SYS_WAIT3 = 0x2A7 // 679 + SYS_WAITID = 0x2A8 // 680 + SYS___CATTRM = 0x2A9 // 681 + SYS___GDTRM = 0x2AA // 682 + SYS___RNDTRM = 0x2AB // 683 + SYS_CRYPT = 0x2AC // 684 + SYS_ENCRYPT = 0x2AD // 685 + SYS_SETKEY = 0x2AE // 686 + SYS___CNVBLK = 0x2AF // 687 + SYS___CRYTRM = 0x2B0 // 688 + SYS___ECRTRM = 0x2B1 // 689 + SYS_DRAND48 = 0x2B2 // 690 + SYS_ERAND48 = 0x2B3 // 691 + SYS_FSTATVFS = 0x2B4 // 692 + SYS_STATVFS = 0x2B5 // 693 + SYS_CATCLOSE = 0x2B6 // 694 + SYS_CATGETS = 0x2B7 // 695 + SYS_CATOPEN = 0x2B8 // 696 + SYS_BCMP = 0x2B9 // 697 + SYS_BCOPY = 0x2BA // 698 + SYS_BZERO = 0x2BB // 699 + SYS_FFS = 0x2BC // 700 + SYS_INDEX = 0x2BD // 701 + SYS_RINDEX = 0x2BE // 702 + SYS_STRCASECMP = 0x2BF // 703 + SYS_STRDUP = 0x2C0 // 704 + SYS_STRNCASECMP = 0x2C1 // 705 + SYS_INITSTATE = 0x2C2 // 706 + SYS_SETSTATE = 0x2C3 // 707 + SYS_RANDOM = 0x2C4 // 708 + SYS_SRANDOM = 0x2C5 // 709 + SYS_HCREATE = 0x2C6 // 710 + SYS_HDESTROY = 0x2C7 // 711 + SYS_HSEARCH = 0x2C8 // 712 + SYS_LFIND = 0x2C9 // 713 + SYS_LSEARCH = 0x2CA // 714 + SYS_TDELETE = 0x2CB // 715 + SYS_TFIND = 0x2CC // 716 + SYS_TSEARCH = 0x2CD // 717 + SYS_TWALK = 0x2CE // 718 + SYS_INSQUE = 0x2CF // 719 + SYS_REMQUE = 0x2D0 // 720 + SYS_POPEN = 0x2D1 // 721 + SYS_PCLOSE = 0x2D2 // 722 + SYS_SWAB = 0x2D3 // 723 + SYS_MEMCCPY = 0x2D4 // 724 + SYS_GETPAGESIZE = 0x2D8 // 728 + SYS_FCHDIR = 0x2D9 // 729 + SYS___OCLCK = 0x2DA // 730 + SYS___ATOE = 0x2DB // 731 + SYS___ATOE_L = 0x2DC // 732 + SYS___ETOA = 0x2DD // 733 + SYS___ETOA_L = 0x2DE // 734 + SYS_SETUTXENT = 0x2DF // 735 + SYS_GETUTXENT = 0x2E0 // 736 + SYS_ENDUTXENT = 0x2E1 // 737 + SYS_GETUTXID = 0x2E2 // 738 + SYS_GETUTXLINE = 0x2E3 // 739 + SYS_PUTUTXLINE = 0x2E4 // 740 + SYS_FMTMSG = 0x2E5 // 741 + SYS_JRAND48 = 0x2E6 // 742 + SYS_LRAND48 = 0x2E7 // 743 + SYS_MRAND48 = 0x2E8 // 744 + SYS_NRAND48 = 0x2E9 // 745 + SYS_LCONG48 = 0x2EA // 746 + SYS_SRAND48 = 0x2EB // 747 + SYS_SEED48 = 0x2EC // 748 + SYS_ISASCII = 0x2ED // 749 + SYS_TOASCII = 0x2EE // 750 + SYS_A64L = 0x2EF // 751 + SYS_L64A = 0x2F0 // 752 + SYS_UALARM = 0x2F1 // 753 + SYS_USLEEP = 0x2F2 // 754 + SYS___UTXTRM = 0x2F3 // 755 + SYS___SRCTRM = 0x2F4 // 756 + SYS_FTIME = 0x2F5 // 757 + SYS_GETTIMEOFDAY = 0x2F6 // 758 + SYS_DBM_CLEARERR = 0x2F7 // 759 + SYS_DBM_CLOSE = 0x2F8 // 760 + SYS_DBM_DELETE = 0x2F9 // 761 + SYS_DBM_ERROR = 0x2FA // 762 + SYS_DBM_FETCH = 0x2FB // 763 + SYS_DBM_FIRSTKEY = 0x2FC // 764 + SYS_DBM_NEXTKEY = 0x2FD // 765 + SYS_DBM_OPEN = 0x2FE // 766 + SYS_DBM_STORE = 0x2FF // 767 + SYS___NDMTRM = 0x300 // 768 + SYS_FTOK = 0x301 // 769 + SYS_BASENAME = 0x302 // 770 + SYS_DIRNAME = 0x303 // 771 + SYS_GETDTABLESIZE = 0x304 // 772 + SYS_MKSTEMP = 0x305 // 773 + SYS_MKTEMP = 0x306 // 774 + SYS_NFTW = 0x307 // 775 + SYS_GETWD = 0x308 // 776 + SYS_LOCKF = 0x309 // 777 + SYS__LONGJMP = 0x30D // 781 + SYS__SETJMP = 0x30E // 782 + SYS_VFORK = 0x30F // 783 + SYS_WORDEXP = 0x310 // 784 + SYS_WORDFREE = 0x311 // 785 + SYS_GETPGID = 0x312 // 786 + SYS_GETSID = 0x313 // 787 + SYS___UTMPXNAME = 0x314 // 788 + SYS_CUSERID = 0x315 // 789 + SYS_GETPASS = 0x316 // 790 + SYS_FNMATCH = 0x317 // 791 + SYS_FTW = 0x318 // 792 + SYS_GETW = 0x319 // 793 + SYS_GLOB = 0x31A // 794 + SYS_GLOBFREE = 0x31B // 795 + SYS_PUTW = 0x31C // 796 + SYS_SEEKDIR = 0x31D // 797 + SYS_TELLDIR = 0x31E // 798 + SYS_TEMPNAM = 0x31F // 799 + SYS_ACOSH = 0x320 // 800 + SYS_ASINH = 0x321 // 801 + SYS_ATANH = 0x322 // 802 + SYS_CBRT = 0x323 // 803 + SYS_EXPM1 = 0x324 // 804 + SYS_ILOGB = 0x325 // 805 + SYS_LOGB = 0x326 // 806 + SYS_LOG1P = 0x327 // 807 + SYS_NEXTAFTER = 0x328 // 808 + SYS_RINT = 0x329 // 809 + SYS_REMAINDER = 0x32A // 810 + SYS_SCALB = 0x32B // 811 + SYS_LGAMMA = 0x32C // 812 + SYS_TTYSLOT = 0x32D // 813 + SYS_GETTIMEOFDAY_R = 0x32E // 814 + SYS_SYNC = 0x32F // 815 + SYS_SPAWN = 0x330 // 816 + SYS_SPAWNP = 0x331 // 817 + SYS_GETLOGIN_UU = 0x332 // 818 + SYS_ECVT = 0x333 // 819 + SYS_FCVT = 0x334 // 820 + SYS_GCVT = 0x335 // 821 + SYS_ACCEPT = 0x336 // 822 + SYS_BIND = 0x337 // 823 + SYS_CONNECT = 0x338 // 824 + SYS_ENDHOSTENT = 0x339 // 825 + SYS_ENDPROTOENT = 0x33A // 826 + SYS_ENDSERVENT = 0x33B // 827 + SYS_GETHOSTBYADDR_R = 0x33C // 828 + SYS_GETHOSTBYADDR = 0x33D // 829 + SYS_GETHOSTBYNAME_R = 0x33E // 830 + SYS_GETHOSTBYNAME = 0x33F // 831 + SYS_GETHOSTENT = 0x340 // 832 + SYS_GETHOSTID = 0x341 // 833 + SYS_GETHOSTNAME = 0x342 // 834 + SYS_GETNETBYADDR = 0x343 // 835 + SYS_GETNETBYNAME = 0x344 // 836 + SYS_GETNETENT = 0x345 // 837 + SYS_GETPEERNAME = 0x346 // 838 + SYS_GETPROTOBYNAME = 0x347 // 839 + SYS_GETPROTOBYNUMBER = 0x348 // 840 + SYS_GETPROTOENT = 0x349 // 841 + SYS_GETSERVBYNAME = 0x34A // 842 + SYS_GETSERVBYPORT = 0x34B // 843 + SYS_GETSERVENT = 0x34C // 844 + SYS_GETSOCKNAME = 0x34D // 845 + SYS_GETSOCKOPT = 0x34E // 846 + SYS_INET_ADDR = 0x34F // 847 + SYS_INET_LNAOF = 0x350 // 848 + SYS_INET_MAKEADDR = 0x351 // 849 + SYS_INET_NETOF = 0x352 // 850 + SYS_INET_NETWORK = 0x353 // 851 + SYS_INET_NTOA = 0x354 // 852 + SYS_IOCTL = 0x355 // 853 + SYS_LISTEN = 0x356 // 854 + SYS_READV = 0x357 // 855 + SYS_RECV = 0x358 // 856 + SYS_RECVFROM = 0x359 // 857 + SYS_SELECT = 0x35B // 859 + SYS_SELECTEX = 0x35C // 860 + SYS_SEND = 0x35D // 861 + SYS_SENDTO = 0x35F // 863 + SYS_SETHOSTENT = 0x360 // 864 + SYS_SETNETENT = 0x361 // 865 + SYS_SETPEER = 0x362 // 866 + SYS_SETPROTOENT = 0x363 // 867 + SYS_SETSERVENT = 0x364 // 868 + SYS_SETSOCKOPT = 0x365 // 869 + SYS_SHUTDOWN = 0x366 // 870 + SYS_SOCKET = 0x367 // 871 + SYS_SOCKETPAIR = 0x368 // 872 + SYS_WRITEV = 0x369 // 873 + SYS_CHROOT = 0x36A // 874 + SYS_W_STATVFS = 0x36B // 875 + SYS_ULIMIT = 0x36C // 876 + SYS_ISNAN = 0x36D // 877 + SYS_UTIMES = 0x36E // 878 + SYS___H_ERRNO = 0x36F // 879 + SYS_ENDNETENT = 0x370 // 880 + SYS_CLOSELOG = 0x371 // 881 + SYS_OPENLOG = 0x372 // 882 + SYS_SETLOGMASK = 0x373 // 883 + SYS_SYSLOG = 0x374 // 884 + SYS_PTSNAME = 0x375 // 885 + SYS_SETREUID = 0x376 // 886 + SYS_SETREGID = 0x377 // 887 + SYS_REALPATH = 0x378 // 888 + SYS___SIGNGAM = 0x379 // 889 + SYS_GRANTPT = 0x37A // 890 + SYS_UNLOCKPT = 0x37B // 891 + SYS_TCGETSID = 0x37C // 892 + SYS___TCGETCP = 0x37D // 893 + SYS___TCSETCP = 0x37E // 894 + SYS___TCSETTABLES = 0x37F // 895 + SYS_POLL = 0x380 // 896 + SYS_REXEC = 0x381 // 897 + SYS___ISASCII2 = 0x382 // 898 + SYS___TOASCII2 = 0x383 // 899 + SYS_CHPRIORITY = 0x384 // 900 + SYS_PTHREAD_ATTR_SETSYNCTYPE_NP = 0x385 // 901 + SYS_PTHREAD_ATTR_GETSYNCTYPE_NP = 0x386 // 902 + SYS_PTHREAD_SET_LIMIT_NP = 0x387 // 903 + SYS___STNETENT = 0x388 // 904 + SYS___STPROTOENT = 0x389 // 905 + SYS___STSERVENT = 0x38A // 906 + SYS___STHOSTENT = 0x38B // 907 + SYS_NLIST = 0x38C // 908 + SYS___IPDBCS = 0x38D // 909 + SYS___IPDSPX = 0x38E // 910 + SYS___IPMSGC = 0x38F // 911 + SYS___SELECT1 = 0x390 // 912 + SYS_PTHREAD_SECURITY_NP = 0x391 // 913 + SYS___CHECK_RESOURCE_AUTH_NP = 0x392 // 914 + SYS___CONVERT_ID_NP = 0x393 // 915 + SYS___OPENVMREL = 0x394 // 916 + SYS_WMEMCHR = 0x395 // 917 + SYS_WMEMCMP = 0x396 // 918 + SYS_WMEMCPY = 0x397 // 919 + SYS_WMEMMOVE = 0x398 // 920 + SYS_WMEMSET = 0x399 // 921 + SYS___FPUTWC = 0x400 // 1024 + SYS___PUTWC = 0x401 // 1025 + SYS___PWCHAR = 0x402 // 1026 + SYS___WCSFTM = 0x403 // 1027 + SYS___WCSTOK = 0x404 // 1028 + SYS___WCWDTH = 0x405 // 1029 + SYS_T_ACCEPT = 0x409 // 1033 + SYS_T_ALLOC = 0x40A // 1034 + SYS_T_BIND = 0x40B // 1035 + SYS_T_CLOSE = 0x40C // 1036 + SYS_T_CONNECT = 0x40D // 1037 + SYS_T_ERROR = 0x40E // 1038 + SYS_T_FREE = 0x40F // 1039 + SYS_T_GETINFO = 0x410 // 1040 + SYS_T_GETPROTADDR = 0x411 // 1041 + SYS_T_GETSTATE = 0x412 // 1042 + SYS_T_LISTEN = 0x413 // 1043 + SYS_T_LOOK = 0x414 // 1044 + SYS_T_OPEN = 0x415 // 1045 + SYS_T_OPTMGMT = 0x416 // 1046 + SYS_T_RCV = 0x417 // 1047 + SYS_T_RCVCONNECT = 0x418 // 1048 + SYS_T_RCVDIS = 0x419 // 1049 + SYS_T_RCVREL = 0x41A // 1050 + SYS_T_RCVUDATA = 0x41B // 1051 + SYS_T_RCVUDERR = 0x41C // 1052 + SYS_T_SND = 0x41D // 1053 + SYS_T_SNDDIS = 0x41E // 1054 + SYS_T_SNDREL = 0x41F // 1055 + SYS_T_SNDUDATA = 0x420 // 1056 + SYS_T_STRERROR = 0x421 // 1057 + SYS_T_SYNC = 0x422 // 1058 + SYS_T_UNBIND = 0x423 // 1059 + SYS___T_ERRNO = 0x424 // 1060 + SYS___RECVMSG2 = 0x425 // 1061 + SYS___SENDMSG2 = 0x426 // 1062 + SYS_FATTACH = 0x427 // 1063 + SYS_FDETACH = 0x428 // 1064 + SYS_GETMSG = 0x429 // 1065 + SYS_GETPMSG = 0x42A // 1066 + SYS_ISASTREAM = 0x42B // 1067 + SYS_PUTMSG = 0x42C // 1068 + SYS_PUTPMSG = 0x42D // 1069 + SYS___ISPOSIXON = 0x42E // 1070 + SYS___OPENMVSREL = 0x42F // 1071 + SYS_GETCONTEXT = 0x430 // 1072 + SYS_SETCONTEXT = 0x431 // 1073 + SYS_MAKECONTEXT = 0x432 // 1074 + SYS_SWAPCONTEXT = 0x433 // 1075 + SYS_PTHREAD_GETSPECIFIC_D8_NP = 0x434 // 1076 + SYS_GETCLIENTID = 0x470 // 1136 + SYS___GETCLIENTID = 0x471 // 1137 + SYS_GETSTABLESIZE = 0x472 // 1138 + SYS_GETIBMOPT = 0x473 // 1139 + SYS_GETIBMSOCKOPT = 0x474 // 1140 + SYS_GIVESOCKET = 0x475 // 1141 + SYS_IBMSFLUSH = 0x476 // 1142 + SYS_MAXDESC = 0x477 // 1143 + SYS_SETIBMOPT = 0x478 // 1144 + SYS_SETIBMSOCKOPT = 0x479 // 1145 + SYS_SOCK_DEBUG = 0x47A // 1146 + SYS_SOCK_DO_TESTSTOR = 0x47D // 1149 + SYS_TAKESOCKET = 0x47E // 1150 + SYS___SERVER_INIT = 0x47F // 1151 + SYS___SERVER_PWU = 0x480 // 1152 + SYS_PTHREAD_TAG_NP = 0x481 // 1153 + SYS___CONSOLE = 0x482 // 1154 + SYS___WSINIT = 0x483 // 1155 + SYS___IPTCPN = 0x489 // 1161 + SYS___SMF_RECORD = 0x48A // 1162 + SYS___IPHOST = 0x48B // 1163 + SYS___IPNODE = 0x48C // 1164 + SYS___SERVER_CLASSIFY_CREATE = 0x48D // 1165 + SYS___SERVER_CLASSIFY_DESTROY = 0x48E // 1166 + SYS___SERVER_CLASSIFY_RESET = 0x48F // 1167 + SYS___SERVER_CLASSIFY = 0x490 // 1168 + SYS___HEAPRPT = 0x496 // 1174 + SYS___FNWSA = 0x49B // 1179 + SYS___SPAWN2 = 0x49D // 1181 + SYS___SPAWNP2 = 0x49E // 1182 + SYS___GDRR = 0x4A1 // 1185 + SYS___HRRNO = 0x4A2 // 1186 + SYS___OPRG = 0x4A3 // 1187 + SYS___OPRR = 0x4A4 // 1188 + SYS___OPND = 0x4A5 // 1189 + SYS___OPPT = 0x4A6 // 1190 + SYS___SIGGM = 0x4A7 // 1191 + SYS___DGHT = 0x4A8 // 1192 + SYS___TZNE = 0x4A9 // 1193 + SYS___TZZN = 0x4AA // 1194 + SYS___TRRNO = 0x4AF // 1199 + SYS___ENVN = 0x4B0 // 1200 + SYS___MLOCKALL = 0x4B1 // 1201 + SYS_CREATEWO = 0x4B2 // 1202 + SYS_CREATEWORKUNIT = 0x4B2 // 1202 + SYS_CONTINUE = 0x4B3 // 1203 + SYS_CONTINUEWORKUNIT = 0x4B3 // 1203 + SYS_CONNECTW = 0x4B4 // 1204 + SYS_CONNECTWORKMGR = 0x4B4 // 1204 + SYS_CONNECTS = 0x4B5 // 1205 + SYS_CONNECTSERVER = 0x4B5 // 1205 + SYS_DISCONNE = 0x4B6 // 1206 + SYS_DISCONNECTSERVER = 0x4B6 // 1206 + SYS_JOINWORK = 0x4B7 // 1207 + SYS_JOINWORKUNIT = 0x4B7 // 1207 + SYS_LEAVEWOR = 0x4B8 // 1208 + SYS_LEAVEWORKUNIT = 0x4B8 // 1208 + SYS_DELETEWO = 0x4B9 // 1209 + SYS_DELETEWORKUNIT = 0x4B9 // 1209 + SYS_QUERYMET = 0x4BA // 1210 + SYS_QUERYMETRICS = 0x4BA // 1210 + SYS_QUERYSCH = 0x4BB // 1211 + SYS_QUERYSCHENV = 0x4BB // 1211 + SYS_CHECKSCH = 0x4BC // 1212 + SYS_CHECKSCHENV = 0x4BC // 1212 + SYS___PID_AFFINITY = 0x4BD // 1213 + SYS___ASINH_B = 0x4BE // 1214 + SYS___ATAN_B = 0x4BF // 1215 + SYS___CBRT_B = 0x4C0 // 1216 + SYS___CEIL_B = 0x4C1 // 1217 + SYS_COPYSIGN = 0x4C2 // 1218 + SYS___COS_B = 0x4C3 // 1219 + SYS___ERF_B = 0x4C4 // 1220 + SYS___ERFC_B = 0x4C5 // 1221 + SYS___EXPM1_B = 0x4C6 // 1222 + SYS___FABS_B = 0x4C7 // 1223 + SYS_FINITE = 0x4C8 // 1224 + SYS___FLOOR_B = 0x4C9 // 1225 + SYS___FREXP_B = 0x4CA // 1226 + SYS___ILOGB_B = 0x4CB // 1227 + SYS___ISNAN_B = 0x4CC // 1228 + SYS___LDEXP_B = 0x4CD // 1229 + SYS___LOG1P_B = 0x4CE // 1230 + SYS___LOGB_B = 0x4CF // 1231 + SYS_MATHERR = 0x4D0 // 1232 + SYS___MODF_B = 0x4D1 // 1233 + SYS___NEXTAFTER_B = 0x4D2 // 1234 + SYS___RINT_B = 0x4D3 // 1235 + SYS_SCALBN = 0x4D4 // 1236 + SYS_SIGNIFIC = 0x4D5 // 1237 + SYS_SIGNIFICAND = 0x4D5 // 1237 + SYS___SIN_B = 0x4D6 // 1238 + SYS___TAN_B = 0x4D7 // 1239 + SYS___TANH_B = 0x4D8 // 1240 + SYS___ACOS_B = 0x4D9 // 1241 + SYS___ACOSH_B = 0x4DA // 1242 + SYS___ASIN_B = 0x4DB // 1243 + SYS___ATAN2_B = 0x4DC // 1244 + SYS___ATANH_B = 0x4DD // 1245 + SYS___COSH_B = 0x4DE // 1246 + SYS___EXP_B = 0x4DF // 1247 + SYS___FMOD_B = 0x4E0 // 1248 + SYS___GAMMA_B = 0x4E1 // 1249 + SYS_GAMMA_R = 0x4E2 // 1250 + SYS___HYPOT_B = 0x4E3 // 1251 + SYS___J0_B = 0x4E4 // 1252 + SYS___Y0_B = 0x4E5 // 1253 + SYS___J1_B = 0x4E6 // 1254 + SYS___Y1_B = 0x4E7 // 1255 + SYS___JN_B = 0x4E8 // 1256 + SYS___YN_B = 0x4E9 // 1257 + SYS___LGAMMA_B = 0x4EA // 1258 + SYS_LGAMMA_R = 0x4EB // 1259 + SYS___LOG_B = 0x4EC // 1260 + SYS___LOG10_B = 0x4ED // 1261 + SYS___POW_B = 0x4EE // 1262 + SYS___REMAINDER_B = 0x4EF // 1263 + SYS___SCALB_B = 0x4F0 // 1264 + SYS___SINH_B = 0x4F1 // 1265 + SYS___SQRT_B = 0x4F2 // 1266 + SYS___OPENDIR2 = 0x4F3 // 1267 + SYS___READDIR2 = 0x4F4 // 1268 + SYS___LOGIN = 0x4F5 // 1269 + SYS___OPEN_STAT = 0x4F6 // 1270 + SYS_ACCEPT_AND_RECV = 0x4F7 // 1271 + SYS___FP_SETMODE = 0x4F8 // 1272 + SYS___SIGACTIONSET = 0x4FB // 1275 + SYS___UCREATE = 0x4FC // 1276 + SYS___UMALLOC = 0x4FD // 1277 + SYS___UFREE = 0x4FE // 1278 + SYS___UHEAPREPORT = 0x4FF // 1279 + SYS___ISBFP = 0x500 // 1280 + SYS___FP_CAST = 0x501 // 1281 + SYS___CERTIFICATE = 0x502 // 1282 + SYS_SEND_FILE = 0x503 // 1283 + SYS_AIO_CANCEL = 0x504 // 1284 + SYS_AIO_ERROR = 0x505 // 1285 + SYS_AIO_READ = 0x506 // 1286 + SYS_AIO_RETURN = 0x507 // 1287 + SYS_AIO_SUSPEND = 0x508 // 1288 + SYS_AIO_WRITE = 0x509 // 1289 + SYS_PTHREAD_MUTEXATTR_GETPSHARED = 0x50A // 1290 + SYS_PTHREAD_MUTEXATTR_SETPSHARED = 0x50B // 1291 + SYS_PTHREAD_RWLOCK_DESTROY = 0x50C // 1292 + SYS_PTHREAD_RWLOCK_INIT = 0x50D // 1293 + SYS_PTHREAD_RWLOCK_RDLOCK = 0x50E // 1294 + SYS_PTHREAD_RWLOCK_TRYRDLOCK = 0x50F // 1295 + SYS_PTHREAD_RWLOCK_TRYWRLOCK = 0x510 // 1296 + SYS_PTHREAD_RWLOCK_UNLOCK = 0x511 // 1297 + SYS_PTHREAD_RWLOCK_WRLOCK = 0x512 // 1298 + SYS_PTHREAD_RWLOCKATTR_GETPSHARED = 0x513 // 1299 + SYS_PTHREAD_RWLOCKATTR_SETPSHARED = 0x514 // 1300 + SYS_PTHREAD_RWLOCKATTR_INIT = 0x515 // 1301 + SYS_PTHREAD_RWLOCKATTR_DESTROY = 0x516 // 1302 + SYS___CTTBL = 0x517 // 1303 + SYS_PTHREAD_MUTEXATTR_SETTYPE = 0x518 // 1304 + SYS_PTHREAD_MUTEXATTR_GETTYPE = 0x519 // 1305 + SYS___FP_CLR_FLAG = 0x51A // 1306 + SYS___FP_READ_FLAG = 0x51B // 1307 + SYS___FP_RAISE_XCP = 0x51C // 1308 + SYS___FP_CLASS = 0x51D // 1309 + SYS___FP_FINITE = 0x51E // 1310 + SYS___FP_ISNAN = 0x51F // 1311 + SYS___FP_UNORDERED = 0x520 // 1312 + SYS___FP_READ_RND = 0x521 // 1313 + SYS___FP_READ_RND_B = 0x522 // 1314 + SYS___FP_SWAP_RND = 0x523 // 1315 + SYS___FP_SWAP_RND_B = 0x524 // 1316 + SYS___FP_LEVEL = 0x525 // 1317 + SYS___FP_BTOH = 0x526 // 1318 + SYS___FP_HTOB = 0x527 // 1319 + SYS___FPC_RD = 0x528 // 1320 + SYS___FPC_WR = 0x529 // 1321 + SYS___FPC_RW = 0x52A // 1322 + SYS___FPC_SM = 0x52B // 1323 + SYS___FPC_RS = 0x52C // 1324 + SYS_SIGTIMEDWAIT = 0x52D // 1325 + SYS_SIGWAITINFO = 0x52E // 1326 + SYS___CHKBFP = 0x52F // 1327 + SYS___W_PIOCTL = 0x59E // 1438 + SYS___OSENV = 0x59F // 1439 + SYS_EXPORTWO = 0x5A1 // 1441 + SYS_EXPORTWORKUNIT = 0x5A1 // 1441 + SYS_UNDOEXPO = 0x5A2 // 1442 + SYS_UNDOEXPORTWORKUNIT = 0x5A2 // 1442 + SYS_IMPORTWO = 0x5A3 // 1443 + SYS_IMPORTWORKUNIT = 0x5A3 // 1443 + SYS_UNDOIMPO = 0x5A4 // 1444 + SYS_UNDOIMPORTWORKUNIT = 0x5A4 // 1444 + SYS_EXTRACTW = 0x5A5 // 1445 + SYS_EXTRACTWORKUNIT = 0x5A5 // 1445 + SYS___CPL = 0x5A6 // 1446 + SYS___MAP_INIT = 0x5A7 // 1447 + SYS___MAP_SERVICE = 0x5A8 // 1448 + SYS_SIGQUEUE = 0x5A9 // 1449 + SYS___MOUNT = 0x5AA // 1450 + SYS___GETUSERID = 0x5AB // 1451 + SYS___IPDOMAINNAME = 0x5AC // 1452 + SYS_QUERYENC = 0x5AD // 1453 + SYS_QUERYWORKUNITCLASSIFICATION = 0x5AD // 1453 + SYS_CONNECTE = 0x5AE // 1454 + SYS_CONNECTEXPORTIMPORT = 0x5AE // 1454 + SYS___FP_SWAPMODE = 0x5AF // 1455 + SYS_STRTOLL = 0x5B0 // 1456 + SYS_STRTOULL = 0x5B1 // 1457 + SYS___DSA_PREV = 0x5B2 // 1458 + SYS___EP_FIND = 0x5B3 // 1459 + SYS___SERVER_THREADS_QUERY = 0x5B4 // 1460 + SYS___MSGRCV_TIMED = 0x5B7 // 1463 + SYS___SEMOP_TIMED = 0x5B8 // 1464 + SYS___GET_CPUID = 0x5B9 // 1465 + SYS___GET_SYSTEM_SETTINGS = 0x5BA // 1466 + SYS_FTELLO = 0x5C8 // 1480 + SYS_FSEEKO = 0x5C9 // 1481 + SYS_LLDIV = 0x5CB // 1483 + SYS_WCSTOLL = 0x5CC // 1484 + SYS_WCSTOULL = 0x5CD // 1485 + SYS_LLABS = 0x5CE // 1486 + SYS___CONSOLE2 = 0x5D2 // 1490 + SYS_INET_NTOP = 0x5D3 // 1491 + SYS_INET_PTON = 0x5D4 // 1492 + SYS___RES = 0x5D6 // 1494 + SYS_RES_MKQUERY = 0x5D7 // 1495 + SYS_RES_INIT = 0x5D8 // 1496 + SYS_RES_QUERY = 0x5D9 // 1497 + SYS_RES_SEARCH = 0x5DA // 1498 + SYS_RES_SEND = 0x5DB // 1499 + SYS_RES_QUERYDOMAIN = 0x5DC // 1500 + SYS_DN_EXPAND = 0x5DD // 1501 + SYS_DN_SKIPNAME = 0x5DE // 1502 + SYS_DN_COMP = 0x5DF // 1503 + SYS_ASCTIME_R = 0x5E0 // 1504 + SYS_CTIME_R = 0x5E1 // 1505 + SYS_GMTIME_R = 0x5E2 // 1506 + SYS_LOCALTIME_R = 0x5E3 // 1507 + SYS_RAND_R = 0x5E4 // 1508 + SYS_STRTOK_R = 0x5E5 // 1509 + SYS_READDIR_R = 0x5E6 // 1510 + SYS_GETGRGID_R = 0x5E7 // 1511 + SYS_GETGRNAM_R = 0x5E8 // 1512 + SYS_GETLOGIN_R = 0x5E9 // 1513 + SYS_GETPWNAM_R = 0x5EA // 1514 + SYS_GETPWUID_R = 0x5EB // 1515 + SYS_TTYNAME_R = 0x5EC // 1516 + SYS_PTHREAD_ATFORK = 0x5ED // 1517 + SYS_PTHREAD_ATTR_GETGUARDSIZE = 0x5EE // 1518 + SYS_PTHREAD_ATTR_GETSTACKADDR = 0x5EF // 1519 + SYS_PTHREAD_ATTR_SETGUARDSIZE = 0x5F0 // 1520 + SYS_PTHREAD_ATTR_SETSTACKADDR = 0x5F1 // 1521 + SYS_PTHREAD_CONDATTR_GETPSHARED = 0x5F2 // 1522 + SYS_PTHREAD_CONDATTR_SETPSHARED = 0x5F3 // 1523 + SYS_PTHREAD_GETCONCURRENCY = 0x5F4 // 1524 + SYS_PTHREAD_KEY_DELETE = 0x5F5 // 1525 + SYS_PTHREAD_SETCONCURRENCY = 0x5F6 // 1526 + SYS_PTHREAD_SIGMASK = 0x5F7 // 1527 + SYS___DISCARDDATA = 0x5F8 // 1528 + SYS_PTHREAD_ATTR_GETSCHEDPARAM = 0x5F9 // 1529 + SYS_PTHREAD_ATTR_SETSCHEDPARAM = 0x5FA // 1530 + SYS_PTHREAD_ATTR_GETDETACHSTATE_U98 = 0x5FB // 1531 + SYS_PTHREAD_ATTR_SETDETACHSTATE_U98 = 0x5FC // 1532 + SYS_PTHREAD_DETACH_U98 = 0x5FD // 1533 + SYS_PTHREAD_GETSPECIFIC_U98 = 0x5FE // 1534 + SYS_PTHREAD_SETCANCELSTATE = 0x5FF // 1535 + SYS_PTHREAD_SETCANCELTYPE = 0x600 // 1536 + SYS_PTHREAD_TESTCANCEL = 0x601 // 1537 + SYS___ATANF_B = 0x602 // 1538 + SYS___ATANL_B = 0x603 // 1539 + SYS___CEILF_B = 0x604 // 1540 + SYS___CEILL_B = 0x605 // 1541 + SYS___COSF_B = 0x606 // 1542 + SYS___COSL_B = 0x607 // 1543 + SYS___FABSF_B = 0x608 // 1544 + SYS___FABSL_B = 0x609 // 1545 + SYS___FLOORF_B = 0x60A // 1546 + SYS___FLOORL_B = 0x60B // 1547 + SYS___FREXPF_B = 0x60C // 1548 + SYS___FREXPL_B = 0x60D // 1549 + SYS___LDEXPF_B = 0x60E // 1550 + SYS___LDEXPL_B = 0x60F // 1551 + SYS___SINF_B = 0x610 // 1552 + SYS___SINL_B = 0x611 // 1553 + SYS___TANF_B = 0x612 // 1554 + SYS___TANL_B = 0x613 // 1555 + SYS___TANHF_B = 0x614 // 1556 + SYS___TANHL_B = 0x615 // 1557 + SYS___ACOSF_B = 0x616 // 1558 + SYS___ACOSL_B = 0x617 // 1559 + SYS___ASINF_B = 0x618 // 1560 + SYS___ASINL_B = 0x619 // 1561 + SYS___ATAN2F_B = 0x61A // 1562 + SYS___ATAN2L_B = 0x61B // 1563 + SYS___COSHF_B = 0x61C // 1564 + SYS___COSHL_B = 0x61D // 1565 + SYS___EXPF_B = 0x61E // 1566 + SYS___EXPL_B = 0x61F // 1567 + SYS___LOGF_B = 0x620 // 1568 + SYS___LOGL_B = 0x621 // 1569 + SYS___LOG10F_B = 0x622 // 1570 + SYS___LOG10L_B = 0x623 // 1571 + SYS___POWF_B = 0x624 // 1572 + SYS___POWL_B = 0x625 // 1573 + SYS___SINHF_B = 0x626 // 1574 + SYS___SINHL_B = 0x627 // 1575 + SYS___SQRTF_B = 0x628 // 1576 + SYS___SQRTL_B = 0x629 // 1577 + SYS___ABSF_B = 0x62A // 1578 + SYS___ABS_B = 0x62B // 1579 + SYS___ABSL_B = 0x62C // 1580 + SYS___FMODF_B = 0x62D // 1581 + SYS___FMODL_B = 0x62E // 1582 + SYS___MODFF_B = 0x62F // 1583 + SYS___MODFL_B = 0x630 // 1584 + SYS_ABSF = 0x631 // 1585 + SYS_ABSL = 0x632 // 1586 + SYS_ACOSF = 0x633 // 1587 + SYS_ACOSL = 0x634 // 1588 + SYS_ASINF = 0x635 // 1589 + SYS_ASINL = 0x636 // 1590 + SYS_ATAN2F = 0x637 // 1591 + SYS_ATAN2L = 0x638 // 1592 + SYS_ATANF = 0x639 // 1593 + SYS_ATANL = 0x63A // 1594 + SYS_CEILF = 0x63B // 1595 + SYS_CEILL = 0x63C // 1596 + SYS_COSF = 0x63D // 1597 + SYS_COSL = 0x63E // 1598 + SYS_COSHF = 0x63F // 1599 + SYS_COSHL = 0x640 // 1600 + SYS_EXPF = 0x641 // 1601 + SYS_EXPL = 0x642 // 1602 + SYS_TANHF = 0x643 // 1603 + SYS_TANHL = 0x644 // 1604 + SYS_LOG10F = 0x645 // 1605 + SYS_LOG10L = 0x646 // 1606 + SYS_LOGF = 0x647 // 1607 + SYS_LOGL = 0x648 // 1608 + SYS_POWF = 0x649 // 1609 + SYS_POWL = 0x64A // 1610 + SYS_SINF = 0x64B // 1611 + SYS_SINL = 0x64C // 1612 + SYS_SQRTF = 0x64D // 1613 + SYS_SQRTL = 0x64E // 1614 + SYS_SINHF = 0x64F // 1615 + SYS_SINHL = 0x650 // 1616 + SYS_TANF = 0x651 // 1617 + SYS_TANL = 0x652 // 1618 + SYS_FABSF = 0x653 // 1619 + SYS_FABSL = 0x654 // 1620 + SYS_FLOORF = 0x655 // 1621 + SYS_FLOORL = 0x656 // 1622 + SYS_FMODF = 0x657 // 1623 + SYS_FMODL = 0x658 // 1624 + SYS_FREXPF = 0x659 // 1625 + SYS_FREXPL = 0x65A // 1626 + SYS_LDEXPF = 0x65B // 1627 + SYS_LDEXPL = 0x65C // 1628 + SYS_MODFF = 0x65D // 1629 + SYS_MODFL = 0x65E // 1630 + SYS_BTOWC = 0x65F // 1631 + SYS___CHATTR = 0x660 // 1632 + SYS___FCHATTR = 0x661 // 1633 + SYS___TOCCSID = 0x662 // 1634 + SYS___CSNAMETYPE = 0x663 // 1635 + SYS___TOCSNAME = 0x664 // 1636 + SYS___CCSIDTYPE = 0x665 // 1637 + SYS___AE_CORRESTBL_QUERY = 0x666 // 1638 + SYS___AE_AUTOCONVERT_STATE = 0x667 // 1639 + SYS_DN_FIND = 0x668 // 1640 + SYS___GETHOSTBYADDR_A = 0x669 // 1641 + SYS___GETHOSTBYNAME_A = 0x66A // 1642 + SYS___RES_INIT_A = 0x66B // 1643 + SYS___GETHOSTBYADDR_R_A = 0x66C // 1644 + SYS___GETHOSTBYNAME_R_A = 0x66D // 1645 + SYS___CHARMAP_INIT_A = 0x66E // 1646 + SYS___MBLEN_A = 0x66F // 1647 + SYS___MBLEN_SB_A = 0x670 // 1648 + SYS___MBLEN_STD_A = 0x671 // 1649 + SYS___MBLEN_UTF = 0x672 // 1650 + SYS___MBSTOWCS_A = 0x673 // 1651 + SYS___MBSTOWCS_STD_A = 0x674 // 1652 + SYS___MBTOWC_A = 0x675 // 1653 + SYS___MBTOWC_ISO1 = 0x676 // 1654 + SYS___MBTOWC_SBCS = 0x677 // 1655 + SYS___MBTOWC_MBCS = 0x678 // 1656 + SYS___MBTOWC_UTF = 0x679 // 1657 + SYS___WCSTOMBS_A = 0x67A // 1658 + SYS___WCSTOMBS_STD_A = 0x67B // 1659 + SYS___WCSWIDTH_A = 0x67C // 1660 + SYS___GETGRGID_R_A = 0x67D // 1661 + SYS___WCSWIDTH_STD_A = 0x67E // 1662 + SYS___WCSWIDTH_ASIA = 0x67F // 1663 + SYS___CSID_A = 0x680 // 1664 + SYS___CSID_STD_A = 0x681 // 1665 + SYS___WCSID_A = 0x682 // 1666 + SYS___WCSID_STD_A = 0x683 // 1667 + SYS___WCTOMB_A = 0x684 // 1668 + SYS___WCTOMB_ISO1 = 0x685 // 1669 + SYS___WCTOMB_STD_A = 0x686 // 1670 + SYS___WCTOMB_UTF = 0x687 // 1671 + SYS___WCWIDTH_A = 0x688 // 1672 + SYS___GETGRNAM_R_A = 0x689 // 1673 + SYS___WCWIDTH_STD_A = 0x68A // 1674 + SYS___WCWIDTH_ASIA = 0x68B // 1675 + SYS___GETPWNAM_R_A = 0x68C // 1676 + SYS___GETPWUID_R_A = 0x68D // 1677 + SYS___GETLOGIN_R_A = 0x68E // 1678 + SYS___TTYNAME_R_A = 0x68F // 1679 + SYS___READDIR_R_A = 0x690 // 1680 + SYS___E2A_S = 0x691 // 1681 + SYS___FNMATCH_A = 0x692 // 1682 + SYS___FNMATCH_C_A = 0x693 // 1683 + SYS___EXECL_A = 0x694 // 1684 + SYS___FNMATCH_STD_A = 0x695 // 1685 + SYS___REGCOMP_A = 0x696 // 1686 + SYS___REGCOMP_STD_A = 0x697 // 1687 + SYS___REGERROR_A = 0x698 // 1688 + SYS___REGERROR_STD_A = 0x699 // 1689 + SYS___REGEXEC_A = 0x69A // 1690 + SYS___REGEXEC_STD_A = 0x69B // 1691 + SYS___REGFREE_A = 0x69C // 1692 + SYS___REGFREE_STD_A = 0x69D // 1693 + SYS___STRCOLL_A = 0x69E // 1694 + SYS___STRCOLL_C_A = 0x69F // 1695 + SYS___EXECLE_A = 0x6A0 // 1696 + SYS___STRCOLL_STD_A = 0x6A1 // 1697 + SYS___STRXFRM_A = 0x6A2 // 1698 + SYS___STRXFRM_C_A = 0x6A3 // 1699 + SYS___EXECLP_A = 0x6A4 // 1700 + SYS___STRXFRM_STD_A = 0x6A5 // 1701 + SYS___WCSCOLL_A = 0x6A6 // 1702 + SYS___WCSCOLL_C_A = 0x6A7 // 1703 + SYS___WCSCOLL_STD_A = 0x6A8 // 1704 + SYS___WCSXFRM_A = 0x6A9 // 1705 + SYS___WCSXFRM_C_A = 0x6AA // 1706 + SYS___WCSXFRM_STD_A = 0x6AB // 1707 + SYS___COLLATE_INIT_A = 0x6AC // 1708 + SYS___WCTYPE_A = 0x6AD // 1709 + SYS___GET_WCTYPE_STD_A = 0x6AE // 1710 + SYS___CTYPE_INIT_A = 0x6AF // 1711 + SYS___ISWCTYPE_A = 0x6B0 // 1712 + SYS___EXECV_A = 0x6B1 // 1713 + SYS___IS_WCTYPE_STD_A = 0x6B2 // 1714 + SYS___TOWLOWER_A = 0x6B3 // 1715 + SYS___TOWLOWER_STD_A = 0x6B4 // 1716 + SYS___TOWUPPER_A = 0x6B5 // 1717 + SYS___TOWUPPER_STD_A = 0x6B6 // 1718 + SYS___LOCALE_INIT_A = 0x6B7 // 1719 + SYS___LOCALECONV_A = 0x6B8 // 1720 + SYS___LOCALECONV_STD_A = 0x6B9 // 1721 + SYS___NL_LANGINFO_A = 0x6BA // 1722 + SYS___NL_LNAGINFO_STD_A = 0x6BB // 1723 + SYS___MONETARY_INIT_A = 0x6BC // 1724 + SYS___STRFMON_A = 0x6BD // 1725 + SYS___STRFMON_STD_A = 0x6BE // 1726 + SYS___GETADDRINFO_A = 0x6BF // 1727 + SYS___CATGETS_A = 0x6C0 // 1728 + SYS___EXECVE_A = 0x6C1 // 1729 + SYS___EXECVP_A = 0x6C2 // 1730 + SYS___SPAWN_A = 0x6C3 // 1731 + SYS___GETNAMEINFO_A = 0x6C4 // 1732 + SYS___SPAWNP_A = 0x6C5 // 1733 + SYS___NUMERIC_INIT_A = 0x6C6 // 1734 + SYS___RESP_INIT_A = 0x6C7 // 1735 + SYS___RPMATCH_A = 0x6C8 // 1736 + SYS___RPMATCH_C_A = 0x6C9 // 1737 + SYS___RPMATCH_STD_A = 0x6CA // 1738 + SYS___TIME_INIT_A = 0x6CB // 1739 + SYS___STRFTIME_A = 0x6CC // 1740 + SYS___STRFTIME_STD_A = 0x6CD // 1741 + SYS___STRPTIME_A = 0x6CE // 1742 + SYS___STRPTIME_STD_A = 0x6CF // 1743 + SYS___WCSFTIME_A = 0x6D0 // 1744 + SYS___WCSFTIME_STD_A = 0x6D1 // 1745 + SYS_____SPAWN2_A = 0x6D2 // 1746 + SYS_____SPAWNP2_A = 0x6D3 // 1747 + SYS___SYNTAX_INIT_A = 0x6D4 // 1748 + SYS___TOD_INIT_A = 0x6D5 // 1749 + SYS___NL_CSINFO_A = 0x6D6 // 1750 + SYS___NL_MONINFO_A = 0x6D7 // 1751 + SYS___NL_NUMINFO_A = 0x6D8 // 1752 + SYS___NL_RESPINFO_A = 0x6D9 // 1753 + SYS___NL_TIMINFO_A = 0x6DA // 1754 + SYS___IF_NAMETOINDEX_A = 0x6DB // 1755 + SYS___IF_INDEXTONAME_A = 0x6DC // 1756 + SYS___PRINTF_A = 0x6DD // 1757 + SYS___ICONV_OPEN_A = 0x6DE // 1758 + SYS___DLLLOAD_A = 0x6DF // 1759 + SYS___DLLQUERYFN_A = 0x6E0 // 1760 + SYS___DLLQUERYVAR_A = 0x6E1 // 1761 + SYS_____CHATTR_A = 0x6E2 // 1762 + SYS___E2A_L = 0x6E3 // 1763 + SYS_____TOCCSID_A = 0x6E4 // 1764 + SYS_____TOCSNAME_A = 0x6E5 // 1765 + SYS_____CCSIDTYPE_A = 0x6E6 // 1766 + SYS_____CSNAMETYPE_A = 0x6E7 // 1767 + SYS___CHMOD_A = 0x6E8 // 1768 + SYS___MKDIR_A = 0x6E9 // 1769 + SYS___STAT_A = 0x6EA // 1770 + SYS___STAT_O_A = 0x6EB // 1771 + SYS___MKFIFO_A = 0x6EC // 1772 + SYS_____OPEN_STAT_A = 0x6ED // 1773 + SYS___LSTAT_A = 0x6EE // 1774 + SYS___LSTAT_O_A = 0x6EF // 1775 + SYS___MKNOD_A = 0x6F0 // 1776 + SYS___MOUNT_A = 0x6F1 // 1777 + SYS___UMOUNT_A = 0x6F2 // 1778 + SYS___CHAUDIT_A = 0x6F4 // 1780 + SYS___W_GETMNTENT_A = 0x6F5 // 1781 + SYS___CREAT_A = 0x6F6 // 1782 + SYS___OPEN_A = 0x6F7 // 1783 + SYS___SETLOCALE_A = 0x6F9 // 1785 + SYS___FPRINTF_A = 0x6FA // 1786 + SYS___SPRINTF_A = 0x6FB // 1787 + SYS___VFPRINTF_A = 0x6FC // 1788 + SYS___VPRINTF_A = 0x6FD // 1789 + SYS___VSPRINTF_A = 0x6FE // 1790 + SYS___VSWPRINTF_A = 0x6FF // 1791 + SYS___SWPRINTF_A = 0x700 // 1792 + SYS___FSCANF_A = 0x701 // 1793 + SYS___SCANF_A = 0x702 // 1794 + SYS___SSCANF_A = 0x703 // 1795 + SYS___SWSCANF_A = 0x704 // 1796 + SYS___ATOF_A = 0x705 // 1797 + SYS___ATOI_A = 0x706 // 1798 + SYS___ATOL_A = 0x707 // 1799 + SYS___STRTOD_A = 0x708 // 1800 + SYS___STRTOL_A = 0x709 // 1801 + SYS___STRTOUL_A = 0x70A // 1802 + SYS_____AE_CORRESTBL_QUERY_A = 0x70B // 1803 + SYS___A64L_A = 0x70C // 1804 + SYS___ECVT_A = 0x70D // 1805 + SYS___FCVT_A = 0x70E // 1806 + SYS___GCVT_A = 0x70F // 1807 + SYS___L64A_A = 0x710 // 1808 + SYS___STRERROR_A = 0x711 // 1809 + SYS___PERROR_A = 0x712 // 1810 + SYS___FETCH_A = 0x713 // 1811 + SYS___GETENV_A = 0x714 // 1812 + SYS___MKSTEMP_A = 0x717 // 1815 + SYS___PTSNAME_A = 0x718 // 1816 + SYS___PUTENV_A = 0x719 // 1817 + SYS___REALPATH_A = 0x71A // 1818 + SYS___SETENV_A = 0x71B // 1819 + SYS___SYSTEM_A = 0x71C // 1820 + SYS___GETOPT_A = 0x71D // 1821 + SYS___CATOPEN_A = 0x71E // 1822 + SYS___ACCESS_A = 0x71F // 1823 + SYS___CHDIR_A = 0x720 // 1824 + SYS___CHOWN_A = 0x721 // 1825 + SYS___CHROOT_A = 0x722 // 1826 + SYS___GETCWD_A = 0x723 // 1827 + SYS___GETWD_A = 0x724 // 1828 + SYS___LCHOWN_A = 0x725 // 1829 + SYS___LINK_A = 0x726 // 1830 + SYS___PATHCONF_A = 0x727 // 1831 + SYS___IF_NAMEINDEX_A = 0x728 // 1832 + SYS___READLINK_A = 0x729 // 1833 + SYS___RMDIR_A = 0x72A // 1834 + SYS___STATVFS_A = 0x72B // 1835 + SYS___SYMLINK_A = 0x72C // 1836 + SYS___TRUNCATE_A = 0x72D // 1837 + SYS___UNLINK_A = 0x72E // 1838 + SYS___GAI_STRERROR_A = 0x72F // 1839 + SYS___EXTLINK_NP_A = 0x730 // 1840 + SYS___ISALNUM_A = 0x731 // 1841 + SYS___ISALPHA_A = 0x732 // 1842 + SYS___A2E_S = 0x733 // 1843 + SYS___ISCNTRL_A = 0x734 // 1844 + SYS___ISDIGIT_A = 0x735 // 1845 + SYS___ISGRAPH_A = 0x736 // 1846 + SYS___ISLOWER_A = 0x737 // 1847 + SYS___ISPRINT_A = 0x738 // 1848 + SYS___ISPUNCT_A = 0x739 // 1849 + SYS___ISSPACE_A = 0x73A // 1850 + SYS___ISUPPER_A = 0x73B // 1851 + SYS___ISXDIGIT_A = 0x73C // 1852 + SYS___TOLOWER_A = 0x73D // 1853 + SYS___TOUPPER_A = 0x73E // 1854 + SYS___ISWALNUM_A = 0x73F // 1855 + SYS___ISWALPHA_A = 0x740 // 1856 + SYS___A2E_L = 0x741 // 1857 + SYS___ISWCNTRL_A = 0x742 // 1858 + SYS___ISWDIGIT_A = 0x743 // 1859 + SYS___ISWGRAPH_A = 0x744 // 1860 + SYS___ISWLOWER_A = 0x745 // 1861 + SYS___ISWPRINT_A = 0x746 // 1862 + SYS___ISWPUNCT_A = 0x747 // 1863 + SYS___ISWSPACE_A = 0x748 // 1864 + SYS___ISWUPPER_A = 0x749 // 1865 + SYS___ISWXDIGIT_A = 0x74A // 1866 + SYS___CONFSTR_A = 0x74B // 1867 + SYS___FTOK_A = 0x74C // 1868 + SYS___MKTEMP_A = 0x74D // 1869 + SYS___FDOPEN_A = 0x74E // 1870 + SYS___FLDATA_A = 0x74F // 1871 + SYS___REMOVE_A = 0x750 // 1872 + SYS___RENAME_A = 0x751 // 1873 + SYS___TMPNAM_A = 0x752 // 1874 + SYS___FOPEN_A = 0x753 // 1875 + SYS___FREOPEN_A = 0x754 // 1876 + SYS___CUSERID_A = 0x755 // 1877 + SYS___POPEN_A = 0x756 // 1878 + SYS___TEMPNAM_A = 0x757 // 1879 + SYS___FTW_A = 0x758 // 1880 + SYS___GETGRENT_A = 0x759 // 1881 + SYS___GETGRGID_A = 0x75A // 1882 + SYS___GETGRNAM_A = 0x75B // 1883 + SYS___GETGROUPSBYNAME_A = 0x75C // 1884 + SYS___GETHOSTENT_A = 0x75D // 1885 + SYS___GETHOSTNAME_A = 0x75E // 1886 + SYS___GETLOGIN_A = 0x75F // 1887 + SYS___INET_NTOP_A = 0x760 // 1888 + SYS___GETPASS_A = 0x761 // 1889 + SYS___GETPWENT_A = 0x762 // 1890 + SYS___GETPWNAM_A = 0x763 // 1891 + SYS___GETPWUID_A = 0x764 // 1892 + SYS_____CHECK_RESOURCE_AUTH_NP_A = 0x765 // 1893 + SYS___CHECKSCHENV_A = 0x766 // 1894 + SYS___CONNECTSERVER_A = 0x767 // 1895 + SYS___CONNECTWORKMGR_A = 0x768 // 1896 + SYS_____CONSOLE_A = 0x769 // 1897 + SYS___CREATEWORKUNIT_A = 0x76A // 1898 + SYS___CTERMID_A = 0x76B // 1899 + SYS___FMTMSG_A = 0x76C // 1900 + SYS___INITGROUPS_A = 0x76D // 1901 + SYS_____LOGIN_A = 0x76E // 1902 + SYS___MSGRCV_A = 0x76F // 1903 + SYS___MSGSND_A = 0x770 // 1904 + SYS___MSGXRCV_A = 0x771 // 1905 + SYS___NFTW_A = 0x772 // 1906 + SYS_____PASSWD_A = 0x773 // 1907 + SYS___PTHREAD_SECURITY_NP_A = 0x774 // 1908 + SYS___QUERYMETRICS_A = 0x775 // 1909 + SYS___QUERYSCHENV = 0x776 // 1910 + SYS___READV_A = 0x777 // 1911 + SYS_____SERVER_CLASSIFY_A = 0x778 // 1912 + SYS_____SERVER_INIT_A = 0x779 // 1913 + SYS_____SERVER_PWU_A = 0x77A // 1914 + SYS___STRCASECMP_A = 0x77B // 1915 + SYS___STRNCASECMP_A = 0x77C // 1916 + SYS___TTYNAME_A = 0x77D // 1917 + SYS___UNAME_A = 0x77E // 1918 + SYS___UTIMES_A = 0x77F // 1919 + SYS___W_GETPSENT_A = 0x780 // 1920 + SYS___WRITEV_A = 0x781 // 1921 + SYS___W_STATFS_A = 0x782 // 1922 + SYS___W_STATVFS_A = 0x783 // 1923 + SYS___FPUTC_A = 0x784 // 1924 + SYS___PUTCHAR_A = 0x785 // 1925 + SYS___PUTS_A = 0x786 // 1926 + SYS___FGETS_A = 0x787 // 1927 + SYS___GETS_A = 0x788 // 1928 + SYS___FPUTS_A = 0x789 // 1929 + SYS___FREAD_A = 0x78A // 1930 + SYS___FWRITE_A = 0x78B // 1931 + SYS___OPEN_O_A = 0x78C // 1932 + SYS___ISASCII = 0x78D // 1933 + SYS___CREAT_O_A = 0x78E // 1934 + SYS___ENVNA = 0x78F // 1935 + SYS___PUTC_A = 0x790 // 1936 + SYS___AE_THREAD_SETMODE = 0x791 // 1937 + SYS___AE_THREAD_SWAPMODE = 0x792 // 1938 + SYS___GETNETBYADDR_A = 0x793 // 1939 + SYS___GETNETBYNAME_A = 0x794 // 1940 + SYS___GETNETENT_A = 0x795 // 1941 + SYS___GETPROTOBYNAME_A = 0x796 // 1942 + SYS___GETPROTOBYNUMBER_A = 0x797 // 1943 + SYS___GETPROTOENT_A = 0x798 // 1944 + SYS___GETSERVBYNAME_A = 0x799 // 1945 + SYS___GETSERVBYPORT_A = 0x79A // 1946 + SYS___GETSERVENT_A = 0x79B // 1947 + SYS___ASCTIME_A = 0x79C // 1948 + SYS___CTIME_A = 0x79D // 1949 + SYS___GETDATE_A = 0x79E // 1950 + SYS___TZSET_A = 0x79F // 1951 + SYS___UTIME_A = 0x7A0 // 1952 + SYS___ASCTIME_R_A = 0x7A1 // 1953 + SYS___CTIME_R_A = 0x7A2 // 1954 + SYS___STRTOLL_A = 0x7A3 // 1955 + SYS___STRTOULL_A = 0x7A4 // 1956 + SYS___FPUTWC_A = 0x7A5 // 1957 + SYS___PUTWC_A = 0x7A6 // 1958 + SYS___PUTWCHAR_A = 0x7A7 // 1959 + SYS___FPUTWS_A = 0x7A8 // 1960 + SYS___UNGETWC_A = 0x7A9 // 1961 + SYS___FGETWC_A = 0x7AA // 1962 + SYS___GETWC_A = 0x7AB // 1963 + SYS___GETWCHAR_A = 0x7AC // 1964 + SYS___FGETWS_A = 0x7AD // 1965 + SYS___GETTIMEOFDAY_A = 0x7AE // 1966 + SYS___GMTIME_A = 0x7AF // 1967 + SYS___GMTIME_R_A = 0x7B0 // 1968 + SYS___LOCALTIME_A = 0x7B1 // 1969 + SYS___LOCALTIME_R_A = 0x7B2 // 1970 + SYS___MKTIME_A = 0x7B3 // 1971 + SYS___TZZNA = 0x7B4 // 1972 + SYS_UNATEXIT = 0x7B5 // 1973 + SYS___CEE3DMP_A = 0x7B6 // 1974 + SYS___CDUMP_A = 0x7B7 // 1975 + SYS___CSNAP_A = 0x7B8 // 1976 + SYS___CTEST_A = 0x7B9 // 1977 + SYS___CTRACE_A = 0x7BA // 1978 + SYS___VSWPRNTF2_A = 0x7BB // 1979 + SYS___INET_PTON_A = 0x7BC // 1980 + SYS___SYSLOG_A = 0x7BD // 1981 + SYS___CRYPT_A = 0x7BE // 1982 + SYS_____OPENDIR2_A = 0x7BF // 1983 + SYS_____READDIR2_A = 0x7C0 // 1984 + SYS___OPENDIR_A = 0x7C2 // 1986 + SYS___READDIR_A = 0x7C3 // 1987 + SYS_PREAD = 0x7C7 // 1991 + SYS_PWRITE = 0x7C8 // 1992 + SYS_M_CREATE_LAYOUT = 0x7C9 // 1993 + SYS_M_DESTROY_LAYOUT = 0x7CA // 1994 + SYS_M_GETVALUES_LAYOUT = 0x7CB // 1995 + SYS_M_SETVALUES_LAYOUT = 0x7CC // 1996 + SYS_M_TRANSFORM_LAYOUT = 0x7CD // 1997 + SYS_M_WTRANSFORM_LAYOUT = 0x7CE // 1998 + SYS_FWPRINTF = 0x7D1 // 2001 + SYS_WPRINTF = 0x7D2 // 2002 + SYS_VFWPRINT = 0x7D3 // 2003 + SYS_VFWPRINTF = 0x7D3 // 2003 + SYS_VWPRINTF = 0x7D4 // 2004 + SYS_FWSCANF = 0x7D5 // 2005 + SYS_WSCANF = 0x7D6 // 2006 + SYS_WCTRANS = 0x7D7 // 2007 + SYS_TOWCTRAN = 0x7D8 // 2008 + SYS_TOWCTRANS = 0x7D8 // 2008 + SYS___WCSTOD_A = 0x7D9 // 2009 + SYS___WCSTOL_A = 0x7DA // 2010 + SYS___WCSTOUL_A = 0x7DB // 2011 + SYS___BASENAME_A = 0x7DC // 2012 + SYS___DIRNAME_A = 0x7DD // 2013 + SYS___GLOB_A = 0x7DE // 2014 + SYS_FWIDE = 0x7DF // 2015 + SYS___OSNAME = 0x7E0 // 2016 + SYS_____OSNAME_A = 0x7E1 // 2017 + SYS___BTOWC_A = 0x7E4 // 2020 + SYS___WCTOB_A = 0x7E5 // 2021 + SYS___DBM_OPEN_A = 0x7E6 // 2022 + SYS___VFPRINTF2_A = 0x7E7 // 2023 + SYS___VPRINTF2_A = 0x7E8 // 2024 + SYS___VSPRINTF2_A = 0x7E9 // 2025 + SYS___CEIL_H = 0x7EA // 2026 + SYS___FLOOR_H = 0x7EB // 2027 + SYS___MODF_H = 0x7EC // 2028 + SYS___FABS_H = 0x7ED // 2029 + SYS___J0_H = 0x7EE // 2030 + SYS___J1_H = 0x7EF // 2031 + SYS___JN_H = 0x7F0 // 2032 + SYS___Y0_H = 0x7F1 // 2033 + SYS___Y1_H = 0x7F2 // 2034 + SYS___YN_H = 0x7F3 // 2035 + SYS___CEILF_H = 0x7F4 // 2036 + SYS___CEILL_H = 0x7F5 // 2037 + SYS___FLOORF_H = 0x7F6 // 2038 + SYS___FLOORL_H = 0x7F7 // 2039 + SYS___MODFF_H = 0x7F8 // 2040 + SYS___MODFL_H = 0x7F9 // 2041 + SYS___FABSF_H = 0x7FA // 2042 + SYS___FABSL_H = 0x7FB // 2043 + SYS___MALLOC24 = 0x7FC // 2044 + SYS___MALLOC31 = 0x7FD // 2045 + SYS_ACL_INIT = 0x7FE // 2046 + SYS_ACL_FREE = 0x7FF // 2047 + SYS_ACL_FIRST_ENTRY = 0x800 // 2048 + SYS_ACL_GET_ENTRY = 0x801 // 2049 + SYS_ACL_VALID = 0x802 // 2050 + SYS_ACL_CREATE_ENTRY = 0x803 // 2051 + SYS_ACL_DELETE_ENTRY = 0x804 // 2052 + SYS_ACL_UPDATE_ENTRY = 0x805 // 2053 + SYS_ACL_DELETE_FD = 0x806 // 2054 + SYS_ACL_DELETE_FILE = 0x807 // 2055 + SYS_ACL_GET_FD = 0x808 // 2056 + SYS_ACL_GET_FILE = 0x809 // 2057 + SYS_ACL_SET_FD = 0x80A // 2058 + SYS_ACL_SET_FILE = 0x80B // 2059 + SYS_ACL_FROM_TEXT = 0x80C // 2060 + SYS_ACL_TO_TEXT = 0x80D // 2061 + SYS_ACL_SORT = 0x80E // 2062 + SYS___SHUTDOWN_REGISTRATION = 0x80F // 2063 + SYS___ERFL_B = 0x810 // 2064 + SYS___ERFCL_B = 0x811 // 2065 + SYS___LGAMMAL_B = 0x812 // 2066 + SYS___SETHOOKEVENTS = 0x813 // 2067 + SYS_IF_NAMETOINDEX = 0x814 // 2068 + SYS_IF_INDEXTONAME = 0x815 // 2069 + SYS_IF_NAMEINDEX = 0x816 // 2070 + SYS_IF_FREENAMEINDEX = 0x817 // 2071 + SYS_GETADDRINFO = 0x818 // 2072 + SYS_GETNAMEINFO = 0x819 // 2073 + SYS_FREEADDRINFO = 0x81A // 2074 + SYS_GAI_STRERROR = 0x81B // 2075 + SYS_REXEC_AF = 0x81C // 2076 + SYS___POE = 0x81D // 2077 + SYS___DYNALLOC_A = 0x81F // 2079 + SYS___DYNFREE_A = 0x820 // 2080 + SYS___RES_QUERY_A = 0x821 // 2081 + SYS___RES_SEARCH_A = 0x822 // 2082 + SYS___RES_QUERYDOMAIN_A = 0x823 // 2083 + SYS___RES_MKQUERY_A = 0x824 // 2084 + SYS___RES_SEND_A = 0x825 // 2085 + SYS___DN_EXPAND_A = 0x826 // 2086 + SYS___DN_SKIPNAME_A = 0x827 // 2087 + SYS___DN_COMP_A = 0x828 // 2088 + SYS___DN_FIND_A = 0x829 // 2089 + SYS___NLIST_A = 0x82A // 2090 + SYS_____TCGETCP_A = 0x82B // 2091 + SYS_____TCSETCP_A = 0x82C // 2092 + SYS_____W_PIOCTL_A = 0x82E // 2094 + SYS___INET_ADDR_A = 0x82F // 2095 + SYS___INET_NTOA_A = 0x830 // 2096 + SYS___INET_NETWORK_A = 0x831 // 2097 + SYS___ACCEPT_A = 0x832 // 2098 + SYS___ACCEPT_AND_RECV_A = 0x833 // 2099 + SYS___BIND_A = 0x834 // 2100 + SYS___CONNECT_A = 0x835 // 2101 + SYS___GETPEERNAME_A = 0x836 // 2102 + SYS___GETSOCKNAME_A = 0x837 // 2103 + SYS___RECVFROM_A = 0x838 // 2104 + SYS___SENDTO_A = 0x839 // 2105 + SYS___SENDMSG_A = 0x83A // 2106 + SYS___RECVMSG_A = 0x83B // 2107 + SYS_____LCHATTR_A = 0x83C // 2108 + SYS___CABEND = 0x83D // 2109 + SYS___LE_CIB_GET = 0x83E // 2110 + SYS___SET_LAA_FOR_JIT = 0x83F // 2111 + SYS___LCHATTR = 0x840 // 2112 + SYS___WRITEDOWN = 0x841 // 2113 + SYS_PTHREAD_MUTEX_INIT2 = 0x842 // 2114 + SYS___ACOSHF_B = 0x843 // 2115 + SYS___ACOSHL_B = 0x844 // 2116 + SYS___ASINHF_B = 0x845 // 2117 + SYS___ASINHL_B = 0x846 // 2118 + SYS___ATANHF_B = 0x847 // 2119 + SYS___ATANHL_B = 0x848 // 2120 + SYS___CBRTF_B = 0x849 // 2121 + SYS___CBRTL_B = 0x84A // 2122 + SYS___COPYSIGNF_B = 0x84B // 2123 + SYS___COPYSIGNL_B = 0x84C // 2124 + SYS___COTANF_B = 0x84D // 2125 + SYS___COTAN_B = 0x84E // 2126 + SYS___COTANL_B = 0x84F // 2127 + SYS___EXP2F_B = 0x850 // 2128 + SYS___EXP2L_B = 0x851 // 2129 + SYS___EXPM1F_B = 0x852 // 2130 + SYS___EXPM1L_B = 0x853 // 2131 + SYS___FDIMF_B = 0x854 // 2132 + SYS___FDIM_B = 0x855 // 2133 + SYS___FDIML_B = 0x856 // 2134 + SYS___HYPOTF_B = 0x857 // 2135 + SYS___HYPOTL_B = 0x858 // 2136 + SYS___LOG1PF_B = 0x859 // 2137 + SYS___LOG1PL_B = 0x85A // 2138 + SYS___LOG2F_B = 0x85B // 2139 + SYS___LOG2_B = 0x85C // 2140 + SYS___LOG2L_B = 0x85D // 2141 + SYS___REMAINDERF_B = 0x85E // 2142 + SYS___REMAINDERL_B = 0x85F // 2143 + SYS___REMQUOF_B = 0x860 // 2144 + SYS___REMQUO_B = 0x861 // 2145 + SYS___REMQUOL_B = 0x862 // 2146 + SYS___TGAMMAF_B = 0x863 // 2147 + SYS___TGAMMA_B = 0x864 // 2148 + SYS___TGAMMAL_B = 0x865 // 2149 + SYS___TRUNCF_B = 0x866 // 2150 + SYS___TRUNC_B = 0x867 // 2151 + SYS___TRUNCL_B = 0x868 // 2152 + SYS___LGAMMAF_B = 0x869 // 2153 + SYS___LROUNDF_B = 0x86A // 2154 + SYS___LROUND_B = 0x86B // 2155 + SYS___ERFF_B = 0x86C // 2156 + SYS___ERFCF_B = 0x86D // 2157 + SYS_ACOSHF = 0x86E // 2158 + SYS_ACOSHL = 0x86F // 2159 + SYS_ASINHF = 0x870 // 2160 + SYS_ASINHL = 0x871 // 2161 + SYS_ATANHF = 0x872 // 2162 + SYS_ATANHL = 0x873 // 2163 + SYS_CBRTF = 0x874 // 2164 + SYS_CBRTL = 0x875 // 2165 + SYS_COPYSIGNF = 0x876 // 2166 + SYS_CPYSIGNF = 0x876 // 2166 + SYS_COPYSIGNL = 0x877 // 2167 + SYS_CPYSIGNL = 0x877 // 2167 + SYS_COTANF = 0x878 // 2168 + SYS___COTANF = 0x878 // 2168 + SYS_COTAN = 0x879 // 2169 + SYS___COTAN = 0x879 // 2169 + SYS_COTANL = 0x87A // 2170 + SYS___COTANL = 0x87A // 2170 + SYS_EXP2F = 0x87B // 2171 + SYS_EXP2L = 0x87C // 2172 + SYS_EXPM1F = 0x87D // 2173 + SYS_EXPM1L = 0x87E // 2174 + SYS_FDIMF = 0x87F // 2175 + SYS_FDIM = 0x881 // 2177 + SYS_FDIML = 0x882 // 2178 + SYS_HYPOTF = 0x883 // 2179 + SYS_HYPOTL = 0x884 // 2180 + SYS_LOG1PF = 0x885 // 2181 + SYS_LOG1PL = 0x886 // 2182 + SYS_LOG2F = 0x887 // 2183 + SYS_LOG2 = 0x888 // 2184 + SYS_LOG2L = 0x889 // 2185 + SYS_REMAINDERF = 0x88A // 2186 + SYS_REMAINDF = 0x88A // 2186 + SYS_REMAINDERL = 0x88B // 2187 + SYS_REMAINDL = 0x88B // 2187 + SYS_REMQUOF = 0x88C // 2188 + SYS_REMQUO = 0x88D // 2189 + SYS_REMQUOL = 0x88E // 2190 + SYS_TGAMMAF = 0x88F // 2191 + SYS_TGAMMA = 0x890 // 2192 + SYS_TGAMMAL = 0x891 // 2193 + SYS_TRUNCF = 0x892 // 2194 + SYS_TRUNC = 0x893 // 2195 + SYS_TRUNCL = 0x894 // 2196 + SYS_LGAMMAF = 0x895 // 2197 + SYS_LGAMMAL = 0x896 // 2198 + SYS_LROUNDF = 0x897 // 2199 + SYS_LROUND = 0x898 // 2200 + SYS_ERFF = 0x899 // 2201 + SYS_ERFL = 0x89A // 2202 + SYS_ERFCF = 0x89B // 2203 + SYS_ERFCL = 0x89C // 2204 + SYS___EXP2_B = 0x89D // 2205 + SYS_EXP2 = 0x89E // 2206 + SYS___FAR_JUMP = 0x89F // 2207 + SYS___TCGETATTR_A = 0x8A1 // 2209 + SYS___TCSETATTR_A = 0x8A2 // 2210 + SYS___SUPERKILL = 0x8A4 // 2212 + SYS___LE_CONDITION_TOKEN_BUILD = 0x8A5 // 2213 + SYS___LE_MSG_ADD_INSERT = 0x8A6 // 2214 + SYS___LE_MSG_GET = 0x8A7 // 2215 + SYS___LE_MSG_GET_AND_WRITE = 0x8A8 // 2216 + SYS___LE_MSG_WRITE = 0x8A9 // 2217 + SYS___ITOA = 0x8AA // 2218 + SYS___UTOA = 0x8AB // 2219 + SYS___LTOA = 0x8AC // 2220 + SYS___ULTOA = 0x8AD // 2221 + SYS___LLTOA = 0x8AE // 2222 + SYS___ULLTOA = 0x8AF // 2223 + SYS___ITOA_A = 0x8B0 // 2224 + SYS___UTOA_A = 0x8B1 // 2225 + SYS___LTOA_A = 0x8B2 // 2226 + SYS___ULTOA_A = 0x8B3 // 2227 + SYS___LLTOA_A = 0x8B4 // 2228 + SYS___ULLTOA_A = 0x8B5 // 2229 + SYS_____GETENV_A = 0x8C3 // 2243 + SYS___REXEC_A = 0x8C4 // 2244 + SYS___REXEC_AF_A = 0x8C5 // 2245 + SYS___GETUTXENT_A = 0x8C6 // 2246 + SYS___GETUTXID_A = 0x8C7 // 2247 + SYS___GETUTXLINE_A = 0x8C8 // 2248 + SYS___PUTUTXLINE_A = 0x8C9 // 2249 + SYS_____UTMPXNAME_A = 0x8CA // 2250 + SYS___PUTC_UNLOCKED_A = 0x8CB // 2251 + SYS___PUTCHAR_UNLOCKED_A = 0x8CC // 2252 + SYS___SNPRINTF_A = 0x8CD // 2253 + SYS___VSNPRINTF_A = 0x8CE // 2254 + SYS___DLOPEN_A = 0x8D0 // 2256 + SYS___DLSYM_A = 0x8D1 // 2257 + SYS___DLERROR_A = 0x8D2 // 2258 + SYS_FLOCKFILE = 0x8D3 // 2259 + SYS_FTRYLOCKFILE = 0x8D4 // 2260 + SYS_FUNLOCKFILE = 0x8D5 // 2261 + SYS_GETC_UNLOCKED = 0x8D6 // 2262 + SYS_GETCHAR_UNLOCKED = 0x8D7 // 2263 + SYS_PUTC_UNLOCKED = 0x8D8 // 2264 + SYS_PUTCHAR_UNLOCKED = 0x8D9 // 2265 + SYS_SNPRINTF = 0x8DA // 2266 + SYS_VSNPRINTF = 0x8DB // 2267 + SYS_DLOPEN = 0x8DD // 2269 + SYS_DLSYM = 0x8DE // 2270 + SYS_DLCLOSE = 0x8DF // 2271 + SYS_DLERROR = 0x8E0 // 2272 + SYS___SET_EXCEPTION_HANDLER = 0x8E2 // 2274 + SYS___RESET_EXCEPTION_HANDLER = 0x8E3 // 2275 + SYS___VHM_EVENT = 0x8E4 // 2276 + SYS___ABS_H = 0x8E6 // 2278 + SYS___ABSF_H = 0x8E7 // 2279 + SYS___ABSL_H = 0x8E8 // 2280 + SYS___ACOS_H = 0x8E9 // 2281 + SYS___ACOSF_H = 0x8EA // 2282 + SYS___ACOSL_H = 0x8EB // 2283 + SYS___ACOSH_H = 0x8EC // 2284 + SYS___ASIN_H = 0x8ED // 2285 + SYS___ASINF_H = 0x8EE // 2286 + SYS___ASINL_H = 0x8EF // 2287 + SYS___ASINH_H = 0x8F0 // 2288 + SYS___ATAN_H = 0x8F1 // 2289 + SYS___ATANF_H = 0x8F2 // 2290 + SYS___ATANL_H = 0x8F3 // 2291 + SYS___ATANH_H = 0x8F4 // 2292 + SYS___ATANHF_H = 0x8F5 // 2293 + SYS___ATANHL_H = 0x8F6 // 2294 + SYS___ATAN2_H = 0x8F7 // 2295 + SYS___ATAN2F_H = 0x8F8 // 2296 + SYS___ATAN2L_H = 0x8F9 // 2297 + SYS___CBRT_H = 0x8FA // 2298 + SYS___COPYSIGNF_H = 0x8FB // 2299 + SYS___COPYSIGNL_H = 0x8FC // 2300 + SYS___COS_H = 0x8FD // 2301 + SYS___COSF_H = 0x8FE // 2302 + SYS___COSL_H = 0x8FF // 2303 + SYS___COSHF_H = 0x900 // 2304 + SYS___COSHL_H = 0x901 // 2305 + SYS___COTAN_H = 0x902 // 2306 + SYS___COTANF_H = 0x903 // 2307 + SYS___COTANL_H = 0x904 // 2308 + SYS___ERF_H = 0x905 // 2309 + SYS___ERFF_H = 0x906 // 2310 + SYS___ERFL_H = 0x907 // 2311 + SYS___ERFC_H = 0x908 // 2312 + SYS___ERFCF_H = 0x909 // 2313 + SYS___ERFCL_H = 0x90A // 2314 + SYS___EXP_H = 0x90B // 2315 + SYS___EXPF_H = 0x90C // 2316 + SYS___EXPL_H = 0x90D // 2317 + SYS___EXPM1_H = 0x90E // 2318 + SYS___FDIM_H = 0x90F // 2319 + SYS___FDIMF_H = 0x910 // 2320 + SYS___FDIML_H = 0x911 // 2321 + SYS___FMOD_H = 0x912 // 2322 + SYS___FMODF_H = 0x913 // 2323 + SYS___FMODL_H = 0x914 // 2324 + SYS___GAMMA_H = 0x915 // 2325 + SYS___HYPOT_H = 0x916 // 2326 + SYS___ILOGB_H = 0x917 // 2327 + SYS___LGAMMA_H = 0x918 // 2328 + SYS___LGAMMAF_H = 0x919 // 2329 + SYS___LOG_H = 0x91A // 2330 + SYS___LOGF_H = 0x91B // 2331 + SYS___LOGL_H = 0x91C // 2332 + SYS___LOGB_H = 0x91D // 2333 + SYS___LOG2_H = 0x91E // 2334 + SYS___LOG2F_H = 0x91F // 2335 + SYS___LOG2L_H = 0x920 // 2336 + SYS___LOG1P_H = 0x921 // 2337 + SYS___LOG10_H = 0x922 // 2338 + SYS___LOG10F_H = 0x923 // 2339 + SYS___LOG10L_H = 0x924 // 2340 + SYS___LROUND_H = 0x925 // 2341 + SYS___LROUNDF_H = 0x926 // 2342 + SYS___NEXTAFTER_H = 0x927 // 2343 + SYS___POW_H = 0x928 // 2344 + SYS___POWF_H = 0x929 // 2345 + SYS___POWL_H = 0x92A // 2346 + SYS___REMAINDER_H = 0x92B // 2347 + SYS___RINT_H = 0x92C // 2348 + SYS___SCALB_H = 0x92D // 2349 + SYS___SIN_H = 0x92E // 2350 + SYS___SINF_H = 0x92F // 2351 + SYS___SINL_H = 0x930 // 2352 + SYS___SINH_H = 0x931 // 2353 + SYS___SINHF_H = 0x932 // 2354 + SYS___SINHL_H = 0x933 // 2355 + SYS___SQRT_H = 0x934 // 2356 + SYS___SQRTF_H = 0x935 // 2357 + SYS___SQRTL_H = 0x936 // 2358 + SYS___TAN_H = 0x937 // 2359 + SYS___TANF_H = 0x938 // 2360 + SYS___TANL_H = 0x939 // 2361 + SYS___TANH_H = 0x93A // 2362 + SYS___TANHF_H = 0x93B // 2363 + SYS___TANHL_H = 0x93C // 2364 + SYS___TGAMMA_H = 0x93D // 2365 + SYS___TGAMMAF_H = 0x93E // 2366 + SYS___TRUNC_H = 0x93F // 2367 + SYS___TRUNCF_H = 0x940 // 2368 + SYS___TRUNCL_H = 0x941 // 2369 + SYS___COSH_H = 0x942 // 2370 + SYS___LE_DEBUG_SET_RESUME_MCH = 0x943 // 2371 + SYS_VFSCANF = 0x944 // 2372 + SYS_VSCANF = 0x946 // 2374 + SYS_VSSCANF = 0x948 // 2376 + SYS_VFWSCANF = 0x94A // 2378 + SYS_VWSCANF = 0x94C // 2380 + SYS_VSWSCANF = 0x94E // 2382 + SYS_IMAXABS = 0x950 // 2384 + SYS_IMAXDIV = 0x951 // 2385 + SYS_STRTOIMAX = 0x952 // 2386 + SYS_STRTOUMAX = 0x953 // 2387 + SYS_WCSTOIMAX = 0x954 // 2388 + SYS_WCSTOUMAX = 0x955 // 2389 + SYS_ATOLL = 0x956 // 2390 + SYS_STRTOF = 0x957 // 2391 + SYS_STRTOLD = 0x958 // 2392 + SYS_WCSTOF = 0x959 // 2393 + SYS_WCSTOLD = 0x95A // 2394 + SYS_INET6_RTH_SPACE = 0x95B // 2395 + SYS_INET6_RTH_INIT = 0x95C // 2396 + SYS_INET6_RTH_ADD = 0x95D // 2397 + SYS_INET6_RTH_REVERSE = 0x95E // 2398 + SYS_INET6_RTH_SEGMENTS = 0x95F // 2399 + SYS_INET6_RTH_GETADDR = 0x960 // 2400 + SYS_INET6_OPT_INIT = 0x961 // 2401 + SYS_INET6_OPT_APPEND = 0x962 // 2402 + SYS_INET6_OPT_FINISH = 0x963 // 2403 + SYS_INET6_OPT_SET_VAL = 0x964 // 2404 + SYS_INET6_OPT_NEXT = 0x965 // 2405 + SYS_INET6_OPT_FIND = 0x966 // 2406 + SYS_INET6_OPT_GET_VAL = 0x967 // 2407 + SYS___POW_I = 0x987 // 2439 + SYS___POW_I_B = 0x988 // 2440 + SYS___POW_I_H = 0x989 // 2441 + SYS___POW_II = 0x98A // 2442 + SYS___POW_II_B = 0x98B // 2443 + SYS___POW_II_H = 0x98C // 2444 + SYS_CABS = 0x98E // 2446 + SYS___CABS_B = 0x98F // 2447 + SYS___CABS_H = 0x990 // 2448 + SYS_CABSF = 0x991 // 2449 + SYS___CABSF_B = 0x992 // 2450 + SYS___CABSF_H = 0x993 // 2451 + SYS_CABSL = 0x994 // 2452 + SYS___CABSL_B = 0x995 // 2453 + SYS___CABSL_H = 0x996 // 2454 + SYS_CACOS = 0x997 // 2455 + SYS___CACOS_B = 0x998 // 2456 + SYS___CACOS_H = 0x999 // 2457 + SYS_CACOSF = 0x99A // 2458 + SYS___CACOSF_B = 0x99B // 2459 + SYS___CACOSF_H = 0x99C // 2460 + SYS_CACOSL = 0x99D // 2461 + SYS___CACOSL_B = 0x99E // 2462 + SYS___CACOSL_H = 0x99F // 2463 + SYS_CACOSH = 0x9A0 // 2464 + SYS___CACOSH_B = 0x9A1 // 2465 + SYS___CACOSH_H = 0x9A2 // 2466 + SYS_CACOSHF = 0x9A3 // 2467 + SYS___CACOSHF_B = 0x9A4 // 2468 + SYS___CACOSHF_H = 0x9A5 // 2469 + SYS_CACOSHL = 0x9A6 // 2470 + SYS___CACOSHL_B = 0x9A7 // 2471 + SYS___CACOSHL_H = 0x9A8 // 2472 + SYS_CARG = 0x9A9 // 2473 + SYS___CARG_B = 0x9AA // 2474 + SYS___CARG_H = 0x9AB // 2475 + SYS_CARGF = 0x9AC // 2476 + SYS___CARGF_B = 0x9AD // 2477 + SYS___CARGF_H = 0x9AE // 2478 + SYS_CARGL = 0x9AF // 2479 + SYS___CARGL_B = 0x9B0 // 2480 + SYS___CARGL_H = 0x9B1 // 2481 + SYS_CASIN = 0x9B2 // 2482 + SYS___CASIN_B = 0x9B3 // 2483 + SYS___CASIN_H = 0x9B4 // 2484 + SYS_CASINF = 0x9B5 // 2485 + SYS___CASINF_B = 0x9B6 // 2486 + SYS___CASINF_H = 0x9B7 // 2487 + SYS_CASINL = 0x9B8 // 2488 + SYS___CASINL_B = 0x9B9 // 2489 + SYS___CASINL_H = 0x9BA // 2490 + SYS_CASINH = 0x9BB // 2491 + SYS___CASINH_B = 0x9BC // 2492 + SYS___CASINH_H = 0x9BD // 2493 + SYS_CASINHF = 0x9BE // 2494 + SYS___CASINHF_B = 0x9BF // 2495 + SYS___CASINHF_H = 0x9C0 // 2496 + SYS_CASINHL = 0x9C1 // 2497 + SYS___CASINHL_B = 0x9C2 // 2498 + SYS___CASINHL_H = 0x9C3 // 2499 + SYS_CATAN = 0x9C4 // 2500 + SYS___CATAN_B = 0x9C5 // 2501 + SYS___CATAN_H = 0x9C6 // 2502 + SYS_CATANF = 0x9C7 // 2503 + SYS___CATANF_B = 0x9C8 // 2504 + SYS___CATANF_H = 0x9C9 // 2505 + SYS_CATANL = 0x9CA // 2506 + SYS___CATANL_B = 0x9CB // 2507 + SYS___CATANL_H = 0x9CC // 2508 + SYS_CATANH = 0x9CD // 2509 + SYS___CATANH_B = 0x9CE // 2510 + SYS___CATANH_H = 0x9CF // 2511 + SYS_CATANHF = 0x9D0 // 2512 + SYS___CATANHF_B = 0x9D1 // 2513 + SYS___CATANHF_H = 0x9D2 // 2514 + SYS_CATANHL = 0x9D3 // 2515 + SYS___CATANHL_B = 0x9D4 // 2516 + SYS___CATANHL_H = 0x9D5 // 2517 + SYS_CCOS = 0x9D6 // 2518 + SYS___CCOS_B = 0x9D7 // 2519 + SYS___CCOS_H = 0x9D8 // 2520 + SYS_CCOSF = 0x9D9 // 2521 + SYS___CCOSF_B = 0x9DA // 2522 + SYS___CCOSF_H = 0x9DB // 2523 + SYS_CCOSL = 0x9DC // 2524 + SYS___CCOSL_B = 0x9DD // 2525 + SYS___CCOSL_H = 0x9DE // 2526 + SYS_CCOSH = 0x9DF // 2527 + SYS___CCOSH_B = 0x9E0 // 2528 + SYS___CCOSH_H = 0x9E1 // 2529 + SYS_CCOSHF = 0x9E2 // 2530 + SYS___CCOSHF_B = 0x9E3 // 2531 + SYS___CCOSHF_H = 0x9E4 // 2532 + SYS_CCOSHL = 0x9E5 // 2533 + SYS___CCOSHL_B = 0x9E6 // 2534 + SYS___CCOSHL_H = 0x9E7 // 2535 + SYS_CEXP = 0x9E8 // 2536 + SYS___CEXP_B = 0x9E9 // 2537 + SYS___CEXP_H = 0x9EA // 2538 + SYS_CEXPF = 0x9EB // 2539 + SYS___CEXPF_B = 0x9EC // 2540 + SYS___CEXPF_H = 0x9ED // 2541 + SYS_CEXPL = 0x9EE // 2542 + SYS___CEXPL_B = 0x9EF // 2543 + SYS___CEXPL_H = 0x9F0 // 2544 + SYS_CIMAG = 0x9F1 // 2545 + SYS___CIMAG_B = 0x9F2 // 2546 + SYS___CIMAG_H = 0x9F3 // 2547 + SYS_CIMAGF = 0x9F4 // 2548 + SYS___CIMAGF_B = 0x9F5 // 2549 + SYS___CIMAGF_H = 0x9F6 // 2550 + SYS_CIMAGL = 0x9F7 // 2551 + SYS___CIMAGL_B = 0x9F8 // 2552 + SYS___CIMAGL_H = 0x9F9 // 2553 + SYS___CLOG = 0x9FA // 2554 + SYS___CLOG_B = 0x9FB // 2555 + SYS___CLOG_H = 0x9FC // 2556 + SYS_CLOGF = 0x9FD // 2557 + SYS___CLOGF_B = 0x9FE // 2558 + SYS___CLOGF_H = 0x9FF // 2559 + SYS_CLOGL = 0xA00 // 2560 + SYS___CLOGL_B = 0xA01 // 2561 + SYS___CLOGL_H = 0xA02 // 2562 + SYS_CONJ = 0xA03 // 2563 + SYS___CONJ_B = 0xA04 // 2564 + SYS___CONJ_H = 0xA05 // 2565 + SYS_CONJF = 0xA06 // 2566 + SYS___CONJF_B = 0xA07 // 2567 + SYS___CONJF_H = 0xA08 // 2568 + SYS_CONJL = 0xA09 // 2569 + SYS___CONJL_B = 0xA0A // 2570 + SYS___CONJL_H = 0xA0B // 2571 + SYS_CPOW = 0xA0C // 2572 + SYS___CPOW_B = 0xA0D // 2573 + SYS___CPOW_H = 0xA0E // 2574 + SYS_CPOWF = 0xA0F // 2575 + SYS___CPOWF_B = 0xA10 // 2576 + SYS___CPOWF_H = 0xA11 // 2577 + SYS_CPOWL = 0xA12 // 2578 + SYS___CPOWL_B = 0xA13 // 2579 + SYS___CPOWL_H = 0xA14 // 2580 + SYS_CPROJ = 0xA15 // 2581 + SYS___CPROJ_B = 0xA16 // 2582 + SYS___CPROJ_H = 0xA17 // 2583 + SYS_CPROJF = 0xA18 // 2584 + SYS___CPROJF_B = 0xA19 // 2585 + SYS___CPROJF_H = 0xA1A // 2586 + SYS_CPROJL = 0xA1B // 2587 + SYS___CPROJL_B = 0xA1C // 2588 + SYS___CPROJL_H = 0xA1D // 2589 + SYS_CREAL = 0xA1E // 2590 + SYS___CREAL_B = 0xA1F // 2591 + SYS___CREAL_H = 0xA20 // 2592 + SYS_CREALF = 0xA21 // 2593 + SYS___CREALF_B = 0xA22 // 2594 + SYS___CREALF_H = 0xA23 // 2595 + SYS_CREALL = 0xA24 // 2596 + SYS___CREALL_B = 0xA25 // 2597 + SYS___CREALL_H = 0xA26 // 2598 + SYS_CSIN = 0xA27 // 2599 + SYS___CSIN_B = 0xA28 // 2600 + SYS___CSIN_H = 0xA29 // 2601 + SYS_CSINF = 0xA2A // 2602 + SYS___CSINF_B = 0xA2B // 2603 + SYS___CSINF_H = 0xA2C // 2604 + SYS_CSINL = 0xA2D // 2605 + SYS___CSINL_B = 0xA2E // 2606 + SYS___CSINL_H = 0xA2F // 2607 + SYS_CSINH = 0xA30 // 2608 + SYS___CSINH_B = 0xA31 // 2609 + SYS___CSINH_H = 0xA32 // 2610 + SYS_CSINHF = 0xA33 // 2611 + SYS___CSINHF_B = 0xA34 // 2612 + SYS___CSINHF_H = 0xA35 // 2613 + SYS_CSINHL = 0xA36 // 2614 + SYS___CSINHL_B = 0xA37 // 2615 + SYS___CSINHL_H = 0xA38 // 2616 + SYS_CSQRT = 0xA39 // 2617 + SYS___CSQRT_B = 0xA3A // 2618 + SYS___CSQRT_H = 0xA3B // 2619 + SYS_CSQRTF = 0xA3C // 2620 + SYS___CSQRTF_B = 0xA3D // 2621 + SYS___CSQRTF_H = 0xA3E // 2622 + SYS_CSQRTL = 0xA3F // 2623 + SYS___CSQRTL_B = 0xA40 // 2624 + SYS___CSQRTL_H = 0xA41 // 2625 + SYS_CTAN = 0xA42 // 2626 + SYS___CTAN_B = 0xA43 // 2627 + SYS___CTAN_H = 0xA44 // 2628 + SYS_CTANF = 0xA45 // 2629 + SYS___CTANF_B = 0xA46 // 2630 + SYS___CTANF_H = 0xA47 // 2631 + SYS_CTANL = 0xA48 // 2632 + SYS___CTANL_B = 0xA49 // 2633 + SYS___CTANL_H = 0xA4A // 2634 + SYS_CTANH = 0xA4B // 2635 + SYS___CTANH_B = 0xA4C // 2636 + SYS___CTANH_H = 0xA4D // 2637 + SYS_CTANHF = 0xA4E // 2638 + SYS___CTANHF_B = 0xA4F // 2639 + SYS___CTANHF_H = 0xA50 // 2640 + SYS_CTANHL = 0xA51 // 2641 + SYS___CTANHL_B = 0xA52 // 2642 + SYS___CTANHL_H = 0xA53 // 2643 + SYS___ACOSHF_H = 0xA54 // 2644 + SYS___ACOSHL_H = 0xA55 // 2645 + SYS___ASINHF_H = 0xA56 // 2646 + SYS___ASINHL_H = 0xA57 // 2647 + SYS___CBRTF_H = 0xA58 // 2648 + SYS___CBRTL_H = 0xA59 // 2649 + SYS___COPYSIGN_B = 0xA5A // 2650 + SYS___EXPM1F_H = 0xA5B // 2651 + SYS___EXPM1L_H = 0xA5C // 2652 + SYS___EXP2_H = 0xA5D // 2653 + SYS___EXP2F_H = 0xA5E // 2654 + SYS___EXP2L_H = 0xA5F // 2655 + SYS___LOG1PF_H = 0xA60 // 2656 + SYS___LOG1PL_H = 0xA61 // 2657 + SYS___LGAMMAL_H = 0xA62 // 2658 + SYS_FMA = 0xA63 // 2659 + SYS___FMA_B = 0xA64 // 2660 + SYS___FMA_H = 0xA65 // 2661 + SYS_FMAF = 0xA66 // 2662 + SYS___FMAF_B = 0xA67 // 2663 + SYS___FMAF_H = 0xA68 // 2664 + SYS_FMAL = 0xA69 // 2665 + SYS___FMAL_B = 0xA6A // 2666 + SYS___FMAL_H = 0xA6B // 2667 + SYS_FMAX = 0xA6C // 2668 + SYS___FMAX_B = 0xA6D // 2669 + SYS___FMAX_H = 0xA6E // 2670 + SYS_FMAXF = 0xA6F // 2671 + SYS___FMAXF_B = 0xA70 // 2672 + SYS___FMAXF_H = 0xA71 // 2673 + SYS_FMAXL = 0xA72 // 2674 + SYS___FMAXL_B = 0xA73 // 2675 + SYS___FMAXL_H = 0xA74 // 2676 + SYS_FMIN = 0xA75 // 2677 + SYS___FMIN_B = 0xA76 // 2678 + SYS___FMIN_H = 0xA77 // 2679 + SYS_FMINF = 0xA78 // 2680 + SYS___FMINF_B = 0xA79 // 2681 + SYS___FMINF_H = 0xA7A // 2682 + SYS_FMINL = 0xA7B // 2683 + SYS___FMINL_B = 0xA7C // 2684 + SYS___FMINL_H = 0xA7D // 2685 + SYS_ILOGBF = 0xA7E // 2686 + SYS___ILOGBF_B = 0xA7F // 2687 + SYS___ILOGBF_H = 0xA80 // 2688 + SYS_ILOGBL = 0xA81 // 2689 + SYS___ILOGBL_B = 0xA82 // 2690 + SYS___ILOGBL_H = 0xA83 // 2691 + SYS_LLRINT = 0xA84 // 2692 + SYS___LLRINT_B = 0xA85 // 2693 + SYS___LLRINT_H = 0xA86 // 2694 + SYS_LLRINTF = 0xA87 // 2695 + SYS___LLRINTF_B = 0xA88 // 2696 + SYS___LLRINTF_H = 0xA89 // 2697 + SYS_LLRINTL = 0xA8A // 2698 + SYS___LLRINTL_B = 0xA8B // 2699 + SYS___LLRINTL_H = 0xA8C // 2700 + SYS_LLROUND = 0xA8D // 2701 + SYS___LLROUND_B = 0xA8E // 2702 + SYS___LLROUND_H = 0xA8F // 2703 + SYS_LLROUNDF = 0xA90 // 2704 + SYS___LLROUNDF_B = 0xA91 // 2705 + SYS___LLROUNDF_H = 0xA92 // 2706 + SYS_LLROUNDL = 0xA93 // 2707 + SYS___LLROUNDL_B = 0xA94 // 2708 + SYS___LLROUNDL_H = 0xA95 // 2709 + SYS_LOGBF = 0xA96 // 2710 + SYS___LOGBF_B = 0xA97 // 2711 + SYS___LOGBF_H = 0xA98 // 2712 + SYS_LOGBL = 0xA99 // 2713 + SYS___LOGBL_B = 0xA9A // 2714 + SYS___LOGBL_H = 0xA9B // 2715 + SYS_LRINT = 0xA9C // 2716 + SYS___LRINT_B = 0xA9D // 2717 + SYS___LRINT_H = 0xA9E // 2718 + SYS_LRINTF = 0xA9F // 2719 + SYS___LRINTF_B = 0xAA0 // 2720 + SYS___LRINTF_H = 0xAA1 // 2721 + SYS_LRINTL = 0xAA2 // 2722 + SYS___LRINTL_B = 0xAA3 // 2723 + SYS___LRINTL_H = 0xAA4 // 2724 + SYS_LROUNDL = 0xAA5 // 2725 + SYS___LROUNDL_B = 0xAA6 // 2726 + SYS___LROUNDL_H = 0xAA7 // 2727 + SYS_NAN = 0xAA8 // 2728 + SYS___NAN_B = 0xAA9 // 2729 + SYS_NANF = 0xAAA // 2730 + SYS___NANF_B = 0xAAB // 2731 + SYS_NANL = 0xAAC // 2732 + SYS___NANL_B = 0xAAD // 2733 + SYS_NEARBYINT = 0xAAE // 2734 + SYS___NEARBYINT_B = 0xAAF // 2735 + SYS___NEARBYINT_H = 0xAB0 // 2736 + SYS_NEARBYINTF = 0xAB1 // 2737 + SYS___NEARBYINTF_B = 0xAB2 // 2738 + SYS___NEARBYINTF_H = 0xAB3 // 2739 + SYS_NEARBYINTL = 0xAB4 // 2740 + SYS___NEARBYINTL_B = 0xAB5 // 2741 + SYS___NEARBYINTL_H = 0xAB6 // 2742 + SYS_NEXTAFTERF = 0xAB7 // 2743 + SYS___NEXTAFTERF_B = 0xAB8 // 2744 + SYS___NEXTAFTERF_H = 0xAB9 // 2745 + SYS_NEXTAFTERL = 0xABA // 2746 + SYS___NEXTAFTERL_B = 0xABB // 2747 + SYS___NEXTAFTERL_H = 0xABC // 2748 + SYS_NEXTTOWARD = 0xABD // 2749 + SYS___NEXTTOWARD_B = 0xABE // 2750 + SYS___NEXTTOWARD_H = 0xABF // 2751 + SYS_NEXTTOWARDF = 0xAC0 // 2752 + SYS___NEXTTOWARDF_B = 0xAC1 // 2753 + SYS___NEXTTOWARDF_H = 0xAC2 // 2754 + SYS_NEXTTOWARDL = 0xAC3 // 2755 + SYS___NEXTTOWARDL_B = 0xAC4 // 2756 + SYS___NEXTTOWARDL_H = 0xAC5 // 2757 + SYS___REMAINDERF_H = 0xAC6 // 2758 + SYS___REMAINDERL_H = 0xAC7 // 2759 + SYS___REMQUO_H = 0xAC8 // 2760 + SYS___REMQUOF_H = 0xAC9 // 2761 + SYS___REMQUOL_H = 0xACA // 2762 + SYS_RINTF = 0xACB // 2763 + SYS___RINTF_B = 0xACC // 2764 + SYS_RINTL = 0xACD // 2765 + SYS___RINTL_B = 0xACE // 2766 + SYS_ROUND = 0xACF // 2767 + SYS___ROUND_B = 0xAD0 // 2768 + SYS___ROUND_H = 0xAD1 // 2769 + SYS_ROUNDF = 0xAD2 // 2770 + SYS___ROUNDF_B = 0xAD3 // 2771 + SYS___ROUNDF_H = 0xAD4 // 2772 + SYS_ROUNDL = 0xAD5 // 2773 + SYS___ROUNDL_B = 0xAD6 // 2774 + SYS___ROUNDL_H = 0xAD7 // 2775 + SYS_SCALBLN = 0xAD8 // 2776 + SYS___SCALBLN_B = 0xAD9 // 2777 + SYS___SCALBLN_H = 0xADA // 2778 + SYS_SCALBLNF = 0xADB // 2779 + SYS___SCALBLNF_B = 0xADC // 2780 + SYS___SCALBLNF_H = 0xADD // 2781 + SYS_SCALBLNL = 0xADE // 2782 + SYS___SCALBLNL_B = 0xADF // 2783 + SYS___SCALBLNL_H = 0xAE0 // 2784 + SYS___SCALBN_B = 0xAE1 // 2785 + SYS___SCALBN_H = 0xAE2 // 2786 + SYS_SCALBNF = 0xAE3 // 2787 + SYS___SCALBNF_B = 0xAE4 // 2788 + SYS___SCALBNF_H = 0xAE5 // 2789 + SYS_SCALBNL = 0xAE6 // 2790 + SYS___SCALBNL_B = 0xAE7 // 2791 + SYS___SCALBNL_H = 0xAE8 // 2792 + SYS___TGAMMAL_H = 0xAE9 // 2793 + SYS_FECLEAREXCEPT = 0xAEA // 2794 + SYS_FEGETENV = 0xAEB // 2795 + SYS_FEGETEXCEPTFLAG = 0xAEC // 2796 + SYS_FEGETROUND = 0xAED // 2797 + SYS_FEHOLDEXCEPT = 0xAEE // 2798 + SYS_FERAISEEXCEPT = 0xAEF // 2799 + SYS_FESETENV = 0xAF0 // 2800 + SYS_FESETEXCEPTFLAG = 0xAF1 // 2801 + SYS_FESETROUND = 0xAF2 // 2802 + SYS_FETESTEXCEPT = 0xAF3 // 2803 + SYS_FEUPDATEENV = 0xAF4 // 2804 + SYS___COPYSIGN_H = 0xAF5 // 2805 + SYS___HYPOTF_H = 0xAF6 // 2806 + SYS___HYPOTL_H = 0xAF7 // 2807 + SYS___CLASS = 0xAFA // 2810 + SYS___CLASS_B = 0xAFB // 2811 + SYS___CLASS_H = 0xAFC // 2812 + SYS___ISBLANK_A = 0xB2E // 2862 + SYS___ISWBLANK_A = 0xB2F // 2863 + SYS___LROUND_FIXUP = 0xB30 // 2864 + SYS___LROUNDF_FIXUP = 0xB31 // 2865 + SYS_SCHED_YIELD = 0xB32 // 2866 + SYS_STRERROR_R = 0xB33 // 2867 + SYS_UNSETENV = 0xB34 // 2868 + SYS___LGAMMA_H_C99 = 0xB38 // 2872 + SYS___LGAMMA_B_C99 = 0xB39 // 2873 + SYS___LGAMMA_R_C99 = 0xB3A // 2874 + SYS___FTELL2 = 0xB3B // 2875 + SYS___FSEEK2 = 0xB3C // 2876 + SYS___STATIC_REINIT = 0xB3D // 2877 + SYS_PTHREAD_ATTR_GETSTACK = 0xB3E // 2878 + SYS_PTHREAD_ATTR_SETSTACK = 0xB3F // 2879 + SYS___TGAMMA_H_C99 = 0xB78 // 2936 + SYS___TGAMMAF_H_C99 = 0xB79 // 2937 + SYS___LE_TRACEBACK = 0xB7A // 2938 + SYS___MUST_STAY_CLEAN = 0xB7C // 2940 + SYS___O_ENV = 0xB7D // 2941 + SYS_ACOSD32 = 0xB7E // 2942 + SYS_ACOSD64 = 0xB7F // 2943 + SYS_ACOSD128 = 0xB80 // 2944 + SYS_ACOSHD32 = 0xB81 // 2945 + SYS_ACOSHD64 = 0xB82 // 2946 + SYS_ACOSHD128 = 0xB83 // 2947 + SYS_ASIND32 = 0xB84 // 2948 + SYS_ASIND64 = 0xB85 // 2949 + SYS_ASIND128 = 0xB86 // 2950 + SYS_ASINHD32 = 0xB87 // 2951 + SYS_ASINHD64 = 0xB88 // 2952 + SYS_ASINHD128 = 0xB89 // 2953 + SYS_ATAND32 = 0xB8A // 2954 + SYS_ATAND64 = 0xB8B // 2955 + SYS_ATAND128 = 0xB8C // 2956 + SYS_ATAN2D32 = 0xB8D // 2957 + SYS_ATAN2D64 = 0xB8E // 2958 + SYS_ATAN2D128 = 0xB8F // 2959 + SYS_ATANHD32 = 0xB90 // 2960 + SYS_ATANHD64 = 0xB91 // 2961 + SYS_ATANHD128 = 0xB92 // 2962 + SYS_CBRTD32 = 0xB93 // 2963 + SYS_CBRTD64 = 0xB94 // 2964 + SYS_CBRTD128 = 0xB95 // 2965 + SYS_CEILD32 = 0xB96 // 2966 + SYS_CEILD64 = 0xB97 // 2967 + SYS_CEILD128 = 0xB98 // 2968 + SYS___CLASS2 = 0xB99 // 2969 + SYS___CLASS2_B = 0xB9A // 2970 + SYS___CLASS2_H = 0xB9B // 2971 + SYS_COPYSIGND32 = 0xB9C // 2972 + SYS_COPYSIGND64 = 0xB9D // 2973 + SYS_COPYSIGND128 = 0xB9E // 2974 + SYS_COSD32 = 0xB9F // 2975 + SYS_COSD64 = 0xBA0 // 2976 + SYS_COSD128 = 0xBA1 // 2977 + SYS_COSHD32 = 0xBA2 // 2978 + SYS_COSHD64 = 0xBA3 // 2979 + SYS_COSHD128 = 0xBA4 // 2980 + SYS_ERFD32 = 0xBA5 // 2981 + SYS_ERFD64 = 0xBA6 // 2982 + SYS_ERFD128 = 0xBA7 // 2983 + SYS_ERFCD32 = 0xBA8 // 2984 + SYS_ERFCD64 = 0xBA9 // 2985 + SYS_ERFCD128 = 0xBAA // 2986 + SYS_EXPD32 = 0xBAB // 2987 + SYS_EXPD64 = 0xBAC // 2988 + SYS_EXPD128 = 0xBAD // 2989 + SYS_EXP2D32 = 0xBAE // 2990 + SYS_EXP2D64 = 0xBAF // 2991 + SYS_EXP2D128 = 0xBB0 // 2992 + SYS_EXPM1D32 = 0xBB1 // 2993 + SYS_EXPM1D64 = 0xBB2 // 2994 + SYS_EXPM1D128 = 0xBB3 // 2995 + SYS_FABSD32 = 0xBB4 // 2996 + SYS_FABSD64 = 0xBB5 // 2997 + SYS_FABSD128 = 0xBB6 // 2998 + SYS_FDIMD32 = 0xBB7 // 2999 + SYS_FDIMD64 = 0xBB8 // 3000 + SYS_FDIMD128 = 0xBB9 // 3001 + SYS_FE_DEC_GETROUND = 0xBBA // 3002 + SYS_FE_DEC_SETROUND = 0xBBB // 3003 + SYS_FLOORD32 = 0xBBC // 3004 + SYS_FLOORD64 = 0xBBD // 3005 + SYS_FLOORD128 = 0xBBE // 3006 + SYS_FMAD32 = 0xBBF // 3007 + SYS_FMAD64 = 0xBC0 // 3008 + SYS_FMAD128 = 0xBC1 // 3009 + SYS_FMAXD32 = 0xBC2 // 3010 + SYS_FMAXD64 = 0xBC3 // 3011 + SYS_FMAXD128 = 0xBC4 // 3012 + SYS_FMIND32 = 0xBC5 // 3013 + SYS_FMIND64 = 0xBC6 // 3014 + SYS_FMIND128 = 0xBC7 // 3015 + SYS_FMODD32 = 0xBC8 // 3016 + SYS_FMODD64 = 0xBC9 // 3017 + SYS_FMODD128 = 0xBCA // 3018 + SYS___FP_CAST_D = 0xBCB // 3019 + SYS_FREXPD32 = 0xBCC // 3020 + SYS_FREXPD64 = 0xBCD // 3021 + SYS_FREXPD128 = 0xBCE // 3022 + SYS_HYPOTD32 = 0xBCF // 3023 + SYS_HYPOTD64 = 0xBD0 // 3024 + SYS_HYPOTD128 = 0xBD1 // 3025 + SYS_ILOGBD32 = 0xBD2 // 3026 + SYS_ILOGBD64 = 0xBD3 // 3027 + SYS_ILOGBD128 = 0xBD4 // 3028 + SYS_LDEXPD32 = 0xBD5 // 3029 + SYS_LDEXPD64 = 0xBD6 // 3030 + SYS_LDEXPD128 = 0xBD7 // 3031 + SYS_LGAMMAD32 = 0xBD8 // 3032 + SYS_LGAMMAD64 = 0xBD9 // 3033 + SYS_LGAMMAD128 = 0xBDA // 3034 + SYS_LLRINTD32 = 0xBDB // 3035 + SYS_LLRINTD64 = 0xBDC // 3036 + SYS_LLRINTD128 = 0xBDD // 3037 + SYS_LLROUNDD32 = 0xBDE // 3038 + SYS_LLROUNDD64 = 0xBDF // 3039 + SYS_LLROUNDD128 = 0xBE0 // 3040 + SYS_LOGD32 = 0xBE1 // 3041 + SYS_LOGD64 = 0xBE2 // 3042 + SYS_LOGD128 = 0xBE3 // 3043 + SYS_LOG10D32 = 0xBE4 // 3044 + SYS_LOG10D64 = 0xBE5 // 3045 + SYS_LOG10D128 = 0xBE6 // 3046 + SYS_LOG1PD32 = 0xBE7 // 3047 + SYS_LOG1PD64 = 0xBE8 // 3048 + SYS_LOG1PD128 = 0xBE9 // 3049 + SYS_LOG2D32 = 0xBEA // 3050 + SYS_LOG2D64 = 0xBEB // 3051 + SYS_LOG2D128 = 0xBEC // 3052 + SYS_LOGBD32 = 0xBED // 3053 + SYS_LOGBD64 = 0xBEE // 3054 + SYS_LOGBD128 = 0xBEF // 3055 + SYS_LRINTD32 = 0xBF0 // 3056 + SYS_LRINTD64 = 0xBF1 // 3057 + SYS_LRINTD128 = 0xBF2 // 3058 + SYS_LROUNDD32 = 0xBF3 // 3059 + SYS_LROUNDD64 = 0xBF4 // 3060 + SYS_LROUNDD128 = 0xBF5 // 3061 + SYS_MODFD32 = 0xBF6 // 3062 + SYS_MODFD64 = 0xBF7 // 3063 + SYS_MODFD128 = 0xBF8 // 3064 + SYS_NAND32 = 0xBF9 // 3065 + SYS_NAND64 = 0xBFA // 3066 + SYS_NAND128 = 0xBFB // 3067 + SYS_NEARBYINTD32 = 0xBFC // 3068 + SYS_NEARBYINTD64 = 0xBFD // 3069 + SYS_NEARBYINTD128 = 0xBFE // 3070 + SYS_NEXTAFTERD32 = 0xBFF // 3071 + SYS_NEXTAFTERD64 = 0xC00 // 3072 + SYS_NEXTAFTERD128 = 0xC01 // 3073 + SYS_NEXTTOWARDD32 = 0xC02 // 3074 + SYS_NEXTTOWARDD64 = 0xC03 // 3075 + SYS_NEXTTOWARDD128 = 0xC04 // 3076 + SYS_POWD32 = 0xC05 // 3077 + SYS_POWD64 = 0xC06 // 3078 + SYS_POWD128 = 0xC07 // 3079 + SYS_QUANTIZED32 = 0xC08 // 3080 + SYS_QUANTIZED64 = 0xC09 // 3081 + SYS_QUANTIZED128 = 0xC0A // 3082 + SYS_REMAINDERD32 = 0xC0B // 3083 + SYS_REMAINDERD64 = 0xC0C // 3084 + SYS_REMAINDERD128 = 0xC0D // 3085 + SYS___REMQUOD32 = 0xC0E // 3086 + SYS___REMQUOD64 = 0xC0F // 3087 + SYS___REMQUOD128 = 0xC10 // 3088 + SYS_RINTD32 = 0xC11 // 3089 + SYS_RINTD64 = 0xC12 // 3090 + SYS_RINTD128 = 0xC13 // 3091 + SYS_ROUNDD32 = 0xC14 // 3092 + SYS_ROUNDD64 = 0xC15 // 3093 + SYS_ROUNDD128 = 0xC16 // 3094 + SYS_SAMEQUANTUMD32 = 0xC17 // 3095 + SYS_SAMEQUANTUMD64 = 0xC18 // 3096 + SYS_SAMEQUANTUMD128 = 0xC19 // 3097 + SYS_SCALBLND32 = 0xC1A // 3098 + SYS_SCALBLND64 = 0xC1B // 3099 + SYS_SCALBLND128 = 0xC1C // 3100 + SYS_SCALBND32 = 0xC1D // 3101 + SYS_SCALBND64 = 0xC1E // 3102 + SYS_SCALBND128 = 0xC1F // 3103 + SYS_SIND32 = 0xC20 // 3104 + SYS_SIND64 = 0xC21 // 3105 + SYS_SIND128 = 0xC22 // 3106 + SYS_SINHD32 = 0xC23 // 3107 + SYS_SINHD64 = 0xC24 // 3108 + SYS_SINHD128 = 0xC25 // 3109 + SYS_SQRTD32 = 0xC26 // 3110 + SYS_SQRTD64 = 0xC27 // 3111 + SYS_SQRTD128 = 0xC28 // 3112 + SYS_STRTOD32 = 0xC29 // 3113 + SYS_STRTOD64 = 0xC2A // 3114 + SYS_STRTOD128 = 0xC2B // 3115 + SYS_TAND32 = 0xC2C // 3116 + SYS_TAND64 = 0xC2D // 3117 + SYS_TAND128 = 0xC2E // 3118 + SYS_TANHD32 = 0xC2F // 3119 + SYS_TANHD64 = 0xC30 // 3120 + SYS_TANHD128 = 0xC31 // 3121 + SYS_TGAMMAD32 = 0xC32 // 3122 + SYS_TGAMMAD64 = 0xC33 // 3123 + SYS_TGAMMAD128 = 0xC34 // 3124 + SYS_TRUNCD32 = 0xC3E // 3134 + SYS_TRUNCD64 = 0xC3F // 3135 + SYS_TRUNCD128 = 0xC40 // 3136 + SYS_WCSTOD32 = 0xC41 // 3137 + SYS_WCSTOD64 = 0xC42 // 3138 + SYS_WCSTOD128 = 0xC43 // 3139 + SYS___CODEPAGE_INFO = 0xC64 // 3172 + SYS_POSIX_OPENPT = 0xC66 // 3174 + SYS_PSELECT = 0xC67 // 3175 + SYS_SOCKATMARK = 0xC68 // 3176 + SYS_AIO_FSYNC = 0xC69 // 3177 + SYS_LIO_LISTIO = 0xC6A // 3178 + SYS___ATANPID32 = 0xC6B // 3179 + SYS___ATANPID64 = 0xC6C // 3180 + SYS___ATANPID128 = 0xC6D // 3181 + SYS___COSPID32 = 0xC6E // 3182 + SYS___COSPID64 = 0xC6F // 3183 + SYS___COSPID128 = 0xC70 // 3184 + SYS___SINPID32 = 0xC71 // 3185 + SYS___SINPID64 = 0xC72 // 3186 + SYS___SINPID128 = 0xC73 // 3187 + SYS_SETIPV4SOURCEFILTER = 0xC76 // 3190 + SYS_GETIPV4SOURCEFILTER = 0xC77 // 3191 + SYS_SETSOURCEFILTER = 0xC78 // 3192 + SYS_GETSOURCEFILTER = 0xC79 // 3193 + SYS_FWRITE_UNLOCKED = 0xC7A // 3194 + SYS_FREAD_UNLOCKED = 0xC7B // 3195 + SYS_FGETS_UNLOCKED = 0xC7C // 3196 + SYS_GETS_UNLOCKED = 0xC7D // 3197 + SYS_FPUTS_UNLOCKED = 0xC7E // 3198 + SYS_PUTS_UNLOCKED = 0xC7F // 3199 + SYS_FGETC_UNLOCKED = 0xC80 // 3200 + SYS_FPUTC_UNLOCKED = 0xC81 // 3201 + SYS_DLADDR = 0xC82 // 3202 + SYS_SHM_OPEN = 0xC8C // 3212 + SYS_SHM_UNLINK = 0xC8D // 3213 + SYS___CLASS2F = 0xC91 // 3217 + SYS___CLASS2L = 0xC92 // 3218 + SYS___CLASS2F_B = 0xC93 // 3219 + SYS___CLASS2F_H = 0xC94 // 3220 + SYS___CLASS2L_B = 0xC95 // 3221 + SYS___CLASS2L_H = 0xC96 // 3222 + SYS___CLASS2D32 = 0xC97 // 3223 + SYS___CLASS2D64 = 0xC98 // 3224 + SYS___CLASS2D128 = 0xC99 // 3225 + SYS___TOCSNAME2 = 0xC9A // 3226 + SYS___D1TOP = 0xC9B // 3227 + SYS___D2TOP = 0xC9C // 3228 + SYS___D4TOP = 0xC9D // 3229 + SYS___PTOD1 = 0xC9E // 3230 + SYS___PTOD2 = 0xC9F // 3231 + SYS___PTOD4 = 0xCA0 // 3232 + SYS_CLEARERR_UNLOCKED = 0xCA1 // 3233 + SYS_FDELREC_UNLOCKED = 0xCA2 // 3234 + SYS_FEOF_UNLOCKED = 0xCA3 // 3235 + SYS_FERROR_UNLOCKED = 0xCA4 // 3236 + SYS_FFLUSH_UNLOCKED = 0xCA5 // 3237 + SYS_FGETPOS_UNLOCKED = 0xCA6 // 3238 + SYS_FGETWC_UNLOCKED = 0xCA7 // 3239 + SYS_FGETWS_UNLOCKED = 0xCA8 // 3240 + SYS_FILENO_UNLOCKED = 0xCA9 // 3241 + SYS_FLDATA_UNLOCKED = 0xCAA // 3242 + SYS_FLOCATE_UNLOCKED = 0xCAB // 3243 + SYS_FPRINTF_UNLOCKED = 0xCAC // 3244 + SYS_FPUTWC_UNLOCKED = 0xCAD // 3245 + SYS_FPUTWS_UNLOCKED = 0xCAE // 3246 + SYS_FSCANF_UNLOCKED = 0xCAF // 3247 + SYS_FSEEK_UNLOCKED = 0xCB0 // 3248 + SYS_FSEEKO_UNLOCKED = 0xCB1 // 3249 + SYS_FSETPOS_UNLOCKED = 0xCB3 // 3251 + SYS_FTELL_UNLOCKED = 0xCB4 // 3252 + SYS_FTELLO_UNLOCKED = 0xCB5 // 3253 + SYS_FUPDATE_UNLOCKED = 0xCB7 // 3255 + SYS_FWIDE_UNLOCKED = 0xCB8 // 3256 + SYS_FWPRINTF_UNLOCKED = 0xCB9 // 3257 + SYS_FWSCANF_UNLOCKED = 0xCBA // 3258 + SYS_GETWC_UNLOCKED = 0xCBB // 3259 + SYS_GETWCHAR_UNLOCKED = 0xCBC // 3260 + SYS_PERROR_UNLOCKED = 0xCBD // 3261 + SYS_PRINTF_UNLOCKED = 0xCBE // 3262 + SYS_PUTWC_UNLOCKED = 0xCBF // 3263 + SYS_PUTWCHAR_UNLOCKED = 0xCC0 // 3264 + SYS_REWIND_UNLOCKED = 0xCC1 // 3265 + SYS_SCANF_UNLOCKED = 0xCC2 // 3266 + SYS_UNGETC_UNLOCKED = 0xCC3 // 3267 + SYS_UNGETWC_UNLOCKED = 0xCC4 // 3268 + SYS_VFPRINTF_UNLOCKED = 0xCC5 // 3269 + SYS_VFSCANF_UNLOCKED = 0xCC7 // 3271 + SYS_VFWPRINTF_UNLOCKED = 0xCC9 // 3273 + SYS_VFWSCANF_UNLOCKED = 0xCCB // 3275 + SYS_VPRINTF_UNLOCKED = 0xCCD // 3277 + SYS_VSCANF_UNLOCKED = 0xCCF // 3279 + SYS_VWPRINTF_UNLOCKED = 0xCD1 // 3281 + SYS_VWSCANF_UNLOCKED = 0xCD3 // 3283 + SYS_WPRINTF_UNLOCKED = 0xCD5 // 3285 + SYS_WSCANF_UNLOCKED = 0xCD6 // 3286 + SYS_ASCTIME64 = 0xCD7 // 3287 + SYS_ASCTIME64_R = 0xCD8 // 3288 + SYS_CTIME64 = 0xCD9 // 3289 + SYS_CTIME64_R = 0xCDA // 3290 + SYS_DIFFTIME64 = 0xCDB // 3291 + SYS_GMTIME64 = 0xCDC // 3292 + SYS_GMTIME64_R = 0xCDD // 3293 + SYS_LOCALTIME64 = 0xCDE // 3294 + SYS_LOCALTIME64_R = 0xCDF // 3295 + SYS_MKTIME64 = 0xCE0 // 3296 + SYS_TIME64 = 0xCE1 // 3297 + SYS___LOGIN_APPLID = 0xCE2 // 3298 + SYS___PASSWD_APPLID = 0xCE3 // 3299 + SYS_PTHREAD_SECURITY_APPLID_NP = 0xCE4 // 3300 + SYS___GETTHENT = 0xCE5 // 3301 + SYS_FREEIFADDRS = 0xCE6 // 3302 + SYS_GETIFADDRS = 0xCE7 // 3303 + SYS_POSIX_FALLOCATE = 0xCE8 // 3304 + SYS_POSIX_MEMALIGN = 0xCE9 // 3305 + SYS_SIZEOF_ALLOC = 0xCEA // 3306 + SYS_RESIZE_ALLOC = 0xCEB // 3307 + SYS_FREAD_NOUPDATE = 0xCEC // 3308 + SYS_FREAD_NOUPDATE_UNLOCKED = 0xCED // 3309 + SYS_FGETPOS64 = 0xCEE // 3310 + SYS_FSEEK64 = 0xCEF // 3311 + SYS_FSEEKO64 = 0xCF0 // 3312 + SYS_FSETPOS64 = 0xCF1 // 3313 + SYS_FTELL64 = 0xCF2 // 3314 + SYS_FTELLO64 = 0xCF3 // 3315 + SYS_FGETPOS64_UNLOCKED = 0xCF4 // 3316 + SYS_FSEEK64_UNLOCKED = 0xCF5 // 3317 + SYS_FSEEKO64_UNLOCKED = 0xCF6 // 3318 + SYS_FSETPOS64_UNLOCKED = 0xCF7 // 3319 + SYS_FTELL64_UNLOCKED = 0xCF8 // 3320 + SYS_FTELLO64_UNLOCKED = 0xCF9 // 3321 + SYS_FOPEN_UNLOCKED = 0xCFA // 3322 + SYS_FREOPEN_UNLOCKED = 0xCFB // 3323 + SYS_FDOPEN_UNLOCKED = 0xCFC // 3324 + SYS_TMPFILE_UNLOCKED = 0xCFD // 3325 + SYS___MOSERVICES = 0xD3D // 3389 + SYS___GETTOD = 0xD3E // 3390 + SYS_C16RTOMB = 0xD40 // 3392 + SYS_C32RTOMB = 0xD41 // 3393 + SYS_MBRTOC16 = 0xD42 // 3394 + SYS_MBRTOC32 = 0xD43 // 3395 + SYS_QUANTEXPD32 = 0xD44 // 3396 + SYS_QUANTEXPD64 = 0xD45 // 3397 + SYS_QUANTEXPD128 = 0xD46 // 3398 + SYS___LOCALE_CTL = 0xD47 // 3399 + SYS___SMF_RECORD2 = 0xD48 // 3400 + SYS_FOPEN64 = 0xD49 // 3401 + SYS_FOPEN64_UNLOCKED = 0xD4A // 3402 + SYS_FREOPEN64 = 0xD4B // 3403 + SYS_FREOPEN64_UNLOCKED = 0xD4C // 3404 + SYS_TMPFILE64 = 0xD4D // 3405 + SYS_TMPFILE64_UNLOCKED = 0xD4E // 3406 + SYS_GETDATE64 = 0xD4F // 3407 + SYS_GETTIMEOFDAY64 = 0xD50 // 3408 + SYS_BIND2ADDRSEL = 0xD59 // 3417 + SYS_INET6_IS_SRCADDR = 0xD5A // 3418 + SYS___GETGRGID1 = 0xD5B // 3419 + SYS___GETGRNAM1 = 0xD5C // 3420 + SYS___FBUFSIZE = 0xD60 // 3424 + SYS___FPENDING = 0xD61 // 3425 + SYS___FLBF = 0xD62 // 3426 + SYS___FREADABLE = 0xD63 // 3427 + SYS___FWRITABLE = 0xD64 // 3428 + SYS___FREADING = 0xD65 // 3429 + SYS___FWRITING = 0xD66 // 3430 + SYS___FSETLOCKING = 0xD67 // 3431 + SYS__FLUSHLBF = 0xD68 // 3432 + SYS___FPURGE = 0xD69 // 3433 + SYS___FREADAHEAD = 0xD6A // 3434 + SYS___FSETERR = 0xD6B // 3435 + SYS___FPENDING_UNLOCKED = 0xD6C // 3436 + SYS___FREADING_UNLOCKED = 0xD6D // 3437 + SYS___FWRITING_UNLOCKED = 0xD6E // 3438 + SYS__FLUSHLBF_UNLOCKED = 0xD6F // 3439 + SYS___FPURGE_UNLOCKED = 0xD70 // 3440 + SYS___FREADAHEAD_UNLOCKED = 0xD71 // 3441 + SYS___LE_CEEGTJS = 0xD72 // 3442 + SYS___LE_RECORD_DUMP = 0xD73 // 3443 + SYS_FSTAT64 = 0xD74 // 3444 + SYS_LSTAT64 = 0xD75 // 3445 + SYS_STAT64 = 0xD76 // 3446 + SYS___READDIR2_64 = 0xD77 // 3447 + SYS___OPEN_STAT64 = 0xD78 // 3448 + SYS_FTW64 = 0xD79 // 3449 + SYS_NFTW64 = 0xD7A // 3450 + SYS_UTIME64 = 0xD7B // 3451 + SYS_UTIMES64 = 0xD7C // 3452 + SYS___GETIPC64 = 0xD7D // 3453 + SYS_MSGCTL64 = 0xD7E // 3454 + SYS_SEMCTL64 = 0xD7F // 3455 + SYS_SHMCTL64 = 0xD80 // 3456 + SYS_MSGXRCV64 = 0xD81 // 3457 + SYS___MGXR64 = 0xD81 // 3457 + SYS_W_GETPSENT64 = 0xD82 // 3458 + SYS_PTHREAD_COND_TIMEDWAIT64 = 0xD83 // 3459 + SYS_FTIME64 = 0xD85 // 3461 + SYS_GETUTXENT64 = 0xD86 // 3462 + SYS_GETUTXID64 = 0xD87 // 3463 + SYS_GETUTXLINE64 = 0xD88 // 3464 + SYS_PUTUTXLINE64 = 0xD89 // 3465 + SYS_NEWLOCALE = 0xD8A // 3466 + SYS_FREELOCALE = 0xD8B // 3467 + SYS_USELOCALE = 0xD8C // 3468 + SYS_DUPLOCALE = 0xD8D // 3469 + SYS___CHATTR64 = 0xD9C // 3484 + SYS___LCHATTR64 = 0xD9D // 3485 + SYS___FCHATTR64 = 0xD9E // 3486 + SYS_____CHATTR64_A = 0xD9F // 3487 + SYS_____LCHATTR64_A = 0xDA0 // 3488 + SYS___LE_CEEUSGD = 0xDA1 // 3489 + SYS___LE_IFAM_CON = 0xDA2 // 3490 + SYS___LE_IFAM_DSC = 0xDA3 // 3491 + SYS___LE_IFAM_GET = 0xDA4 // 3492 + SYS___LE_IFAM_QRY = 0xDA5 // 3493 + SYS_ALIGNED_ALLOC = 0xDA6 // 3494 + SYS_ACCEPT4 = 0xDA7 // 3495 + SYS___ACCEPT4_A = 0xDA8 // 3496 + SYS_COPYFILERANGE = 0xDA9 // 3497 + SYS_GETLINE = 0xDAA // 3498 + SYS___GETLINE_A = 0xDAB // 3499 + SYS_DIRFD = 0xDAC // 3500 + SYS_CLOCK_GETTIME = 0xDAD // 3501 + SYS_DUP3 = 0xDAE // 3502 + SYS_EPOLL_CREATE = 0xDAF // 3503 + SYS_EPOLL_CREATE1 = 0xDB0 // 3504 + SYS_EPOLL_CTL = 0xDB1 // 3505 + SYS_EPOLL_WAIT = 0xDB2 // 3506 + SYS_EPOLL_PWAIT = 0xDB3 // 3507 + SYS_EVENTFD = 0xDB4 // 3508 + SYS_STATFS = 0xDB5 // 3509 + SYS___STATFS_A = 0xDB6 // 3510 + SYS_FSTATFS = 0xDB7 // 3511 + SYS_INOTIFY_INIT = 0xDB8 // 3512 + SYS_INOTIFY_INIT1 = 0xDB9 // 3513 + SYS_INOTIFY_ADD_WATCH = 0xDBA // 3514 + SYS___INOTIFY_ADD_WATCH_A = 0xDBB // 3515 + SYS_INOTIFY_RM_WATCH = 0xDBC // 3516 + SYS_PIPE2 = 0xDBD // 3517 + SYS_PIVOT_ROOT = 0xDBE // 3518 + SYS___PIVOT_ROOT_A = 0xDBF // 3519 + SYS_PRCTL = 0xDC0 // 3520 + SYS_PRLIMIT = 0xDC1 // 3521 + SYS_SETHOSTNAME = 0xDC2 // 3522 + SYS___SETHOSTNAME_A = 0xDC3 // 3523 + SYS_SETRESUID = 0xDC4 // 3524 + SYS_SETRESGID = 0xDC5 // 3525 + SYS_PTHREAD_CONDATTR_GETCLOCK = 0xDC6 // 3526 + SYS_FLOCK = 0xDC7 // 3527 + SYS_FGETXATTR = 0xDC8 // 3528 + SYS___FGETXATTR_A = 0xDC9 // 3529 + SYS_FLISTXATTR = 0xDCA // 3530 + SYS___FLISTXATTR_A = 0xDCB // 3531 + SYS_FREMOVEXATTR = 0xDCC // 3532 + SYS___FREMOVEXATTR_A = 0xDCD // 3533 + SYS_FSETXATTR = 0xDCE // 3534 + SYS___FSETXATTR_A = 0xDCF // 3535 + SYS_GETXATTR = 0xDD0 // 3536 + SYS___GETXATTR_A = 0xDD1 // 3537 + SYS_LGETXATTR = 0xDD2 // 3538 + SYS___LGETXATTR_A = 0xDD3 // 3539 + SYS_LISTXATTR = 0xDD4 // 3540 + SYS___LISTXATTR_A = 0xDD5 // 3541 + SYS_LLISTXATTR = 0xDD6 // 3542 + SYS___LLISTXATTR_A = 0xDD7 // 3543 + SYS_LREMOVEXATTR = 0xDD8 // 3544 + SYS___LREMOVEXATTR_A = 0xDD9 // 3545 + SYS_LSETXATTR = 0xDDA // 3546 + SYS___LSETXATTR_A = 0xDDB // 3547 + SYS_REMOVEXATTR = 0xDDC // 3548 + SYS___REMOVEXATTR_A = 0xDDD // 3549 + SYS_SETXATTR = 0xDDE // 3550 + SYS___SETXATTR_A = 0xDDF // 3551 + SYS_FDATASYNC = 0xDE0 // 3552 + SYS_SYNCFS = 0xDE1 // 3553 + SYS_FUTIMES = 0xDE2 // 3554 + SYS_FUTIMESAT = 0xDE3 // 3555 + SYS___FUTIMESAT_A = 0xDE4 // 3556 + SYS_LUTIMES = 0xDE5 // 3557 + SYS___LUTIMES_A = 0xDE6 // 3558 + SYS_INET_ATON = 0xDE7 // 3559 + SYS_GETRANDOM = 0xDE8 // 3560 + SYS_GETTID = 0xDE9 // 3561 + SYS_MEMFD_CREATE = 0xDEA // 3562 + SYS___MEMFD_CREATE_A = 0xDEB // 3563 + SYS_FACCESSAT = 0xDEC // 3564 + SYS___FACCESSAT_A = 0xDED // 3565 + SYS_FCHMODAT = 0xDEE // 3566 + SYS___FCHMODAT_A = 0xDEF // 3567 + SYS_FCHOWNAT = 0xDF0 // 3568 + SYS___FCHOWNAT_A = 0xDF1 // 3569 + SYS_FSTATAT = 0xDF2 // 3570 + SYS___FSTATAT_A = 0xDF3 // 3571 + SYS_LINKAT = 0xDF4 // 3572 + SYS___LINKAT_A = 0xDF5 // 3573 + SYS_MKDIRAT = 0xDF6 // 3574 + SYS___MKDIRAT_A = 0xDF7 // 3575 + SYS_MKFIFOAT = 0xDF8 // 3576 + SYS___MKFIFOAT_A = 0xDF9 // 3577 + SYS_MKNODAT = 0xDFA // 3578 + SYS___MKNODAT_A = 0xDFB // 3579 + SYS_OPENAT = 0xDFC // 3580 + SYS___OPENAT_A = 0xDFD // 3581 + SYS_READLINKAT = 0xDFE // 3582 + SYS___READLINKAT_A = 0xDFF // 3583 + SYS_RENAMEAT = 0xE00 // 3584 + SYS___RENAMEAT_A = 0xE01 // 3585 + SYS_RENAMEAT2 = 0xE02 // 3586 + SYS___RENAMEAT2_A = 0xE03 // 3587 + SYS_SYMLINKAT = 0xE04 // 3588 + SYS___SYMLINKAT_A = 0xE05 // 3589 + SYS_UNLINKAT = 0xE06 // 3590 + SYS___UNLINKAT_A = 0xE07 // 3591 + SYS_SYSINFO = 0xE08 // 3592 + SYS_WAIT4 = 0xE0A // 3594 + SYS_CLONE = 0xE0B // 3595 + SYS_UNSHARE = 0xE0C // 3596 + SYS_SETNS = 0xE0D // 3597 + SYS_CAPGET = 0xE0E // 3598 + SYS_CAPSET = 0xE0F // 3599 + SYS_STRCHRNUL = 0xE10 // 3600 + SYS_PTHREAD_CONDATTR_SETCLOCK = 0xE12 // 3602 + SYS_OPEN_BY_HANDLE_AT = 0xE13 // 3603 + SYS___OPEN_BY_HANDLE_AT_A = 0xE14 // 3604 + SYS___INET_ATON_A = 0xE15 // 3605 + SYS_MOUNT1 = 0xE16 // 3606 + SYS___MOUNT1_A = 0xE17 // 3607 + SYS_UMOUNT1 = 0xE18 // 3608 + SYS___UMOUNT1_A = 0xE19 // 3609 + SYS_UMOUNT2 = 0xE1A // 3610 + SYS___UMOUNT2_A = 0xE1B // 3611 + SYS___PRCTL_A = 0xE1C // 3612 + SYS_LOCALTIME_R2 = 0xE1D // 3613 + SYS___LOCALTIME_R2_A = 0xE1E // 3614 + SYS_OPENAT2 = 0xE1F // 3615 + SYS___OPENAT2_A = 0xE20 // 3616 + SYS___LE_CEEMICT = 0xE21 // 3617 + SYS_GETENTROPY = 0xE22 // 3618 + SYS_NANOSLEEP = 0xE23 // 3619 + SYS_UTIMENSAT = 0xE24 // 3620 + SYS___UTIMENSAT_A = 0xE25 // 3621 + SYS_ASPRINTF = 0xE26 // 3622 + SYS___ASPRINTF_A = 0xE27 // 3623 + SYS_VASPRINTF = 0xE28 // 3624 + SYS___VASPRINTF_A = 0xE29 // 3625 + SYS_DPRINTF = 0xE2A // 3626 + SYS___DPRINTF_A = 0xE2B // 3627 + SYS_GETOPT_LONG = 0xE2C // 3628 + SYS___GETOPT_LONG_A = 0xE2D // 3629 + SYS_PSIGNAL = 0xE2E // 3630 + SYS___PSIGNAL_A = 0xE2F // 3631 + SYS_PSIGNAL_UNLOCKED = 0xE30 // 3632 + SYS___PSIGNAL_UNLOCKED_A = 0xE31 // 3633 + SYS_FSTATAT_O = 0xE32 // 3634 + SYS___FSTATAT_O_A = 0xE33 // 3635 + SYS_FSTATAT64 = 0xE34 // 3636 + SYS___FSTATAT64_A = 0xE35 // 3637 + SYS___CHATTRAT = 0xE36 // 3638 + SYS_____CHATTRAT_A = 0xE37 // 3639 + SYS___CHATTRAT64 = 0xE38 // 3640 + SYS_____CHATTRAT64_A = 0xE39 // 3641 + SYS_MADVISE = 0xE3A // 3642 + SYS___AUTHENTICATE = 0xE3B // 3643 + ) diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux.go b/vendor/golang.org/x/sys/unix/ztypes_linux.go index eff6bcdef81..4740b834854 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux.go @@ -1178,7 +1178,8 @@ const ( PERF_SAMPLE_BRANCH_TYPE_SAVE_SHIFT = 0x10 PERF_SAMPLE_BRANCH_HW_INDEX_SHIFT = 0x11 PERF_SAMPLE_BRANCH_PRIV_SAVE_SHIFT = 0x12 - PERF_SAMPLE_BRANCH_MAX_SHIFT = 0x13 + PERF_SAMPLE_BRANCH_COUNTERS = 0x80000 + PERF_SAMPLE_BRANCH_MAX_SHIFT = 0x14 PERF_SAMPLE_BRANCH_USER = 0x1 PERF_SAMPLE_BRANCH_KERNEL = 0x2 PERF_SAMPLE_BRANCH_HV = 0x4 @@ -1198,7 +1199,7 @@ const ( PERF_SAMPLE_BRANCH_TYPE_SAVE = 0x10000 PERF_SAMPLE_BRANCH_HW_INDEX = 0x20000 PERF_SAMPLE_BRANCH_PRIV_SAVE = 0x40000 - PERF_SAMPLE_BRANCH_MAX = 0x80000 + PERF_SAMPLE_BRANCH_MAX = 0x100000 PERF_BR_UNKNOWN = 0x0 PERF_BR_COND = 0x1 PERF_BR_UNCOND = 0x2 @@ -2481,6 +2482,15 @@ type XDPMmapOffsets struct { Cr XDPRingOffset } +type XDPUmemReg struct { + Addr uint64 + Len uint64 + Chunk_size uint32 + Headroom uint32 + Flags uint32 + Tx_metadata_len uint32 +} + type XDPStatistics struct { Rx_dropped uint64 Rx_invalid_descs uint64 @@ -2935,7 +2945,7 @@ const ( BPF_TCP_LISTEN = 0xa BPF_TCP_CLOSING = 0xb BPF_TCP_NEW_SYN_RECV = 0xc - BPF_TCP_MAX_STATES = 0xd + BPF_TCP_MAX_STATES = 0xe TCP_BPF_IW = 0x3e9 TCP_BPF_SNDCWND_CLAMP = 0x3ea TCP_BPF_DELACK_MAX = 0x3eb @@ -3211,7 +3221,7 @@ const ( DEVLINK_CMD_LINECARD_NEW = 0x50 DEVLINK_CMD_LINECARD_DEL = 0x51 DEVLINK_CMD_SELFTESTS_GET = 0x52 - DEVLINK_CMD_MAX = 0x53 + DEVLINK_CMD_MAX = 0x54 DEVLINK_PORT_TYPE_NOTSET = 0x0 DEVLINK_PORT_TYPE_AUTO = 0x1 DEVLINK_PORT_TYPE_ETH = 0x2 @@ -4595,7 +4605,7 @@ const ( NL80211_ATTR_MAC_HINT = 0xc8 NL80211_ATTR_MAC_MASK = 0xd7 NL80211_ATTR_MAX_AP_ASSOC_STA = 0xca - NL80211_ATTR_MAX = 0x146 + NL80211_ATTR_MAX = 0x14a NL80211_ATTR_MAX_CRIT_PROT_DURATION = 0xb4 NL80211_ATTR_MAX_CSA_COUNTERS = 0xce NL80211_ATTR_MAX_MATCH_SETS = 0x85 @@ -4861,7 +4871,7 @@ const ( NL80211_BSS_FREQUENCY_OFFSET = 0x14 NL80211_BSS_INFORMATION_ELEMENTS = 0x6 NL80211_BSS_LAST_SEEN_BOOTTIME = 0xf - NL80211_BSS_MAX = 0x16 + NL80211_BSS_MAX = 0x18 NL80211_BSS_MLD_ADDR = 0x16 NL80211_BSS_MLO_LINK_ID = 0x15 NL80211_BSS_PAD = 0x10 @@ -4965,7 +4975,7 @@ const ( NL80211_CMD_LEAVE_IBSS = 0x2c NL80211_CMD_LEAVE_MESH = 0x45 NL80211_CMD_LEAVE_OCB = 0x6d - NL80211_CMD_MAX = 0x9a + NL80211_CMD_MAX = 0x9b NL80211_CMD_MICHAEL_MIC_FAILURE = 0x29 NL80211_CMD_MODIFY_LINK_STA = 0x97 NL80211_CMD_NAN_MATCH = 0x78 @@ -5199,7 +5209,7 @@ const ( NL80211_FREQUENCY_ATTR_GO_CONCURRENT = 0xf NL80211_FREQUENCY_ATTR_INDOOR_ONLY = 0xe NL80211_FREQUENCY_ATTR_IR_CONCURRENT = 0xf - NL80211_FREQUENCY_ATTR_MAX = 0x1c + NL80211_FREQUENCY_ATTR_MAX = 0x20 NL80211_FREQUENCY_ATTR_MAX_TX_POWER = 0x6 NL80211_FREQUENCY_ATTR_NO_10MHZ = 0x11 NL80211_FREQUENCY_ATTR_NO_160MHZ = 0xc @@ -5693,7 +5703,7 @@ const ( NL80211_STA_FLAG_ASSOCIATED = 0x7 NL80211_STA_FLAG_AUTHENTICATED = 0x5 NL80211_STA_FLAG_AUTHORIZED = 0x1 - NL80211_STA_FLAG_MAX = 0x7 + NL80211_STA_FLAG_MAX = 0x8 NL80211_STA_FLAG_MAX_OLD_API = 0x6 NL80211_STA_FLAG_MFP = 0x4 NL80211_STA_FLAG_SHORT_PREAMBLE = 0x2 @@ -5991,3 +6001,34 @@ type CachestatRange struct { Off uint64 Len uint64 } + +const ( + SK_MEMINFO_RMEM_ALLOC = 0x0 + SK_MEMINFO_RCVBUF = 0x1 + SK_MEMINFO_WMEM_ALLOC = 0x2 + SK_MEMINFO_SNDBUF = 0x3 + SK_MEMINFO_FWD_ALLOC = 0x4 + SK_MEMINFO_WMEM_QUEUED = 0x5 + SK_MEMINFO_OPTMEM = 0x6 + SK_MEMINFO_BACKLOG = 0x7 + SK_MEMINFO_DROPS = 0x8 + SK_MEMINFO_VARS = 0x9 + SKNLGRP_NONE = 0x0 + SKNLGRP_INET_TCP_DESTROY = 0x1 + SKNLGRP_INET_UDP_DESTROY = 0x2 + SKNLGRP_INET6_TCP_DESTROY = 0x3 + SKNLGRP_INET6_UDP_DESTROY = 0x4 + SK_DIAG_BPF_STORAGE_REQ_NONE = 0x0 + SK_DIAG_BPF_STORAGE_REQ_MAP_FD = 0x1 + SK_DIAG_BPF_STORAGE_REP_NONE = 0x0 + SK_DIAG_BPF_STORAGE = 0x1 + SK_DIAG_BPF_STORAGE_NONE = 0x0 + SK_DIAG_BPF_STORAGE_PAD = 0x1 + SK_DIAG_BPF_STORAGE_MAP_ID = 0x2 + SK_DIAG_BPF_STORAGE_MAP_VALUE = 0x3 +) + +type SockDiagReq struct { + Family uint8 + Protocol uint8 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_386.go b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go index 438a30affad..fd402da43fc 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_386.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go @@ -477,14 +477,6 @@ const ( BLKPG = 0x1269 ) -type XDPUmemReg struct { - Addr uint64 - Len uint64 - Size uint32 - Headroom uint32 - Flags uint32 -} - type CryptoUserAlg struct { Name [64]int8 Driver_name [64]int8 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go index adceca3553b..eb7a5e1864a 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go @@ -492,15 +492,6 @@ const ( BLKPG = 0x1269 ) -type XDPUmemReg struct { - Addr uint64 - Len uint64 - Size uint32 - Headroom uint32 - Flags uint32 - _ [4]byte -} - type CryptoUserAlg struct { Name [64]int8 Driver_name [64]int8 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go b/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go index eeaa00a37d6..d78ac108b6c 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go @@ -470,15 +470,6 @@ const ( BLKPG = 0x1269 ) -type XDPUmemReg struct { - Addr uint64 - Len uint64 - Size uint32 - Headroom uint32 - Flags uint32 - _ [4]byte -} - type CryptoUserAlg struct { Name [64]uint8 Driver_name [64]uint8 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go index 6739aa91d4e..cd06d47f1f7 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go @@ -471,15 +471,6 @@ const ( BLKPG = 0x1269 ) -type XDPUmemReg struct { - Addr uint64 - Len uint64 - Size uint32 - Headroom uint32 - Flags uint32 - _ [4]byte -} - type CryptoUserAlg struct { Name [64]int8 Driver_name [64]int8 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go index 9920ef6317d..2f28fe26c1a 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go @@ -472,15 +472,6 @@ const ( BLKPG = 0x1269 ) -type XDPUmemReg struct { - Addr uint64 - Len uint64 - Size uint32 - Headroom uint32 - Flags uint32 - _ [4]byte -} - type CryptoUserAlg struct { Name [64]int8 Driver_name [64]int8 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go index 2923b799a48..71d6cac2f1a 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go @@ -476,15 +476,6 @@ const ( BLKPG = 0x20001269 ) -type XDPUmemReg struct { - Addr uint64 - Len uint64 - Size uint32 - Headroom uint32 - Flags uint32 - _ [4]byte -} - type CryptoUserAlg struct { Name [64]int8 Driver_name [64]int8 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go index ce2750ee415..8596d453563 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go @@ -474,15 +474,6 @@ const ( BLKPG = 0x20001269 ) -type XDPUmemReg struct { - Addr uint64 - Len uint64 - Size uint32 - Headroom uint32 - Flags uint32 - _ [4]byte -} - type CryptoUserAlg struct { Name [64]int8 Driver_name [64]int8 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go index 3038811d70b..cd60ea18662 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go @@ -474,15 +474,6 @@ const ( BLKPG = 0x20001269 ) -type XDPUmemReg struct { - Addr uint64 - Len uint64 - Size uint32 - Headroom uint32 - Flags uint32 - _ [4]byte -} - type CryptoUserAlg struct { Name [64]int8 Driver_name [64]int8 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go index efc6fed18c1..b0ae420c489 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go @@ -476,15 +476,6 @@ const ( BLKPG = 0x20001269 ) -type XDPUmemReg struct { - Addr uint64 - Len uint64 - Size uint32 - Headroom uint32 - Flags uint32 - _ [4]byte -} - type CryptoUserAlg struct { Name [64]int8 Driver_name [64]int8 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go index 9a654b75a90..8359728759b 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go @@ -482,15 +482,6 @@ const ( BLKPG = 0x20001269 ) -type XDPUmemReg struct { - Addr uint64 - Len uint64 - Size uint32 - Headroom uint32 - Flags uint32 - _ [4]byte -} - type CryptoUserAlg struct { Name [64]uint8 Driver_name [64]uint8 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go index 40d358e33e3..69eb6a5c689 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go @@ -481,15 +481,6 @@ const ( BLKPG = 0x20001269 ) -type XDPUmemReg struct { - Addr uint64 - Len uint64 - Size uint32 - Headroom uint32 - Flags uint32 - _ [4]byte -} - type CryptoUserAlg struct { Name [64]uint8 Driver_name [64]uint8 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go index 148c6ceb869..5f583cb62bf 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go @@ -481,15 +481,6 @@ const ( BLKPG = 0x20001269 ) -type XDPUmemReg struct { - Addr uint64 - Len uint64 - Size uint32 - Headroom uint32 - Flags uint32 - _ [4]byte -} - type CryptoUserAlg struct { Name [64]uint8 Driver_name [64]uint8 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go index 72ba81543ef..15adc04142f 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go @@ -499,15 +499,6 @@ const ( BLKPG = 0x1269 ) -type XDPUmemReg struct { - Addr uint64 - Len uint64 - Size uint32 - Headroom uint32 - Flags uint32 - _ [4]byte -} - type CryptoUserAlg struct { Name [64]uint8 Driver_name [64]uint8 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go b/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go index 71e765508e2..cf3ce900377 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go @@ -495,15 +495,6 @@ const ( BLKPG = 0x1269 ) -type XDPUmemReg struct { - Addr uint64 - Len uint64 - Size uint32 - Headroom uint32 - Flags uint32 - _ [4]byte -} - type CryptoUserAlg struct { Name [64]int8 Driver_name [64]int8 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go index 4abbdb9de93..590b56739c5 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go @@ -476,15 +476,6 @@ const ( BLKPG = 0x20001269 ) -type XDPUmemReg struct { - Addr uint64 - Len uint64 - Size uint32 - Headroom uint32 - Flags uint32 - _ [4]byte -} - type CryptoUserAlg struct { Name [64]int8 Driver_name [64]int8 diff --git a/vendor/golang.org/x/sys/unix/ztypes_zos_s390x.go b/vendor/golang.org/x/sys/unix/ztypes_zos_s390x.go index 54f31be6373..d9a13af4684 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_zos_s390x.go +++ b/vendor/golang.org/x/sys/unix/ztypes_zos_s390x.go @@ -25,10 +25,13 @@ const ( SizeofIPv6Mreq = 20 SizeofICMPv6Filter = 32 SizeofIPv6MTUInfo = 32 + SizeofInet4Pktinfo = 8 + SizeofInet6Pktinfo = 20 SizeofLinger = 8 SizeofSockaddrInet4 = 16 SizeofSockaddrInet6 = 28 SizeofTCPInfo = 0x68 + SizeofUcred = 12 ) type ( @@ -69,12 +72,17 @@ type Utimbuf struct { } type Utsname struct { - Sysname [65]byte - Nodename [65]byte - Release [65]byte - Version [65]byte - Machine [65]byte - Domainname [65]byte + Sysname [16]byte + Nodename [32]byte + Release [8]byte + Version [8]byte + Machine [16]byte +} + +type Ucred struct { + Pid int32 + Uid uint32 + Gid uint32 } type RawSockaddrInet4 struct { @@ -325,7 +333,7 @@ type Statvfs_t struct { } type Statfs_t struct { - Type uint32 + Type uint64 Bsize uint64 Blocks uint64 Bfree uint64 @@ -336,6 +344,7 @@ type Statfs_t struct { Namelen uint64 Frsize uint64 Flags uint64 + _ [4]uint64 } type direntLE struct { @@ -412,3 +421,126 @@ type W_Mntent struct { Quiesceowner [8]byte _ [38]byte } + +type EpollEvent struct { + Events uint32 + _ int32 + Fd int32 + Pad int32 +} + +type InotifyEvent struct { + Wd int32 + Mask uint32 + Cookie uint32 + Len uint32 + Name string +} + +const ( + SizeofInotifyEvent = 0x10 +) + +type ConsMsg2 struct { + Cm2Format uint16 + Cm2R1 uint16 + Cm2Msglength uint32 + Cm2Msg *byte + Cm2R2 [4]byte + Cm2R3 [4]byte + Cm2Routcde *uint32 + Cm2Descr *uint32 + Cm2Msgflag uint32 + Cm2Token uint32 + Cm2Msgid *uint32 + Cm2R4 [4]byte + Cm2DomToken uint32 + Cm2DomMsgid *uint32 + Cm2ModCartptr *byte + Cm2ModConsidptr *byte + Cm2MsgCart [8]byte + Cm2MsgConsid [4]byte + Cm2R5 [12]byte +} + +const ( + CC_modify = 1 + CC_stop = 2 + CONSOLE_FORMAT_2 = 2 + CONSOLE_FORMAT_3 = 3 + CONSOLE_HRDCPY = 0x80000000 +) + +type OpenHow struct { + Flags uint64 + Mode uint64 + Resolve uint64 +} + +const SizeofOpenHow = 0x18 + +const ( + RESOLVE_CACHED = 0x20 + RESOLVE_BENEATH = 0x8 + RESOLVE_IN_ROOT = 0x10 + RESOLVE_NO_MAGICLINKS = 0x2 + RESOLVE_NO_SYMLINKS = 0x4 + RESOLVE_NO_XDEV = 0x1 +) + +type Siginfo struct { + Signo int32 + Errno int32 + Code int32 + Pid int32 + Uid uint32 + _ [44]byte +} + +type SysvIpcPerm struct { + Uid uint32 + Gid uint32 + Cuid uint32 + Cgid uint32 + Mode int32 +} + +type SysvShmDesc struct { + Perm SysvIpcPerm + _ [4]byte + Lpid int32 + Cpid int32 + Nattch uint32 + _ [4]byte + _ [4]byte + _ [4]byte + _ int32 + _ uint8 + _ uint8 + _ uint16 + _ *byte + Segsz uint64 + Atime Time_t + Dtime Time_t + Ctime Time_t +} + +type SysvShmDesc64 struct { + Perm SysvIpcPerm + _ [4]byte + Lpid int32 + Cpid int32 + Nattch uint32 + _ [4]byte + _ [4]byte + _ [4]byte + _ int32 + _ byte + _ uint8 + _ uint16 + _ *byte + Segsz uint64 + Atime int64 + Dtime int64 + Ctime int64 +} diff --git a/vendor/golang.org/x/sys/windows/aliases.go b/vendor/golang.org/x/sys/windows/aliases.go index ce2d713d62e..16f90560a23 100644 --- a/vendor/golang.org/x/sys/windows/aliases.go +++ b/vendor/golang.org/x/sys/windows/aliases.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build windows && go1.9 +//go:build windows package windows diff --git a/vendor/golang.org/x/sys/windows/empty.s b/vendor/golang.org/x/sys/windows/empty.s deleted file mode 100644 index ba64caca5d3..00000000000 --- a/vendor/golang.org/x/sys/windows/empty.s +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright 2019 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !go1.12 - -// This file is here to allow bodyless functions with go:linkname for Go 1.11 -// and earlier (see https://golang.org/issue/23311). diff --git a/vendor/golang.org/x/sys/windows/security_windows.go b/vendor/golang.org/x/sys/windows/security_windows.go index 26be94a8a7b..6f7d2ac70a9 100644 --- a/vendor/golang.org/x/sys/windows/security_windows.go +++ b/vendor/golang.org/x/sys/windows/security_windows.go @@ -68,6 +68,7 @@ type UserInfo10 struct { //sys NetUserGetInfo(serverName *uint16, userName *uint16, level uint32, buf **byte) (neterr error) = netapi32.NetUserGetInfo //sys NetGetJoinInformation(server *uint16, name **uint16, bufType *uint32) (neterr error) = netapi32.NetGetJoinInformation //sys NetApiBufferFree(buf *byte) (neterr error) = netapi32.NetApiBufferFree +//sys NetUserEnum(serverName *uint16, level uint32, filter uint32, buf **byte, prefMaxLen uint32, entriesRead *uint32, totalEntries *uint32, resumeHandle *uint32) (neterr error) = netapi32.NetUserEnum const ( // do not reorder diff --git a/vendor/golang.org/x/sys/windows/zsyscall_windows.go b/vendor/golang.org/x/sys/windows/zsyscall_windows.go index 5c6035ddfa9..9f73df75b5f 100644 --- a/vendor/golang.org/x/sys/windows/zsyscall_windows.go +++ b/vendor/golang.org/x/sys/windows/zsyscall_windows.go @@ -401,6 +401,7 @@ var ( procTransmitFile = modmswsock.NewProc("TransmitFile") procNetApiBufferFree = modnetapi32.NewProc("NetApiBufferFree") procNetGetJoinInformation = modnetapi32.NewProc("NetGetJoinInformation") + procNetUserEnum = modnetapi32.NewProc("NetUserEnum") procNetUserGetInfo = modnetapi32.NewProc("NetUserGetInfo") procNtCreateFile = modntdll.NewProc("NtCreateFile") procNtCreateNamedPipeFile = modntdll.NewProc("NtCreateNamedPipeFile") @@ -3486,6 +3487,14 @@ func NetGetJoinInformation(server *uint16, name **uint16, bufType *uint32) (nete return } +func NetUserEnum(serverName *uint16, level uint32, filter uint32, buf **byte, prefMaxLen uint32, entriesRead *uint32, totalEntries *uint32, resumeHandle *uint32) (neterr error) { + r0, _, _ := syscall.Syscall9(procNetUserEnum.Addr(), 8, uintptr(unsafe.Pointer(serverName)), uintptr(level), uintptr(filter), uintptr(unsafe.Pointer(buf)), uintptr(prefMaxLen), uintptr(unsafe.Pointer(entriesRead)), uintptr(unsafe.Pointer(totalEntries)), uintptr(unsafe.Pointer(resumeHandle)), 0) + if r0 != 0 { + neterr = syscall.Errno(r0) + } + return +} + func NetUserGetInfo(serverName *uint16, userName *uint16, level uint32, buf **byte) (neterr error) { r0, _, _ := syscall.Syscall6(procNetUserGetInfo.Addr(), 4, uintptr(unsafe.Pointer(serverName)), uintptr(unsafe.Pointer(userName)), uintptr(level), uintptr(unsafe.Pointer(buf)), 0, 0) if r0 != 0 { diff --git a/vendor/modules.txt b/vendor/modules.txt index cc44834f253..47793de1eb7 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -172,7 +172,7 @@ github.com/jesseduffield/go-git/v5/utils/merkletrie/filesystem github.com/jesseduffield/go-git/v5/utils/merkletrie/index github.com/jesseduffield/go-git/v5/utils/merkletrie/internal/frame github.com/jesseduffield/go-git/v5/utils/merkletrie/noder -# github.com/jesseduffield/gocui v0.3.1-0.20240418080333-8cd33929c513 +# github.com/jesseduffield/gocui v0.3.1-0.20240623092910-a42926c14fc9 ## explicit; go 1.12 github.com/jesseduffield/gocui # github.com/jesseduffield/kill v0.0.0-20220618033138-bfbe04675d10 @@ -316,16 +316,16 @@ golang.org/x/net/proxy # golang.org/x/sync v0.7.0 ## explicit; go 1.18 golang.org/x/sync/errgroup -# golang.org/x/sys v0.19.0 +# golang.org/x/sys v0.21.0 ## explicit; go 1.18 golang.org/x/sys/cpu golang.org/x/sys/plan9 golang.org/x/sys/unix golang.org/x/sys/windows -# golang.org/x/term v0.19.0 +# golang.org/x/term v0.21.0 ## explicit; go 1.18 golang.org/x/term -# golang.org/x/text v0.14.0 +# golang.org/x/text v0.16.0 ## explicit; go 1.18 golang.org/x/text/encoding golang.org/x/text/encoding/internal/identifier From fafa4280f58c4c6be3646870f9e7cbb4ada15f0b Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Thu, 30 Mar 2023 21:51:09 +0200 Subject: [PATCH 070/157] Log memory usage every 10s --- pkg/gui/background.go | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/pkg/gui/background.go b/pkg/gui/background.go index db267c0dcae..061502a43fa 100644 --- a/pkg/gui/background.go +++ b/pkg/gui/background.go @@ -1,6 +1,8 @@ package gui import ( + "fmt" + "runtime" "strings" "time" @@ -46,6 +48,29 @@ func (self *BackgroundRoutineMgr) startBackgroundRoutines() { refreshInterval) } } + + if self.gui.Config.GetDebug() { + self.goEvery(time.Second*time.Duration(10), self.gui.stopChan, func() error { + formatBytes := func(b uint64) string { + const unit = 1000 + if b < unit { + return fmt.Sprintf("%d B", b) + } + div, exp := uint64(unit), 0 + for n := b / unit; n >= unit; n /= unit { + div *= unit + exp++ + } + return fmt.Sprintf("%.1f %cB", + float64(b)/float64(div), "kMGTPE"[exp]) + } + + m := runtime.MemStats{} + runtime.ReadMemStats(&m) + self.gui.c.Log.Infof("Heap memory in use: %s", formatBytes(m.HeapAlloc)) + return nil + }) + } } func (self *BackgroundRoutineMgr) startBackgroundFetch() { From 9eb9b369ffc7c99854e2565da9996c3dcc6116c8 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Sun, 23 Jun 2024 11:54:01 +0200 Subject: [PATCH 071/157] Bump gocui --- go.mod | 2 +- go.sum | 4 +- vendor/github.com/jesseduffield/gocui/view.go | 66 +++++++++++++------ vendor/modules.txt | 2 +- 4 files changed, 51 insertions(+), 23 deletions(-) diff --git a/go.mod b/go.mod index e994a67b1e0..4e189992ba6 100644 --- a/go.mod +++ b/go.mod @@ -16,7 +16,7 @@ require ( github.com/integrii/flaggy v1.4.0 github.com/jesseduffield/generics v0.0.0-20220320043834-727e535cbe68 github.com/jesseduffield/go-git/v5 v5.1.2-0.20221018185014-fdd53fef665d - github.com/jesseduffield/gocui v0.3.1-0.20240623092910-a42926c14fc9 + github.com/jesseduffield/gocui v0.3.1-0.20240623095254-05e1204c2454 github.com/jesseduffield/kill v0.0.0-20220618033138-bfbe04675d10 github.com/jesseduffield/lazycore v0.0.0-20221012050358-03d2e40243c5 github.com/jesseduffield/minimal/gitignore v0.3.3-0.20211018110810-9cde264e6b1e diff --git a/go.sum b/go.sum index 4a915678432..19c69818978 100644 --- a/go.sum +++ b/go.sum @@ -188,8 +188,8 @@ github.com/jesseduffield/generics v0.0.0-20220320043834-727e535cbe68 h1:EQP2Tv8T github.com/jesseduffield/generics v0.0.0-20220320043834-727e535cbe68/go.mod h1:+LLj9/WUPAP8LqCchs7P+7X0R98HiFujVFANdNaxhGk= github.com/jesseduffield/go-git/v5 v5.1.2-0.20221018185014-fdd53fef665d h1:bO+OmbreIv91rCe8NmscRwhFSqkDJtzWCPV4Y+SQuXE= github.com/jesseduffield/go-git/v5 v5.1.2-0.20221018185014-fdd53fef665d/go.mod h1:nGNEErzf+NRznT+N2SWqmHnDnF9aLgANB1CUNEan09o= -github.com/jesseduffield/gocui v0.3.1-0.20240623092910-a42926c14fc9 h1:JJ0DrXgAUpGBGV5w8nzrQLMWTgcTvf745IKAk08qjcM= -github.com/jesseduffield/gocui v0.3.1-0.20240623092910-a42926c14fc9/go.mod h1:XtEbqCbn45keRXEu+OMZkjN5gw6AEob59afsgHjokZ8= +github.com/jesseduffield/gocui v0.3.1-0.20240623095254-05e1204c2454 h1:rTPA5WiPM1SPUA3r2kSb3RiILC93am6irMvOLjO7JNA= +github.com/jesseduffield/gocui v0.3.1-0.20240623095254-05e1204c2454/go.mod h1:XtEbqCbn45keRXEu+OMZkjN5gw6AEob59afsgHjokZ8= github.com/jesseduffield/kill v0.0.0-20220618033138-bfbe04675d10 h1:jmpr7KpX2+2GRiE91zTgfq49QvgiqB0nbmlwZ8UnOx0= github.com/jesseduffield/kill v0.0.0-20220618033138-bfbe04675d10/go.mod h1:aA97kHeNA+sj2Hbki0pvLslmE4CbDyhBeSSTUUnOuVo= github.com/jesseduffield/lazycore v0.0.0-20221012050358-03d2e40243c5 h1:CDuQmfOjAtb1Gms6a1p5L2P8RhbLUq5t8aL7PiQd2uY= diff --git a/vendor/github.com/jesseduffield/gocui/view.go b/vendor/github.com/jesseduffield/gocui/view.go index 68b0f49c6eb..a32519b801f 100644 --- a/vendor/github.com/jesseduffield/gocui/view.go +++ b/vendor/github.com/jesseduffield/gocui/view.go @@ -771,13 +771,14 @@ func (v *View) writeRunes(p []rune) { } v.wx = 0 default: - moveCursor, cells := v.parseInput(r, v.wx, v.wy) + truncateLine, cells := v.parseInput(r, v.wx, v.wy) if cells == nil { continue } v.writeCells(v.wx, v.wy, cells) - if moveCursor { - v.wx += len(cells) + v.wx += len(cells) + if truncateLine { + v.lines[v.wy] = v.lines[v.wy][:v.wx] } } } @@ -800,7 +801,7 @@ func (v *View) writeString(s string) { // contains the processed data. func (v *View) parseInput(ch rune, x int, _ int) (bool, []cell) { cells := []cell{} - moveCursor := true + truncateLine := false isEscape, err := v.ei.parseOne(ch) if err != nil { @@ -816,18 +817,13 @@ func (v *View) parseInput(ch rune, x int, _ int) (bool, []cell) { } else { repeatCount := 1 if _, ok := v.ei.instruction.(eraseInLineFromCursor); ok { - // fill rest of line + // truncate line v.ei.instructionRead() - cx := 0 - for _, cell := range v.lines[v.wy] { - cx += runewidth.RuneWidth(cell.chr) - } - repeatCount = v.InnerWidth() - cx - ch = ' ' - moveCursor = false + repeatCount = 0 + truncateLine = true } else if isEscape { // do not output anything - return moveCursor, nil + return truncateLine, nil } else if ch == '\t' { // fill tab-sized space const tabStop = 4 @@ -844,7 +840,7 @@ func (v *View) parseInput(ch rune, x int, _ int) (bool, []cell) { } } - return moveCursor, cells + return truncateLine, cells } // Read reads data into p from the current reading position set by SetReadPos. @@ -1590,19 +1586,51 @@ func (v *View) ClearTextArea() { _ = v.SetCursor(0, 0) } -// only call this function if you don't care where v.wx and v.wy end up -func (v *View) OverwriteLines(y int, content string) { - v.writeMutex.Lock() - defer v.writeMutex.Unlock() - +func (v *View) overwriteLines(y int, content string) { // break by newline, then for each line, write it, then add that erase command v.wx = 0 v.wy = y lines := strings.Replace(content, "\n", "\x1b[K\n", -1) + // If the last line doesn't end with a linefeed, add the erase command at + // the end too + if !strings.HasSuffix(lines, "\n") { + lines += "\x1b[K" + } v.writeString(lines) } +// only call this function if you don't care where v.wx and v.wy end up +func (v *View) OverwriteLines(y int, content string) { + v.writeMutex.Lock() + defer v.writeMutex.Unlock() + + v.overwriteLines(y, content) +} + +// only call this function if you don't care where v.wx and v.wy end up +func (v *View) OverwriteLinesAndClearEverythingElse(y int, content string) { + v.writeMutex.Lock() + defer v.writeMutex.Unlock() + + v.overwriteLines(y, content) + + for i := 0; i < y; i += 1 { + v.lines[i] = nil + } + + for i := v.wy + 1; i < len(v.lines); i += 1 { + v.lines[i] = nil + } +} + +func (v *View) SetContentLineCount(lineCount int) { + if lineCount > 0 { + v.makeWriteable(0, lineCount-1) + } + v.lines = v.lines[:lineCount] +} + func (v *View) ScrollUp(amount int) { if amount > v.oy { amount = v.oy diff --git a/vendor/modules.txt b/vendor/modules.txt index 47793de1eb7..62d47eea4e7 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -172,7 +172,7 @@ github.com/jesseduffield/go-git/v5/utils/merkletrie/filesystem github.com/jesseduffield/go-git/v5/utils/merkletrie/index github.com/jesseduffield/go-git/v5/utils/merkletrie/internal/frame github.com/jesseduffield/go-git/v5/utils/merkletrie/noder -# github.com/jesseduffield/gocui v0.3.1-0.20240623092910-a42926c14fc9 +# github.com/jesseduffield/gocui v0.3.1-0.20240623095254-05e1204c2454 ## explicit; go 1.12 github.com/jesseduffield/gocui # github.com/jesseduffield/kill v0.0.0-20220618033138-bfbe04675d10 From dd2bffc278dc3879e112caa3effd9c9c426489af Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Thu, 6 Jun 2024 16:54:27 +0200 Subject: [PATCH 072/157] Simplify ListContextTrait.FocusLine When refreshViewportOnChange is true, we would refresh the viewport once at the end of FocusLine, and then we would check at the end of AfterLayout if the origin has changed, and refresh again if so. That's unnecessarily complicated, let's just unconditionally refresh at the end of AfterLayout only. --- pkg/gui/context/list_context_trait.go | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/pkg/gui/context/list_context_trait.go b/pkg/gui/context/list_context_trait.go index c0e5ca04fa3..78d524bb22f 100644 --- a/pkg/gui/context/list_context_trait.go +++ b/pkg/gui/context/list_context_trait.go @@ -25,10 +25,9 @@ func (self *ListContextTrait) IsListContext() {} func (self *ListContextTrait) FocusLine() { // Doing this at the end of the layout function because we need the view to be // resized before we focus the line, otherwise if we're in accordion mode - // the view could be squashed and won't how to adjust the cursor/origin + // the view could be squashed and won't how to adjust the cursor/origin. + // Also, refreshing the viewport needs to happen after the view has been resized. self.c.AfterLayout(func() error { - oldOrigin, _ := self.GetViewTrait().ViewPortYBounds() - self.GetViewTrait().FocusPoint( self.ModelIndexToViewIndex(self.list.GetSelectedLineIdx())) @@ -40,22 +39,13 @@ func (self *ListContextTrait) FocusLine() { self.GetViewTrait().CancelRangeSelect() } - // If FocusPoint() caused the view to scroll (because the selected line - // was out of view before), we need to rerender the view port again. - // This can happen when pressing , or . to scroll by pages, or < or > to - // jump to the top or bottom. - newOrigin, _ := self.GetViewTrait().ViewPortYBounds() - if self.refreshViewportOnChange && oldOrigin != newOrigin { + if self.refreshViewportOnChange { self.refreshViewport() } return nil }) self.setFooter() - - if self.refreshViewportOnChange { - self.refreshViewport() - } } func (self *ListContextTrait) refreshViewport() { From 44160ef8448239e397c7bddbbd78bc9cd38327a3 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Thu, 30 Mar 2023 18:17:50 +0200 Subject: [PATCH 073/157] Only render visible portion of the screen for commits view --- pkg/gui/context/base_context.go | 59 ++++++++++++---------- pkg/gui/context/list_context_trait.go | 27 +++++++++- pkg/gui/context/local_commits_context.go | 14 ++--- pkg/gui/context/remote_branches_context.go | 15 +++--- pkg/gui/context/sub_commits_context.go | 16 +++--- pkg/gui/context/view_trait.go | 9 ++++ pkg/gui/layout.go | 14 ++++- pkg/gui/types/context.go | 5 ++ pkg/integration/components/view_driver.go | 33 +++++++----- 9 files changed, 130 insertions(+), 62 deletions(-) diff --git a/pkg/gui/context/base_context.go b/pkg/gui/context/base_context.go index acece19942a..beaa61446b3 100644 --- a/pkg/gui/context/base_context.go +++ b/pkg/gui/context/base_context.go @@ -20,11 +20,12 @@ type BaseContext struct { onFocusFn onFocusFn onFocusLostFn onFocusLostFn - focusable bool - transient bool - hasControlledBounds bool - needsRerenderOnWidthChange bool - highlightOnFocus bool + focusable bool + transient bool + hasControlledBounds bool + needsRerenderOnWidthChange bool + needsRerenderOnHeightChange bool + highlightOnFocus bool *ParentContextMgr } @@ -37,15 +38,16 @@ type ( var _ types.IBaseContext = &BaseContext{} type NewBaseContextOpts struct { - Kind types.ContextKind - Key types.ContextKey - View *gocui.View - WindowName string - Focusable bool - Transient bool - HasUncontrolledBounds bool // negating for the sake of making false the default - HighlightOnFocus bool - NeedsRerenderOnWidthChange bool + Kind types.ContextKind + Key types.ContextKey + View *gocui.View + WindowName string + Focusable bool + Transient bool + HasUncontrolledBounds bool // negating for the sake of making false the default + HighlightOnFocus bool + NeedsRerenderOnWidthChange bool + NeedsRerenderOnHeightChange bool OnGetOptionsMap func() map[string]string } @@ -56,18 +58,19 @@ func NewBaseContext(opts NewBaseContextOpts) *BaseContext { hasControlledBounds := !opts.HasUncontrolledBounds return &BaseContext{ - kind: opts.Kind, - key: opts.Key, - view: opts.View, - windowName: opts.WindowName, - onGetOptionsMap: opts.OnGetOptionsMap, - focusable: opts.Focusable, - transient: opts.Transient, - hasControlledBounds: hasControlledBounds, - highlightOnFocus: opts.HighlightOnFocus, - needsRerenderOnWidthChange: opts.NeedsRerenderOnWidthChange, - ParentContextMgr: &ParentContextMgr{}, - viewTrait: viewTrait, + kind: opts.Kind, + key: opts.Key, + view: opts.View, + windowName: opts.WindowName, + onGetOptionsMap: opts.OnGetOptionsMap, + focusable: opts.Focusable, + transient: opts.Transient, + hasControlledBounds: hasControlledBounds, + highlightOnFocus: opts.HighlightOnFocus, + needsRerenderOnWidthChange: opts.NeedsRerenderOnWidthChange, + needsRerenderOnHeightChange: opts.NeedsRerenderOnHeightChange, + ParentContextMgr: &ParentContextMgr{}, + viewTrait: viewTrait, } } @@ -197,6 +200,10 @@ func (self *BaseContext) NeedsRerenderOnWidthChange() bool { return self.needsRerenderOnWidthChange } +func (self *BaseContext) NeedsRerenderOnHeightChange() bool { + return self.needsRerenderOnHeightChange +} + func (self *BaseContext) Title() string { return "" } diff --git a/pkg/gui/context/list_context_trait.go b/pkg/gui/context/list_context_trait.go index 78d524bb22f..aca33cbd061 100644 --- a/pkg/gui/context/list_context_trait.go +++ b/pkg/gui/context/list_context_trait.go @@ -18,6 +18,9 @@ type ListContextTrait struct { // we should find out exactly which lines are now part of the path and refresh those. // We should also keep track of the previous path and refresh those lines too. refreshViewportOnChange bool + // If this is true, we only render the visible lines of the list. Useful for lists that can + // get very long, because it can save a lot of memory + renderOnlyVisibleLines bool } func (self *ListContextTrait) IsListContext() {} @@ -28,6 +31,8 @@ func (self *ListContextTrait) FocusLine() { // the view could be squashed and won't how to adjust the cursor/origin. // Also, refreshing the viewport needs to happen after the view has been resized. self.c.AfterLayout(func() error { + oldOrigin, _ := self.GetViewTrait().ViewPortYBounds() + self.GetViewTrait().FocusPoint( self.ModelIndexToViewIndex(self.list.GetSelectedLineIdx())) @@ -41,6 +46,11 @@ func (self *ListContextTrait) FocusLine() { if self.refreshViewportOnChange { self.refreshViewport() + } else if self.renderOnlyVisibleLines { + newOrigin, _ := self.GetViewTrait().ViewPortYBounds() + if oldOrigin != newOrigin { + return self.HandleRender() + } } return nil }) @@ -83,8 +93,21 @@ func (self *ListContextTrait) HandleFocusLost(opts types.OnFocusLostOpts) error // OnFocus assumes that the content of the context has already been rendered to the view. OnRender is the function which actually renders the content to the view func (self *ListContextTrait) HandleRender() error { self.list.ClampSelection() - content := self.renderLines(-1, -1) - self.GetViewTrait().SetContent(content) + if self.renderOnlyVisibleLines { + // Rendering only the visible area can save a lot of cell memory for + // those views that support it. + totalLength := self.list.Len() + if self.getNonModelItems != nil { + totalLength += len(self.getNonModelItems()) + } + self.GetViewTrait().SetContentLineCount(totalLength) + startIdx, length := self.GetViewTrait().ViewPortYBounds() + content := self.renderLines(startIdx, startIdx+length) + self.GetViewTrait().SetViewPortContentAndClearEverythingElse(content) + } else { + content := self.renderLines(-1, -1) + self.GetViewTrait().SetContent(content) + } self.c.Render() self.setFooter() diff --git a/pkg/gui/context/local_commits_context.go b/pkg/gui/context/local_commits_context.go index c02fa3fe684..ab42cfb70fa 100644 --- a/pkg/gui/context/local_commits_context.go +++ b/pkg/gui/context/local_commits_context.go @@ -72,12 +72,13 @@ func NewLocalCommitsContext(c *ContextCommon) *LocalCommitsContext { SearchTrait: NewSearchTrait(c), ListContextTrait: &ListContextTrait{ Context: NewSimpleContext(NewBaseContext(NewBaseContextOpts{ - View: c.Views().Commits, - WindowName: "commits", - Key: LOCAL_COMMITS_CONTEXT_KEY, - Kind: types.SIDE_CONTEXT, - Focusable: true, - NeedsRerenderOnWidthChange: true, + View: c.Views().Commits, + WindowName: "commits", + Key: LOCAL_COMMITS_CONTEXT_KEY, + Kind: types.SIDE_CONTEXT, + Focusable: true, + NeedsRerenderOnWidthChange: true, + NeedsRerenderOnHeightChange: true, })), ListRenderer: ListRenderer{ list: viewModel, @@ -85,6 +86,7 @@ func NewLocalCommitsContext(c *ContextCommon) *LocalCommitsContext { }, c: c, refreshViewportOnChange: true, + renderOnlyVisibleLines: true, }, } diff --git a/pkg/gui/context/remote_branches_context.go b/pkg/gui/context/remote_branches_context.go index 884d3debbf1..fff80e0768c 100644 --- a/pkg/gui/context/remote_branches_context.go +++ b/pkg/gui/context/remote_branches_context.go @@ -37,13 +37,14 @@ func NewRemoteBranchesContext( DynamicTitleBuilder: NewDynamicTitleBuilder(c.Tr.RemoteBranchesDynamicTitle), ListContextTrait: &ListContextTrait{ Context: NewSimpleContext(NewBaseContext(NewBaseContextOpts{ - View: c.Views().RemoteBranches, - WindowName: "branches", - Key: REMOTE_BRANCHES_CONTEXT_KEY, - Kind: types.SIDE_CONTEXT, - Focusable: true, - Transient: true, - NeedsRerenderOnWidthChange: true, + View: c.Views().RemoteBranches, + WindowName: "branches", + Key: REMOTE_BRANCHES_CONTEXT_KEY, + Kind: types.SIDE_CONTEXT, + Focusable: true, + Transient: true, + NeedsRerenderOnWidthChange: true, + NeedsRerenderOnHeightChange: true, })), ListRenderer: ListRenderer{ list: viewModel, diff --git a/pkg/gui/context/sub_commits_context.go b/pkg/gui/context/sub_commits_context.go index 842b364b3dd..ab0d2784a50 100644 --- a/pkg/gui/context/sub_commits_context.go +++ b/pkg/gui/context/sub_commits_context.go @@ -115,13 +115,14 @@ func NewSubCommitsContext( DynamicTitleBuilder: NewDynamicTitleBuilder(c.Tr.SubCommitsDynamicTitle), ListContextTrait: &ListContextTrait{ Context: NewSimpleContext(NewBaseContext(NewBaseContextOpts{ - View: c.Views().SubCommits, - WindowName: "branches", - Key: SUB_COMMITS_CONTEXT_KEY, - Kind: types.SIDE_CONTEXT, - Focusable: true, - Transient: true, - NeedsRerenderOnWidthChange: true, + View: c.Views().SubCommits, + WindowName: "branches", + Key: SUB_COMMITS_CONTEXT_KEY, + Kind: types.SIDE_CONTEXT, + Focusable: true, + Transient: true, + NeedsRerenderOnWidthChange: true, + NeedsRerenderOnHeightChange: true, })), ListRenderer: ListRenderer{ list: viewModel, @@ -130,6 +131,7 @@ func NewSubCommitsContext( }, c: c, refreshViewportOnChange: true, + renderOnlyVisibleLines: true, }, } diff --git a/pkg/gui/context/view_trait.go b/pkg/gui/context/view_trait.go index 1179a8b1486..19141989740 100644 --- a/pkg/gui/context/view_trait.go +++ b/pkg/gui/context/view_trait.go @@ -34,6 +34,15 @@ func (self *ViewTrait) SetViewPortContent(content string) { self.view.OverwriteLines(y, content) } +func (self *ViewTrait) SetViewPortContentAndClearEverythingElse(content string) { + _, y := self.view.Origin() + self.view.OverwriteLinesAndClearEverythingElse(y, content) +} + +func (self *ViewTrait) SetContentLineCount(lineCount int) { + self.view.SetContentLineCount(lineCount) +} + func (self *ViewTrait) SetContent(content string) { self.view.SetContent(content) } diff --git a/pkg/gui/layout.go b/pkg/gui/layout.go index 01c39762879..4e2b4947799 100644 --- a/pkg/gui/layout.go +++ b/pkg/gui/layout.go @@ -72,14 +72,26 @@ func (gui *Gui) layout(g *gocui.Gui) error { frameOffset = 0 } + mustRerender := false if context.NeedsRerenderOnWidthChange() { // view.Width() returns the width -1 for some reason oldWidth := view.Width() + 1 newWidth := dimensionsObj.X1 - dimensionsObj.X0 + 2*frameOffset if oldWidth != newWidth { - contextsToRerender = append(contextsToRerender, context) + mustRerender = true } } + if context.NeedsRerenderOnHeightChange() { + // view.Height() returns the height -1 for some reason + oldHeight := view.Height() + 1 + newHeight := dimensionsObj.Y1 - dimensionsObj.Y0 + 2*frameOffset + if oldHeight != newHeight { + mustRerender = true + } + } + if mustRerender { + contextsToRerender = append(contextsToRerender, context) + } _, err = g.SetView( viewName, diff --git a/pkg/gui/types/context.go b/pkg/gui/types/context.go index b0e312c975e..29b53b9ebc7 100644 --- a/pkg/gui/types/context.go +++ b/pkg/gui/types/context.go @@ -63,6 +63,9 @@ type IBaseContext interface { // true if the view needs to be rerendered when its width changes NeedsRerenderOnWidthChange() bool + // true if the view needs to be rerendered when its height changes + NeedsRerenderOnHeightChange() bool + // returns the desired title for the view upon activation. If there is no desired title (returns empty string), then // no title will be set Title() string @@ -172,6 +175,8 @@ type IViewTrait interface { SetRangeSelectStart(yIdx int) CancelRangeSelect() SetViewPortContent(content string) + SetViewPortContentAndClearEverythingElse(content string) + SetContentLineCount(lineCount int) SetContent(content string) SetFooter(value string) SetOriginX(value int) diff --git a/pkg/integration/components/view_driver.go b/pkg/integration/components/view_driver.go index b6f91760386..3abd63a9ebd 100644 --- a/pkg/integration/components/view_driver.go +++ b/pkg/integration/components/view_driver.go @@ -431,6 +431,11 @@ func (self *ViewDriver) SelectPreviousItem() *ViewDriver { return self.PressFast(self.t.keys.Universal.PrevItem) } +// i.e. pressing '<' +func (self *ViewDriver) GotoTop() *ViewDriver { + return self.PressFast(self.t.keys.Universal.GotoTop) +} + // i.e. pressing space func (self *ViewDriver) PressPrimaryAction() *ViewDriver { return self.Press(self.t.keys.Universal.Select) @@ -457,21 +462,15 @@ func (self *ViewDriver) PressEscape() *ViewDriver { // - the user is not in a list item // - no list item is found containing the given text // - multiple list items are found containing the given text in the initial page of items -// -// NOTE: this currently assumes that BufferLines returns all the lines that can be accessed. -// If this changes in future, we'll need to update this code to first attempt to find the item -// in the current page and failing that, jump to the top of the view and iterate through all of it, -// looking for the item. func (self *ViewDriver) NavigateToLine(matcher *TextMatcher) *ViewDriver { self.IsFocused() view := self.getView() lines := view.BufferLines() - var matchIndex int + matchIndex := -1 self.t.assertWithRetries(func() (bool, string) { - matchIndex = -1 var matches []string // first we look for a duplicate on the current screen. We won't bother looking beyond that though. for i, line := range lines { @@ -483,13 +482,19 @@ func (self *ViewDriver) NavigateToLine(matcher *TextMatcher) *ViewDriver { } if len(matches) > 1 { return false, fmt.Sprintf("Found %d matches for `%s`, expected only a single match. Matching lines:\n%s", len(matches), matcher.name(), strings.Join(matches, "\n")) - } else if len(matches) == 0 { - return false, fmt.Sprintf("Could not find item matching: %s. Lines:\n%s", matcher.name(), strings.Join(lines, "\n")) - } else { - return true, "" } + return true, "" }) + // If no match was found, it could be that this is a view that renders only + // the visible lines. In that case, we jump to the top and then press + // down-arrow until we found the match. We simply return the first match we + // find, so we have no way to assert that there are no duplicates. + if matchIndex == -1 { + self.GotoTop() + matchIndex = len(lines) + } + selectedLineIdx := self.getSelectedLineIdx() if selectedLineIdx == matchIndex { return self.SelectedLine(matcher) @@ -514,12 +519,14 @@ func (self *ViewDriver) NavigateToLine(matcher *TextMatcher) *ViewDriver { for i := 0; i < maxNumKeyPresses; i++ { keyPress() idx := self.getSelectedLineIdx() - if ok, _ := matcher.test(lines[idx]); ok { + // It is important to use view.BufferLines() here and not lines, because it + // could change with every keypress. + if ok, _ := matcher.test(view.BufferLines()[idx]); ok { return self } } - self.t.fail(fmt.Sprintf("Could not navigate to item matching: %s. Lines:\n%s", matcher.name(), strings.Join(lines, "\n"))) + self.t.fail(fmt.Sprintf("Could not navigate to item matching: %s. Lines:\n%s", matcher.name(), strings.Join(view.BufferLines(), "\n"))) return self } From deee5fa95781bb515db539999394d651c8ba31c6 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Wed, 5 Jun 2024 18:48:26 +0200 Subject: [PATCH 074/157] Render the view when scrolling with the wheel --- pkg/gui/context/list_context_trait.go | 4 ++++ pkg/gui/controllers/list_controller.go | 6 ++++++ pkg/gui/types/context.go | 1 + 3 files changed, 11 insertions(+) diff --git a/pkg/gui/context/list_context_trait.go b/pkg/gui/context/list_context_trait.go index aca33cbd061..773f946a94d 100644 --- a/pkg/gui/context/list_context_trait.go +++ b/pkg/gui/context/list_context_trait.go @@ -136,3 +136,7 @@ func (self *ListContextTrait) IsItemVisible(item types.HasUrn) bool { func (self *ListContextTrait) RangeSelectEnabled() bool { return true } + +func (self *ListContextTrait) RenderOnlyVisibleLines() bool { + return self.renderOnlyVisibleLines +} diff --git a/pkg/gui/controllers/list_controller.go b/pkg/gui/controllers/list_controller.go index dc876b3fca3..711d32f79f2 100644 --- a/pkg/gui/controllers/list_controller.go +++ b/pkg/gui/controllers/list_controller.go @@ -53,6 +53,9 @@ func (self *ListController) HandleScrollRight() error { func (self *ListController) HandleScrollUp() error { scrollHeight := self.c.UserConfig.Gui.ScrollHeight self.context.GetViewTrait().ScrollUp(scrollHeight) + if self.context.RenderOnlyVisibleLines() { + return self.context.HandleRender() + } return nil } @@ -60,6 +63,9 @@ func (self *ListController) HandleScrollUp() error { func (self *ListController) HandleScrollDown() error { scrollHeight := self.c.UserConfig.Gui.ScrollHeight self.context.GetViewTrait().ScrollDown(scrollHeight) + if self.context.RenderOnlyVisibleLines() { + return self.context.HandleRender() + } return nil } diff --git a/pkg/gui/types/context.go b/pkg/gui/types/context.go index 29b53b9ebc7..691d5694d4b 100644 --- a/pkg/gui/types/context.go +++ b/pkg/gui/types/context.go @@ -153,6 +153,7 @@ type IListContext interface { FocusLine() IsListContext() // used for type switch RangeSelectEnabled() bool + RenderOnlyVisibleLines() bool } type IPatchExplorerContext interface { From 93af0016f777fb477263d44e4f7530a7b59bc53b Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Sat, 15 Jun 2024 14:30:27 +0200 Subject: [PATCH 075/157] Use actual ellipsis character instead of ... to truncate strings Space is scarce in lazygit's UI, and using ... wastes a lot of it. --- pkg/utils/formatting.go | 4 ++-- pkg/utils/formatting_test.go | 15 ++++++++++----- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/pkg/utils/formatting.go b/pkg/utils/formatting.go index 139946ddbd7..a6bbc56709b 100644 --- a/pkg/utils/formatting.go +++ b/pkg/utils/formatting.go @@ -161,10 +161,10 @@ func MaxFn[T any](items []T, fn func(T) int) int { // TruncateWithEllipsis returns a string, truncated to a certain length, with an ellipsis func TruncateWithEllipsis(str string, limit int) string { - if runewidth.StringWidth(str) > limit && limit <= 3 { + if runewidth.StringWidth(str) > limit && limit <= 2 { return strings.Repeat(".", limit) } - return runewidth.Truncate(str, limit, "...") + return runewidth.Truncate(str, limit, "…") } func SafeTruncate(str string, limit int) string { diff --git a/pkg/utils/formatting_test.go b/pkg/utils/formatting_test.go index 3858fd2ec02..5b56a9b333c 100644 --- a/pkg/utils/formatting_test.go +++ b/pkg/utils/formatting_test.go @@ -107,22 +107,22 @@ func TestTruncateWithEllipsis(t *testing.T) { { "hello world !", 3, - "...", + "he…", }, { "hello world !", 4, - "h...", + "hel…", }, { "hello world !", 5, - "he...", + "hell…", }, { "hello world !", 12, - "hello wor...", + "hello world…", }, { "hello world !", @@ -137,13 +137,18 @@ func TestTruncateWithEllipsis(t *testing.T) { { "大大大大", 5, - "大...", + "大大…", }, { "大大大大", 2, "..", }, + { + "大大大大", + 1, + ".", + }, { "大大大大", 0, From 7ec784e2a053b23809cabcad2750db6f2cac1698 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Sat, 22 Jun 2024 15:25:43 +0200 Subject: [PATCH 076/157] Add test demonstrating wrong truncation of branch names containing non-ASCII characters --- pkg/gui/presentation/branches_test.go | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/pkg/gui/presentation/branches_test.go b/pkg/gui/presentation/branches_test.go index ba79f16ce95..14012cda2cf 100644 --- a/pkg/gui/presentation/branches_test.go +++ b/pkg/gui/presentation/branches_test.go @@ -43,6 +43,16 @@ func Test_getBranchDisplayStrings(t *testing.T) { showDivergenceCfg: "none", expected: []string{"1m", "branch_name"}, }, + { + branch: &models.Branch{Name: "🍉_special_char", Recency: "1m"}, + itemOperation: types.ItemOperationNone, + fullDescription: false, + viewWidth: 19, + useIcons: false, + checkedOutByWorktree: false, + showDivergenceCfg: "none", + expected: []string{"1m", "🍉_special_c…"}, // truncated, but shouldn't + }, { branch: &models.Branch{Name: "branch_name", Recency: "1m"}, itemOperation: types.ItemOperationNone, @@ -184,6 +194,16 @@ func Test_getBranchDisplayStrings(t *testing.T) { showDivergenceCfg: "none", expected: []string{"1m", "branch_na…"}, }, + { + branch: &models.Branch{Name: "🍉_special_char", Recency: "1m"}, + itemOperation: types.ItemOperationNone, + fullDescription: false, + viewWidth: 18, + useIcons: false, + checkedOutByWorktree: false, + showDivergenceCfg: "none", + expected: []string{"1m", "🍉_special_…"}, // truncated two runes too much + }, { branch: &models.Branch{Name: "branch_name", Recency: "1m"}, itemOperation: types.ItemOperationNone, From d406ec06af1f671e3370d120deb439af3cad7fa4 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Sat, 22 Jun 2024 13:34:41 +0200 Subject: [PATCH 077/157] Fix truncation of long branch names containing non-ASCII characters --- pkg/gui/presentation/branches.go | 4 ++-- pkg/gui/presentation/branches_test.go | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pkg/gui/presentation/branches.go b/pkg/gui/presentation/branches.go index aab51fe6153..b4c4a75c75e 100644 --- a/pkg/gui/presentation/branches.go +++ b/pkg/gui/presentation/branches.go @@ -79,10 +79,10 @@ func getBranchDisplayStrings( } // Don't bother shortening branch names that are already 3 characters or less - if len(displayName) > max(availableWidth, 3) { + if runewidth.StringWidth(displayName) > max(availableWidth, 3) { // Never shorten the branch name to less then 3 characters len := max(availableWidth, 4) - displayName = displayName[:len-1] + "…" + displayName = runewidth.Truncate(displayName, len, "…") } coloredName := nameTextStyle.Sprint(displayName) if checkedOutByWorkTree { diff --git a/pkg/gui/presentation/branches_test.go b/pkg/gui/presentation/branches_test.go index 14012cda2cf..71dc89c8ab9 100644 --- a/pkg/gui/presentation/branches_test.go +++ b/pkg/gui/presentation/branches_test.go @@ -51,7 +51,7 @@ func Test_getBranchDisplayStrings(t *testing.T) { useIcons: false, checkedOutByWorktree: false, showDivergenceCfg: "none", - expected: []string{"1m", "🍉_special_c…"}, // truncated, but shouldn't + expected: []string{"1m", "🍉_special_char"}, }, { branch: &models.Branch{Name: "branch_name", Recency: "1m"}, @@ -202,7 +202,7 @@ func Test_getBranchDisplayStrings(t *testing.T) { useIcons: false, checkedOutByWorktree: false, showDivergenceCfg: "none", - expected: []string{"1m", "🍉_special_…"}, // truncated two runes too much + expected: []string{"1m", "🍉_special_ch…"}, }, { branch: &models.Branch{Name: "branch_name", Recency: "1m"}, From a7c97400c69f641683f38fb7cf11eb8b18e11882 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Thu, 13 Jun 2024 09:57:02 +0200 Subject: [PATCH 078/157] Add a test demonstrating the bug After switching to another repo and then back to the original one, all keybinding suggestions in the status bar are shown twice. --- pkg/integration/components/shell.go | 6 +++ pkg/integration/tests/test_list.go | 1 + ...inding_suggestions_when_switching_repos.go | 45 +++++++++++++++++++ 3 files changed, 52 insertions(+) create mode 100644 pkg/integration/tests/ui/keybinding_suggestions_when_switching_repos.go diff --git a/pkg/integration/components/shell.go b/pkg/integration/components/shell.go index a8caff77d5f..01a9caf3a80 100644 --- a/pkg/integration/components/shell.go +++ b/pkg/integration/components/shell.go @@ -360,6 +360,12 @@ func (self *Shell) Clone(repoName string) *Shell { return self } +func (self *Shell) CloneNonBare(repoName string) *Shell { + self.RunCommand([]string{"git", "clone", ".", "../" + repoName}) + + return self +} + func (self *Shell) SetBranchUpstream(branch string, upstream string) *Shell { self.RunCommand([]string{"git", "branch", "--set-upstream-to=" + upstream, branch}) diff --git a/pkg/integration/tests/test_list.go b/pkg/integration/tests/test_list.go index 5fbbfb4e2d3..cc7fc6ca185 100644 --- a/pkg/integration/tests/test_list.go +++ b/pkg/integration/tests/test_list.go @@ -315,6 +315,7 @@ var tests = []*components.IntegrationTest{ ui.Accordion, ui.DoublePopup, ui.EmptyMenu, + ui.KeybindingSuggestionsWhenSwitchingRepos, ui.ModeSpecificKeybindingSuggestions, ui.OpenLinkFailure, ui.RangeSelect, diff --git a/pkg/integration/tests/ui/keybinding_suggestions_when_switching_repos.go b/pkg/integration/tests/ui/keybinding_suggestions_when_switching_repos.go new file mode 100644 index 00000000000..2bf4e53c9c8 --- /dev/null +++ b/pkg/integration/tests/ui/keybinding_suggestions_when_switching_repos.go @@ -0,0 +1,45 @@ +package ui + +import ( + "path/filepath" + + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var KeybindingSuggestionsWhenSwitchingRepos = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Show correct keybinding suggestions after switching between repos", + ExtraCmdArgs: []string{}, + Skip: false, + SetupConfig: func(config *config.AppConfig) { + otherRepo, _ := filepath.Abs("../other") + config.AppState.RecentRepos = []string{otherRepo} + }, + SetupRepo: func(shell *Shell) { + shell.CloneNonBare("other") + }, + Run: func(t *TestDriver, keys config.KeybindingConfig) { + switchToRepo := func(repo string) { + t.GlobalPress(keys.Universal.OpenRecentRepos) + t.ExpectPopup().Menu().Title(Equals("Recent repositories")). + Lines( + Contains(repo).IsSelected(), + Contains("Cancel"), + ).Confirm() + t.Views().Status().Content(Contains(repo + " → master")) + } + + t.Views().Files().Focus() + t.Views().Options().Content( + Equals("Commit: c | Stash: s | Reset: D | Keybindings: ? | Cancel: ")) + + switchToRepo("other") + switchToRepo("repo") + + t.Views().Options().Content( + /* EXPECTED: + Equals("Commit: c | Stash: s | Reset: D | Keybindings: ? | Cancel: ")) + ACTUAL (all keybindings appear twice): */ + Equals("Commit: c | Stash: s | Reset: D | Commit: c | Stash: s | Reset: D | Keybindings: ? | Cancel: | Keybindings: ? | Cancel: ")) + }, +}) From cf27fd827b0b9cd7d3701d3c9b23b6dd5345ca58 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Thu, 13 Jun 2024 10:01:35 +0200 Subject: [PATCH 079/157] Clear keybinding functions in resetHelpersAndControllers When switching to a repo that was open before, the context tree is reused, so before adding keybinding functions to those contexts again, we need to clear the old ones. --- pkg/gui/context/base_context.go | 5 +++++ pkg/gui/controllers.go | 4 ++++ pkg/gui/types/context.go | 1 + .../tests/ui/keybinding_suggestions_when_switching_repos.go | 3 --- 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/pkg/gui/context/base_context.go b/pkg/gui/context/base_context.go index beaa61446b3..dfcced021b3 100644 --- a/pkg/gui/context/base_context.go +++ b/pkg/gui/context/base_context.go @@ -133,6 +133,11 @@ func (self *BaseContext) AddMouseKeybindingsFn(fn types.MouseKeybindingsFn) { self.mouseKeybindingsFns = append(self.mouseKeybindingsFns, fn) } +func (self *BaseContext) ClearAllBindingsFn() { + self.keybindingsFns = []types.KeybindingsFn{} + self.mouseKeybindingsFns = []types.MouseKeybindingsFn{} +} + func (self *BaseContext) AddOnClickFn(fn func() error) { if fn != nil { self.onClickFn = fn diff --git a/pkg/gui/controllers.go b/pkg/gui/controllers.go index 1dbf9b7d7d8..d6ac5a26870 100644 --- a/pkg/gui/controllers.go +++ b/pkg/gui/controllers.go @@ -20,6 +20,10 @@ func (gui *Gui) Helpers() *helpers.Helpers { // in the keybinding menu: the earlier that the controller is attached to a context, // the lower in the list the keybindings will appear. func (gui *Gui) resetHelpersAndControllers() { + for _, context := range gui.Contexts().Flatten() { + context.ClearAllBindingsFn() + } + helperCommon := gui.c recordDirectoryHelper := helpers.NewRecordDirectoryHelper(helperCommon) reposHelper := helpers.NewRecentReposHelper(helperCommon, recordDirectoryHelper, gui.onNewRepo) diff --git a/pkg/gui/types/context.go b/pkg/gui/types/context.go index 691d5694d4b..003035fc205 100644 --- a/pkg/gui/types/context.go +++ b/pkg/gui/types/context.go @@ -74,6 +74,7 @@ type IBaseContext interface { AddKeybindingsFn(KeybindingsFn) AddMouseKeybindingsFn(MouseKeybindingsFn) + ClearAllBindingsFn() // This is a bit of a hack at the moment: we currently only set an onclick function so that // our list controller can come along and wrap it in a list-specific click handler. diff --git a/pkg/integration/tests/ui/keybinding_suggestions_when_switching_repos.go b/pkg/integration/tests/ui/keybinding_suggestions_when_switching_repos.go index 2bf4e53c9c8..62cb16b60d9 100644 --- a/pkg/integration/tests/ui/keybinding_suggestions_when_switching_repos.go +++ b/pkg/integration/tests/ui/keybinding_suggestions_when_switching_repos.go @@ -37,9 +37,6 @@ var KeybindingSuggestionsWhenSwitchingRepos = NewIntegrationTest(NewIntegrationT switchToRepo("repo") t.Views().Options().Content( - /* EXPECTED: Equals("Commit: c | Stash: s | Reset: D | Keybindings: ? | Cancel: ")) - ACTUAL (all keybindings appear twice): */ - Equals("Commit: c | Stash: s | Reset: D | Commit: c | Stash: s | Reset: D | Keybindings: ? | Cancel: | Keybindings: ? | Cancel: ")) }, }) From dbc21af3b11940018c25a44dc3ccd33e4ebc0a06 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Tue, 11 Jun 2024 17:23:42 +0200 Subject: [PATCH 080/157] Extract function wrapMessageToWidth This steals even more code from `gocui.lineWrap`. We'll make use of this in the next commit. --- .../helpers/confirmation_helper.go | 27 ++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/pkg/gui/controllers/helpers/confirmation_helper.go b/pkg/gui/controllers/helpers/confirmation_helper.go index 1e60b5f0804..7801081fb60 100644 --- a/pkg/gui/controllers/helpers/confirmation_helper.go +++ b/pkg/gui/controllers/helpers/confirmation_helper.go @@ -63,15 +63,20 @@ func (self *ConfirmationHelper) DeactivateConfirmationPrompt() { // Temporary hack: we're just duplicating the logic in `gocui.lineWrap` func getMessageHeight(wrap bool, message string, width int) int { + return len(wrapMessageToWidth(wrap, message, width)) +} + +func wrapMessageToWidth(wrap bool, message string, width int) []string { + lines := strings.Split(message, "\n") if !wrap { - return len(strings.Split(message, "\n")) + return lines } - lineCount := 0 - lines := strings.Split(message, "\n") + wrappedLines := make([]string, 0, len(lines)) for _, line := range lines { n := 0 + offset := 0 lastWhitespaceIndex := -1 for i, currChr := range line { rw := runewidth.RuneWidth(currChr) @@ -79,28 +84,38 @@ func getMessageHeight(wrap bool, message string, width int) int { if n > width { if currChr == ' ' { + wrappedLines = append(wrappedLines, line[offset:i]) + offset = i + 1 n = 0 } else if currChr == '-' { + wrappedLines = append(wrappedLines, line[offset:i]) + offset = i n = rw } else if lastWhitespaceIndex != -1 && lastWhitespaceIndex+1 != i { if line[lastWhitespaceIndex] == '-' { + wrappedLines = append(wrappedLines, line[offset:lastWhitespaceIndex+1]) + offset = lastWhitespaceIndex + 1 n = i - lastWhitespaceIndex } else { + wrappedLines = append(wrappedLines, line[offset:lastWhitespaceIndex]) + offset = lastWhitespaceIndex + 1 n = i - lastWhitespaceIndex + 1 } } else { + wrappedLines = append(wrappedLines, line[offset:i]) + offset = i n = rw } - lineCount++ lastWhitespaceIndex = -1 } else if currChr == ' ' || currChr == '-' { lastWhitespaceIndex = i } } - lineCount++ + + wrappedLines = append(wrappedLines, line[offset:]) } - return lineCount + return wrappedLines } func (self *ConfirmationHelper) getPopupPanelDimensions(wrap bool, prompt string) (int, int, int, int) { From 7e92dbfd3d49c6bb859c5bd1bf5a43f09ef324b3 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Tue, 11 Jun 2024 15:49:19 +0200 Subject: [PATCH 081/157] Add menu prompt This makes it possible to add a prompt to a menu. It will be shown above the menu items, separated from them by a blank line. --- pkg/gui/context/menu_context.go | 31 +++++++++++++++-- .../helpers/confirmation_helper.go | 34 +++++++++++++++++-- pkg/gui/menu_panel.go | 1 + pkg/gui/types/common.go | 1 + 4 files changed, 63 insertions(+), 4 deletions(-) diff --git a/pkg/gui/context/menu_context.go b/pkg/gui/context/menu_context.go index a6b0e77cbc8..e4b26f8847d 100644 --- a/pkg/gui/context/menu_context.go +++ b/pkg/gui/context/menu_context.go @@ -50,6 +50,8 @@ func NewMenuContext( type MenuViewModel struct { c *ContextCommon menuItems []*types.MenuItem + prompt string + promptLines []string columnAlignment []utils.Alignment *FilteredListViewModel[*types.MenuItem] } @@ -73,6 +75,23 @@ func (self *MenuViewModel) SetMenuItems(items []*types.MenuItem, columnAlignment self.columnAlignment = columnAlignment } +func (self *MenuViewModel) GetPrompt() string { + return self.prompt +} + +func (self *MenuViewModel) SetPrompt(prompt string) { + self.prompt = prompt + self.promptLines = nil +} + +func (self *MenuViewModel) GetPromptLines() []string { + return self.promptLines +} + +func (self *MenuViewModel) SetPromptLines(promptLines []string) { + self.promptLines = promptLines +} + // TODO: move into presentation package func (self *MenuViewModel) GetDisplayStrings(_ int, _ int) [][]string { menuItems := self.FilteredListViewModel.GetItems() @@ -94,14 +113,22 @@ func (self *MenuViewModel) GetDisplayStrings(_ int, _ int) [][]string { } func (self *MenuViewModel) GetNonModelItems() []*NonModelItem { + result := []*NonModelItem{} + result = append(result, lo.Map(self.promptLines, func(line string, _ int) *NonModelItem { + return &NonModelItem{ + Index: 0, + Column: 0, + Content: line, + } + })...) + // Don't display section headers when we are filtering, and the filter mode // is fuzzy. The reason is that filtering changes the order of the items // (they are sorted by best match), so all the sections would be messed up. if self.FilteredListViewModel.IsFiltering() && self.c.UserConfig.Gui.UseFuzzySearch() { - return []*NonModelItem{} + return result } - result := []*NonModelItem{} menuItems := self.FilteredListViewModel.GetItems() var prevSection *types.MenuSection = nil for i, menuItem := range menuItems { diff --git a/pkg/gui/controllers/helpers/confirmation_helper.go b/pkg/gui/controllers/helpers/confirmation_helper.go index 7801081fb60..8f7c60b5a8b 100644 --- a/pkg/gui/controllers/helpers/confirmation_helper.go +++ b/pkg/gui/controllers/helpers/confirmation_helper.go @@ -373,7 +373,9 @@ func (self *ConfirmationHelper) resizeMenu() { itemCount := self.c.Contexts().Menu.UnfilteredLen() offset := 3 panelWidth := self.getPopupPanelWidth() - x0, y0, x1, y1 := self.getPopupPanelDimensionsForContentHeight(panelWidth, itemCount+offset) + contentWidth := panelWidth - 2 // minus 2 for the frame + promptLinesCount := self.layoutMenuPrompt(contentWidth) + x0, y0, x1, y1 := self.getPopupPanelDimensionsForContentHeight(panelWidth, itemCount+offset+promptLinesCount) menuBottom := y1 - offset _, _ = self.c.GocuiGui().SetView(self.c.Views().Menu.Name(), x0, y0, x1, menuBottom, 0) @@ -383,11 +385,39 @@ func (self *ConfirmationHelper) resizeMenu() { if selectedItem != nil { tooltip = self.TooltipForMenuItem(selectedItem) } - contentWidth := panelWidth - 2 // minus 2 for the frame tooltipHeight := getMessageHeight(true, tooltip, contentWidth) + 2 // plus 2 for the frame _, _ = self.c.GocuiGui().SetView(self.c.Views().Tooltip.Name(), x0, tooltipTop, x1, tooltipTop+tooltipHeight-1, 0) } +// Wraps the lines of the menu prompt to the available width and rerenders the +// menu if neeeded. Returns the number of lines the prompt takes up. +func (self *ConfirmationHelper) layoutMenuPrompt(contentWidth int) int { + oldPromptLines := self.c.Contexts().Menu.GetPromptLines() + var promptLines []string + prompt := self.c.Contexts().Menu.GetPrompt() + if len(prompt) > 0 { + promptLines = wrapMessageToWidth(true, prompt, contentWidth) + promptLines = append(promptLines, "") + } + self.c.Contexts().Menu.SetPromptLines(promptLines) + if len(oldPromptLines) != len(promptLines) { + // The number of lines in the prompt has changed; this happens either + // because we're now showing a menu that has a prompt, and the previous + // menu didn't (or vice versa), or because the user is resizing the + // terminal window while a menu with a prompt is open. + + // We need to rerender to give the menu context a chance to update its + // non-model items, and reinitialize the data it uses for converting + // between view index and model index. + _ = self.c.Contexts().Menu.HandleRender() + + // Then we need to refocus to ensure the cursor is in the right place in + // the view. + _ = self.c.Contexts().Menu.HandleFocus(types.OnFocusOpts{}) + } + return len(promptLines) +} + func (self *ConfirmationHelper) resizeConfirmationPanel() { suggestionsViewHeight := 0 if self.c.Views().Suggestions.Visible { diff --git a/pkg/gui/menu_panel.go b/pkg/gui/menu_panel.go index b777536eee8..ca03ea69e6e 100644 --- a/pkg/gui/menu_panel.go +++ b/pkg/gui/menu_panel.go @@ -42,6 +42,7 @@ func (gui *Gui) createMenu(opts types.CreateMenuOptions) error { } gui.State.Contexts.Menu.SetMenuItems(opts.Items, opts.ColumnAlignment) + gui.State.Contexts.Menu.SetPrompt(opts.Prompt) gui.State.Contexts.Menu.SetSelection(0) gui.Views.Menu.Title = opts.Title diff --git a/pkg/gui/types/common.go b/pkg/gui/types/common.go index 77f2f56eb62..fc9168406dd 100644 --- a/pkg/gui/types/common.go +++ b/pkg/gui/types/common.go @@ -159,6 +159,7 @@ const ( type CreateMenuOptions struct { Title string + Prompt string // a message that will be displayed above the menu options Items []*MenuItem HideCancel bool ColumnAlignment []utils.Alignment From ddd6323aa5429908f712f7b7fe67760b15ed398c Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Mon, 18 Mar 2024 14:12:35 +0100 Subject: [PATCH 082/157] Add prompt to the remote branch checkout menu --- pkg/gui/controllers/helpers/refs_helper.go | 1 + pkg/i18n/english.go | 2 ++ 2 files changed, 3 insertions(+) diff --git a/pkg/gui/controllers/helpers/refs_helper.go b/pkg/gui/controllers/helpers/refs_helper.go index d837d826647..ccfe71799d8 100644 --- a/pkg/gui/controllers/helpers/refs_helper.go +++ b/pkg/gui/controllers/helpers/refs_helper.go @@ -130,6 +130,7 @@ func (self *RefsHelper) CheckoutRemoteBranch(fullBranchName string, localBranchN Title: utils.ResolvePlaceholderString(self.c.Tr.RemoteBranchCheckoutTitle, map[string]string{ "branchName": fullBranchName, }), + Prompt: self.c.Tr.RemoteBranchCheckoutPrompt, Items: []*types.MenuItem{ { Label: self.c.Tr.CheckoutTypeNewBranch, diff --git a/pkg/i18n/english.go b/pkg/i18n/english.go index 7aabbbc2b5f..78b8b84cff3 100644 --- a/pkg/i18n/english.go +++ b/pkg/i18n/english.go @@ -113,6 +113,7 @@ type TranslationSet struct { CheckoutByName string CheckoutByNameTooltip string RemoteBranchCheckoutTitle string + RemoteBranchCheckoutPrompt string CheckoutTypeNewBranch string CheckoutTypeNewBranchTooltip string CheckoutTypeDetachedHead string @@ -1079,6 +1080,7 @@ func EnglishTranslationSet() TranslationSet { CheckoutByName: "Checkout by name", CheckoutByNameTooltip: "Checkout by name. In the input box you can enter '-' to switch to the last branch.", RemoteBranchCheckoutTitle: "Checkout {{.branchName}}", + RemoteBranchCheckoutPrompt: "How would you like to check out this branch?", CheckoutTypeNewBranch: "New local branch", CheckoutTypeNewBranchTooltip: "Checkout the remote branch as a local branch, tracking the remote branch.", CheckoutTypeDetachedHead: "Detached head", From f98da780de98b464085e8608a03539ed239690be Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Wed, 12 Jun 2024 16:52:27 +0200 Subject: [PATCH 083/157] Fix possible off-by-one error wrt PTY size All PTYs were created with the size of the main view, on the assumption that main and secondary always have the same size. That's not true though; in horizontal split mode, the width of the two views can differ by one because of rounding, and when using a pager that draws a horizontal line across the width of the view, this is visible and looks very ugly. --- pkg/gui/pty.go | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/pkg/gui/pty.go b/pkg/gui/pty.go index cf3176f7505..969e1aadabb 100644 --- a/pkg/gui/pty.go +++ b/pkg/gui/pty.go @@ -15,8 +15,8 @@ import ( "github.com/samber/lo" ) -func (gui *Gui) desiredPtySize() *pty.Winsize { - width, height := gui.Views.Main.Size() +func (gui *Gui) desiredPtySize(view *gocui.View) *pty.Winsize { + width, height := view.Size() return &pty.Winsize{Cols: uint16(width), Rows: uint16(height)} } @@ -25,11 +25,12 @@ func (gui *Gui) onResize() error { gui.Mutexes.PtyMutex.Lock() defer gui.Mutexes.PtyMutex.Unlock() - for _, ptmx := range gui.viewPtmxMap { + for viewName, ptmx := range gui.viewPtmxMap { // TODO: handle resizing properly: we need to actually clear the main view // and re-read the output from our pty. Or we could just re-run the original // command from scratch - if err := pty.Setsize(ptmx, gui.desiredPtySize()); err != nil { + view, _ := gui.g.View(viewName) + if err := pty.Setsize(ptmx, gui.desiredPtySize(view)); err != nil { return utils.WrapError(err) } } @@ -44,7 +45,7 @@ func (gui *Gui) onResize() error { // pseudo-terminal meaning we'll get the behaviour we want from the underlying // command. func (gui *Gui) newPtyTask(view *gocui.View, cmd *exec.Cmd, prefix string) error { - width, _ := gui.Views.Main.Size() + width, _ := view.Size() pager := gui.git.Config.GetPager(width) externalDiffCommand := gui.Config.GetUserConfig().Git.Paging.ExternalDiffCommand @@ -69,7 +70,7 @@ func (gui *Gui) newPtyTask(view *gocui.View, cmd *exec.Cmd, prefix string) error var ptmx *os.File start := func() (*exec.Cmd, io.Reader) { var err error - ptmx, err = pty.StartWithSize(cmd, gui.desiredPtySize()) + ptmx, err = pty.StartWithSize(cmd, gui.desiredPtySize(view)) if err != nil { gui.c.Log.Error(err) } From 8b8343b8a9f81c3000117ce869c734611cf87b7b Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Wed, 12 Jun 2024 17:23:42 +0200 Subject: [PATCH 084/157] Run PTY tasks after layout so that they get the correct view size This is important when using a pager that draws a horizontal line across the entire width of the view; when changing from a file or directory that has only unstaged (or only staged) changes to one that has both, the main view is split in half, but the PTY task would be run on the view in its old state, so the horizonal line would be too long and wrap around. --- pkg/gui/gui.go | 9 +++++++++ pkg/gui/gui_common.go | 7 +------ pkg/gui/main_panels.go | 5 ++++- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/pkg/gui/gui.go b/pkg/gui/gui.go index 5f2fd55bfd9..06228e759cb 100644 --- a/pkg/gui/gui.go +++ b/pkg/gui/gui.go @@ -959,3 +959,12 @@ func (gui *Gui) onWorker(f func(gocui.Task) error) { func (gui *Gui) getWindowDimensions(informationStr string, appStatus string) map[string]boxlayout.Dimensions { return gui.helpers.WindowArrangement.GetWindowDimensions(informationStr, appStatus) } + +func (gui *Gui) afterLayout(f func() error) { + select { + case gui.afterLayoutFuncs <- f: + default: + // hopefully this never happens + gui.c.Log.Error("afterLayoutFuncs channel is full, skipping function") + } +} diff --git a/pkg/gui/gui_common.go b/pkg/gui/gui_common.go index a75aa3658fc..434f4b38bfd 100644 --- a/pkg/gui/gui_common.go +++ b/pkg/gui/gui_common.go @@ -189,12 +189,7 @@ func (self *guiCommon) GetInitialKeybindingsWithCustomCommands() ([]*types.Bindi } func (self *guiCommon) AfterLayout(f func() error) { - select { - case self.gui.afterLayoutFuncs <- f: - default: - // hopefully this never happens - self.gui.c.Log.Error("afterLayoutFuncs channel is full, skipping function") - } + self.gui.afterLayout(f) } func (self *guiCommon) RunningIntegrationTest() bool { diff --git a/pkg/gui/main_panels.go b/pkg/gui/main_panels.go index bf30331cd92..49d278399f1 100644 --- a/pkg/gui/main_panels.go +++ b/pkg/gui/main_panels.go @@ -20,7 +20,10 @@ func (gui *Gui) runTaskForView(view *gocui.View, task types.UpdateTask) error { return gui.newCmdTask(view, v.Cmd, v.Prefix) case *types.RunPtyTask: - return gui.newPtyTask(view, v.Cmd, v.Prefix) + gui.afterLayout(func() error { + return gui.newPtyTask(view, v.Cmd, v.Prefix) + }) + return nil } return nil From e2b4d9cff31de368ea88c131a8b7487de726c75a Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Fri, 21 Jun 2024 19:11:56 +0200 Subject: [PATCH 085/157] Remove unneccesary test actions Pressing enter in the patch building view does nothing. --- .../patch_building/move_to_index_part_of_adjacent_added_lines.go | 1 - .../tests/patch_building/move_to_later_commit_partial_hunk.go | 1 - .../tests/patch_building/move_to_new_commit_partial_hunk.go | 1 - 3 files changed, 3 deletions(-) diff --git a/pkg/integration/tests/patch_building/move_to_index_part_of_adjacent_added_lines.go b/pkg/integration/tests/patch_building/move_to_index_part_of_adjacent_added_lines.go index b67140a2e46..89d8c366a32 100644 --- a/pkg/integration/tests/patch_building/move_to_index_part_of_adjacent_added_lines.go +++ b/pkg/integration/tests/patch_building/move_to_index_part_of_adjacent_added_lines.go @@ -40,7 +40,6 @@ var MoveToIndexPartOfAdjacentAddedLines = NewIntegrationTest(NewIntegrationTestA t.Views().PatchBuilding(). IsFocused(). - PressEnter(). PressPrimaryAction() t.Views().Information().Content(Contains("Building patch")) diff --git a/pkg/integration/tests/patch_building/move_to_later_commit_partial_hunk.go b/pkg/integration/tests/patch_building/move_to_later_commit_partial_hunk.go index 66ef430fd48..9ec9efac7ec 100644 --- a/pkg/integration/tests/patch_building/move_to_later_commit_partial_hunk.go +++ b/pkg/integration/tests/patch_building/move_to_later_commit_partial_hunk.go @@ -40,7 +40,6 @@ var MoveToLaterCommitPartialHunk = NewIntegrationTest(NewIntegrationTestArgs{ t.Views().PatchBuilding(). IsFocused(). - PressEnter(). PressPrimaryAction(). PressEscape() diff --git a/pkg/integration/tests/patch_building/move_to_new_commit_partial_hunk.go b/pkg/integration/tests/patch_building/move_to_new_commit_partial_hunk.go index 62dfb1dec65..6a86546c9fa 100644 --- a/pkg/integration/tests/patch_building/move_to_new_commit_partial_hunk.go +++ b/pkg/integration/tests/patch_building/move_to_new_commit_partial_hunk.go @@ -40,7 +40,6 @@ var MoveToNewCommitPartialHunk = NewIntegrationTest(NewIntegrationTestArgs{ t.Views().PatchBuilding(). IsFocused(). - PressEnter(). PressPrimaryAction() t.Views().Information().Content(Contains("Building patch")) From 8a16f24ecbfc424f2e43a05529c2652006322a22 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Sat, 22 Jun 2024 10:01:29 +0200 Subject: [PATCH 086/157] Add test for moving a patch from a deleted file to a new commit This currently works, we add it as a regression test to make sure we don't break it. It is an interesting test because it turns the deletion of the file in the moved-from commit into a modification. --- .../move_to_new_commit_from_deleted_file.go | 88 +++++++++++++++++++ pkg/integration/tests/test_list.go | 1 + 2 files changed, 89 insertions(+) create mode 100644 pkg/integration/tests/patch_building/move_to_new_commit_from_deleted_file.go diff --git a/pkg/integration/tests/patch_building/move_to_new_commit_from_deleted_file.go b/pkg/integration/tests/patch_building/move_to_new_commit_from_deleted_file.go new file mode 100644 index 00000000000..2c51acf8596 --- /dev/null +++ b/pkg/integration/tests/patch_building/move_to_new_commit_from_deleted_file.go @@ -0,0 +1,88 @@ +package patch_building + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var MoveToNewCommitFromDeletedFile = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Move a patch from a file that was deleted in a commit to a new commit", + ExtraCmdArgs: []string{}, + Skip: false, + SetupConfig: func(config *config.AppConfig) {}, + SetupRepo: func(shell *Shell) { + shell.CreateFileAndAdd("file1", "1st line\n2nd line\n3rd line\n") + shell.Commit("first commit") + shell.DeleteFileAndAdd("file1") + shell.Commit("commit to move from") + }, + Run: func(t *TestDriver, keys config.KeybindingConfig) { + t.Views().Commits(). + Focus(). + Lines( + Contains("commit to move from").IsSelected(), + Contains("first commit"), + ). + PressEnter() + + t.Views().CommitFiles(). + IsFocused(). + Lines( + Contains("D file1").IsSelected(), + ). + PressEnter() + + t.Views().PatchBuilding(). + IsFocused(). + SelectNextItem(). + PressPrimaryAction() + + t.Views().Information().Content(Contains("Building patch")) + + t.Common().SelectPatchOption(Contains("Move patch into new commit")) + + t.ExpectPopup().CommitMessagePanel(). + InitialText(Equals("")). + Type("new commit").Confirm() + + t.Views().Commits(). + IsFocused(). + Lines( + Contains("new commit").IsSelected(), + Contains("commit to move from"), + Contains("first commit"), + ). + PressEnter() + + t.Views().CommitFiles(). + IsFocused(). + Lines( + Contains("D file1").IsSelected(), + ). + Tap(func() { + t.Views().Main().ContainsLines( + Equals("-2nd line"), + ) + }). + PressEscape() + + t.Views().Commits(). + IsFocused(). + NavigateToLine(Contains("commit to move from")). + PressEnter() + + t.Views().CommitFiles(). + IsFocused(). + Lines( + // In the original commit the file is no longer deleted, but modified + Contains("M file1").IsSelected(), + ). + Tap(func() { + t.Views().Main().ContainsLines( + Equals("-1st line"), + Equals(" 2nd line"), + Equals("-3rd line"), + ) + }) + }, +}) diff --git a/pkg/integration/tests/test_list.go b/pkg/integration/tests/test_list.go index cc7fc6ca185..4ec3c4c6aa7 100644 --- a/pkg/integration/tests/test_list.go +++ b/pkg/integration/tests/test_list.go @@ -238,6 +238,7 @@ var tests = []*components.IntegrationTest{ patch_building.MoveToLaterCommit, patch_building.MoveToLaterCommitPartialHunk, patch_building.MoveToNewCommit, + patch_building.MoveToNewCommitFromDeletedFile, patch_building.MoveToNewCommitPartialHunk, patch_building.RemoveFromCommit, patch_building.ResetWithEscape, From 1a76a7da094c346ee47cba6c3acfbd0ed6f60484 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Fri, 21 Jun 2024 19:16:54 +0200 Subject: [PATCH 087/157] Add test for moving a patch from an added file to an earlier commit This currently works (albeit with a bit of manual work, as the user needs to resolve conflicts), and we add this test just to make sure that we don't break it with the following change. --- .../move_to_earlier_commit_from_added_file.go | 115 ++++++++++++++++++ pkg/integration/tests/test_list.go | 1 + 2 files changed, 116 insertions(+) create mode 100644 pkg/integration/tests/patch_building/move_to_earlier_commit_from_added_file.go diff --git a/pkg/integration/tests/patch_building/move_to_earlier_commit_from_added_file.go b/pkg/integration/tests/patch_building/move_to_earlier_commit_from_added_file.go new file mode 100644 index 00000000000..122be38842e --- /dev/null +++ b/pkg/integration/tests/patch_building/move_to_earlier_commit_from_added_file.go @@ -0,0 +1,115 @@ +package patch_building + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var MoveToEarlierCommitFromAddedFile = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Move a patch from a file that was added in a commit to an earlier commit", + ExtraCmdArgs: []string{}, + Skip: false, + SetupConfig: func(config *config.AppConfig) {}, + SetupRepo: func(shell *Shell) { + shell.EmptyCommit("first commit") + shell.EmptyCommit("destination commit") + shell.CreateFileAndAdd("file1", "1st line\n2nd line\n3rd line\n") + shell.Commit("commit to move from") + }, + Run: func(t *TestDriver, keys config.KeybindingConfig) { + t.Views().Commits(). + Focus(). + Lines( + Contains("commit to move from").IsSelected(), + Contains("destination commit"), + Contains("first commit"), + ). + PressEnter() + + t.Views().CommitFiles(). + IsFocused(). + Lines( + Contains("A file").IsSelected(), + ). + PressEnter() + + t.Views().PatchBuilding(). + IsFocused(). + SelectNextItem(). + PressPrimaryAction() + + t.Views().Information().Content(Contains("Building patch")) + + t.Views().Commits(). + Focus(). + SelectNextItem() + + t.Common().SelectPatchOption(Contains("Move patch to selected commit")) + + // This results in a conflict at the commit we're moving from, because + // it tries to add a file that already exists + t.Common().AcknowledgeConflicts() + + t.Views().Files(). + IsFocused(). + Lines( + Contains("AA").Contains("file"), + ). + PressEnter() + + t.Views().MergeConflicts(). + IsFocused(). + TopLines( + Contains("<<<<<<< HEAD"), + Contains("2nd line"), + Contains("======="), + Contains("1st line"), + Contains("2nd line"), + Contains("3rd line"), + Contains(">>>>>>>"), + ). + SelectNextItem(). + PressPrimaryAction() // choose the version with all three lines + + t.Common().ContinueOnConflictsResolved() + + t.Views().Commits(). + Focus(). + Lines( + Contains("commit to move from"), + Contains("destination commit").IsSelected(), + Contains("first commit"), + ). + PressEnter() + + t.Views().CommitFiles(). + IsFocused(). + Lines( + Contains("A file").IsSelected(), + ). + Tap(func() { + t.Views().Main().ContainsLines( + Equals("+2nd line"), + ) + }). + PressEscape() + + t.Views().Commits(). + IsFocused(). + NavigateToLine(Contains("commit to move from")). + PressEnter() + + t.Views().CommitFiles(). + IsFocused(). + Lines( + Contains("M file").IsSelected(), + ). + Tap(func() { + t.Views().Main().ContainsLines( + Equals("+1st line"), + Equals(" 2nd line"), + Equals("+3rd line"), + ) + }) + }, +}) diff --git a/pkg/integration/tests/test_list.go b/pkg/integration/tests/test_list.go index 4ec3c4c6aa7..e2ca3721f81 100644 --- a/pkg/integration/tests/test_list.go +++ b/pkg/integration/tests/test_list.go @@ -229,6 +229,7 @@ var tests = []*components.IntegrationTest{ patch_building.ApplyInReverseWithConflict, patch_building.MoveRangeToIndex, patch_building.MoveToEarlierCommit, + patch_building.MoveToEarlierCommitFromAddedFile, patch_building.MoveToEarlierCommitNoKeepEmpty, patch_building.MoveToIndex, patch_building.MoveToIndexPartOfAdjacentAddedLines, From 13a35408e6f27e08a40813adbba83183e8ea6599 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Fri, 21 Jun 2024 19:52:49 +0200 Subject: [PATCH 088/157] Introduce options struct for RenderPatchForFile We're going to add another argument in the next commit, and that's getting a bit much, especially when most of the arguments are bool and you only see true and false at the call sites without knowing what they mean. --- pkg/commands/patch/patch_builder.go | 28 ++++++++++++++----- .../helpers/patch_building_helper.go | 7 ++++- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/pkg/commands/patch/patch_builder.go b/pkg/commands/patch/patch_builder.go index a1e2f5194ef..e18c7d1bb1a 100644 --- a/pkg/commands/patch/patch_builder.go +++ b/pkg/commands/patch/patch_builder.go @@ -73,7 +73,11 @@ func (p *PatchBuilder) PatchToApply(reverse bool) string { continue } - patch += p.RenderPatchForFile(filename, true, reverse) + patch += p.RenderPatchForFile(RenderPatchForFileOpts{ + Filename: filename, + Plain: true, + Reverse: reverse, + }) } return patch @@ -172,8 +176,14 @@ func (p *PatchBuilder) RemoveFileLineRange(filename string, firstLineIdx, lastLi return nil } -func (p *PatchBuilder) RenderPatchForFile(filename string, plain bool, reverse bool) string { - info, err := p.getFileInfo(filename) +type RenderPatchForFileOpts struct { + Filename string + Plain bool + Reverse bool +} + +func (p *PatchBuilder) RenderPatchForFile(opts RenderPatchForFileOpts) string { + info, err := p.getFileInfo(opts.Filename) if err != nil { p.Log.Error(err) return "" @@ -183,7 +193,7 @@ func (p *PatchBuilder) RenderPatchForFile(filename string, plain bool, reverse b return "" } - if info.mode == WHOLE && plain { + if info.mode == WHOLE && opts.Plain { // Use the whole diff (spares us parsing it and then formatting it). // TODO: see if this is actually noticeably faster. // The reverse flag is only for part patches so we're ignoring it here. @@ -192,11 +202,11 @@ func (p *PatchBuilder) RenderPatchForFile(filename string, plain bool, reverse b patch := Parse(info.diff). Transform(TransformOpts{ - Reverse: reverse, + Reverse: opts.Reverse, IncludedLineIndices: info.includedLineIndices, }) - if plain { + if opts.Plain { return patch.FormatPlain() } else { return patch.FormatView(FormatViewOpts{}) @@ -209,7 +219,11 @@ func (p *PatchBuilder) renderEachFilePatch(plain bool) []string { sort.Strings(filenames) patches := lo.Map(filenames, func(filename string, _ int) string { - return p.RenderPatchForFile(filename, plain, false) + return p.RenderPatchForFile(RenderPatchForFileOpts{ + Filename: filename, + Plain: plain, + Reverse: false, + }) }) output := lo.Filter(patches, func(patch string, _ int) bool { return patch != "" diff --git a/pkg/gui/controllers/helpers/patch_building_helper.go b/pkg/gui/controllers/helpers/patch_building_helper.go index d8f83255d7a..423c9f81486 100644 --- a/pkg/gui/controllers/helpers/patch_building_helper.go +++ b/pkg/gui/controllers/helpers/patch_building_helper.go @@ -3,6 +3,7 @@ package helpers import ( "errors" + "github.com/jesseduffield/lazygit/pkg/commands/patch" "github.com/jesseduffield/lazygit/pkg/commands/types/enums" "github.com/jesseduffield/lazygit/pkg/gui/patch_exploring" "github.com/jesseduffield/lazygit/pkg/gui/types" @@ -80,7 +81,11 @@ func (self *PatchBuildingHelper) RefreshPatchBuildingPanel(opts types.OnFocusOpt return err } - secondaryDiff := self.c.Git().Patch.PatchBuilder.RenderPatchForFile(path, false, false) + secondaryDiff := self.c.Git().Patch.PatchBuilder.RenderPatchForFile(patch.RenderPatchForFileOpts{ + Filename: path, + Plain: false, + Reverse: false, + }) context := self.c.Contexts().CustomPatchBuilder From 4cd15a36e37544e7a43cf333a81de32209612256 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Fri, 21 Jun 2024 19:02:50 +0200 Subject: [PATCH 089/157] Fix custom patch operations on added files Several custom patch commands on parts of an added file would fail with the confusing error message "error: new file XXX depends on old contents". These were dropping the custom patch from the original commit, moving the patch to a new commit, moving it to a later commit, or moving it to the index. We fix this by converting the patch header from an added file to a diff against an empty file. We do this not just for the purpose of applying the patch, but also for rendering it and copying it to the clip board. I'm not sure it matters much in these cases, but it does feel more correct for a filtered patch to be presented this way. --- pkg/commands/git_commands/patch.go | 14 +-- pkg/commands/patch/patch_builder.go | 28 +++--- pkg/commands/patch/transform.go | 25 ++++- .../custom_patch_options_menu_action.go | 2 +- .../helpers/patch_building_helper.go | 7 +- ..._to_index_from_added_file_with_conflict.go | 96 +++++++++++++++++++ .../move_to_new_commit_from_added_file.go | 88 +++++++++++++++++ .../remove_parts_of_added_file.go | 56 +++++++++++ .../patch_building/specific_selection.go | 6 +- pkg/integration/tests/test_list.go | 3 + 10 files changed, 297 insertions(+), 28 deletions(-) create mode 100644 pkg/integration/tests/patch_building/move_to_index_from_added_file_with_conflict.go create mode 100644 pkg/integration/tests/patch_building/move_to_new_commit_from_added_file.go create mode 100644 pkg/integration/tests/patch_building/remove_parts_of_added_file.go diff --git a/pkg/commands/git_commands/patch.go b/pkg/commands/git_commands/patch.go index 3d18bf3e2e7..bceaf994365 100644 --- a/pkg/commands/git_commands/patch.go +++ b/pkg/commands/git_commands/patch.go @@ -47,8 +47,8 @@ type ApplyPatchOpts struct { Reverse bool } -func (self *PatchCommands) ApplyCustomPatch(reverse bool) error { - patch := self.PatchBuilder.PatchToApply(reverse) +func (self *PatchCommands) ApplyCustomPatch(reverse bool, turnAddedFilesIntoDiffAgainstEmptyFile bool) error { + patch := self.PatchBuilder.PatchToApply(reverse, turnAddedFilesIntoDiffAgainstEmptyFile) return self.ApplyPatch(patch, ApplyPatchOpts{ Index: true, @@ -94,7 +94,7 @@ func (self *PatchCommands) DeletePatchesFromCommit(commits []*models.Commit, com } // apply each patch in reverse - if err := self.ApplyCustomPatch(true); err != nil { + if err := self.ApplyCustomPatch(true, true); err != nil { _ = self.rebase.AbortRebase() return err } @@ -123,7 +123,7 @@ func (self *PatchCommands) MovePatchToSelectedCommit(commits []*models.Commit, s } // apply each patch forward - if err := self.ApplyCustomPatch(false); err != nil { + if err := self.ApplyCustomPatch(false, false); err != nil { // Don't abort the rebase here; this might cause conflicts, so give // the user a chance to resolve them return err @@ -172,7 +172,7 @@ func (self *PatchCommands) MovePatchToSelectedCommit(commits []*models.Commit, s } // apply each patch in reverse - if err := self.ApplyCustomPatch(true); err != nil { + if err := self.ApplyCustomPatch(true, true); err != nil { _ = self.rebase.AbortRebase() return err } @@ -228,7 +228,7 @@ func (self *PatchCommands) MovePatchIntoIndex(commits []*models.Commit, commitId return err } - if err := self.ApplyCustomPatch(true); err != nil { + if err := self.ApplyCustomPatch(true, true); err != nil { if self.status.WorkingTreeState() == enums.REBASE_MODE_REBASING { _ = self.rebase.AbortRebase() } @@ -282,7 +282,7 @@ func (self *PatchCommands) PullPatchIntoNewCommit( return err } - if err := self.ApplyCustomPatch(true); err != nil { + if err := self.ApplyCustomPatch(true, true); err != nil { _ = self.rebase.AbortRebase() return err } diff --git a/pkg/commands/patch/patch_builder.go b/pkg/commands/patch/patch_builder.go index e18c7d1bb1a..5ef81c72e47 100644 --- a/pkg/commands/patch/patch_builder.go +++ b/pkg/commands/patch/patch_builder.go @@ -65,7 +65,7 @@ func (p *PatchBuilder) Start(from, to string, reverse bool, canRebase bool) { p.fileInfoMap = map[string]*fileInfo{} } -func (p *PatchBuilder) PatchToApply(reverse bool) string { +func (p *PatchBuilder) PatchToApply(reverse bool, turnAddedFilesIntoDiffAgainstEmptyFile bool) string { patch := "" for filename, info := range p.fileInfoMap { @@ -74,9 +74,10 @@ func (p *PatchBuilder) PatchToApply(reverse bool) string { } patch += p.RenderPatchForFile(RenderPatchForFileOpts{ - Filename: filename, - Plain: true, - Reverse: reverse, + Filename: filename, + Plain: true, + Reverse: reverse, + TurnAddedFilesIntoDiffAgainstEmptyFile: turnAddedFilesIntoDiffAgainstEmptyFile, }) } @@ -177,9 +178,10 @@ func (p *PatchBuilder) RemoveFileLineRange(filename string, firstLineIdx, lastLi } type RenderPatchForFileOpts struct { - Filename string - Plain bool - Reverse bool + Filename string + Plain bool + Reverse bool + TurnAddedFilesIntoDiffAgainstEmptyFile bool } func (p *PatchBuilder) RenderPatchForFile(opts RenderPatchForFileOpts) string { @@ -202,8 +204,9 @@ func (p *PatchBuilder) RenderPatchForFile(opts RenderPatchForFileOpts) string { patch := Parse(info.diff). Transform(TransformOpts{ - Reverse: opts.Reverse, - IncludedLineIndices: info.includedLineIndices, + Reverse: opts.Reverse, + TurnAddedFilesIntoDiffAgainstEmptyFile: opts.TurnAddedFilesIntoDiffAgainstEmptyFile, + IncludedLineIndices: info.includedLineIndices, }) if opts.Plain { @@ -220,9 +223,10 @@ func (p *PatchBuilder) renderEachFilePatch(plain bool) []string { sort.Strings(filenames) patches := lo.Map(filenames, func(filename string, _ int) string { return p.RenderPatchForFile(RenderPatchForFileOpts{ - Filename: filename, - Plain: plain, - Reverse: false, + Filename: filename, + Plain: plain, + Reverse: false, + TurnAddedFilesIntoDiffAgainstEmptyFile: true, }) }) output := lo.Filter(patches, func(patch string, _ int) bool { diff --git a/pkg/commands/patch/transform.go b/pkg/commands/patch/transform.go index f861a6540d9..db35bb4a11c 100644 --- a/pkg/commands/patch/transform.go +++ b/pkg/commands/patch/transform.go @@ -1,6 +1,10 @@ package patch -import "github.com/samber/lo" +import ( + "strings" + + "github.com/samber/lo" +) type patchTransformer struct { patch *Patch @@ -22,6 +26,13 @@ type TransformOpts struct { // information it needs to cleanly apply patches FileNameOverride string + // Custom patches tend to work better when treating new files as diffs + // against an empty file. The only case where we need this to be false is + // when moving a custom patch to an earlier commit; in that case the patch + // command would fail with the error "file does not exist in index" if we + // treat it as a diff against an empty file. + TurnAddedFilesIntoDiffAgainstEmptyFile bool + // The indices of lines that should be included in the patch. IncludedLineIndices []int } @@ -61,6 +72,18 @@ func (self *patchTransformer) transformHeader() []string { "--- a/" + self.opts.FileNameOverride, "+++ b/" + self.opts.FileNameOverride, } + } else if self.opts.TurnAddedFilesIntoDiffAgainstEmptyFile { + result := make([]string, 0, len(self.patch.header)) + for idx, line := range self.patch.header { + if strings.HasPrefix(line, "new file mode") { + continue + } + if line == "--- /dev/null" && strings.HasPrefix(self.patch.header[idx+1], "+++ b/") { + line = "--- a/" + self.patch.header[idx+1][6:] + } + result = append(result, line) + } + return result } else { return self.patch.header } diff --git a/pkg/gui/controllers/custom_patch_options_menu_action.go b/pkg/gui/controllers/custom_patch_options_menu_action.go index f5099ae2e26..f246075977a 100644 --- a/pkg/gui/controllers/custom_patch_options_menu_action.go +++ b/pkg/gui/controllers/custom_patch_options_menu_action.go @@ -237,7 +237,7 @@ func (self *CustomPatchOptionsMenuAction) handleApplyPatch(reverse bool) error { action = "Apply patch in reverse" } self.c.LogAction(action) - if err := self.c.Git().Patch.ApplyCustomPatch(reverse); err != nil { + if err := self.c.Git().Patch.ApplyCustomPatch(reverse, true); err != nil { return err } return self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC}) diff --git a/pkg/gui/controllers/helpers/patch_building_helper.go b/pkg/gui/controllers/helpers/patch_building_helper.go index 423c9f81486..dd4c3515af0 100644 --- a/pkg/gui/controllers/helpers/patch_building_helper.go +++ b/pkg/gui/controllers/helpers/patch_building_helper.go @@ -82,9 +82,10 @@ func (self *PatchBuildingHelper) RefreshPatchBuildingPanel(opts types.OnFocusOpt } secondaryDiff := self.c.Git().Patch.PatchBuilder.RenderPatchForFile(patch.RenderPatchForFileOpts{ - Filename: path, - Plain: false, - Reverse: false, + Filename: path, + Plain: false, + Reverse: false, + TurnAddedFilesIntoDiffAgainstEmptyFile: true, }) context := self.c.Contexts().CustomPatchBuilder diff --git a/pkg/integration/tests/patch_building/move_to_index_from_added_file_with_conflict.go b/pkg/integration/tests/patch_building/move_to_index_from_added_file_with_conflict.go new file mode 100644 index 00000000000..c7acfcd5021 --- /dev/null +++ b/pkg/integration/tests/patch_building/move_to_index_from_added_file_with_conflict.go @@ -0,0 +1,96 @@ +package patch_building + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var MoveToIndexFromAddedFileWithConflict = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Move a patch from a file that was added in a commit to the index, causing a conflict", + ExtraCmdArgs: []string{}, + Skip: false, + SetupConfig: func(config *config.AppConfig) {}, + SetupRepo: func(shell *Shell) { + shell.EmptyCommit("first commit") + + shell.CreateFileAndAdd("file1", "1st line\n2nd line\n3rd line\n") + shell.Commit("commit to move from") + shell.UpdateFileAndAdd("file1", "1st line\n2nd line changed\n3rd line\n") + shell.Commit("conflicting change") + }, + Run: func(t *TestDriver, keys config.KeybindingConfig) { + t.Views().Commits(). + Focus(). + Lines( + Contains("conflicting change").IsSelected(), + Contains("commit to move from"), + Contains("first commit"), + ). + SelectNextItem(). + PressEnter() + + t.Views().CommitFiles(). + IsFocused(). + Lines( + Contains("file1").IsSelected(), + ). + PressEnter() + + t.Views().PatchBuilding(). + IsFocused(). + SelectNextItem(). + PressPrimaryAction() + + t.Views().Information().Content(Contains("Building patch")) + + t.Common().SelectPatchOption(Contains("Move patch out into index")) + + t.Common().AcknowledgeConflicts() + + t.Views().Files(). + IsFocused(). + Lines( + Contains("UU").Contains("file1"), + ). + PressEnter() + + t.Views().MergeConflicts(). + IsFocused(). + ContainsLines( + Contains("1st line"), + Contains("<<<<<<< HEAD"), + Contains("======="), + Contains("2nd line changed"), + Contains(">>>>>>>"), + Contains("3rd line"), + ). + SelectNextItem(). + PressPrimaryAction() + + t.Common().ContinueOnConflictsResolved() + + t.ExpectPopup().Alert(). + Title(Equals("Error")). + Content(Contains("Applied patch to 'file1' with conflicts")). + Confirm() + + t.Views().Files(). + IsFocused(). + Lines( + Contains("UU").Contains("file1"), + ). + PressEnter() + + t.Views().MergeConflicts(). + TopLines( + Contains("1st line"), + Contains("<<<<<<< ours"), + Contains("2nd line changed"), + Contains("======="), + Contains("2nd line"), + Contains(">>>>>>> theirs"), + Contains("3rd line"), + ). + IsFocused() + }, +}) diff --git a/pkg/integration/tests/patch_building/move_to_new_commit_from_added_file.go b/pkg/integration/tests/patch_building/move_to_new_commit_from_added_file.go new file mode 100644 index 00000000000..97aaea2db99 --- /dev/null +++ b/pkg/integration/tests/patch_building/move_to_new_commit_from_added_file.go @@ -0,0 +1,88 @@ +package patch_building + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var MoveToNewCommitFromAddedFile = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Move a patch from a file that was added in a commit to a new commit", + ExtraCmdArgs: []string{}, + Skip: false, + SetupConfig: func(config *config.AppConfig) {}, + SetupRepo: func(shell *Shell) { + shell.EmptyCommit("first commit") + + shell.CreateFileAndAdd("file1", "1st line\n2nd line\n3rd line\n") + shell.Commit("commit to move from") + }, + Run: func(t *TestDriver, keys config.KeybindingConfig) { + t.Views().Commits(). + Focus(). + Lines( + Contains("commit to move from").IsSelected(), + Contains("first commit"), + ). + PressEnter() + + t.Views().CommitFiles(). + IsFocused(). + Lines( + Contains("file1").IsSelected(), + ). + PressEnter() + + t.Views().PatchBuilding(). + IsFocused(). + SelectNextItem(). + PressPrimaryAction() + + t.Views().Information().Content(Contains("Building patch")) + + t.Common().SelectPatchOption(Contains("Move patch into new commit")) + + t.ExpectPopup().CommitMessagePanel(). + InitialText(Equals("")). + Type("new commit").Confirm() + + t.Views().Commits(). + IsFocused(). + Lines( + Contains("new commit").IsSelected(), + Contains("commit to move from"), + Contains("first commit"), + ). + PressEnter() + + t.Views().CommitFiles(). + IsFocused(). + Lines( + Contains("M file1").IsSelected(), + ). + Tap(func() { + t.Views().Main().ContainsLines( + Equals(" 1st line"), + Equals("+2nd line"), + Equals(" 3rd line"), + ) + }). + PressEscape() + + t.Views().Commits(). + IsFocused(). + NavigateToLine(Contains("commit to move from")). + PressEnter() + + t.Views().CommitFiles(). + IsFocused(). + Lines( + Contains("A file1").IsSelected(), + ). + Tap(func() { + t.Views().Main().ContainsLines( + Equals("+1st line"), + Equals("+3rd line"), + ) + }) + }, +}) diff --git a/pkg/integration/tests/patch_building/remove_parts_of_added_file.go b/pkg/integration/tests/patch_building/remove_parts_of_added_file.go new file mode 100644 index 00000000000..9a0b9a95174 --- /dev/null +++ b/pkg/integration/tests/patch_building/remove_parts_of_added_file.go @@ -0,0 +1,56 @@ +package patch_building + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var RemovePartsOfAddedFile = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Remove a custom patch from a file that was added in a commit", + ExtraCmdArgs: []string{}, + Skip: false, + SetupConfig: func(config *config.AppConfig) {}, + SetupRepo: func(shell *Shell) { + shell.EmptyCommit("first commit") + + shell.CreateFileAndAdd("file1", "1st line\n2nd line\n3rd line\n") + shell.Commit("commit to remove from") + }, + Run: func(t *TestDriver, keys config.KeybindingConfig) { + t.Views().Commits(). + Focus(). + Lines( + Contains("commit to remove from").IsSelected(), + Contains("first commit"), + ). + PressEnter() + + t.Views().CommitFiles(). + IsFocused(). + Lines( + Contains("A file1").IsSelected(), + ). + PressEnter() + + t.Views().PatchBuilding(). + IsFocused(). + SelectNextItem(). + PressPrimaryAction() + + t.Views().Information().Content(Contains("Building patch")) + + t.Common().SelectPatchOption(Contains("Remove patch from original commit")) + + t.Views().CommitFiles(). + IsFocused(). + Lines( + Contains("A file1").IsSelected(), + ). + PressEscape() + + t.Views().Main().ContainsLines( + Equals("+1st line"), + Equals("+3rd line"), + ) + }, +}) diff --git a/pkg/integration/tests/patch_building/specific_selection.go b/pkg/integration/tests/patch_building/specific_selection.go index a9dbf9f1159..b59b62ccbca 100644 --- a/pkg/integration/tests/patch_building/specific_selection.go +++ b/pkg/integration/tests/patch_building/specific_selection.go @@ -126,9 +126,8 @@ var SpecificSelection = NewIntegrationTest(NewIntegrationTestArgs{ t.Views().Secondary().ContainsLines( // direct-file patch Contains(`diff --git a/direct-file b/direct-file`), - Contains(`new file mode 100644`), Contains(`index`), - Contains(`--- /dev/null`), + Contains(`--- a/direct-file`), Contains(`+++ b/direct-file`), Contains(`@@ -0,0 +1 @@`), Contains(`+direct file content`), @@ -149,9 +148,8 @@ var SpecificSelection = NewIntegrationTest(NewIntegrationTestArgs{ Contains(` 1f`), // line-file patch Contains(`diff --git a/line-file b/line-file`), - Contains(`new file mode 100644`), Contains(`index`), - Contains(`--- /dev/null`), + Contains(`--- a/line-file`), Contains(`+++ b/line-file`), Contains(`@@ -0,0 +1,5 @@`), Contains(`+2a`), diff --git a/pkg/integration/tests/test_list.go b/pkg/integration/tests/test_list.go index e2ca3721f81..c879b8638ec 100644 --- a/pkg/integration/tests/test_list.go +++ b/pkg/integration/tests/test_list.go @@ -232,6 +232,7 @@ var tests = []*components.IntegrationTest{ patch_building.MoveToEarlierCommitFromAddedFile, patch_building.MoveToEarlierCommitNoKeepEmpty, patch_building.MoveToIndex, + patch_building.MoveToIndexFromAddedFileWithConflict, patch_building.MoveToIndexPartOfAdjacentAddedLines, patch_building.MoveToIndexPartial, patch_building.MoveToIndexWithConflict, @@ -239,9 +240,11 @@ var tests = []*components.IntegrationTest{ patch_building.MoveToLaterCommit, patch_building.MoveToLaterCommitPartialHunk, patch_building.MoveToNewCommit, + patch_building.MoveToNewCommitFromAddedFile, patch_building.MoveToNewCommitFromDeletedFile, patch_building.MoveToNewCommitPartialHunk, patch_building.RemoveFromCommit, + patch_building.RemovePartsOfAddedFile, patch_building.ResetWithEscape, patch_building.SelectAllFiles, patch_building.SpecificSelection, From 1b245ef5f6b7d78ff5077be4899a0a370f5f3781 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Fri, 21 Jun 2024 21:15:28 +0200 Subject: [PATCH 090/157] Always show the "Discard unchanged changes" menu item Strike it through if not applicable. This will hopefully help with confusion about the meaning of "all" in the "Discard all changes" entry; some people misunderstand this to mean all changes in the working copy. Seeing the "Discard unstaged changes" item next to it hopefully makes it clearer that "all" is meant in contrast to that. --- pkg/gui/controllers/files_controller.go | 89 +++++++++++++------------ pkg/i18n/english.go | 2 + 2 files changed, 49 insertions(+), 42 deletions(-) diff --git a/pkg/gui/controllers/files_controller.go b/pkg/gui/controllers/files_controller.go index b71991fc271..81d3f4cf0a4 100644 --- a/pkg/gui/controllers/files_controller.go +++ b/pkg/gui/controllers/files_controller.go @@ -1062,60 +1062,65 @@ func (self *FilesController) remove(selectedNodes []*filetree.FileNode) error { selectedNodes = normalisedSelectedNodes(selectedNodes) - menuItems := []*types.MenuItem{ - { - Label: self.c.Tr.DiscardAllChanges, - OnPress: func() error { - self.c.LogAction(self.c.Tr.Actions.DiscardAllChangesInFile) + discardAllChangesItem := types.MenuItem{ + Label: self.c.Tr.DiscardAllChanges, + OnPress: func() error { + self.c.LogAction(self.c.Tr.Actions.DiscardAllChangesInFile) - if self.context().IsSelectingRange() { - defer self.context().CancelRangeSelect() - } + if self.context().IsSelectingRange() { + defer self.context().CancelRangeSelect() + } - for _, node := range selectedNodes { - if err := self.c.Git().WorkingTree.DiscardAllDirChanges(node); err != nil { - return err - } + for _, node := range selectedNodes { + if err := self.c.Git().WorkingTree.DiscardAllDirChanges(node); err != nil { + return err } + } - return self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC, Scope: []types.RefreshableView{types.FILES, types.WORKTREES}}) - }, - Key: self.c.KeybindingsOpts().GetKey(self.c.UserConfig.Keybinding.Files.ConfirmDiscard), - Tooltip: utils.ResolvePlaceholderString( - self.c.Tr.DiscardAllTooltip, - map[string]string{ - "path": self.formattedPaths(selectedNodes), - }, - ), + return self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC, Scope: []types.RefreshableView{types.FILES, types.WORKTREES}}) }, + Key: self.c.KeybindingsOpts().GetKey(self.c.UserConfig.Keybinding.Files.ConfirmDiscard), + Tooltip: utils.ResolvePlaceholderString( + self.c.Tr.DiscardAllTooltip, + map[string]string{ + "path": self.formattedPaths(selectedNodes), + }, + ), } - if someNodesHaveStagedChanges(selectedNodes) && someNodesHaveUnstagedChanges(selectedNodes) { - menuItems = append(menuItems, &types.MenuItem{ - Label: self.c.Tr.DiscardUnstagedChanges, - OnPress: func() error { - self.c.LogAction(self.c.Tr.Actions.DiscardAllUnstagedChangesInFile) + discardUnstagedChangesItem := types.MenuItem{ + Label: self.c.Tr.DiscardUnstagedChanges, + OnPress: func() error { + self.c.LogAction(self.c.Tr.Actions.DiscardAllUnstagedChangesInFile) - if self.context().IsSelectingRange() { - defer self.context().CancelRangeSelect() - } + if self.context().IsSelectingRange() { + defer self.context().CancelRangeSelect() + } - for _, node := range selectedNodes { - if err := self.c.Git().WorkingTree.DiscardUnstagedDirChanges(node); err != nil { - return err - } + for _, node := range selectedNodes { + if err := self.c.Git().WorkingTree.DiscardUnstagedDirChanges(node); err != nil { + return err } + } - return self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC, Scope: []types.RefreshableView{types.FILES, types.WORKTREES}}) + return self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC, Scope: []types.RefreshableView{types.FILES, types.WORKTREES}}) + }, + Key: 'u', + Tooltip: utils.ResolvePlaceholderString( + self.c.Tr.DiscardUnstagedTooltip, + map[string]string{ + "path": self.formattedPaths(selectedNodes), }, - Key: 'u', - Tooltip: utils.ResolvePlaceholderString( - self.c.Tr.DiscardUnstagedTooltip, - map[string]string{ - "path": self.formattedPaths(selectedNodes), - }, - ), - }) + ), + } + + if !someNodesHaveStagedChanges(selectedNodes) || !someNodesHaveUnstagedChanges(selectedNodes) { + discardUnstagedChangesItem.DisabledReason = &types.DisabledReason{Text: self.c.Tr.DiscardUnstagedDisabled} + } + + menuItems := []*types.MenuItem{ + &discardAllChangesItem, + &discardUnstagedChangesItem, } return self.c.Menu(types.CreateMenuOptions{Title: self.c.Tr.DiscardChangesTitle, Items: menuItems}) diff --git a/pkg/i18n/english.go b/pkg/i18n/english.go index 78b8b84cff3..09cab542dbf 100644 --- a/pkg/i18n/english.go +++ b/pkg/i18n/english.go @@ -175,6 +175,7 @@ type TranslationSet struct { UndoMergeResolveTooltip string DiscardAllTooltip string DiscardUnstagedTooltip string + DiscardUnstagedDisabled string Pop string StashPopTooltip string Drop string @@ -1143,6 +1144,7 @@ func EnglishTranslationSet() TranslationSet { UndoMergeResolveTooltip: "Undo last merge conflict resolution.", DiscardAllTooltip: "Discard both staged and unstaged changes in '{{.path}}'.", DiscardUnstagedTooltip: "Discard unstaged changes in '{{.path}}'.", + DiscardUnstagedDisabled: "The selected items don't have both staged and unstaged changes.", Pop: "Pop", StashPopTooltip: "Apply the stash entry to your working directory and remove the stash entry.", Drop: "Drop", From 20a4aeab6e92c8f16fa02783c750b86558d8fb51 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Sat, 1 Jun 2024 20:21:25 +0200 Subject: [PATCH 091/157] Support showing checkboxes or radio buttons in menus For checkboxes it probably doesn't really make sense to use them yet, because we'd have to find a way how you can toggle them without closing the dialog; but we already provide rendering for them to lay the ground. But radio buttons can be used already, because for those it is ok to close the dialog when choosing a different option (as long as there is only one grounp of radio buttons in the panel, that is). --- pkg/gui/context/menu_context.go | 16 +++++++++++++++- pkg/gui/types/common.go | 30 ++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/pkg/gui/context/menu_context.go b/pkg/gui/context/menu_context.go index e4b26f8847d..f1438b22165 100644 --- a/pkg/gui/context/menu_context.go +++ b/pkg/gui/context/menu_context.go @@ -107,7 +107,21 @@ func (self *MenuViewModel) GetDisplayStrings(_ int, _ int) [][]string { keyLabel = style.FgCyan.Sprint(keybindings.LabelFromKey(item.Key)) } - displayStrings = utils.Prepend(displayStrings, keyLabel) + checkMark := "" + switch item.Widget { + case types.MenuWidgetNone: + // do nothing + case types.MenuWidgetRadioButtonSelected: + checkMark = "(•)" + case types.MenuWidgetRadioButtonUnselected: + checkMark = "( )" + case types.MenuWidgetCheckboxSelected: + checkMark = "[✓]" + case types.MenuWidgetCheckboxUnselected: + checkMark = "[ ]" + } + + displayStrings = utils.Prepend(displayStrings, keyLabel, checkMark) return displayStrings }) } diff --git a/pkg/gui/types/common.go b/pkg/gui/types/common.go index fc9168406dd..61c27de496f 100644 --- a/pkg/gui/types/common.go +++ b/pkg/gui/types/common.go @@ -217,6 +217,30 @@ type DisabledReason struct { ShowErrorInPanel bool } +type MenuWidget int + +const ( + MenuWidgetNone MenuWidget = iota + MenuWidgetRadioButtonSelected + MenuWidgetRadioButtonUnselected + MenuWidgetCheckboxSelected + MenuWidgetCheckboxUnselected +) + +func MakeMenuRadioButton(value bool) MenuWidget { + if value { + return MenuWidgetRadioButtonSelected + } + return MenuWidgetRadioButtonUnselected +} + +func MakeMenuCheckBox(value bool) MenuWidget { + if value { + return MenuWidgetCheckboxSelected + } + return MenuWidgetCheckboxUnselected +} + type MenuItem struct { Label string @@ -232,6 +256,12 @@ type MenuItem struct { // item, as opposed to having to navigate to it Key Key + // A widget to show in front of the menu item. Supported widget types are + // checkboxes and radio buttons, + // This only handles the rendering of the widget; the behavior needs to be + // provided by the client. + Widget MenuWidget + // The tooltip will be displayed upon highlighting the menu item Tooltip string From 68c966567cbff30dddfa2a30c8b2518f30498b58 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Sat, 1 Jun 2024 20:21:43 +0200 Subject: [PATCH 092/157] Show radio buttons in the sort order menu for branches --- pkg/gui/controllers/branches_controller.go | 3 ++- pkg/gui/controllers/helpers/refs_helper.go | 5 +++-- pkg/gui/controllers/remote_branches_controller.go | 3 ++- pkg/integration/tests/branch/sort_local_branches.go | 12 ++++++++++++ pkg/integration/tests/branch/sort_remote_branches.go | 5 +++++ 5 files changed, 24 insertions(+), 4 deletions(-) diff --git a/pkg/gui/controllers/branches_controller.go b/pkg/gui/controllers/branches_controller.go index 62eda703ef3..8b4a5d39535 100644 --- a/pkg/gui/controllers/branches_controller.go +++ b/pkg/gui/controllers/branches_controller.go @@ -696,7 +696,8 @@ func (self *BranchesController) createSortMenu() error { return self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC, Scope: []types.RefreshableView{types.BRANCHES}}) } return nil - }) + }, + self.c.GetAppState().LocalBranchSortOrder) } func (self *BranchesController) createResetMenu(selectedBranch *models.Branch) error { diff --git a/pkg/gui/controllers/helpers/refs_helper.go b/pkg/gui/controllers/helpers/refs_helper.go index ccfe71799d8..08c6e173a5f 100644 --- a/pkg/gui/controllers/helpers/refs_helper.go +++ b/pkg/gui/controllers/helpers/refs_helper.go @@ -190,7 +190,7 @@ func (self *RefsHelper) ResetToRef(ref string, strength string, envVars []string return nil } -func (self *RefsHelper) CreateSortOrderMenu(sortOptionsOrder []string, onSelected func(sortOrder string) error) error { +func (self *RefsHelper) CreateSortOrderMenu(sortOptionsOrder []string, onSelected func(sortOrder string) error, currentValue string) error { type sortMenuOption struct { key types.Key label string @@ -221,7 +221,8 @@ func (self *RefsHelper) CreateSortOrderMenu(sortOptionsOrder []string, onSelecte OnPress: func() error { return onSelected(opt.sortOrder) }, - Key: opt.key, + Key: opt.key, + Widget: types.MakeMenuRadioButton(opt.sortOrder == currentValue), } }) return self.c.Menu(types.CreateMenuOptions{ diff --git a/pkg/gui/controllers/remote_branches_controller.go b/pkg/gui/controllers/remote_branches_controller.go index 97dbf56b00e..d793c61488b 100644 --- a/pkg/gui/controllers/remote_branches_controller.go +++ b/pkg/gui/controllers/remote_branches_controller.go @@ -145,7 +145,8 @@ func (self *RemoteBranchesController) createSortMenu() error { return self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC, Scope: []types.RefreshableView{types.REMOTES}}) } return nil - }) + }, + self.c.GetAppState().RemoteBranchSortOrder) } func (self *RemoteBranchesController) createResetMenu(selectedBranch *models.RemoteBranch) error { diff --git a/pkg/integration/tests/branch/sort_local_branches.go b/pkg/integration/tests/branch/sort_local_branches.go index 9daf28424d5..ceff654be57 100644 --- a/pkg/integration/tests/branch/sort_local_branches.go +++ b/pkg/integration/tests/branch/sort_local_branches.go @@ -37,6 +37,12 @@ var SortLocalBranches = NewIntegrationTest(NewIntegrationTestArgs{ Press(keys.Branches.SortOrder) t.ExpectPopup().Menu().Title(Equals("Sort order")). + Lines( + Contains("r (•) Recency").IsSelected(), + Contains("a ( ) Alphabetical"), + Contains("d ( ) Date"), + Contains(" Cancel"), + ). Select(Contains("-committerdate")). Confirm() @@ -53,6 +59,12 @@ var SortLocalBranches = NewIntegrationTest(NewIntegrationTestArgs{ Press(keys.Branches.SortOrder) t.ExpectPopup().Menu().Title(Equals("Sort order")). + Lines( + Contains("r ( ) Recency").IsSelected(), + Contains("a ( ) Alphabetical"), + Contains("d (•) Date"), + Contains(" Cancel"), + ). Select(Contains("refname")). Confirm() diff --git a/pkg/integration/tests/branch/sort_remote_branches.go b/pkg/integration/tests/branch/sort_remote_branches.go index 35e2f700a07..2cbbdb31d12 100644 --- a/pkg/integration/tests/branch/sort_remote_branches.go +++ b/pkg/integration/tests/branch/sort_remote_branches.go @@ -41,6 +41,11 @@ var SortRemoteBranches = NewIntegrationTest(NewIntegrationTestArgs{ Press(keys.Branches.SortOrder) t.ExpectPopup().Menu().Title(Equals("Sort order")). + Lines( + Contains("a (•) Alphabetical").IsSelected(), + Contains("d ( ) Date"), + Contains(" Cancel"), + ). Select(Contains("-committerdate")). Confirm() From 4967e5136e641bfc2bdb3eaa3ca0bd81ba68878f Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Sat, 1 Jun 2024 20:26:24 +0200 Subject: [PATCH 093/157] Show radio buttons in the show log graph and commit sort order menus --- pkg/gui/controllers/local_commits_controller.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/pkg/gui/controllers/local_commits_controller.go b/pkg/gui/controllers/local_commits_controller.go index de5116b7433..f95062fdbe3 100644 --- a/pkg/gui/controllers/local_commits_controller.go +++ b/pkg/gui/controllers/local_commits_controller.go @@ -1085,6 +1085,7 @@ func (self *LocalCommitsController) handleOpenLogMenu() error { Label: self.c.Tr.ShowGitGraph, OpensMenu: true, OnPress: func() error { + currentValue := self.c.GetAppState().GitLogShowGraph onPress := func(value string) func() error { return func() error { self.c.GetAppState().GitLogShowGraph = value @@ -1101,14 +1102,17 @@ func (self *LocalCommitsController) handleOpenLogMenu() error { { Label: "always", OnPress: onPress("always"), + Widget: types.MakeMenuRadioButton(currentValue == "always"), }, { Label: "never", OnPress: onPress("never"), + Widget: types.MakeMenuRadioButton(currentValue == "never"), }, { Label: "when maximised", OnPress: onPress("when-maximised"), + Widget: types.MakeMenuRadioButton(currentValue == "when-maximised"), }, }, }) @@ -1118,6 +1122,7 @@ func (self *LocalCommitsController) handleOpenLogMenu() error { Label: self.c.Tr.SortCommits, OpensMenu: true, OnPress: func() error { + currentValue := self.c.GetAppState().GitLogOrder onPress := func(value string) func() error { return func() error { self.c.GetAppState().GitLogOrder = value @@ -1139,14 +1144,17 @@ func (self *LocalCommitsController) handleOpenLogMenu() error { { Label: "topological (topo-order)", OnPress: onPress("topo-order"), + Widget: types.MakeMenuRadioButton(currentValue == "topo-order"), }, { Label: "date-order", OnPress: onPress("date-order"), + Widget: types.MakeMenuRadioButton(currentValue == "date-order"), }, { Label: "author-date-order", OnPress: onPress("author-date-order"), + Widget: types.MakeMenuRadioButton(currentValue == "author-date-order"), }, }, }) From 8e1464f720d839b6e2c493b8fead0e4d39bbaaa7 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Sat, 22 Jun 2024 17:55:30 +0200 Subject: [PATCH 094/157] Don't redraw remote branches view when its width changes The rendering of remote branches is in no way dependent on the width of the view (or the screen mode). Unlike in the local branches view, we don't truncate long branch names here (because there's no more information after them). This is an error introduced in d5b4f7bb3e. --- pkg/gui/context/remote_branches_context.go | 1 - 1 file changed, 1 deletion(-) diff --git a/pkg/gui/context/remote_branches_context.go b/pkg/gui/context/remote_branches_context.go index fff80e0768c..892953f8256 100644 --- a/pkg/gui/context/remote_branches_context.go +++ b/pkg/gui/context/remote_branches_context.go @@ -43,7 +43,6 @@ func NewRemoteBranchesContext( Kind: types.SIDE_CONTEXT, Focusable: true, Transient: true, - NeedsRerenderOnWidthChange: true, NeedsRerenderOnHeightChange: true, })), ListRenderer: ListRenderer{ From a67eda39a56440f54be7fbb43974fa7a966bce53 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Sat, 22 Jun 2024 18:00:31 +0200 Subject: [PATCH 095/157] Rerender fewer views when their width changes In d5b4f7bb3e and 58a83b0862 we introduced a combined mechanism for rerendering views when either their width changes (needed for the branches view which truncates long branch names), or the screen mode (needed for those views that display more information in half or full screen mode, e.g. the commits view). This was a bad idea, because it unnecessarily rerenders too many views when just their width changes, which causes a noticable lag. This is a problem, for example, when selecting a file in the files panel that has only unstaged changes, and then going to one that has both staged and unstaged changes; this splits the main view, causing the side panels to become a bit narrower, and rerendering all those views took almost 500ms on my machine. Another similar example is entering or leaving staging mode. Fix this by being more specific about which views need rerendering under what conditions; this improves the time it takes to rerender in the above scenarios from 450-500s down to about 20ms. This reintroduces the code that was removed in 58a83b0862, but in a slightly different way. --- pkg/gui/context/base_context.go | 6 ++--- pkg/gui/context/branches_context.go | 2 +- pkg/gui/context/local_commits_context.go | 2 +- pkg/gui/context/reflog_commits_context.go | 2 +- pkg/gui/context/sub_commits_context.go | 2 +- pkg/gui/controllers/screen_mode_actions.go | 27 +++++++++++++++++++++- pkg/gui/layout.go | 2 +- pkg/gui/types/context.go | 16 +++++++++++-- 8 files changed, 48 insertions(+), 11 deletions(-) diff --git a/pkg/gui/context/base_context.go b/pkg/gui/context/base_context.go index dfcced021b3..ca04a2fa955 100644 --- a/pkg/gui/context/base_context.go +++ b/pkg/gui/context/base_context.go @@ -23,7 +23,7 @@ type BaseContext struct { focusable bool transient bool hasControlledBounds bool - needsRerenderOnWidthChange bool + needsRerenderOnWidthChange types.NeedsRerenderOnWidthChangeLevel needsRerenderOnHeightChange bool highlightOnFocus bool @@ -46,7 +46,7 @@ type NewBaseContextOpts struct { Transient bool HasUncontrolledBounds bool // negating for the sake of making false the default HighlightOnFocus bool - NeedsRerenderOnWidthChange bool + NeedsRerenderOnWidthChange types.NeedsRerenderOnWidthChangeLevel NeedsRerenderOnHeightChange bool OnGetOptionsMap func() map[string]string @@ -201,7 +201,7 @@ func (self *BaseContext) HasControlledBounds() bool { return self.hasControlledBounds } -func (self *BaseContext) NeedsRerenderOnWidthChange() bool { +func (self *BaseContext) NeedsRerenderOnWidthChange() types.NeedsRerenderOnWidthChangeLevel { return self.needsRerenderOnWidthChange } diff --git a/pkg/gui/context/branches_context.go b/pkg/gui/context/branches_context.go index d2647ef843a..d289f2729b9 100644 --- a/pkg/gui/context/branches_context.go +++ b/pkg/gui/context/branches_context.go @@ -46,7 +46,7 @@ func NewBranchesContext(c *ContextCommon) *BranchesContext { Key: LOCAL_BRANCHES_CONTEXT_KEY, Kind: types.SIDE_CONTEXT, Focusable: true, - NeedsRerenderOnWidthChange: true, + NeedsRerenderOnWidthChange: types.NEEDS_RERENDER_ON_WIDTH_CHANGE_WHEN_WIDTH_CHANGES, })), ListRenderer: ListRenderer{ list: viewModel, diff --git a/pkg/gui/context/local_commits_context.go b/pkg/gui/context/local_commits_context.go index ab42cfb70fa..fcb9b00cace 100644 --- a/pkg/gui/context/local_commits_context.go +++ b/pkg/gui/context/local_commits_context.go @@ -77,7 +77,7 @@ func NewLocalCommitsContext(c *ContextCommon) *LocalCommitsContext { Key: LOCAL_COMMITS_CONTEXT_KEY, Kind: types.SIDE_CONTEXT, Focusable: true, - NeedsRerenderOnWidthChange: true, + NeedsRerenderOnWidthChange: types.NEEDS_RERENDER_ON_WIDTH_CHANGE_WHEN_SCREEN_MODE_CHANGES, NeedsRerenderOnHeightChange: true, })), ListRenderer: ListRenderer{ diff --git a/pkg/gui/context/reflog_commits_context.go b/pkg/gui/context/reflog_commits_context.go index 57ca7c4dc39..cec54988d01 100644 --- a/pkg/gui/context/reflog_commits_context.go +++ b/pkg/gui/context/reflog_commits_context.go @@ -48,7 +48,7 @@ func NewReflogCommitsContext(c *ContextCommon) *ReflogCommitsContext { Key: REFLOG_COMMITS_CONTEXT_KEY, Kind: types.SIDE_CONTEXT, Focusable: true, - NeedsRerenderOnWidthChange: true, + NeedsRerenderOnWidthChange: types.NEEDS_RERENDER_ON_WIDTH_CHANGE_WHEN_SCREEN_MODE_CHANGES, })), ListRenderer: ListRenderer{ list: viewModel, diff --git a/pkg/gui/context/sub_commits_context.go b/pkg/gui/context/sub_commits_context.go index ab0d2784a50..ddbb380c549 100644 --- a/pkg/gui/context/sub_commits_context.go +++ b/pkg/gui/context/sub_commits_context.go @@ -121,7 +121,7 @@ func NewSubCommitsContext( Kind: types.SIDE_CONTEXT, Focusable: true, Transient: true, - NeedsRerenderOnWidthChange: true, + NeedsRerenderOnWidthChange: types.NEEDS_RERENDER_ON_WIDTH_CHANGE_WHEN_SCREEN_MODE_CHANGES, NeedsRerenderOnHeightChange: true, })), ListRenderer: ListRenderer{ diff --git a/pkg/gui/controllers/screen_mode_actions.go b/pkg/gui/controllers/screen_mode_actions.go index 1db27f2e25d..2d0026793c5 100644 --- a/pkg/gui/controllers/screen_mode_actions.go +++ b/pkg/gui/controllers/screen_mode_actions.go @@ -1,6 +1,7 @@ package controllers import ( + "github.com/jesseduffield/gocui" "github.com/jesseduffield/lazygit/pkg/gui/types" ) @@ -16,7 +17,7 @@ func (self *ScreenModeActions) Next() error { ), ) - return nil + return self.rerenderViewsWithScreenModeDependentContent() } func (self *ScreenModeActions) Prev() error { @@ -27,9 +28,33 @@ func (self *ScreenModeActions) Prev() error { ), ) + return self.rerenderViewsWithScreenModeDependentContent() +} + +// these views need to be re-rendered when the screen mode changes. The commits view, +// for example, will show authorship information in half and full screen mode. +func (self *ScreenModeActions) rerenderViewsWithScreenModeDependentContent() error { + for _, context := range self.c.Context().AllList() { + if context.NeedsRerenderOnWidthChange() == types.NEEDS_RERENDER_ON_WIDTH_CHANGE_WHEN_SCREEN_MODE_CHANGES { + if err := self.rerenderView(context.GetView()); err != nil { + return err + } + } + } + return nil } +func (self *ScreenModeActions) rerenderView(view *gocui.View) error { + context, ok := self.c.Helpers().View.ContextForView(view.Name()) + if !ok { + self.c.Log.Errorf("no context found for view %s", view.Name()) + return nil + } + + return context.HandleRender() +} + func nextIntInCycle(sl []types.WindowMaximisation, current types.WindowMaximisation) types.WindowMaximisation { for i, val := range sl { if val == current { diff --git a/pkg/gui/layout.go b/pkg/gui/layout.go index 4e2b4947799..2123731e42d 100644 --- a/pkg/gui/layout.go +++ b/pkg/gui/layout.go @@ -73,7 +73,7 @@ func (gui *Gui) layout(g *gocui.Gui) error { } mustRerender := false - if context.NeedsRerenderOnWidthChange() { + if context.NeedsRerenderOnWidthChange() == types.NEEDS_RERENDER_ON_WIDTH_CHANGE_WHEN_WIDTH_CHANGES { // view.Width() returns the width -1 for some reason oldWidth := view.Width() + 1 newWidth := dimensionsObj.X1 - dimensionsObj.X0 + 2*frameOffset diff --git a/pkg/gui/types/context.go b/pkg/gui/types/context.go index 003035fc205..70458c16f14 100644 --- a/pkg/gui/types/context.go +++ b/pkg/gui/types/context.go @@ -39,6 +39,18 @@ type ParentContexter interface { GetParentContext() (Context, bool) } +type NeedsRerenderOnWidthChangeLevel int + +const ( + // view doesn't render differently when its width changes + NEEDS_RERENDER_ON_WIDTH_CHANGE_NONE NeedsRerenderOnWidthChangeLevel = iota + // view renders differently when its width changes. An example is a view + // that truncates long lines to the view width, e.g. the branches view + NEEDS_RERENDER_ON_WIDTH_CHANGE_WHEN_WIDTH_CHANGES + // view renders differently only when the screen mode changes + NEEDS_RERENDER_ON_WIDTH_CHANGE_WHEN_SCREEN_MODE_CHANGES +) + type IBaseContext interface { HasKeybindings ParentContexter @@ -60,8 +72,8 @@ type IBaseContext interface { // determined independently. HasControlledBounds() bool - // true if the view needs to be rerendered when its width changes - NeedsRerenderOnWidthChange() bool + // to what extent the view needs to be rerendered when its width changes + NeedsRerenderOnWidthChange() NeedsRerenderOnWidthChangeLevel // true if the view needs to be rerendered when its height changes NeedsRerenderOnHeightChange() bool From 26132cf5bdae7ec81e9a0708c722ad2a9cf0c2cf Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Sat, 22 Jun 2024 13:34:15 +0200 Subject: [PATCH 096/157] Use utils.StringWidth to optimize rendering performance runewidth.StringWidth is an expensive call, even if the input string is pure ASCII. Improve this by providing a wrapper that short-circuits the call to len if the input is ASCII. Benchmark results show that for non-ASCII strings it makes no noticable difference, but for ASCII strings it provides a more than 200x speedup. BenchmarkStringWidthAsciiOriginal-10 718135 1637 ns/op BenchmarkStringWidthAsciiOptimized-10 159197538 7.545 ns/op BenchmarkStringWidthNonAsciiOriginal-10 486290 2391 ns/op BenchmarkStringWidthNonAsciiOptimized-10 502286 2383 ns/op --- .../helpers/window_arrangement_helper.go | 7 +++--- pkg/gui/information_panel.go | 7 +++--- pkg/gui/presentation/branches.go | 6 ++--- pkg/utils/formatting.go | 19 +++++++++++--- pkg/utils/formatting_test.go | 25 +++++++++++++++++++ 5 files changed, 50 insertions(+), 14 deletions(-) diff --git a/pkg/gui/controllers/helpers/window_arrangement_helper.go b/pkg/gui/controllers/helpers/window_arrangement_helper.go index 0eb7cdb4aa3..322cd1bd646 100644 --- a/pkg/gui/controllers/helpers/window_arrangement_helper.go +++ b/pkg/gui/controllers/helpers/window_arrangement_helper.go @@ -8,7 +8,6 @@ import ( "github.com/jesseduffield/lazygit/pkg/config" "github.com/jesseduffield/lazygit/pkg/gui/types" "github.com/jesseduffield/lazygit/pkg/utils" - "github.com/mattn/go-runewidth" "golang.org/x/exp/slices" ) @@ -272,7 +271,7 @@ func infoSectionChildren(args WindowArrangementArgs) []*boxlayout.Box { return []*boxlayout.Box{ { Window: "searchPrefix", - Size: runewidth.StringWidth(args.SearchPrefix), + Size: utils.StringWidth(args.SearchPrefix), }, { Window: "search", @@ -325,7 +324,7 @@ func infoSectionChildren(args WindowArrangementArgs) []*boxlayout.Box { // app status appears very briefly in demos and dislodges the caption, // so better not to show it at all if args.AppStatus != "" { - result = append(result, &boxlayout.Box{Window: "appStatus", Size: runewidth.StringWidth(args.AppStatus)}) + result = append(result, &boxlayout.Box{Window: "appStatus", Size: utils.StringWidth(args.AppStatus)}) } } @@ -338,7 +337,7 @@ func infoSectionChildren(args WindowArrangementArgs) []*boxlayout.Box { &boxlayout.Box{ Window: "information", // unlike appStatus, informationStr has various colors so we need to decolorise before taking the length - Size: runewidth.StringWidth(utils.Decolorise(args.InformationStr)), + Size: utils.StringWidth(utils.Decolorise(args.InformationStr)), }) } diff --git a/pkg/gui/information_panel.go b/pkg/gui/information_panel.go index 00867fb9254..3eac1e77cf4 100644 --- a/pkg/gui/information_panel.go +++ b/pkg/gui/information_panel.go @@ -6,7 +6,6 @@ import ( "github.com/jesseduffield/lazygit/pkg/constants" "github.com/jesseduffield/lazygit/pkg/gui/style" "github.com/jesseduffield/lazygit/pkg/utils" - "github.com/mattn/go-runewidth" ) func (gui *Gui) informationStr() string { @@ -34,7 +33,7 @@ func (gui *Gui) handleInfoClick() error { width, _ := view.Size() if activeMode, ok := gui.helpers.Mode.GetActiveMode(); ok { - if width-cx > runewidth.StringWidth(gui.c.Tr.ResetInParentheses) { + if width-cx > utils.StringWidth(gui.c.Tr.ResetInParentheses) { return nil } return activeMode.Reset() @@ -43,10 +42,10 @@ func (gui *Gui) handleInfoClick() error { var title, url string // if we're not in an active mode we show the donate button - if cx <= runewidth.StringWidth(gui.c.Tr.Donate) { + if cx <= utils.StringWidth(gui.c.Tr.Donate) { url = constants.Links.Donate title = gui.c.Tr.Donate - } else if cx <= runewidth.StringWidth(gui.c.Tr.Donate)+1+runewidth.StringWidth(gui.c.Tr.AskQuestion) { + } else if cx <= utils.StringWidth(gui.c.Tr.Donate)+1+utils.StringWidth(gui.c.Tr.AskQuestion) { url = constants.Links.Discussions title = gui.c.Tr.AskQuestion } diff --git a/pkg/gui/presentation/branches.go b/pkg/gui/presentation/branches.go index b4c4a75c75e..b75dfc95b72 100644 --- a/pkg/gui/presentation/branches.go +++ b/pkg/gui/presentation/branches.go @@ -56,7 +56,7 @@ func getBranchDisplayStrings( // Recency is always three characters, plus one for the space availableWidth := viewWidth - 4 if len(branchStatus) > 0 { - availableWidth -= runewidth.StringWidth(utils.Decolorise(branchStatus)) + 1 + availableWidth -= utils.StringWidth(utils.Decolorise(branchStatus)) + 1 } if icons.IsIconEnabled() { availableWidth -= 2 // one for the icon, one for the space @@ -65,7 +65,7 @@ func getBranchDisplayStrings( availableWidth -= utils.COMMIT_HASH_SHORT_SIZE + 1 } if checkedOutByWorkTree { - availableWidth -= runewidth.StringWidth(worktreeIcon) + 1 + availableWidth -= utils.StringWidth(worktreeIcon) + 1 } displayName := b.Name @@ -79,7 +79,7 @@ func getBranchDisplayStrings( } // Don't bother shortening branch names that are already 3 characters or less - if runewidth.StringWidth(displayName) > max(availableWidth, 3) { + if utils.StringWidth(displayName) > max(availableWidth, 3) { // Never shorten the branch name to less then 3 characters len := max(availableWidth, 4) displayName = runewidth.Truncate(displayName, len, "…") diff --git a/pkg/utils/formatting.go b/pkg/utils/formatting.go index a6bbc56709b..b7817346ab7 100644 --- a/pkg/utils/formatting.go +++ b/pkg/utils/formatting.go @@ -3,6 +3,7 @@ package utils import ( "fmt" "strings" + "unicode" "github.com/mattn/go-runewidth" "github.com/samber/lo" @@ -21,10 +22,22 @@ type ColumnConfig struct { Alignment Alignment } +func StringWidth(s string) int { + // We are intentionally not using a range loop here, because that would + // convert the characters to runes, which is unnecessary work in this case. + for i := 0; i < len(s); i++ { + if s[i] > unicode.MaxASCII { + return runewidth.StringWidth(s) + } + } + + return len(s) +} + // WithPadding pads a string as much as you want func WithPadding(str string, padding int, alignment Alignment) string { uncoloredStr := Decolorise(str) - width := runewidth.StringWidth(uncoloredStr) + width := StringWidth(uncoloredStr) if padding < width { return str } @@ -144,7 +157,7 @@ func getPadWidths(stringArrays [][]string) []int { return MaxFn(stringArrays, func(stringArray []string) int { uncoloredStr := Decolorise(stringArray[i]) - return runewidth.StringWidth(uncoloredStr) + return StringWidth(uncoloredStr) }) }) } @@ -161,7 +174,7 @@ func MaxFn[T any](items []T, fn func(T) int) int { // TruncateWithEllipsis returns a string, truncated to a certain length, with an ellipsis func TruncateWithEllipsis(str string, limit int) string { - if runewidth.StringWidth(str) > limit && limit <= 2 { + if StringWidth(str) > limit && limit <= 2 { return strings.Repeat(".", limit) } return runewidth.Truncate(str, limit, "…") diff --git a/pkg/utils/formatting_test.go b/pkg/utils/formatting_test.go index 5b56a9b333c..ac2adee5f6c 100644 --- a/pkg/utils/formatting_test.go +++ b/pkg/utils/formatting_test.go @@ -4,6 +4,7 @@ import ( "strings" "testing" + "github.com/mattn/go-runewidth" "github.com/stretchr/testify/assert" ) @@ -250,3 +251,27 @@ func TestRenderDisplayStrings(t *testing.T) { assert.EqualValues(t, test.expectedColumnPositions, columnPositions) } } + +func BenchmarkStringWidthAsciiOriginal(b *testing.B) { + for i := 0; i < b.N; i++ { + runewidth.StringWidth("some ASCII string") + } +} + +func BenchmarkStringWidthAsciiOptimized(b *testing.B) { + for i := 0; i < b.N; i++ { + StringWidth("some ASCII string") + } +} + +func BenchmarkStringWidthNonAsciiOriginal(b *testing.B) { + for i := 0; i < b.N; i++ { + runewidth.StringWidth("some non-ASCII string 🍉") + } +} + +func BenchmarkStringWidthNonAsciiOptimized(b *testing.B) { + for i := 0; i < b.N; i++ { + StringWidth("some non-ASCII string 🍉") + } +} From 4e441127f399bf3865f1f16732977349b46bcd86 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Sun, 16 Jun 2024 10:59:53 +0200 Subject: [PATCH 097/157] Clear highlight in HandleFocusLost Remove the old mechanism of clearing the highlight in Layout. This fixes a problem with a wrong highlight showing up in the staging panel when entering a file with only staged changes. Reproduction recipe: 1. stage all changes in a file by pressing space on it in the files panel 2. enter the staged changes panel by pressing enter 3. unstage one of the changes This makes the unstaged changes panel visible, but keeps the focus in the staged changes panel. However, the highlight in the unstaged changes view becomes visible, as if it were focused. To explain why this happens, you need to know how the selection highlighting of a view is turned on or off. It is turned on when it gains the focus, i.e. when ActivateFocus is called on it, which in turn happens when PushContext is called. It is turned off in Layout when gocui sees that the current view is no longer the same as last time, in which case it calls onViewFocusLost on the previous current view. This mechanism only works reliably when there is at most one PushContext call per event handler. If there is more than one, then the first one gets its highlight turned on, then the second one, but since gocui has never seen the first one as the active view in Layout, it doesn't get the highlight turned off again even though it should. And this happens in the above scenario. When pressing enter on a file with only staged changes, we first push the staging context (in FilesController.EnterFile), and then later we push the stagingSecondary context when we realize we only have staged changes. This leaves the highlight of the staging context on. --- pkg/gui/context/simple_context.go | 2 ++ pkg/gui/gui.go | 2 +- pkg/gui/layout.go | 29 ----------------------------- 3 files changed, 3 insertions(+), 30 deletions(-) diff --git a/pkg/gui/context/simple_context.go b/pkg/gui/context/simple_context.go index 7c00e09f741..cef871cefea 100644 --- a/pkg/gui/context/simple_context.go +++ b/pkg/gui/context/simple_context.go @@ -52,6 +52,8 @@ func (self *SimpleContext) HandleFocus(opts types.OnFocusOpts) error { } func (self *SimpleContext) HandleFocusLost(opts types.OnFocusLostOpts) error { + self.GetViewTrait().SetHighlight(false) + _ = self.view.SetOriginX(0) if self.onFocusLostFn != nil { return self.onFocusLostFn(opts) } diff --git a/pkg/gui/gui.go b/pkg/gui/gui.go index 06228e759cb..66fe5cb9ced 100644 --- a/pkg/gui/gui.go +++ b/pkg/gui/gui.go @@ -678,7 +678,7 @@ func (gui *Gui) Run(startArgs appTypes.StartArgs) error { return err } - gui.g.SetManager(gocui.ManagerFunc(gui.layout), gocui.ManagerFunc(gui.getFocusLayout())) + gui.g.SetManager(gocui.ManagerFunc(gui.layout)) if err := gui.createAllViews(); err != nil { return err diff --git a/pkg/gui/layout.go b/pkg/gui/layout.go index 2123731e42d..861bb0bd124 100644 --- a/pkg/gui/layout.go +++ b/pkg/gui/layout.go @@ -288,35 +288,6 @@ func (gui *Gui) onInitialViewsCreation() error { return nil } -// getFocusLayout returns a manager function for when view gain and lose focus -func (gui *Gui) getFocusLayout() func(g *gocui.Gui) error { - var previousView *gocui.View - return func(g *gocui.Gui) error { - newView := gui.g.CurrentView() - // for now we don't consider losing focus to a popup panel as actually losing focus - if newView != previousView && !gui.helpers.Confirmation.IsPopupPanel(newView.Name()) { - if err := gui.onViewFocusLost(previousView); err != nil { - return err - } - - previousView = newView - } - return nil - } -} - -func (gui *Gui) onViewFocusLost(oldView *gocui.View) error { - if oldView == nil { - return nil - } - - oldView.Highlight = false - - _ = oldView.SetOriginX(0) - - return nil -} - func (gui *Gui) transientContexts() []types.Context { return lo.Filter(gui.State.Contexts.Flatten(), func(context types.Context, _ int) bool { return context.IsTransient() From db0a1586d99393cda79e6022f3b3b8b4138b0e8b Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Sun, 16 Jun 2024 18:09:21 +0200 Subject: [PATCH 098/157] Highlight inactive selection in bold An inactive selection is one where the view is part of the context stack, but not the active view. For example, the files view when you enter the staging panel, or any view when you open a panel. --- docs/Config.md | 4 +++ go.mod | 2 +- go.sum | 4 +-- pkg/config/user_config.go | 25 +++++++++++-------- pkg/gui/context.go | 4 +++ pkg/gui/context/view_trait.go | 1 + pkg/gui/views.go | 1 + pkg/theme/theme.go | 6 +++++ schema/config.json | 12 +++++++++ vendor/github.com/jesseduffield/gocui/view.go | 15 ++++++++++- vendor/modules.txt | 2 +- 11 files changed, 60 insertions(+), 16 deletions(-) diff --git a/docs/Config.md b/docs/Config.md index 11cc1333396..67d73ebd4d0 100644 --- a/docs/Config.md +++ b/docs/Config.md @@ -122,6 +122,10 @@ gui: selectedLineBgColor: - blue + # Background color of selected line when view doesn't have focus. + inactiveViewSelectedLineBgColor: + - bold + # Foreground color of copied commit cherryPickedCommitFgColor: - blue diff --git a/go.mod b/go.mod index 4e189992ba6..69546555d27 100644 --- a/go.mod +++ b/go.mod @@ -16,7 +16,7 @@ require ( github.com/integrii/flaggy v1.4.0 github.com/jesseduffield/generics v0.0.0-20220320043834-727e535cbe68 github.com/jesseduffield/go-git/v5 v5.1.2-0.20221018185014-fdd53fef665d - github.com/jesseduffield/gocui v0.3.1-0.20240623095254-05e1204c2454 + github.com/jesseduffield/gocui v0.3.1-0.20240623124136-ce5274be521d github.com/jesseduffield/kill v0.0.0-20220618033138-bfbe04675d10 github.com/jesseduffield/lazycore v0.0.0-20221012050358-03d2e40243c5 github.com/jesseduffield/minimal/gitignore v0.3.3-0.20211018110810-9cde264e6b1e diff --git a/go.sum b/go.sum index 19c69818978..dae59e80722 100644 --- a/go.sum +++ b/go.sum @@ -188,8 +188,8 @@ github.com/jesseduffield/generics v0.0.0-20220320043834-727e535cbe68 h1:EQP2Tv8T github.com/jesseduffield/generics v0.0.0-20220320043834-727e535cbe68/go.mod h1:+LLj9/WUPAP8LqCchs7P+7X0R98HiFujVFANdNaxhGk= github.com/jesseduffield/go-git/v5 v5.1.2-0.20221018185014-fdd53fef665d h1:bO+OmbreIv91rCe8NmscRwhFSqkDJtzWCPV4Y+SQuXE= github.com/jesseduffield/go-git/v5 v5.1.2-0.20221018185014-fdd53fef665d/go.mod h1:nGNEErzf+NRznT+N2SWqmHnDnF9aLgANB1CUNEan09o= -github.com/jesseduffield/gocui v0.3.1-0.20240623095254-05e1204c2454 h1:rTPA5WiPM1SPUA3r2kSb3RiILC93am6irMvOLjO7JNA= -github.com/jesseduffield/gocui v0.3.1-0.20240623095254-05e1204c2454/go.mod h1:XtEbqCbn45keRXEu+OMZkjN5gw6AEob59afsgHjokZ8= +github.com/jesseduffield/gocui v0.3.1-0.20240623124136-ce5274be521d h1:I6rViLB+ZW5SnS8P7ZE0FdY6lMfx803qZ9ZYEYCvfro= +github.com/jesseduffield/gocui v0.3.1-0.20240623124136-ce5274be521d/go.mod h1:XtEbqCbn45keRXEu+OMZkjN5gw6AEob59afsgHjokZ8= github.com/jesseduffield/kill v0.0.0-20220618033138-bfbe04675d10 h1:jmpr7KpX2+2GRiE91zTgfq49QvgiqB0nbmlwZ8UnOx0= github.com/jesseduffield/kill v0.0.0-20220618033138-bfbe04675d10/go.mod h1:aA97kHeNA+sj2Hbki0pvLslmE4CbDyhBeSSTUUnOuVo= github.com/jesseduffield/lazycore v0.0.0-20221012050358-03d2e40243c5 h1:CDuQmfOjAtb1Gms6a1p5L2P8RhbLUq5t8aL7PiQd2uY= diff --git a/pkg/config/user_config.go b/pkg/config/user_config.go index 47fbe2eea65..7ab567fbe25 100644 --- a/pkg/config/user_config.go +++ b/pkg/config/user_config.go @@ -179,6 +179,8 @@ type ThemeConfig struct { // Background color of selected line. // See https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#highlighting-the-selected-line SelectedLineBgColor []string `yaml:"selectedLineBgColor" jsonschema:"minItems=1,uniqueItems=true"` + // Background color of selected line when view doesn't have focus. + InactiveViewSelectedLineBgColor []string `yaml:"inactiveViewSelectedLineBgColor" jsonschema:"minItems=1,uniqueItems=true"` // Foreground color of copied commit CherryPickedCommitFgColor []string `yaml:"cherryPickedCommitFgColor" jsonschema:"minItems=1,uniqueItems=true"` // Background color of copied commit @@ -668,17 +670,18 @@ func GetDefaultConfig() *UserConfig { TimeFormat: "02 Jan 06", ShortTimeFormat: time.Kitchen, Theme: ThemeConfig{ - ActiveBorderColor: []string{"green", "bold"}, - SearchingActiveBorderColor: []string{"cyan", "bold"}, - InactiveBorderColor: []string{"default"}, - OptionsTextColor: []string{"blue"}, - SelectedLineBgColor: []string{"blue"}, - CherryPickedCommitBgColor: []string{"cyan"}, - CherryPickedCommitFgColor: []string{"blue"}, - MarkedBaseCommitBgColor: []string{"yellow"}, - MarkedBaseCommitFgColor: []string{"blue"}, - UnstagedChangesColor: []string{"red"}, - DefaultFgColor: []string{"default"}, + ActiveBorderColor: []string{"green", "bold"}, + SearchingActiveBorderColor: []string{"cyan", "bold"}, + InactiveBorderColor: []string{"default"}, + OptionsTextColor: []string{"blue"}, + SelectedLineBgColor: []string{"blue"}, + InactiveViewSelectedLineBgColor: []string{"bold"}, + CherryPickedCommitBgColor: []string{"cyan"}, + CherryPickedCommitFgColor: []string{"blue"}, + MarkedBaseCommitBgColor: []string{"yellow"}, + MarkedBaseCommitFgColor: []string{"blue"}, + UnstagedChangesColor: []string{"red"}, + DefaultFgColor: []string{"default"}, }, CommitAuthorFormat: "auto", CommitLength: CommitLengthConfig{Show: true}, diff --git a/pkg/gui/context.go b/pkg/gui/context.go index be5a720e331..28ecf240549 100644 --- a/pkg/gui/context.go +++ b/pkg/gui/context.go @@ -230,6 +230,10 @@ func (self *ContextMgr) ActivateContext(c types.Context, opts types.OnFocusOpts) self.gui.helpers.Window.SetWindowContext(c) self.gui.helpers.Window.MoveToTopOfWindow(c) + oldView := self.gui.c.GocuiGui().CurrentView() + if oldView != nil && oldView.Name() != viewName { + oldView.HighlightInactive = true + } if _, err := self.gui.c.GocuiGui().SetCurrentView(viewName); err != nil { return err } diff --git a/pkg/gui/context/view_trait.go b/pkg/gui/context/view_trait.go index 19141989740..5342071ef88 100644 --- a/pkg/gui/context/view_trait.go +++ b/pkg/gui/context/view_trait.go @@ -49,6 +49,7 @@ func (self *ViewTrait) SetContent(content string) { func (self *ViewTrait) SetHighlight(highlight bool) { self.view.Highlight = highlight + self.view.HighlightInactive = false } func (self *ViewTrait) SetFooter(value string) { diff --git a/pkg/gui/views.go b/pkg/gui/views.go index 9fd775764d3..9a4fa0a479a 100644 --- a/pkg/gui/views.go +++ b/pkg/gui/views.go @@ -92,6 +92,7 @@ func (gui *Gui) createAllViews() error { (*mapping.viewPtr).FrameRunes = frameRunes (*mapping.viewPtr).FgColor = theme.GocuiDefaultTextColor (*mapping.viewPtr).SelBgColor = theme.GocuiSelectedLineBgColor + (*mapping.viewPtr).InactiveViewSelBgColor = theme.GocuiInactiveViewSelectedLineBgColor } gui.Views.Options.Frame = false diff --git a/pkg/theme/theme.go b/pkg/theme/theme.go index 78be46fb635..acd8ebf7161 100644 --- a/pkg/theme/theme.go +++ b/pkg/theme/theme.go @@ -24,11 +24,15 @@ var ( // GocuiSelectedLineBgColor is the background color for the selected line in gocui GocuiSelectedLineBgColor gocui.Attribute + // GocuiInactiveViewSelectedLineBgColor is the background color for the selected line in gocui if the view doesn't have focus + GocuiInactiveViewSelectedLineBgColor gocui.Attribute OptionsColor gocui.Attribute // SelectedLineBgColor is the background color for the selected line SelectedLineBgColor = style.New() + // InactiveViewSelectedLineBgColor is the background color for the selected line if the view doesn't have the focus + InactiveViewSelectedLineBgColor = style.New() // CherryPickedCommitColor is the text style when cherry picking a commit CherryPickedCommitTextStyle = style.New() @@ -49,6 +53,7 @@ func UpdateTheme(themeConfig config.ThemeConfig) { InactiveBorderColor = GetGocuiStyle(themeConfig.InactiveBorderColor) SearchingActiveBorderColor = GetGocuiStyle(themeConfig.SearchingActiveBorderColor) SelectedLineBgColor = GetTextStyle(themeConfig.SelectedLineBgColor, true) + InactiveViewSelectedLineBgColor = GetTextStyle(themeConfig.InactiveViewSelectedLineBgColor, true) cherryPickedCommitBgTextStyle := GetTextStyle(themeConfig.CherryPickedCommitBgColor, true) cherryPickedCommitFgTextStyle := GetTextStyle(themeConfig.CherryPickedCommitFgColor, false) @@ -62,6 +67,7 @@ func UpdateTheme(themeConfig config.ThemeConfig) { UnstagedChangesColor = unstagedChangesTextStyle GocuiSelectedLineBgColor = GetGocuiStyle(themeConfig.SelectedLineBgColor) + GocuiInactiveViewSelectedLineBgColor = GetGocuiStyle(themeConfig.InactiveViewSelectedLineBgColor) OptionsColor = GetGocuiStyle(themeConfig.OptionsTextColor) OptionsFgColor = GetTextStyle(themeConfig.OptionsTextColor, false) diff --git a/schema/config.json b/schema/config.json index 271fd8be645..802069bed66 100644 --- a/schema/config.json +++ b/schema/config.json @@ -186,6 +186,18 @@ "blue" ] }, + "inactiveViewSelectedLineBgColor": { + "items": { + "type": "string" + }, + "type": "array", + "minItems": 1, + "uniqueItems": true, + "description": "Background color of selected line when view doesn't have focus.", + "default": [ + "bold" + ] + }, "cherryPickedCommitFgColor": { "items": { "type": "string" diff --git a/vendor/github.com/jesseduffield/gocui/view.go b/vendor/github.com/jesseduffield/gocui/view.go index a32519b801f..6589c69811d 100644 --- a/vendor/github.com/jesseduffield/gocui/view.go +++ b/vendor/github.com/jesseduffield/gocui/view.go @@ -81,6 +81,11 @@ type View struct { // foreground colors of the selected line, when it is highlighted. SelBgColor, SelFgColor Attribute + // InactiveViewSelBgColor is used to configure the background color of the + // selected line, when it is highlighted but the view doesn't have the + // focus. + InactiveViewSelBgColor Attribute + // If Editable is true, keystrokes will be added to the view's internal // buffer at the cursor position. Editable bool @@ -96,6 +101,9 @@ type View struct { // If Highlight is true, Sel{Bg,Fg}Colors will be used // for the line under the cursor position. Highlight bool + // If HighlightInactive is true, InavtiveViewSel{Bg,Fg}Colors will be used + // instead of Sel{Bg,Fg}Colors for highlighting selected lines. + HighlightInactive bool // If Frame is true, a border will be drawn around the view. Frame bool @@ -404,6 +412,7 @@ func newView(name string, x0, y0, x1, y1 int, mode OutputMode) *View { v.FgColor, v.BgColor = ColorDefault, ColorDefault v.SelFgColor, v.SelBgColor = ColorDefault, ColorDefault + v.InactiveViewSelBgColor = ColorDefault v.TitleColor, v.FrameColor = ColorDefault, ColorDefault return v } @@ -506,7 +515,11 @@ func (v *View) setRune(x, y int, ch rune, fgColor, bgColor Attribute) error { fgColor += 8 } fgColor = fgColor | AttrBold - bgColor = bgColor | v.SelBgColor + if v.HighlightInactive { + bgColor = bgColor | v.InactiveViewSelBgColor + } else { + bgColor = bgColor | v.SelBgColor + } } } diff --git a/vendor/modules.txt b/vendor/modules.txt index 62d47eea4e7..c7d601a9326 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -172,7 +172,7 @@ github.com/jesseduffield/go-git/v5/utils/merkletrie/filesystem github.com/jesseduffield/go-git/v5/utils/merkletrie/index github.com/jesseduffield/go-git/v5/utils/merkletrie/internal/frame github.com/jesseduffield/go-git/v5/utils/merkletrie/noder -# github.com/jesseduffield/gocui v0.3.1-0.20240623095254-05e1204c2454 +# github.com/jesseduffield/gocui v0.3.1-0.20240623124136-ce5274be521d ## explicit; go 1.12 github.com/jesseduffield/gocui # github.com/jesseduffield/kill v0.0.0-20220618033138-bfbe04675d10 From 02aeb6101c474238851f87d0b5e071f7afc72198 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Sat, 8 Jun 2024 12:10:40 +0200 Subject: [PATCH 099/157] Remove unused struct --- pkg/i18n/i18n.go | 6 ------ 1 file changed, 6 deletions(-) diff --git a/pkg/i18n/i18n.go b/pkg/i18n/i18n.go index d7358775fab..646c5a2774b 100644 --- a/pkg/i18n/i18n.go +++ b/pkg/i18n/i18n.go @@ -9,12 +9,6 @@ import ( "github.com/sirupsen/logrus" ) -// Localizer will translate a message into the user's language -type Localizer struct { - Log *logrus.Entry - S TranslationSet -} - func NewTranslationSetFromConfig(log *logrus.Entry, configLanguage string) (*TranslationSet, error) { if configLanguage == "auto" { language := detectLanguage(jibber_jabber.DetectIETF) From 1e123e212445ba4c82e8023a5e4b57e86045466e Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Tue, 12 Mar 2024 13:39:16 +0100 Subject: [PATCH 100/157] Convert the non-English translation sets to JSON files We write a hacky, one-off script to do that. We need this script only once, so we don't bother polishing it much. We'll re-purpose it later in the branch to convert the English translation set to JSON; that is an operation that we need to do regularly in the future. --- cmd/i18n/main.go | 41 ++ pkg/i18n/translations/ja.json | 924 ++++++++++++++++++++++++++++++ pkg/i18n/translations/ko.json | 924 ++++++++++++++++++++++++++++++ pkg/i18n/translations/nl.json | 924 ++++++++++++++++++++++++++++++ pkg/i18n/translations/pl.json | 926 +++++++++++++++++++++++++++++++ pkg/i18n/translations/ru.json | 924 ++++++++++++++++++++++++++++++ pkg/i18n/translations/zh-CN.json | 924 ++++++++++++++++++++++++++++++ pkg/i18n/translations/zh-TW.json | 924 ++++++++++++++++++++++++++++++ 8 files changed, 6511 insertions(+) create mode 100644 cmd/i18n/main.go create mode 100644 pkg/i18n/translations/ja.json create mode 100644 pkg/i18n/translations/ko.json create mode 100644 pkg/i18n/translations/nl.json create mode 100644 pkg/i18n/translations/pl.json create mode 100644 pkg/i18n/translations/ru.json create mode 100644 pkg/i18n/translations/zh-CN.json create mode 100644 pkg/i18n/translations/zh-TW.json diff --git a/cmd/i18n/main.go b/cmd/i18n/main.go new file mode 100644 index 00000000000..d05cd828c56 --- /dev/null +++ b/cmd/i18n/main.go @@ -0,0 +1,41 @@ +package main + +import ( + "encoding/json" + "log" + "os" + + "github.com/jesseduffield/lazygit/pkg/i18n" +) + +func saveLanguageFileToJson(tr i18n.TranslationSet, filepath string) error { + jsonData, err := json.MarshalIndent(tr, "", " ") + if err != nil { + return err + } + + jsonData = append(jsonData, '\n') + return os.WriteFile(filepath, jsonData, 0o644) +} + +func saveNonEnglishLanguageFilesToJson() error { + for lang, tr := range i18n.GetTranslationSets() { + if lang == "en" { + continue + } + + err := saveLanguageFileToJson(tr, "pkg/i18n/translations/"+lang+".json") + if err != nil { + return err + } + } + + return nil +} + +func main() { + err := saveNonEnglishLanguageFilesToJson() + if err != nil { + log.Fatal(err) + } +} diff --git a/pkg/i18n/translations/ja.json b/pkg/i18n/translations/ja.json new file mode 100644 index 00000000000..55e2399b386 --- /dev/null +++ b/pkg/i18n/translations/ja.json @@ -0,0 +1,924 @@ +{ + "NotEnoughSpace": "パネルの描画に十分な空間がありません", + "DiffTitle": "差分", + "FilesTitle": "ファイル", + "BranchesTitle": "ブランチ", + "CommitsTitle": "コミット", + "StashTitle": "Stash", + "SnakeTitle": "", + "EasterEgg": "", + "UnstagedChanges": "ステージされていない変更", + "StagedChanges": "ステージされた変更", + "MainTitle": "メイン", + "StagingTitle": "メインパネル (Staging)", + "MergingTitle": "メインパネル (Merging)", + "MergeConfirmTitle": "マージ", + "NormalTitle": "メインパネル (Normal)", + "LogTitle": "ログ", + "CommitSummary": "コミットメッセージ", + "CredentialsUsername": "ユーザ名", + "CredentialsPassword": "パスワード", + "CredentialsPassphrase": "SSH鍵のパスフレーズを入力", + "CredentialsPIN": "", + "PassUnameWrong": "パスワード, パスフレーズまたはユーザ名が間違っています。", + "Commit": "変更をコミット", + "CommitTooltip": "", + "AmendLastCommit": "最新のコミットにamend", + "AmendLastCommitTitle": "最新のコミットにamend", + "SureToAmend": "最新のコミットに変更をamendします。よろしいですか? コミットメッセージはコミットパネルから変更できます。", + "NoCommitToAmend": "Amend可能なコミットが存在しません。", + "CommitChangesWithEditor": "gitエディタを使用して変更をコミット", + "FindBaseCommitForFixup": "", + "FindBaseCommitForFixupTooltip": "", + "NoBaseCommitsFound": "", + "MultipleBaseCommitsFoundStaged": "", + "MultipleBaseCommitsFoundUnstaged": "", + "BaseCommitIsAlreadyOnMainBranch": "", + "BaseCommitIsNotInCurrentView": "", + "HunksWithOnlyAddedLinesWarning": "", + "StatusTitle": "ステータス", + "GlobalTitle": "グローバルキーバインド", + "Menu": "メニュー", + "Execute": "実行", + "Stage": "ステージ/アンステージ", + "StageTooltip": "", + "ToggleStagedAll": "すべての変更をステージ/アンステージ", + "ToggleStagedAllTooltip": "", + "ToggleTreeView": "ファイルツリーの表示を切り替え", + "ToggleTreeViewTooltip": "", + "OpenDiffTool": "", + "OpenMergeTool": "Git mergetoolを開く", + "OpenMergeToolTooltip": "", + "Refresh": "リフレッシュ", + "RefreshTooltip": "", + "Push": "Push", + "Pull": "Pull", + "PushTooltip": "", + "PullTooltip": "", + "Scroll": "スクロール", + "FileFilter": "ファイルをフィルタ (ステージ/アンステージ)", + "CopyToClipboardMenu": "", + "CopyFileName": "", + "CopyFilePath": "", + "CopyFileDiffTooltip": "", + "CopySelectedDiff": "", + "CopyAllFilesDiff": "", + "NoContentToCopyError": "", + "FileNameCopiedToast": "", + "FilePathCopiedToast": "", + "FileDiffCopiedToast": "", + "AllFilesDiffCopiedToast": "", + "FilterStagedFiles": "ステージされたファイルのみを表示", + "FilterUnstagedFiles": "ステージされていないファイルのみを表示", + "ResetFilter": "フィルタをリセット", + "MergeConflictsTitle": "マージコンフリクト", + "Checkout": "チェックアウト", + "CheckoutTooltip": "", + "CantCheckoutBranchWhilePulling": "", + "TagCheckoutTooltip": "", + "RemoteBranchCheckoutTooltip": "", + "CantPullOrPushSameBranchTwice": "", + "NoChangedFiles": "", + "SoftReset": "Softリセット", + "AlreadyCheckedOutBranch": "ブランチはすでにチェックアウトされています。", + "SureForceCheckout": "", + "ForceCheckoutBranch": "", + "BranchName": "ブランチ名", + "NewBranchNameBranchOff": "新規ブランチ名 ('{{.branchName}}' に作成)", + "CantDeleteCheckOutBranch": "チェックアウト中のブランチは削除できません!", + "DeleteBranchTitle": "", + "DeleteLocalBranch": "", + "DeleteRemoteBranchOption": "", + "DeleteRemoteBranchPrompt": "", + "ForceDeleteBranchTitle": "", + "ForceDeleteBranchMessage": "", + "RebaseBranch": "", + "RebaseBranchTooltip": "", + "CantRebaseOntoSelf": "ブランチを自分自身にリベースすることはできません。", + "CantMergeBranchIntoItself": "ブランチを自分自身にマージすることはできません。", + "ForceCheckout": "", + "ForceCheckoutTooltip": "", + "CheckoutByName": "", + "CheckoutByNameTooltip": "", + "RemoteBranchCheckoutTitle": "", + "CheckoutTypeNewBranch": "", + "CheckoutTypeNewBranchTooltip": "", + "CheckoutTypeDetachedHead": "", + "CheckoutTypeDetachedHeadTooltip": "", + "NewBranch": "新しいブランチを作成", + "NewBranchFromStashTooltip": "", + "NoBranchesThisRepo": "リポジトリにブランチが存在しません", + "CommitWithoutMessageErr": "コミットメッセージを入力してください", + "Close": "閉じる", + "CloseCancel": "閉じる/キャンセル", + "Confirm": "確認", + "Quit": "終了", + "SquashTooltip": "", + "CannotSquashOrFixupFirstCommit": "", + "Fixup": "", + "FixupTooltip": "", + "SureFixupThisCommit": "", + "SureSquashThisCommit": "", + "Squash": "", + "PickCommitTooltip": "", + "Pick": "", + "CantPickDisabledReason": "", + "Edit": "", + "RevertCommit": "コミットをrevert", + "Revert": "", + "RevertCommitTooltip": "", + "Reword": "コミットメッセージを変更", + "CommitRewordTooltip": "", + "DropCommit": "コミットを削除", + "DropCommitTooltip": "", + "MoveDownCommit": "コミットを1つ下に移動", + "MoveUpCommit": "コミットを1つ上に移動", + "CannotMoveAnyFurther": "", + "EditCommit": "", + "EditCommitTooltip": "コミットを編集", + "AmendCommitTooltip": "ステージされた変更でamendコミット", + "Amend": "", + "ResetAuthor": "", + "ResetAuthorTooltip": "", + "SetAuthor": "", + "SetAuthorTooltip": "", + "AddCoAuthor": "", + "AmendCommitAttribute": "", + "AmendCommitAttributeTooltip": "", + "SetAuthorPromptTitle": "", + "AddCoAuthorPromptTitle": "", + "AddCoAuthorTooltip": "", + "SureResetCommitAuthor": "", + "RewordCommitEditor": "エディタでコミットメッセージを編集", + "NoCommitsThisBranch": "", + "UpdateRefHere": "", + "Error": "エラー", + "Undo": "アンドゥ", + "UndoReflog": "アンドゥ (via reflog) (experimental)", + "RedoReflog": "リドゥ (via reflog) (experimental)", + "UndoTooltip": "", + "RedoTooltip": "", + "UndoMergeResolveTooltip": "", + "DiscardAllTooltip": "", + "DiscardUnstagedTooltip": "", + "Pop": "Pop", + "StashPopTooltip": "", + "Drop": "Drop", + "StashDropTooltip": "", + "Apply": "適用", + "StashApplyTooltip": "", + "NoStashEntries": "Stashが存在しません", + "StashDrop": "Stashを削除", + "SureDropStashEntry": "Stashを削除します。よろしいですか?", + "StashPop": "Stashをpop", + "SurePopStashEntry": "Stashをpopします。よろしいですか?", + "StashApply": "Stashを適用", + "SureApplyStashEntry": "Stashを適用します。よろしいですか?", + "NoTrackedStagedFilesStash": "", + "NoFilesToStash": "", + "StashChanges": "変更をStash", + "RenameStash": "Stashを変更", + "RenameStashPrompt": "Stash名を変更: {{.stashName}}", + "OpenConfig": "設定ファイルを開く", + "EditConfig": "設定ファイルを編集", + "ForcePush": "Force push", + "ForcePushPrompt": "ブランチがリモートブランチから分岐しています。'esc'でキャンセル, または'enter'でforce pushします。", + "ForcePushDisabled": "ブランチがリモートブランチから分岐しています。force pushは無効化されています。", + "UpdatesRejected": "", + "UpdatesRejectedAndForcePushDisabled": "", + "CheckForUpdate": "更新を確認", + "CheckingForUpdates": "更新を確認中...", + "UpdateAvailableTitle": "最新リリース!", + "UpdateAvailable": "バージョン {{.newVersion}} をインストールしますか?", + "UpdateInProgressWaitingStatus": "更新中", + "UpdateCompletedTitle": "更新完了!", + "UpdateCompleted": "更新のインストールに成功しました。lazygitを再起動してください。", + "FailedToRetrieveLatestVersionErr": "バージョン情報の取得に失敗しました", + "OnLatestVersionErr": "使用中のバージョンは最新です", + "MajorVersionErr": "新バージョン ({{.newVersion}}) は現在のバージョン ({{.currentVersion}}) と後方互換性がありません。", + "CouldNotFindBinaryErr": "{{.url}} にバイナリが存在しませんでした。", + "UpdateFailedErr": "更新失敗: {{.errMessage}}", + "ConfirmQuitDuringUpdateTitle": "現在更新中", + "ConfirmQuitDuringUpdate": "現在更新を実行中です。終了しますか?", + "MergeToolTitle": "マージツール", + "MergeToolPrompt": "`git mergetool`を開きます。よろしいですか?", + "IntroPopupMessage": "\nThanks for using lazygit! Seriously you rock. Three things to share with you:\n\n 1) If you want to learn about lazygit's features, watch this vid:\n https://youtu.be/CPLdltN7wgE\n\n 2) Be sure to read the latest release notes at:\n https://github.com/jesseduffield/lazygit/releases\n\n 3) If you're using git, that makes you a programmer! With your help we can make\n lazygit better, so consider becoming a contributor and joining the fun at\n https://github.com/jesseduffield/lazygit\n You can also sponsor me and tell me what to work on by clicking the donate\n button at the bottom right.\n Or even just star the repo to share the love!\n", + "DeprecatedEditConfigWarning": "", + "GitconfigParseErr": "", + "EditFile": "ファイルを編集", + "EditFileTooltip": "", + "OpenFile": "ファイルを開く", + "OpenFileTooltip": "", + "OpenInEditor": "", + "IgnoreFile": ".gitignoreに追加", + "ExcludeFile": "", + "RefreshFiles": "ファイルをリフレッシュ", + "Merge": "現在のブランチにマージ", + "MergeBranchTooltip": "", + "ConfirmQuit": "終了します。よろしいですか?", + "SwitchRepo": "最近使用したリポジトリに切り替え", + "AllBranchesLogGraph": "すべてのブランチログを表示", + "UnsupportedGitService": "サポートされていないGitサービスです。", + "CopyPullRequestURL": "Pull RequestのURLをクリップボードにコピー", + "NoBranchOnRemote": "ブランチがリモートに存在しません。リモートにpushしてください。", + "Fetch": "Fetch", + "FetchTooltip": "", + "NoAutomaticGitFetchTitle": "", + "NoAutomaticGitFetchBody": "", + "FileEnter": "", + "FileEnterTooltip": "", + "FileStagingRequirements": "", + "StageSelectionTooltip": "選択行をステージ/アンステージ", + "DiscardSelection": "変更を削除 (git reset)", + "DiscardSelectionTooltip": "", + "ToggleSelectHunk": "Hunk選択を切り替え", + "ToggleSelectHunkTooltip": "", + "ToggleSelectionForPatch": "行をパッチに追加/削除", + "ToggleSelectionForPatchTooltip": "", + "EditHunk": "", + "EditHunkTooltip": "", + "ToggleStagingView": "パネルを切り替え", + "ToggleStagingViewTooltip": "", + "ReturnToFilesPanel": "ファイル一覧に戻る", + "FastForward": "", + "FastForwardTooltip": "", + "FastForwarding": "", + "FoundConflictsTitle": "", + "ViewConflictsMenuItem": "", + "AbortMenuItem": "", + "PickHunk": "", + "PickAllHunks": "", + "ViewMergeRebaseOptions": "", + "ViewMergeRebaseOptionsTooltip": "", + "ViewMergeOptions": "", + "ViewRebaseOptions": "", + "NotMergingOrRebasing": "", + "AlreadyRebasing": "", + "RecentRepos": "最近使用したリポジトリ", + "MergeOptionsTitle": "", + "RebaseOptionsTitle": "", + "CommitSummaryTitle": "コミットメッセージ", + "CommitDescriptionTitle": "", + "CommitDescriptionSubTitle": "", + "LocalBranchesTitle": "ブランチ", + "SearchTitle": "検索", + "TagsTitle": "タグ", + "MenuTitle": "メニュー", + "CommitMenuTitle": "", + "RemotesTitle": "リモート", + "RemoteBranchesTitle": "リモートブランチ", + "PatchBuildingTitle": "メインパネル (Patch Building)", + "InformationTitle": "Information", + "SecondaryTitle": "Secondary", + "ReflogCommitsTitle": "参照ログ", + "ConflictsResolved": "", + "Continue": "", + "RebasingTitle": "", + "RebasingFromBaseCommitTitle": "", + "SimpleRebase": "", + "InteractiveRebase": "", + "RebaseOntoBaseBranch": "", + "InteractiveRebaseTooltip": "", + "RebaseOntoBaseBranchTooltip": "", + "MustSelectTodoCommits": "", + "ConfirmMerge": "", + "FwdNoUpstream": "", + "FwdNoLocalUpstream": "", + "FwdCommitsToPush": "", + "PullRequestNoUpstream": "", + "ErrorOccurred": "エラーが発生しました! issueを作成してください: ", + "NoRoom": "", + "YouAreHere": "現在位置", + "YouDied": "", + "RewordNotSupported": "", + "ChangingThisActionIsNotAllowed": "", + "CherryPickCopy": "コミットをコピー (cherry-pick)", + "CherryPickCopyTooltip": "", + "CherryPickCopyRange": "", + "CherryPickCopyRangeTooltip": "", + "PasteCommits": "コミットを貼り付け (cherry-pick)", + "SureCherryPick": "", + "CherryPick": "Cherry-Pick", + "CannotCherryPickNonCommit": "", + "CannotCherryPickMergeCommit": "", + "Donate": "支援", + "AskQuestion": "質問", + "PrevLine": "前の行を選択", + "NextLine": "次の行を選択", + "PrevHunk": "前のhunkを選択", + "NextHunk": "次のhunkを選択", + "PrevConflict": "前のコンフリクトを選択", + "NextConflict": "次のコンフリクトを選択", + "SelectPrevHunk": "前のhunkを選択", + "SelectNextHunk": "次のhunkを選択", + "ScrollDown": "下にスクロール", + "ScrollUp": "上にスクロール", + "ScrollUpMainWindow": "メインパネルを上にスクロール", + "ScrollDownMainWindow": "メインパネルを下にスクロール", + "AmendCommitTitle": "Amendコミット", + "AmendCommitPrompt": "ステージされたファイルで現在のコミットをamendします。よろしいですか?", + "DropCommitTitle": "コミットを削除", + "DropCommitPrompt": "選択されたコミットを削除します。よろしいですか?", + "DropUpdateRefPrompt": "", + "PullingStatus": "Pull中", + "PushingStatus": "Push中", + "FetchingStatus": "Fetch中", + "SquashingStatus": "", + "FixingStatus": "", + "DeletingStatus": "", + "DroppingStatus": "", + "MovingStatus": "", + "RebasingStatus": "", + "MergingStatus": "", + "LowercaseRebasingStatus": "", + "LowercaseMergingStatus": "", + "AmendingStatus": "", + "CherryPickingStatus": "", + "UndoingStatus": "", + "RedoingStatus": "", + "CheckingOutStatus": "", + "CommittingStatus": "", + "RevertingStatus": "", + "CreatingFixupCommitStatus": "", + "CommitFiles": "Commit files", + "SubCommitsDynamicTitle": "コミット (%s)", + "CommitFilesDynamicTitle": "Diff files (%s)", + "RemoteBranchesDynamicTitle": "リモートブランチ (%s)", + "ViewItemFiles": "", + "ViewItemFilesTooltip": "", + "CommitFilesTitle": "コミットファイル", + "CheckoutCommitFileTooltip": "", + "CanOnlyDiscardFromLocalCommits": "", + "Remove": "", + "DiscardOldFileChangeTooltip": "", + "DiscardFileChangesTitle": "ファイルの変更を破棄", + "DiscardFileChangesPrompt": "", + "DisabledForGPG": "", + "CreateRepo": "Gitリポジトリではありません。リポジトリを作成しますか? (y/n): ", + "BareRepo": "", + "InitialBranch": "", + "NoRecentRepositories": "", + "IncorrectNotARepository": "", + "AutoStashTitle": "", + "AutoStashPrompt": "", + "StashPrefix": "", + "Discard": "", + "DiscardChangesTitle": "", + "DiscardFileChangesTooltip": "", + "Cancel": "キャンセル", + "DiscardAllChanges": "すべての変更を破棄", + "DiscardUnstagedChanges": "", + "DiscardAllChangesToAllFiles": "", + "DiscardAnyUnstagedChanges": "", + "DiscardUntrackedFiles": "", + "DiscardStagedChanges": "", + "HardReset": "hardリセット", + "BranchDeleteTooltip": "", + "TagDeleteTooltip": "", + "Delete": "", + "Reset": "", + "ResetTooltip": "", + "ViewResetOptions": "", + "FileResetOptionsTooltip": "", + "CreateFixupCommit": "Fixupコミットを作成", + "CreateFixupCommitTooltip": "このコミットに対するfixupコミットを作成", + "CreateAmendCommit": "", + "FixupMenu_Fixup": "", + "FixupMenu_FixupTooltip": "", + "FixupMenu_AmendWithChanges": "", + "FixupMenu_AmendWithChangesTooltip": "", + "FixupMenu_AmendWithoutChanges": "", + "FixupMenu_AmendWithoutChangesTooltip": "", + "SquashAboveCommitsTooltip": "", + "SquashCommitsAboveSelectedTooltip": "", + "SquashCommitsInCurrentBranchTooltip": "", + "SquashAboveCommits": "", + "SquashCommitsInCurrentBranch": "", + "SquashCommitsAboveSelectedCommit": "", + "CannotSquashCommitsInCurrentBranch": "", + "ExecuteCustomCommand": "カスタムコマンドを実行", + "ExecuteCustomCommandTooltip": "", + "CustomCommand": "カスタムコマンド:", + "CommitChangesWithoutHook": "pre-commitフックを実行せずに変更をコミット", + "SkipHookPrefixNotConfigured": "", + "ResetTo": "", + "ResetSoftTooltip": "", + "ResetMixedTooltip": "", + "ResetHardTooltip": "", + "PressEnterToReturn": "Enterを入力してください", + "ViewStashOptions": "", + "ViewStashOptionsTooltip": "", + "Stash": "", + "StashTooltip": "", + "StashAllChanges": "変更をstash", + "StashStagedChanges": "", + "StashAllChangesKeepIndex": "", + "StashUnstagedChanges": "", + "StashIncludeUntrackedChanges": "", + "StashOptions": "", + "NotARepository": "", + "WorkingDirectoryDoesNotExist": "", + "Jump": "パネルに移動", + "ScrollLeftRight": "左右にスクロール", + "ScrollLeft": "左スクロール", + "ScrollRight": "右スクロール", + "DiscardPatch": "パッチを破棄", + "DiscardPatchConfirm": "", + "DiscardPatchSameCommitConfirm": "", + "CantPatchWhileRebasingError": "", + "ToggleAddToPatch": "", + "ToggleAddToPatchTooltip": "", + "ToggleAllInPatch": "", + "ToggleAllInPatchTooltip": "", + "UpdatingPatch": "", + "ViewPatchOptions": "", + "PatchOptionsTitle": "", + "NoPatchError": "", + "EmptyPatchError": "", + "EnterCommitFile": "", + "EnterCommitFileTooltip": "", + "ExitCustomPatchBuilder": "", + "EnterUpstream": "'\u003cremote\u003e \u003cbranchname\u003e' の形式でupstreamを入力", + "InvalidUpstream": "Upstreamの形式が正しくありません。'\u003cremote\u003e \u003cbranchname\u003e' の形式で入力してください。", + "ReturnToRemotesList": "リモート一覧に戻る", + "NewRemote": "リモートを新規追加", + "NewRemoteName": "新規リモート名:", + "NewRemoteUrl": "新規リモートURL:", + "ViewBranches": "", + "EditRemoteName": "{{.remoteName}} の新しいリモート名を入力:", + "EditRemoteUrl": "{{.remoteName}} の新しいリモートURLを入力:", + "RemoveRemote": "リモートを削除", + "RemoveRemoteTooltip": "", + "RemoveRemotePrompt": "リモートを削除します。よろしいですか?", + "DeleteRemoteBranch": "リモートブランチを削除", + "DeleteRemoteBranchMessage": "リモートブランチを削除します。よろしいですか", + "DeleteRemoteBranchTooltip": "", + "SetAsUpstream": "", + "SetAsUpstreamTooltip": "", + "SetUpstream": "", + "UnsetUpstream": "", + "ViewDivergenceFromUpstream": "", + "ViewDivergenceFromBaseBranch": "", + "CouldNotDetermineBaseBranch": "", + "DivergenceSectionHeaderLocal": "", + "DivergenceSectionHeaderRemote": "", + "ViewUpstreamResetOptions": "", + "ViewUpstreamResetOptionsTooltip": "", + "ViewUpstreamRebaseOptions": "", + "ViewUpstreamRebaseOptionsTooltip": "", + "UpstreamGenericName": "", + "SetUpstreamTitle": "", + "SetUpstreamMessage": "", + "EditRemoteTooltip": "リモートを編集", + "TagCommit": "タグを作成", + "TagCommitTooltip": "", + "TagMenuTitle": "タグを作成", + "TagNameTitle": "タグ名", + "TagMessageTitle": "タグメッセージ", + "LightweightTag": "軽量タグ", + "AnnotatedTag": "注釈付きタグ", + "DeleteTagTitle": "", + "DeleteLocalTag": "", + "DeleteRemoteTag": "", + "SelectRemoteTagUpstream": "", + "DeleteRemoteTagPrompt": "", + "RemoteTagDeletedMessage": "", + "PushTagTitle": "リモートにタグ '{{.tagName}}' をpush", + "PushTag": "タグをpush", + "PushTagTooltip": "", + "NewTag": "タグを作成", + "NewTagTooltip": "", + "CreatingTag": "", + "ForceTag": "", + "ForceTagPrompt": "", + "FetchRemoteTooltip": "リモートをfetch", + "FetchingRemoteStatus": "リモートをfetch", + "CheckoutCommit": "コミットをチェックアウト", + "CheckoutCommitTooltip": "", + "SureCheckoutThisCommit": "選択されたコミットをチェックアウトします。よろしいですか?", + "GitFlowOptions": "", + "NotAGitFlowBranch": "", + "NewBranchNamePrompt": "新しいブランチ名を入力", + "IgnoreTracked": "", + "ExcludeTracked": "", + "IgnoreTrackedPrompt": "", + "ExcludeTrackedPrompt": "", + "ViewResetToUpstreamOptions": "", + "NextScreenMode": "次のスクリーンモード (normal/half/fullscreen)", + "PrevScreenMode": "前のスクリーンモード", + "StartSearch": "検索を開始", + "StartFilter": "", + "Panel": "パネル", + "Keybindings": "キーバインド", + "KeybindingsLegend": "", + "KeybindingsMenuSectionLocal": "", + "KeybindingsMenuSectionGlobal": "", + "KeybindingsMenuSectionNavigation": "", + "RenameBranch": "ブランチ名を変更", + "Upstream": "", + "UpstreamTooltip": "", + "BranchUpstreamOptionsTitle": "", + "ViewBranchUpstreamOptions": "", + "ViewBranchUpstreamOptionsTooltip": "", + "UpstreamNotSetError": "", + "NewGitFlowBranchPrompt": "", + "RenameBranchWarning": "", + "OpenKeybindingsMenu": "メニューを開く", + "ResetCherryPick": "", + "NextTab": "次のタブ", + "PrevTab": "前のタブ", + "CantUndoWhileRebasing": "リベース中はアンドゥできません。", + "CantRedoWhileRebasing": "リベース中はリドゥできません。", + "MustStashWarning": "", + "MustStashTitle": "", + "ConfirmationTitle": "確認パネル", + "PrevPage": "前のページ", + "NextPage": "次のページ", + "GotoTop": "最上部までスクロール", + "GotoBottom": "最下部までスクロール", + "FilteringBy": "", + "ResetInParentheses": "", + "OpenFilteringMenu": "", + "OpenFilteringMenuTooltip": "", + "FilterBy": "", + "ExitFilterMode": "", + "ExitFilterModeAuthor": "", + "FilterPathOption": "", + "FilterAuthorOption": "", + "EnterFileName": "", + "EnterAuthor": "", + "FilteringMenuTitle": "", + "WillCancelExistingFilterTooltip": "", + "MustExitFilterModeTitle": "", + "MustExitFilterModePrompt": "", + "Diff": "差分", + "EnterRefToDiff": "", + "EnterRefName": "参照を入力:", + "ExitDiffMode": "差分モードを終了", + "DiffingMenuTitle": "差分", + "SwapDiff": "", + "ViewDiffingOptions": "差分メニューを開く", + "ViewDiffingOptionsTooltip": "", + "OpenCommandLogMenu": "コマンドログメニューを開く", + "OpenCommandLogMenuTooltip": "", + "ShowingGitDiff": "", + "CommitDiff": "コミットの差分", + "CopyCommitHashToClipboard": "コミットのhashをクリップボードにコピー", + "CommitHash": "コミットのhash", + "CommitURL": "コミットのURL", + "CopyCommitMessageToClipboard": "コミットメッセージをクリップボードにコピー", + "CommitMessage": "コミットメッセージ", + "CommitSubject": "", + "CommitAuthor": "コミットの作成者名", + "CopyCommitAttributeToClipboard": "コミットの情報をコピー", + "CopyCommitAttributeToClipboardTooltip": "", + "CopyBranchNameToClipboard": "ブランチ名をクリップボードにコピー", + "CopyPathToClipboard": "ファイル名をクリップボードにコピー", + "CommitPrefixPatternError": "", + "CopySelectedTextToClipboard": "選択されたテキストをクリップボードにコピー", + "NoFilesStagedTitle": "ファイルがステージされていません", + "NoFilesStagedPrompt": "ファイルがステージされていません。すべての変更をコミットしますか?", + "BranchNotFoundTitle": "ブランチが見つかりませんでした。", + "BranchNotFoundPrompt": "ブランチが見つかりませんでした。新しくブランチを作成します ", + "BranchUnknown": "", + "DiscardChangeTitle": "選択行をアンステージ", + "DiscardChangePrompt": "選択された行を削除 (git reset) します。よろしいですか? この操作は取り消せません。\nこの警告を無効化するには設定ファイルの 'gui.skipDiscardChangeWarning' を true に設定してください。", + "CreateNewBranchFromCommit": "コミットにブランチを作成", + "BuildingPatch": "パッチを構築", + "ViewCommits": "コミットを閲覧", + "MinGitVersionError": "Lazygitの実行にはGit 2.20以降のバージョンが必要です。Gitを更新してください。もしくは、lazygitの後方互換性を改善するために https://github.com/jesseduffield/lazygit/issues にissueを作成してください。", + "RunningCustomCommandStatus": "カスタムコマンドを実行", + "SubmoduleStashAndReset": "", + "AndResetSubmodules": "", + "EnterSubmoduleTooltip": "サブモジュールを開く", + "Enter": "", + "CopySubmoduleNameToClipboard": "サブモジュール名をクリップボードにコピー", + "RemoveSubmodule": "サブモジュールを削除", + "RemoveSubmoduleTooltip": "", + "RemoveSubmodulePrompt": "サブモジュール '%s' とそのディレクトリを削除します。よろしいですか? この操作は取り消せません。", + "ResettingSubmoduleStatus": "サブモジュールをリセット", + "NewSubmoduleName": "新規サブモジュール名:", + "NewSubmoduleUrl": "新規サブモジュールのURL:", + "NewSubmodulePath": "新規サブモジュールのパス:", + "NewSubmodule": "サブモジュールを新規追加", + "AddingSubmoduleStatus": "サブモジュールを新規追加", + "UpdateSubmoduleUrl": "サブモジュール '%s' のURLを更新", + "UpdatingSubmoduleUrlStatus": "URLを更新", + "EditSubmoduleUrl": "サブモジュールのURLを更新", + "InitializingSubmoduleStatus": "サブモジュールを初期化", + "InitSubmoduleTooltip": "サブモジュールを初期化", + "Update": "", + "Initialize": "", + "SubmoduleUpdateTooltip": "サブモジュールを更新", + "UpdatingSubmoduleStatus": "サブモジュールを更新", + "BulkInitSubmodules": "サブモジュールを一括初期化", + "BulkUpdateSubmodules": "サブモジュールを一括更新", + "BulkDeinitSubmodules": "", + "ViewBulkSubmoduleOptions": "", + "BulkSubmoduleOptions": "", + "RunningCommand": "", + "SubCommitsTitle": "", + "SubmodulesTitle": "サブモジュール", + "NavigationTitle": "一覧パネルの操作", + "SuggestionsCheatsheetTitle": "", + "SuggestionsTitle": "", + "SuggestionsSubtitle": "", + "ExtrasTitle": "コマンドログ", + "PushingTagStatus": "", + "PullRequestURLCopiedToClipboard": "Pull requestのURLがクリップボードにコピーされました", + "CommitDiffCopiedToClipboard": "コミットの差分がクリップボードにコピーされました", + "CommitURLCopiedToClipboard": "コミットのURLがクリップボードにコピーされました", + "CommitMessageCopiedToClipboard": "コミットメッセージがクリップボードにコピーされました", + "CommitSubjectCopiedToClipboard": "", + "CommitAuthorCopiedToClipboard": "コミットの作成者名がクリップボードにコピーされました", + "PatchCopiedToClipboard": "", + "CopiedToClipboard": "クリップボードにコピーされました", + "ErrCannotEditDirectory": "ディレクトリは編集できません。", + "ErrStageDirWithInlineMergeConflicts": "マージコンフリクトの発生したファイルを含むディレクトリはステージ/アンステージできません。マージコンフリクトを解決してください。", + "ErrRepositoryMovedOrDeleted": "リポジトリが見つかりません。すでに削除されたか、移動された可能性があります ¯\\_(ツ)_/¯", + "ErrWorktreeMovedOrRemoved": "", + "CommandLog": "コマンドログ", + "ToggleShowCommandLog": "コマンドログの表示/非表示を切り替え", + "FocusCommandLog": "コマンドログにフォーカス", + "CommandLogHeader": "コマンドログの表示/非表示は '%s' で切り替えられます。\n", + "RandomTip": "ランダムTips", + "SelectParentCommitForMerge": "", + "ToggleWhitespaceInDiffView": "空白文字の差分の表示有無を切り替え", + "ToggleWhitespaceInDiffViewTooltip": "", + "IgnoreWhitespaceDiffViewSubTitle": "", + "IgnoreWhitespaceNotSupportedHere": "", + "IncreaseContextInDiffView": "", + "IncreaseContextInDiffViewTooltip": "", + "DecreaseContextInDiffView": "", + "DecreaseContextInDiffViewTooltip": "", + "DiffContextSizeChanged": "", + "CreatePullRequestOptions": "", + "DefaultBranch": "デフォルトブランチ", + "SelectBranch": "ブランチを選択", + "CreatePullRequest": "Pull Requestを作成", + "SelectConfigFile": "設定ファイルを選択", + "NoConfigFileFoundErr": "設定ファイルが見つかりませんでした。", + "LoadingFileSuggestions": "", + "LoadingCommits": "", + "MustSpecifyOriginError": "", + "GitOutput": "", + "GitCommandFailed": "", + "AbortTitle": "%sを中止", + "AbortPrompt": "実施中の%sを中止します。よろしいですか?", + "OpenLogMenu": "ログメニューを開く", + "OpenLogMenuTooltip": "", + "LogMenuTitle": "コミットログオプション", + "ToggleShowGitGraphAll": "", + "ShowGitGraph": "コミットグラフの表示", + "SortOrder": "並び替え", + "SortAlphabetical": "アルファベット順", + "SortByDate": "日付順", + "SortByRecency": "", + "SortBasedOnReflog": "", + "SortCommits": "コミットの表示順", + "CantChangeContextSizeError": "", + "OpenCommitInBrowser": "ブラウザでコミットを開く", + "ViewBisectOptions": "", + "ConfirmRevertCommit": "", + "RewordInEditorTitle": "コミットメッセージをエディタで編集", + "RewordInEditorPrompt": "", + "CheckoutPrompt": "", + "HardResetAutostashPrompt": "", + "UpstreamGone": "", + "NukeDescription": "", + "DiscardStagedChangesDescription": "", + "EmptyOutput": "", + "Patch": "", + "CustomPatch": "", + "CommitsCopied": "", + "CommitCopied": "", + "ResetPatch": "", + "ResetPatchTooltip": "", + "ApplyPatch": "", + "ApplyPatchTooltip": "", + "ApplyPatchInReverse": "", + "ApplyPatchInReverseTooltip": "", + "RemovePatchFromOriginalCommit": "", + "RemovePatchFromOriginalCommitTooltip": "", + "MovePatchOutIntoIndex": "", + "MovePatchOutIntoIndexTooltip": "", + "MovePatchIntoNewCommit": "", + "MovePatchIntoNewCommitTooltip": "", + "MovePatchToSelectedCommit": "", + "MovePatchToSelectedCommitTooltip": "", + "CopyPatchToClipboard": "", + "NoMatchesFor": "", + "MatchesFor": "", + "SearchKeybindings": "", + "SearchPrefix": "", + "FilterPrefix": "", + "ExitSearchMode": "", + "ExitTextFilterMode": "", + "Switch": "", + "SwitchToWorktree": "", + "SwitchToWorktreeTooltip": "", + "AlreadyCheckedOutByWorktree": "", + "BranchCheckedOutByWorktree": "", + "DetachWorktreeTooltip": "", + "Switching": "", + "RemoveWorktree": "", + "RemoveWorktreeTitle": "", + "DetachWorktree": "", + "DetachingWorktree": "", + "WorktreesTitle": "", + "WorktreeTitle": "", + "RemoveWorktreePrompt": "", + "ForceRemoveWorktreePrompt": "", + "RemovingWorktree": "", + "AddingWorktree": "", + "CantDeleteCurrentWorktree": "", + "AlreadyInWorktree": "", + "CantDeleteMainWorktree": "", + "NoWorktreesThisRepo": "", + "MissingWorktree": "", + "MainWorktree": "", + "NewWorktree": "", + "NewWorktreePath": "", + "NewWorktreeBase": "", + "RemoveWorktreeTooltip": "", + "BranchNameCannotBeBlank": "", + "NewBranchName": "", + "NewBranchNameLeaveBlank": "", + "ViewWorktreeOptions": "", + "CreateWorktreeFrom": "", + "CreateWorktreeFromDetached": "", + "LcWorktree": "", + "ChangingDirectoryTo": "", + "Name": "", + "Branch": "", + "Path": "", + "MarkedBaseCommitStatus": "", + "MarkAsBaseCommit": "", + "MarkAsBaseCommitTooltip": "", + "MarkedCommitMarker": "", + "PleaseGoToURL": "", + "NoCopiedCommits": "", + "DisabledMenuItemPrefix": "", + "QuickStartInteractiveRebase": "", + "QuickStartInteractiveRebaseTooltip": "", + "CannotQuickStartInteractiveRebase": "", + "ToggleRangeSelect": "範囲選択を切り替え", + "RangeSelectUp": "", + "RangeSelectDown": "", + "RangeSelectNotSupported": "", + "NoItemSelected": "", + "SelectedItemIsNotABranch": "", + "SelectedItemDoesNotHaveFiles": "", + "RangeSelectNotSupportedForSubmodules": "", + "OldCherryPickKeyWarning": "", + "CommandDoesNotSupportOpeningInEditor": "", + "Actions": { + "CheckoutCommit": "コミットをチェックアウト", + "CheckoutTag": "タグをチェックアウト", + "CheckoutBranch": "ブランチをチェックアウト", + "ForceCheckoutBranch": "ブランチを強制的にチェックアウト", + "DeleteLocalBranch": "", + "DeleteBranch": "ブランチを削除", + "Merge": "マージ", + "RebaseBranch": "", + "RenameBranch": "ブランチ名を変更", + "CreateBranch": "ブランチを作成", + "FastForwardBranch": "ブランチをfast forward", + "CherryPick": "", + "CheckoutFile": "ファイルをチェックアウトs", + "DiscardOldFileChange": "", + "SquashCommitDown": "", + "FixupCommit": "Fixupコミット", + "RewordCommit": "コミットメッセージを変更", + "DropCommit": "コミットを削除", + "EditCommit": "コミットを編集", + "AmendCommit": "Amendコミット", + "ResetCommitAuthor": "", + "SetCommitAuthor": "", + "AddCommitCoAuthor": "", + "RevertCommit": "コミットをrevert", + "CreateFixupCommit": "fixupコミットを作成", + "SquashAllAboveFixupCommits": "", + "MoveCommitUp": "コミットを上に移動", + "MoveCommitDown": "コミットを下に移動", + "CopyCommitMessageToClipboard": "コミットメッセージをクリップボードにコピー", + "CopyCommitSubjectToClipboard": "", + "CopyCommitDiffToClipboard": "コミットの差分をクリップボードにコピー", + "CopyCommitHashToClipboard": "コミットhashをクリップボードにコピー", + "CopyCommitURLToClipboard": "コミットのURLをクリップボードにコピー", + "CopyCommitAuthorToClipboard": "コミットの作成者名をクリップボードにコピー", + "CopyCommitAttributeToClipboard": "クリップボードにコピー", + "CopyPatchToClipboard": "", + "CustomCommand": "カスタムコマンド", + "DiscardAllChangesInDirectory": "ディレクトリ内のすべての変更を破棄", + "DiscardUnstagedChangesInDirectory": "ディレクトリ内のすべてのステージされていない変更を破棄", + "DiscardAllChangesInFile": "ファイル内のすべての変更を破棄", + "DiscardAllUnstagedChangesInFile": "ファイル内のすべてのステージされていない変更を破棄", + "StageFile": "ファイルをステージ", + "StageResolvedFiles": "マージコンフリクトが解決されたすべてのファイルをステージ", + "UnstageFile": "ファイルをアンステージ", + "UnstageAllFiles": "すべてのファイルをアンステージ", + "StageAllFiles": "すべてのファイルをステージ", + "IgnoreExcludeFile": "ファイルをignore", + "IgnoreFileErr": "", + "ExcludeFile": "", + "ExcludeGitIgnoreErr": "", + "Commit": "コミット", + "EditFile": "ファイルを編集", + "Push": "Push", + "Pull": "Pull", + "OpenFile": "ファイルを開く", + "OpenFileTooltip": "", + "StashAllChanges": "すべての変更をStash", + "StashAllChangesKeepIndex": "", + "StashStagedChanges": "ステージされた変更をStash", + "StashUnstagedChanges": "", + "StashIncludeUntrackedChanges": "", + "GitFlowFinish": "Git flow finish", + "GitFlowStart": "Git Flow start", + "CopyToClipboard": "クリップボードにコピー", + "CopySelectedTextToClipboard": "選択されたテキストをクリップボードにコピー", + "RemovePatchFromCommit": "パッチをコミットから削除", + "MovePatchToSelectedCommit": "パッチを選択したコミットに移動", + "MovePatchIntoIndex": "パッチをindexに移動", + "MovePatchIntoNewCommit": "パッチを次のコミットに移動", + "DeleteRemoteBranch": "リモートブランチを削除", + "SetBranchUpstream": "Upstreamブランチを設定", + "AddRemote": "リモートを追加", + "RemoveRemote": "リモートを削除", + "UpdateRemote": "リモートを更新", + "ApplyPatch": "パッチを適用", + "Stash": "Stash", + "RenameStash": "Stash名を変更", + "RemoveSubmodule": "サブモジュールを削除", + "ResetSubmodule": "サブモジュールをリセット", + "AddSubmodule": "サブモジュールを追加", + "UpdateSubmoduleUrl": "サブモジュールのURLを更新", + "InitialiseSubmodule": "サブモジュールを初期化", + "BulkInitialiseSubmodules": "サブモジュールを一括初期化", + "BulkUpdateSubmodules": "サブモジュールを一括更新", + "BulkDeinitialiseSubmodules": "", + "UpdateSubmodule": "サブモジュールを更新", + "CreateLightweightTag": "軽量タグを作成", + "CreateAnnotatedTag": "注釈付きタグを作成", + "DeleteLocalTag": "", + "DeleteRemoteTag": "", + "PushTag": "タグをpush", + "NukeWorkingTree": "", + "DiscardUnstagedFileChanges": "", + "RemoveUntrackedFiles": "", + "RemoveStagedFiles": "", + "SoftReset": "Softリセット", + "MixedReset": "Mixedリセット", + "HardReset": "Hardリセット", + "Undo": "アンドゥ", + "Redo": "リドゥ", + "CopyPullRequestURL": "Pull requestのURLをコピー", + "OpenDiffTool": "", + "OpenMergeTool": "マージツールを開く", + "OpenCommitInBrowser": "コミットをブラウザで開く", + "OpenPullRequest": "Pull requestをブラウザで開く", + "StartBisect": "Bisectを開始", + "ResetBisect": "Bisectをリセット", + "BisectSkip": "Bisectをスキップ", + "BisectMark": "Bisectをマーク", + "RemoveWorktree": "", + "AddWorktree": "" + }, + "Bisect": { + "MarkStart": "", + "MarkSkipCurrent": "", + "MarkSkipSelected": "", + "ResetTitle": "'git bisect' をリセット", + "ResetPrompt": "'git bisect' をリセットします。よろしいですか?", + "ResetOption": "Bisectをリセット", + "ChooseTerms": "", + "OldTermPrompt": "", + "NewTermPrompt": "", + "BisectMenuTitle": "bisect", + "Mark": "", + "SkipCurrent": "%s をスキップする", + "SkipSelected": "", + "CompleteTitle": "Bisect完了", + "CompletePrompt": "", + "CompletePromptIndeterminate": "", + "Bisecting": "" + }, + "Log": { + "EditRebase": "", + "MoveCommitUp": "", + "MoveCommitDown": "", + "CherryPickCommits": "", + "HandleUndo": "", + "HandleMidRebaseCommand": "", + "RemoveFile": "", + "CopyToClipboard": "", + "Remove": "", + "CreateFileWithContent": "", + "AppendingLineToFile": "", + "EditRebaseFromBaseCommit": "" + }, + "BreakingChangesTitle": "", + "BreakingChangesMessage": "", + "BreakingChangesByVersion": null +} diff --git a/pkg/i18n/translations/ko.json b/pkg/i18n/translations/ko.json new file mode 100644 index 00000000000..4bc25f6af2b --- /dev/null +++ b/pkg/i18n/translations/ko.json @@ -0,0 +1,924 @@ +{ + "NotEnoughSpace": "패널을 렌더링 할 공간이 부족합니다.", + "DiffTitle": "Diff", + "FilesTitle": "파일", + "BranchesTitle": "브랜치", + "CommitsTitle": "커밋", + "StashTitle": "Stash", + "SnakeTitle": "", + "EasterEgg": "", + "UnstagedChanges": "Staged되지 않은 변경 내용", + "StagedChanges": "Staged된 변경 내용", + "MainTitle": "메인", + "StagingTitle": "메인 패널 (Staging)", + "MergingTitle": "메인 패널 (Merging)", + "MergeConfirmTitle": "병합", + "NormalTitle": "메인 패널 (Normal)", + "LogTitle": "로그", + "CommitSummary": "커밋 메시지", + "CredentialsUsername": "사용자 이름", + "CredentialsPassword": "패스워드", + "CredentialsPassphrase": "SSH키의 passphrase 입력", + "CredentialsPIN": "", + "PassUnameWrong": "패스워드, passphrase 또는 사용자 이름이 잘못되었습니다.", + "Commit": "커밋 변경내용", + "CommitTooltip": "", + "AmendLastCommit": "마지맛 커밋 수정", + "AmendLastCommitTitle": "마지막 커밋 수정", + "SureToAmend": "마지막 커밋을 수정하시겠습니까? 그런 다음 커밋 패널에서 커밋 메시지를 변경할 수 있습니다.", + "NoCommitToAmend": "Amend 가능한 커밋이 없습니다.", + "CommitChangesWithEditor": "Git 편집기를 사용하여 변경 내용을 커밋합니다.", + "FindBaseCommitForFixup": "", + "FindBaseCommitForFixupTooltip": "", + "NoBaseCommitsFound": "", + "MultipleBaseCommitsFoundStaged": "", + "MultipleBaseCommitsFoundUnstaged": "", + "BaseCommitIsAlreadyOnMainBranch": "", + "BaseCommitIsNotInCurrentView": "", + "HunksWithOnlyAddedLinesWarning": "", + "StatusTitle": "상태", + "GlobalTitle": "글로벌 키 바인딩", + "Menu": "메뉴", + "Execute": "실행", + "Stage": "Staged 전환", + "StageTooltip": "", + "ToggleStagedAll": "모든 변경을 Staged/unstaged으로 전환", + "ToggleStagedAllTooltip": "", + "ToggleTreeView": "파일 트리뷰로 전환", + "ToggleTreeViewTooltip": "", + "OpenDiffTool": "", + "OpenMergeTool": "Git mergetool를 열기", + "OpenMergeToolTooltip": "", + "Refresh": "새로고침", + "RefreshTooltip": "", + "Push": "푸시", + "Pull": "업데이트", + "PushTooltip": "", + "PullTooltip": "", + "Scroll": "스크롤", + "FileFilter": "파일을 필터하기 (Staged/unstaged)", + "CopyToClipboardMenu": "", + "CopyFileName": "", + "CopyFilePath": "", + "CopyFileDiffTooltip": "", + "CopySelectedDiff": "", + "CopyAllFilesDiff": "", + "NoContentToCopyError": "", + "FileNameCopiedToast": "", + "FilePathCopiedToast": "", + "FileDiffCopiedToast": "", + "AllFilesDiffCopiedToast": "", + "FilterStagedFiles": "Staged된 파일만 표시", + "FilterUnstagedFiles": "Stage되지 않은 파일만 표시", + "ResetFilter": "필터 리셋", + "MergeConflictsTitle": "병합 충돌 내용", + "Checkout": "체크아웃", + "CheckoutTooltip": "", + "CantCheckoutBranchWhilePulling": "", + "TagCheckoutTooltip": "", + "RemoteBranchCheckoutTooltip": "", + "CantPullOrPushSameBranchTwice": "", + "NoChangedFiles": "변경된 파일이 없습니다.", + "SoftReset": "소프트 리셋", + "AlreadyCheckedOutBranch": "브랜치가 이미 체크아웃 되었습니다", + "SureForceCheckout": "강제로 체크아웃하시겠습니까? 모든 로컬 변경 사항을 잃게 됩니다.", + "ForceCheckoutBranch": "브랜치 강제 체크아웃", + "BranchName": "브랜치 이름", + "NewBranchNameBranchOff": "새 브랜치 이름 (branch is off of '{{.branchName}}')", + "CantDeleteCheckOutBranch": "체크아웃하는 브랜치는 삭제할 수 없습니다!", + "DeleteBranchTitle": "", + "DeleteLocalBranch": "", + "DeleteRemoteBranchOption": "", + "DeleteRemoteBranchPrompt": "", + "ForceDeleteBranchTitle": "", + "ForceDeleteBranchMessage": "'{{.selectedBranchName}}'는 완전히 병합되지 않았습니다. 정말 삭제하시겠습니까?", + "RebaseBranch": "체크아웃된 브랜치를 이 브랜치에 리베이스", + "RebaseBranchTooltip": "", + "CantRebaseOntoSelf": "브랜치를 자기 자신에게 리베이스할 수는 없습니다.", + "CantMergeBranchIntoItself": "브랜치를 자기 자신에게 병합할 수는 없습니다.", + "ForceCheckout": "강제 체크아웃", + "ForceCheckoutTooltip": "", + "CheckoutByName": "이름으로 체크아웃", + "CheckoutByNameTooltip": "", + "RemoteBranchCheckoutTitle": "", + "CheckoutTypeNewBranch": "", + "CheckoutTypeNewBranchTooltip": "", + "CheckoutTypeDetachedHead": "", + "CheckoutTypeDetachedHeadTooltip": "", + "NewBranch": "새 브랜치 생성", + "NewBranchFromStashTooltip": "", + "NoBranchesThisRepo": "저장소에 브랜치가 존재하지 않습니다.", + "CommitWithoutMessageErr": "커밋 메시지를 입력하세요.", + "Close": "닫기", + "CloseCancel": "닫기/취소", + "Confirm": "확인", + "Quit": "종료", + "SquashTooltip": "", + "CannotSquashOrFixupFirstCommit": "There's no commit below to squash into", + "Fixup": "Fixup", + "FixupTooltip": "", + "SureFixupThisCommit": "Are you sure you want to 'fixup' this commit? It will be merged into the commit below", + "SureSquashThisCommit": "Are you sure you want to squash this commit into the commit below?", + "Squash": "Squash", + "PickCommitTooltip": "Pick commit (when mid-rebase)", + "Pick": "", + "CantPickDisabledReason": "", + "Edit": "", + "RevertCommit": "커밋 되돌리기", + "Revert": "", + "RevertCommitTooltip": "", + "Reword": "커밋메시지 변경", + "CommitRewordTooltip": "", + "DropCommit": "커밋 삭제", + "DropCommitTooltip": "", + "MoveDownCommit": "커밋을 1개 아래로 이동", + "MoveUpCommit": "커밋을 1개 위로 이동", + "CannotMoveAnyFurther": "", + "EditCommit": "", + "EditCommitTooltip": "커밋을 편집", + "AmendCommitTooltip": "Amend commit with staged changes", + "Amend": "", + "ResetAuthor": "Reset commit author", + "ResetAuthorTooltip": "", + "SetAuthor": "", + "SetAuthorTooltip": "", + "AddCoAuthor": "", + "AmendCommitAttribute": "", + "AmendCommitAttributeTooltip": "", + "SetAuthorPromptTitle": "", + "AddCoAuthorPromptTitle": "", + "AddCoAuthorTooltip": "", + "SureResetCommitAuthor": "The author field of this commit will be updated to match the configured user. This also renews the author timestamp. Continue?", + "RewordCommitEditor": "에디터에서 커밋메시지 수정", + "NoCommitsThisBranch": "이 브랜치에 커밋이 없습니다.", + "UpdateRefHere": "", + "Error": "오류", + "Undo": "되돌리기", + "UndoReflog": "되돌리기 (reflog) (실험적)", + "RedoReflog": "다시 실행 (reflog) (실험적)", + "UndoTooltip": "", + "RedoTooltip": "", + "UndoMergeResolveTooltip": "", + "DiscardAllTooltip": "", + "DiscardUnstagedTooltip": "", + "Pop": "Pop", + "StashPopTooltip": "", + "Drop": "Drop", + "StashDropTooltip": "", + "Apply": "적용", + "StashApplyTooltip": "", + "NoStashEntries": "Stash가 존재하지 않습니다.", + "StashDrop": "Stash를 삭제", + "SureDropStashEntry": "정말로 Stash를 삭제하시겠습니까?", + "StashPop": "Stash를 pop", + "SurePopStashEntry": "정말로 Stash를 pop하시겠습니까?", + "StashApply": "Stash 적용", + "SureApplyStashEntry": "정말로 Stash를 적용하시겠습니까?", + "NoTrackedStagedFilesStash": "You have no tracked/staged files to stash", + "NoFilesToStash": "", + "StashChanges": "변경을 Stash", + "RenameStash": "Rename stash", + "RenameStashPrompt": "Rename stash: {{.stashName}}", + "OpenConfig": "설정 파일 열기", + "EditConfig": "설정 파일 수정", + "ForcePush": "강제 푸시", + "ForcePushPrompt": "브랜치가 원격 브랜치에서 분기하고 있습니다. 'esc'를 눌러 취소하거나, 'enter'를 눌러 강제로 푸시하세요.", + "ForcePushDisabled": "브랜치가 원격 브랜치에서 분기하고 있습니다. force push가 비활성화 되었습니다.", + "UpdatesRejected": "", + "UpdatesRejectedAndForcePushDisabled": "업데이트가 거부되었으며 강제 푸시를 비활성화했습니다.", + "CheckForUpdate": "업데이트 확인", + "CheckingForUpdates": "업데이트 확인 중...", + "UpdateAvailableTitle": "새로운 업데이트 사용가능!", + "UpdateAvailable": "버전 {{.newVersion}} 을(를) 설치하시겠습니까?", + "UpdateInProgressWaitingStatus": "업데이트 중", + "UpdateCompletedTitle": "업데이트 완료!", + "UpdateCompleted": "업데이트 설치에 성공했습니다. lazygit를 재시작해주세요.", + "FailedToRetrieveLatestVersionErr": "버전 정보를 받아오는데 실패했습니다.", + "OnLatestVersionErr": "이미 최신 버전을 사용하고 있습니다.", + "MajorVersionErr": "새 버전 ({{.newVersion}}) 에 현재 버전({{.currentVersion}}) 과 비교할 때 호환되지 않는 변경 사항이 있습니다.", + "CouldNotFindBinaryErr": "{{.url}} 에서 바이너리를 찾을 수 없습니다.", + "UpdateFailedErr": "업데이트 실패: {{.errMessage}}", + "ConfirmQuitDuringUpdateTitle": "현재 업데이트 중입니다.", + "ConfirmQuitDuringUpdate": "현재 업데이트를 진행 중입니다.종료하시겠습니까?", + "MergeToolTitle": "병합 도구", + "MergeToolPrompt": "정말로 `git mergetool`을 여시겠습니까?", + "IntroPopupMessage": "\nlazygit!를 이용해주셔서 감사합니다. Seriously you rock. Three things to share with you:\n\n 1) lazygit의 기능에 대해 알아보려면 다음 비디오를 참조하세요.\n https://youtu.be/CPLdltN7wgE\n\n 2) 다음 사이트에서 최신 릴리스 노트를 읽어보세요.:\n https://github.com/jesseduffield/lazygit/releases\n\n 3) 만약 당신이 Git을 사용한다면, 그것은 당신을 프로그래머로 만들 것입니다!\n\t 당신의 도움으로 우리는 lazygit을 더 좋게 만들 수 있습니다, 그러니 기여자가 되는 것을 고려해보세요. 그리고 재미에 참여하세요:\n https://github.com/jesseduffield/lazygit\n 또한 오른쪽 하단의 기부 버튼을 클릭하여 저를 후원하고 작업할 내용을 알려주실 수 있습니다.\n 또는 저장소에 스타를 눌러 사랑을 공유할 수도 있습니다!\n", + "DeprecatedEditConfigWarning": "", + "GitconfigParseErr": "따옴표로 묶이지 않은 '\\' 문자가 있어서 Gogit이 gitconfig 파일을 분석하지 못했습니다. 이를 제거하면 문제가 해결됩니다.", + "EditFile": "파일 편집", + "EditFileTooltip": "", + "OpenFile": "파일 닫기", + "OpenFileTooltip": "", + "OpenInEditor": "", + "IgnoreFile": ".gitignore에 추가", + "ExcludeFile": "", + "RefreshFiles": "파일 새로고침", + "Merge": "현재 브랜치에 병합", + "MergeBranchTooltip": "", + "ConfirmQuit": "정말로 종료하시겠습니까?", + "SwitchRepo": "최근에 사용한 저장소로 전환", + "AllBranchesLogGraph": "모든 브랜치 로그 표시", + "UnsupportedGitService": "지원되지 않는 Git 서비스입니다.", + "CopyPullRequestURL": "풀 리퀘스트 URL을 클립보드에 복사", + "NoBranchOnRemote": "브랜치가 원격에 없습니다. 원격에 먼저 푸시해야합니다.", + "Fetch": "Fetch", + "FetchTooltip": "", + "NoAutomaticGitFetchTitle": "자동 git 업데이트) 없음", + "NoAutomaticGitFetchBody": "Lazygit은 private 저장소에서 \"git fetch\"를 사용할 수 없습니다. 파일 패널에서 'f'를 사용하여 \"git fetch\"를 수동으로 실행하세요.", + "FileEnter": "Stage individual hunks/lines for file, or collapse/expand for directory", + "FileEnterTooltip": "", + "FileStagingRequirements": "추적된 파일에 대해 개별 라인만 stage할 수 있습니다.", + "StageSelectionTooltip": "선택한 행을 staged / unstaged", + "DiscardSelection": "변경을 삭제 (git reset)", + "DiscardSelectionTooltip": "", + "ToggleSelectHunk": "Toggle select hunk", + "ToggleSelectHunkTooltip": "", + "ToggleSelectionForPatch": "Line(s)을 패치에 추가/삭제", + "ToggleSelectionForPatchTooltip": "", + "EditHunk": "", + "EditHunkTooltip": "", + "ToggleStagingView": "패널 전환", + "ToggleStagingViewTooltip": "", + "ReturnToFilesPanel": "파일 목록으로 돌아가기", + "FastForward": "Fast-forward this branch from its upstream", + "FastForwardTooltip": "", + "FastForwarding": "Fast-forwarding", + "FoundConflictsTitle": "Auto-merge failed", + "ViewConflictsMenuItem": "", + "AbortMenuItem": "", + "PickHunk": "Pick hunk", + "PickAllHunks": "Pick all hunks", + "ViewMergeRebaseOptions": "View merge/rebase options", + "ViewMergeRebaseOptionsTooltip": "", + "ViewMergeOptions": "", + "ViewRebaseOptions": "", + "NotMergingOrRebasing": "You are currently neither rebasing nor merging", + "AlreadyRebasing": "", + "RecentRepos": "최근에 사용한 저장소", + "MergeOptionsTitle": "Merge options", + "RebaseOptionsTitle": "Rebase options", + "CommitSummaryTitle": "커밋메시지", + "CommitDescriptionTitle": "", + "CommitDescriptionSubTitle": "", + "LocalBranchesTitle": "브랜치", + "SearchTitle": "검색", + "TagsTitle": "태그", + "MenuTitle": "메뉴", + "CommitMenuTitle": "", + "RemotesTitle": "원격", + "RemoteBranchesTitle": "원격 브랜치", + "PatchBuildingTitle": "메인 패널 (Patch Building)", + "InformationTitle": "정보", + "SecondaryTitle": "Secondary", + "ReflogCommitsTitle": "Reflog", + "ConflictsResolved": "모든 병합 충돌이 해결되었습니다. 계속 할까요?", + "Continue": "", + "RebasingTitle": "", + "RebasingFromBaseCommitTitle": "", + "SimpleRebase": "", + "InteractiveRebase": "", + "RebaseOntoBaseBranch": "", + "InteractiveRebaseTooltip": "", + "RebaseOntoBaseBranchTooltip": "", + "MustSelectTodoCommits": "", + "ConfirmMerge": "정말로 '{{.selectedBranch}}' 을(를) '{{.checkedOutBranch}}'에 병합하시겠습니까?", + "FwdNoUpstream": "Cannot fast-forward a branch with no upstream", + "FwdNoLocalUpstream": "Cannot fast-forward a branch whose remote is not registered locally", + "FwdCommitsToPush": "Cannot fast-forward a branch with commits to push", + "PullRequestNoUpstream": "", + "ErrorOccurred": "오류가 발생했습니다! issue를 작성해 주세요: ", + "NoRoom": "Not enough room", + "YouAreHere": "현재 위치", + "YouDied": "", + "RewordNotSupported": "Rewording commits while interactively rebasing is not currently supported", + "ChangingThisActionIsNotAllowed": "", + "CherryPickCopy": "커밋을 복사 (cherry-pick)", + "CherryPickCopyTooltip": "", + "CherryPickCopyRange": "", + "CherryPickCopyRangeTooltip": "", + "PasteCommits": "커밋을 붙여넣기 (cherry-pick)", + "SureCherryPick": "정말로 복사한 커밋을 이 브랜치에 체리픽하시겠습니까?", + "CherryPick": "체리픽", + "CannotCherryPickNonCommit": "", + "CannotCherryPickMergeCommit": "", + "Donate": "후원", + "AskQuestion": "질문하기", + "PrevLine": "이전 줄 선택", + "NextLine": "다음 줄 선택", + "PrevHunk": "이전 hunk를 선택", + "NextHunk": "다음 hunk를 선택", + "PrevConflict": "이전 충돌을 선택", + "NextConflict": "다음 충돌을 선택", + "SelectPrevHunk": "이전 hunk를 선택", + "SelectNextHunk": "다음 hunk를 선택", + "ScrollDown": "아래로 스크롤", + "ScrollUp": "위로 스크롤", + "ScrollUpMainWindow": "메인 패널을 위로 스크롤", + "ScrollDownMainWindow": "메인 패널을 아래로로 스크롤", + "AmendCommitTitle": "Amend commit", + "AmendCommitPrompt": "Are you sure you want to amend this commit with your staged files?", + "DropCommitTitle": "커밋 삭제", + "DropCommitPrompt": "정말로 선택한 커밋을 삭제하시겠습니까?", + "DropUpdateRefPrompt": "", + "PullingStatus": "업데이트 중", + "PushingStatus": "푸시 중", + "FetchingStatus": "패치 중", + "SquashingStatus": "Squashing", + "FixingStatus": "Fixing up", + "DeletingStatus": "Deleting", + "DroppingStatus": "", + "MovingStatus": "Moving", + "RebasingStatus": "Rebasing", + "MergingStatus": "", + "LowercaseRebasingStatus": "", + "LowercaseMergingStatus": "", + "AmendingStatus": "Amending", + "CherryPickingStatus": "Cherry-picking", + "UndoingStatus": "Undoing", + "RedoingStatus": "Redoing", + "CheckingOutStatus": "Checking out", + "CommittingStatus": "Committing", + "RevertingStatus": "", + "CreatingFixupCommitStatus": "", + "CommitFiles": "Commit files", + "SubCommitsDynamicTitle": "커밋 (%s)", + "CommitFilesDynamicTitle": "Diff files (%s)", + "RemoteBranchesDynamicTitle": "원격브랜치 (%s)", + "ViewItemFiles": "View selected item's files", + "ViewItemFilesTooltip": "", + "CommitFilesTitle": "커밋 파일", + "CheckoutCommitFileTooltip": "Checkout file", + "CanOnlyDiscardFromLocalCommits": "", + "Remove": "", + "DiscardOldFileChangeTooltip": "Discard this commit's changes to this file", + "DiscardFileChangesTitle": "파일 변경 사항 버리기", + "DiscardFileChangesPrompt": "Are you sure you want to discard this commit's changes to this file? If this file was created in this commit, it will be deleted", + "DisabledForGPG": "Feature not available for users using GPG", + "CreateRepo": "Git 저장소가 아닙니다. 저장소를 생성하시겠습니까? (y/n): ", + "BareRepo": "", + "InitialBranch": "", + "NoRecentRepositories": "", + "IncorrectNotARepository": "", + "AutoStashTitle": "Autostash?", + "AutoStashPrompt": "You must stash and pop your changes to bring them across. Do this automatically? (enter/esc)", + "StashPrefix": "Auto-stashing changes for ", + "Discard": "View 'discard changes' options", + "DiscardChangesTitle": "", + "DiscardFileChangesTooltip": "", + "Cancel": "취소", + "DiscardAllChanges": "모든 변경사항 버리기", + "DiscardUnstagedChanges": "Discard unstaged changes", + "DiscardAllChangesToAllFiles": "Nuke working tree", + "DiscardAnyUnstagedChanges": "Discard unstaged changes", + "DiscardUntrackedFiles": "Discard untracked files", + "DiscardStagedChanges": "", + "HardReset": "Hard reset", + "BranchDeleteTooltip": "", + "TagDeleteTooltip": "", + "Delete": "", + "Reset": "", + "ResetTooltip": "", + "ViewResetOptions": "View reset options", + "FileResetOptionsTooltip": "", + "CreateFixupCommit": "Create fixup commit", + "CreateFixupCommitTooltip": "Create fixup commit for this commit", + "CreateAmendCommit": "", + "FixupMenu_Fixup": "", + "FixupMenu_FixupTooltip": "", + "FixupMenu_AmendWithChanges": "", + "FixupMenu_AmendWithChangesTooltip": "", + "FixupMenu_AmendWithoutChanges": "", + "FixupMenu_AmendWithoutChangesTooltip": "", + "SquashAboveCommitsTooltip": "Squash all 'fixup!' commits above selected commit (autosquash)", + "SquashCommitsAboveSelectedTooltip": "", + "SquashCommitsInCurrentBranchTooltip": "", + "SquashAboveCommits": "", + "SquashCommitsInCurrentBranch": "", + "SquashCommitsAboveSelectedCommit": "", + "CannotSquashCommitsInCurrentBranch": "", + "ExecuteCustomCommand": "Execute custom command", + "ExecuteCustomCommandTooltip": "", + "CustomCommand": "Custom command:", + "CommitChangesWithoutHook": "Commit changes without pre-commit hook", + "SkipHookPrefixNotConfigured": "You have not configured a commit message prefix for skipping hooks. Set `git.skipHookPrefix = 'WIP'` in your config", + "ResetTo": "Reset to", + "ResetSoftTooltip": "", + "ResetMixedTooltip": "", + "ResetHardTooltip": "", + "PressEnterToReturn": "엔터를 눌러 lazygit으로 돌아갑니다.", + "ViewStashOptions": "Stash 옵션 보기", + "ViewStashOptionsTooltip": "", + "Stash": "", + "StashTooltip": "", + "StashAllChanges": "변경사항을 Stash", + "StashStagedChanges": "Stash staged changes", + "StashAllChangesKeepIndex": "", + "StashUnstagedChanges": "", + "StashIncludeUntrackedChanges": "", + "StashOptions": "Stash 옵션", + "NotARepository": "Error: must be run inside a git repository", + "WorkingDirectoryDoesNotExist": "", + "Jump": "패널로 이동", + "ScrollLeftRight": "좌우로 스크롤", + "ScrollLeft": "우 스크롤", + "ScrollRight": "좌 스크롤", + "DiscardPatch": "Patch 버리기", + "DiscardPatchConfirm": "You can only build a patch from one commit/stash-entry at a time. Discard current patch?", + "DiscardPatchSameCommitConfirm": "", + "CantPatchWhileRebasingError": "You cannot build a patch or run patch commands while in a merging or rebasing state", + "ToggleAddToPatch": "Toggle file included in patch", + "ToggleAddToPatchTooltip": "", + "ToggleAllInPatch": "Toggle all files included in patch", + "ToggleAllInPatchTooltip": "", + "UpdatingPatch": "Updating patch", + "ViewPatchOptions": "커스텀 Patch 옵션 보기", + "PatchOptionsTitle": "Patch 옵션", + "NoPatchError": "No patch created yet. To start building a patch, use 'space' on a commit file or enter to add specific lines", + "EmptyPatchError": "", + "EnterCommitFile": "Enter file to add selected lines to the patch (or toggle directory collapsed)", + "EnterCommitFileTooltip": "", + "ExitCustomPatchBuilder": "", + "EnterUpstream": "'\u003cremote\u003e \u003cbranchname\u003e'와 같은 형식으로 입력하세요.", + "InvalidUpstream": "Upstream의 형식이 잘못되었습니다.'\u003cremote\u003e \u003cbranchname\u003e' 와 같은 형식으로 입력하세요.", + "ReturnToRemotesList": "원격목록으로 돌아가기", + "NewRemote": "새로운 Remote 추가", + "NewRemoteName": "새로운 Remote 이름:", + "NewRemoteUrl": "새로운 Remote URL:", + "ViewBranches": "", + "EditRemoteName": "{{.remoteName}} 의 새로운 Remote 이름 입력:", + "EditRemoteUrl": "{{.remoteName}} 의 새로운 Remote URL 입력:", + "RemoveRemote": "Remote를 삭제", + "RemoveRemoteTooltip": "", + "RemoveRemotePrompt": "정말로 Remote를 삭제하시겠습니까?", + "DeleteRemoteBranch": "원격 브랜치를 삭제", + "DeleteRemoteBranchMessage": "정말로 원격 브랜치를 삭제하시겠습니까?", + "DeleteRemoteBranchTooltip": "", + "SetAsUpstream": "", + "SetAsUpstreamTooltip": "", + "SetUpstream": "Set as upstream of checked-out branch", + "UnsetUpstream": "", + "ViewDivergenceFromUpstream": "", + "ViewDivergenceFromBaseBranch": "", + "CouldNotDetermineBaseBranch": "", + "DivergenceSectionHeaderLocal": "", + "DivergenceSectionHeaderRemote": "", + "ViewUpstreamResetOptions": "", + "ViewUpstreamResetOptionsTooltip": "", + "ViewUpstreamRebaseOptions": "", + "ViewUpstreamRebaseOptionsTooltip": "", + "UpstreamGenericName": "", + "SetUpstreamTitle": "Set upstream branch", + "SetUpstreamMessage": "Are you sure you want to set the upstream branch of '{{.checkedOut}}' to '{{.selected}}'", + "EditRemoteTooltip": "Remote를 수정", + "TagCommit": "Tag commit", + "TagCommitTooltip": "", + "TagMenuTitle": "태그 작성", + "TagNameTitle": "태그 이름", + "TagMessageTitle": "태그 메시지", + "LightweightTag": "Lightweight tag", + "AnnotatedTag": "Annotated tag", + "DeleteTagTitle": "", + "DeleteLocalTag": "", + "DeleteRemoteTag": "", + "SelectRemoteTagUpstream": "", + "DeleteRemoteTagPrompt": "", + "RemoteTagDeletedMessage": "", + "PushTagTitle": "원격에 태그 '{{.tagName}}' 를 푸시", + "PushTag": "태그를 push", + "PushTagTooltip": "", + "NewTag": "태그를 생성", + "NewTagTooltip": "", + "CreatingTag": "", + "ForceTag": "", + "ForceTagPrompt": "", + "FetchRemoteTooltip": "원격을 업데이트", + "FetchingRemoteStatus": "원격을 업데이트 중", + "CheckoutCommit": "커밋을 체크아웃", + "CheckoutCommitTooltip": "", + "SureCheckoutThisCommit": "정말로 선택한 커밋을 체크아웃 하시겠습니까?", + "GitFlowOptions": "Git-flow 옵션 보기", + "NotAGitFlowBranch": "This does not seem to be a git flow branch", + "NewBranchNamePrompt": "새로운 브랜치 이름 입력", + "IgnoreTracked": "Ignore tracked file", + "ExcludeTracked": "", + "IgnoreTrackedPrompt": "Are you sure you want to ignore a tracked file?", + "ExcludeTrackedPrompt": "", + "ViewResetToUpstreamOptions": "View upstream reset options", + "NextScreenMode": "다음 스크린 모드 (normal/half/fullscreen)", + "PrevScreenMode": "이전 스크린 모드", + "StartSearch": "검색 시작", + "StartFilter": "", + "Panel": "패널", + "Keybindings": "키 바인딩", + "KeybindingsLegend": "", + "KeybindingsMenuSectionLocal": "", + "KeybindingsMenuSectionGlobal": "", + "KeybindingsMenuSectionNavigation": "", + "RenameBranch": "브랜치 이름 변경", + "Upstream": "", + "UpstreamTooltip": "", + "BranchUpstreamOptionsTitle": "", + "ViewBranchUpstreamOptions": "", + "ViewBranchUpstreamOptionsTooltip": "", + "UpstreamNotSetError": "", + "NewGitFlowBranchPrompt": "New {{.branchType}} name:", + "RenameBranchWarning": "This branch is tracking a remote. This action will only rename the local branch name, not the name of the remote branch. Continue?", + "OpenKeybindingsMenu": "매뉴 열기", + "ResetCherryPick": "Reset cherry-picked (copied) commits selection", + "NextTab": "이전 탭", + "PrevTab": "다음 탭", + "CantUndoWhileRebasing": "리베이스중에는 되돌릴 수 없습니다.", + "CantRedoWhileRebasing": "리베이스중에는 다시 실행할 수 없습니다.", + "MustStashWarning": "Pulling a patch out into the index requires stashing and unstashing your changes. If something goes wrong, you'll be able to access your files from the stash. Continue?", + "MustStashTitle": "Must stash", + "ConfirmationTitle": "확인 패널", + "PrevPage": "이전 페이지", + "NextPage": "다음 페이지", + "GotoTop": "맨 위로 스크롤 ", + "GotoBottom": "맨 아래로 스크롤 ", + "FilteringBy": "Filtering by", + "ResetInParentheses": "(reset)", + "OpenFilteringMenu": "View filter-by-path options", + "OpenFilteringMenuTooltip": "", + "FilterBy": "Filter by", + "ExitFilterMode": "Stop filtering by path", + "ExitFilterModeAuthor": "", + "FilterPathOption": "Enter path to filter by", + "FilterAuthorOption": "", + "EnterFileName": "Enter path:", + "EnterAuthor": "", + "FilteringMenuTitle": "Filtering", + "WillCancelExistingFilterTooltip": "", + "MustExitFilterModeTitle": "Command not available", + "MustExitFilterModePrompt": "Command not available in filtered mode. Exit filtered mode?", + "Diff": "Diff", + "EnterRefToDiff": "Enter ref to diff", + "EnterRefName": "Ref 입력:", + "ExitDiffMode": "Diff 모드 종료", + "DiffingMenuTitle": "Diff", + "SwapDiff": "Reverse diff direction", + "ViewDiffingOptions": "Diff 메뉴 열기", + "ViewDiffingOptionsTooltip": "", + "OpenCommandLogMenu": "명령어 로그 메뉴 열기", + "OpenCommandLogMenuTooltip": "", + "ShowingGitDiff": "Showing output for:", + "CommitDiff": "커밋의 iff", + "CopyCommitHashToClipboard": "커밋 해시를 클립보드에 복사", + "CommitHash": "커밋 해시", + "CommitURL": "커밋 URL", + "CopyCommitMessageToClipboard": "커밋 메시지를 클립보드에 복사", + "CommitMessage": "커밋 메시지", + "CommitSubject": "", + "CommitAuthor": "커밋 작성자", + "CopyCommitAttributeToClipboard": "커밋 attribute 복사", + "CopyCommitAttributeToClipboardTooltip": "", + "CopyBranchNameToClipboard": "브랜치명을 클립보드에 복사", + "CopyPathToClipboard": "파일명을 클립보드에 복사", + "CommitPrefixPatternError": "Error in commitPrefix pattern", + "CopySelectedTextToClipboard": "선택한 텍스트를 클립보드에 복사", + "NoFilesStagedTitle": "파일이 Staged 되지 않았습니다.", + "NoFilesStagedPrompt": "파일이 Staged 되지 않았습니다. 모든 파일을 커밋하시겠습니까?", + "BranchNotFoundTitle": "브랜치를 찾을 수 없습니다.", + "BranchNotFoundPrompt": "브랜치를 찾을 수 없습니다. 새로운 브랜치를 생성합니다.", + "BranchUnknown": "", + "DiscardChangeTitle": "선택한 라인을 unstaged", + "DiscardChangePrompt": "정말로 선택한 라인을 삭제 (git reset) 하시겠습니까? 이 조작은 취소할 수 없습니다.\n이 경고를 비활성화 하려면 설정 파일의 'gui.skipDiscardChangeWarning' 를 true로 설정하세요.", + "CreateNewBranchFromCommit": "커밋에서 새 브랜치를 만듭니다.", + "BuildingPatch": "Building patch", + "ViewCommits": "커밋 보기", + "MinGitVersionError": "Lazygit 실행을 위해서는 Git 2.20 이후의 버전(2018년 이후의)이 필요합니다. Git를 업데이트 해주세요. 아니면 lazygit이 이전 버전과 더 잘 호환되도록 https://github.com/jesseduffield/lazygit/issues 에 issue를 작성해 주세요.", + "RunningCustomCommandStatus": "커스텀 명령어 실행", + "SubmoduleStashAndReset": "Stash uncommitted submodule changes and update", + "AndResetSubmodules": "And reset submodules", + "EnterSubmoduleTooltip": "서브모듈 열기", + "Enter": "", + "CopySubmoduleNameToClipboard": "서브모듈 이름을 클립보드에 복사", + "RemoveSubmodule": "서브모듈 삭제", + "RemoveSubmoduleTooltip": "", + "RemoveSubmodulePrompt": "정말로 서브모듈 '%s'및 해당 디렉토리를 제거하시겠습니까? 이것은 되돌릴 수 없습니다.", + "ResettingSubmoduleStatus": "서브모듈를 리셋", + "NewSubmoduleName": "새로운 서브모듈이름 :", + "NewSubmoduleUrl": "새로운 서브모듈의 URL:", + "NewSubmodulePath": "새로운 서브모듈의 경로", + "NewSubmodule": "새로운 서브모듈 추가", + "AddingSubmoduleStatus": "새로운 서브모듈 추가", + "UpdateSubmoduleUrl": "서브모듈 '%s' 의 URL을 업데이트", + "UpdatingSubmoduleUrlStatus": "Updating URL", + "EditSubmoduleUrl": "서브모듈의 URL을 수정", + "InitializingSubmoduleStatus": "서브모듈 초기화", + "InitSubmoduleTooltip": "서브모듈 초기화", + "Update": "", + "Initialize": "", + "SubmoduleUpdateTooltip": "서브모듈 업데이트", + "UpdatingSubmoduleStatus": "서브모듈 업데이트", + "BulkInitSubmodules": "서브모듈 일괄 초기화", + "BulkUpdateSubmodules": "서브모듈 일괄 업데이트", + "BulkDeinitSubmodules": "Bulk deinit submodules", + "ViewBulkSubmoduleOptions": "View bulk submodule options", + "BulkSubmoduleOptions": "Bulk submodule options", + "RunningCommand": "Running command", + "SubCommitsTitle": "Sub-commits", + "SubmodulesTitle": "서브모듈", + "NavigationTitle": "List panel navigation", + "SuggestionsCheatsheetTitle": "추천", + "SuggestionsTitle": "추천 (press %s to focus)", + "SuggestionsSubtitle": "", + "ExtrasTitle": "명령어 로그", + "PushingTagStatus": "Pushing tag", + "PullRequestURLCopiedToClipboard": "풀 리퀘스트의 URL을 클립보드에 복사했습니다.", + "CommitDiffCopiedToClipboard": "커밋의 Diff를 클립보드에 복사했습니다.", + "CommitURLCopiedToClipboard": "커밋의 URL를 클립보드에 복사했습니다.", + "CommitMessageCopiedToClipboard": "커밋 메시지를 클립보드에 복사했습니다.", + "CommitSubjectCopiedToClipboard": "", + "CommitAuthorCopiedToClipboard": "커밋 작성자를 클립보드에 복사했습니다.", + "PatchCopiedToClipboard": "", + "CopiedToClipboard": "클립보드에 복사했습니다.", + "ErrCannotEditDirectory": "디렉토리는 편집할 수 없습니다.", + "ErrStageDirWithInlineMergeConflicts": "병합 충돌이 발생한 파일을 포함하는 디렉토리는 Staged/untaged할 수 없습니다. 병합 충돌을 먼저 해결하세요.", + "ErrRepositoryMovedOrDeleted": "저장소를 찾을 수 없습니다. 이미 삭제되었거나 이동되었을 가능성이 있습니다. ¯\\_(ツ)_/¯", + "ErrWorktreeMovedOrRemoved": "", + "CommandLog": "명령어 로그", + "ToggleShowCommandLog": "명령어 로그 표시 여부 전환", + "FocusCommandLog": "명령어 로그에 포커스", + "CommandLogHeader": "명령어 로그표시 여부는 '%s' 으로 전환할 수 있습니다.\n", + "RandomTip": "랜덤 Tip", + "SelectParentCommitForMerge": "병합을 위한 상위 커밋 선택", + "ToggleWhitespaceInDiffView": "공백문자를 Diff 뷰에서 표시 여부 전환", + "ToggleWhitespaceInDiffViewTooltip": "", + "IgnoreWhitespaceDiffViewSubTitle": "", + "IgnoreWhitespaceNotSupportedHere": "", + "IncreaseContextInDiffView": "Diff 보기의 변경 사항 주위에 표시되는 컨텍스트의 크기를 늘리기", + "IncreaseContextInDiffViewTooltip": "", + "DecreaseContextInDiffView": "Diff 보기의 변경 사항 주위에 표시되는 컨텍스트 크기 줄이기", + "DecreaseContextInDiffViewTooltip": "", + "DiffContextSizeChanged": "", + "CreatePullRequestOptions": "풀 리퀘스트 생성 옵션", + "DefaultBranch": "기본 브랜치", + "SelectBranch": "브랜치를 선택", + "CreatePullRequest": "풀 리퀘스트 생성", + "SelectConfigFile": "설정파일 선택", + "NoConfigFileFoundErr": "설정 파일을 찾지 못했습니다.", + "LoadingFileSuggestions": "파일 제안 로딩 중", + "LoadingCommits": "커밋 로딩", + "MustSpecifyOriginError": "Must specify a remote if specifying a branch", + "GitOutput": "Git output:", + "GitCommandFailed": "Git command failed. Check command log for details (open with %s)", + "AbortTitle": "%s 중지", + "AbortPrompt": "정말로 실행중인 %s 를 중지할까요?", + "OpenLogMenu": "로그 메뉴 열기", + "OpenLogMenuTooltip": "", + "LogMenuTitle": "커밋 로그 옵션", + "ToggleShowGitGraphAll": "Toggle show whole git graph (pass the `--all` flag to `git log`)", + "ShowGitGraph": "커밋 그래프 표시", + "SortOrder": "", + "SortAlphabetical": "", + "SortByDate": "", + "SortByRecency": "", + "SortBasedOnReflog": "", + "SortCommits": "커밋 정렬", + "CantChangeContextSizeError": "Cannot change context while in patch building mode because we were too lazy to support it when releasing the feature. If you really want it, please let us know!", + "OpenCommitInBrowser": "브라우저에서 커밋 열기", + "ViewBisectOptions": "Bisect 옵션 보기", + "ConfirmRevertCommit": "Are you sure you want to revert {{.selectedCommit}}?", + "RewordInEditorTitle": "커밋 메시지를 에디터에서 수정", + "RewordInEditorPrompt": "Are you sure you want to reword this commit in your editor?", + "CheckoutPrompt": "Are you sure you want to checkout '%s'?", + "HardResetAutostashPrompt": "Are you sure you want to hard reset to '%s'? An auto-stash will be performed if necessary.", + "UpstreamGone": "(upstream gone)", + "NukeDescription": "", + "DiscardStagedChangesDescription": "", + "EmptyOutput": "", + "Patch": "", + "CustomPatch": "", + "CommitsCopied": "", + "CommitCopied": "", + "ResetPatch": "", + "ResetPatchTooltip": "", + "ApplyPatch": "", + "ApplyPatchTooltip": "", + "ApplyPatchInReverse": "", + "ApplyPatchInReverseTooltip": "", + "RemovePatchFromOriginalCommit": "", + "RemovePatchFromOriginalCommitTooltip": "", + "MovePatchOutIntoIndex": "", + "MovePatchOutIntoIndexTooltip": "", + "MovePatchIntoNewCommit": "", + "MovePatchIntoNewCommitTooltip": "", + "MovePatchToSelectedCommit": "", + "MovePatchToSelectedCommitTooltip": "", + "CopyPatchToClipboard": "", + "NoMatchesFor": "", + "MatchesFor": "", + "SearchKeybindings": "", + "SearchPrefix": "", + "FilterPrefix": "", + "ExitSearchMode": "", + "ExitTextFilterMode": "", + "Switch": "", + "SwitchToWorktree": "", + "SwitchToWorktreeTooltip": "", + "AlreadyCheckedOutByWorktree": "", + "BranchCheckedOutByWorktree": "", + "DetachWorktreeTooltip": "", + "Switching": "", + "RemoveWorktree": "", + "RemoveWorktreeTitle": "", + "DetachWorktree": "", + "DetachingWorktree": "", + "WorktreesTitle": "", + "WorktreeTitle": "", + "RemoveWorktreePrompt": "", + "ForceRemoveWorktreePrompt": "", + "RemovingWorktree": "", + "AddingWorktree": "", + "CantDeleteCurrentWorktree": "", + "AlreadyInWorktree": "", + "CantDeleteMainWorktree": "", + "NoWorktreesThisRepo": "", + "MissingWorktree": "", + "MainWorktree": "", + "NewWorktree": "", + "NewWorktreePath": "", + "NewWorktreeBase": "", + "RemoveWorktreeTooltip": "", + "BranchNameCannotBeBlank": "", + "NewBranchName": "", + "NewBranchNameLeaveBlank": "", + "ViewWorktreeOptions": "", + "CreateWorktreeFrom": "", + "CreateWorktreeFromDetached": "", + "LcWorktree": "", + "ChangingDirectoryTo": "", + "Name": "", + "Branch": "", + "Path": "", + "MarkedBaseCommitStatus": "", + "MarkAsBaseCommit": "", + "MarkAsBaseCommitTooltip": "", + "MarkedCommitMarker": "", + "PleaseGoToURL": "", + "NoCopiedCommits": "", + "DisabledMenuItemPrefix": "", + "QuickStartInteractiveRebase": "", + "QuickStartInteractiveRebaseTooltip": "", + "CannotQuickStartInteractiveRebase": "", + "ToggleRangeSelect": "드래그 선택 전환", + "RangeSelectUp": "", + "RangeSelectDown": "", + "RangeSelectNotSupported": "", + "NoItemSelected": "", + "SelectedItemIsNotABranch": "", + "SelectedItemDoesNotHaveFiles": "", + "RangeSelectNotSupportedForSubmodules": "", + "OldCherryPickKeyWarning": "", + "CommandDoesNotSupportOpeningInEditor": "", + "Actions": { + "CheckoutCommit": "커밋 체크아웃", + "CheckoutTag": "태그 체크아웃", + "CheckoutBranch": "브랜치 체크아웃", + "ForceCheckoutBranch": "브랜치 Force 체크아웃", + "DeleteLocalBranch": "", + "DeleteBranch": "", + "Merge": "병합", + "RebaseBranch": "브랜치 리베이스", + "RenameBranch": "브랜치 이름 변경", + "CreateBranch": "브랜치 생성", + "FastForwardBranch": "Fast forward branch", + "CherryPick": "(Cherry-pick) 커밋 붙여넣기", + "CheckoutFile": "체크아웃 파일", + "DiscardOldFileChange": "Discard old file change", + "SquashCommitDown": "Squash commit down", + "FixupCommit": "커밋 Fixup", + "RewordCommit": "커밋 Reword", + "DropCommit": "커밋 Drop", + "EditCommit": "커밋 수정", + "AmendCommit": "커밋 Amend", + "ResetCommitAuthor": "커밋 작성자 Reset", + "SetCommitAuthor": "", + "AddCommitCoAuthor": "", + "RevertCommit": "커밋 Revert", + "CreateFixupCommit": "Fixup 커밋 생성", + "SquashAllAboveFixupCommits": "Squash all above fixup commits", + "MoveCommitUp": "Move commit up", + "MoveCommitDown": "Move commit down", + "CopyCommitMessageToClipboard": "커밋 메시지를 클립보드에 복사", + "CopyCommitSubjectToClipboard": "", + "CopyCommitDiffToClipboard": "커밋 diff를 클립보드에 복사", + "CopyCommitHashToClipboard": "커밋 해시를 클립보드에 복사", + "CopyCommitURLToClipboard": "커밋 URL를 클립보드에 복사", + "CopyCommitAuthorToClipboard": "커밋 작성자를 클립보드에 복사", + "CopyCommitAttributeToClipboard": "클립보드에 복사", + "CopyPatchToClipboard": "", + "CustomCommand": "Custom command", + "DiscardAllChangesInDirectory": "Discard all changes in directory", + "DiscardUnstagedChangesInDirectory": "Discard unstaged changes in directory", + "DiscardAllChangesInFile": "Discard all changes in file", + "DiscardAllUnstagedChangesInFile": "Discard all unstaged changes in file", + "StageFile": "Stage file", + "StageResolvedFiles": "Stage files whose merge conflicts were resolved", + "UnstageFile": "Unstage file", + "UnstageAllFiles": "Unstage all files", + "StageAllFiles": "Stage all files", + "IgnoreExcludeFile": "Ignore file", + "IgnoreFileErr": "", + "ExcludeFile": "", + "ExcludeGitIgnoreErr": "", + "Commit": "커밋", + "EditFile": "파일 수정", + "Push": "푸시", + "Pull": "업데이트(Pull)", + "OpenFile": "파일 열기", + "OpenFileTooltip": "", + "StashAllChanges": "Stash all changes", + "StashAllChangesKeepIndex": "Stash all changes and keep index", + "StashStagedChanges": "Stash staged changes", + "StashUnstagedChanges": "Stash unstaged changes", + "StashIncludeUntrackedChanges": "", + "GitFlowFinish": "git flow finish", + "GitFlowStart": "git flow start", + "CopyToClipboard": "Copy to clipboard", + "CopySelectedTextToClipboard": "Copy selected text to clipboard", + "RemovePatchFromCommit": "Remove patch from commit", + "MovePatchToSelectedCommit": "Move patch to selected commit", + "MovePatchIntoIndex": "Move patch into index", + "MovePatchIntoNewCommit": "Move patch into new commit", + "DeleteRemoteBranch": "Delete remote branch", + "SetBranchUpstream": "Set branch upstream", + "AddRemote": "Add remote", + "RemoveRemote": "Remove remote", + "UpdateRemote": "Update remote", + "ApplyPatch": "Apply patch", + "Stash": "Stash", + "RenameStash": "Rename stash", + "RemoveSubmodule": "서브모듈 삭제", + "ResetSubmodule": "서브모듈 Reset", + "AddSubmodule": "서브모듈 추가", + "UpdateSubmoduleUrl": "서브모듈 URL 업데이트", + "InitialiseSubmodule": "서브모듈 초기화", + "BulkInitialiseSubmodules": "Bulk initialise submodules", + "BulkUpdateSubmodules": "Bulk update submodules", + "BulkDeinitialiseSubmodules": "Bulk deinitialise submodules", + "UpdateSubmodule": "서브모듈 업데이트", + "CreateLightweightTag": "Create lightweight tag", + "CreateAnnotatedTag": "Create annotated tag", + "DeleteLocalTag": "", + "DeleteRemoteTag": "", + "PushTag": "태그 푸시g", + "NukeWorkingTree": "Nuke working tree", + "DiscardUnstagedFileChanges": "Unstaged 파일 변경사항 버리기", + "RemoveUntrackedFiles": "Untracked 파일 삭제", + "RemoveStagedFiles": "Staged 파일 삭제", + "SoftReset": "Soft reset", + "MixedReset": "Mixed reset", + "HardReset": "Hard reset", + "Undo": "되돌리기", + "Redo": "다시 실행", + "CopyPullRequestURL": "풀 리퀘스트 URL 복사", + "OpenDiffTool": "", + "OpenMergeTool": "병합 도구 열기", + "OpenCommitInBrowser": "브라우저에서 커밋 열기", + "OpenPullRequest": "브라우저에서 풀 리퀘스트 열기", + "StartBisect": "Start bisect", + "ResetBisect": "Reset bisect", + "BisectSkip": "Bisect skip", + "BisectMark": "Bisect mark", + "RemoveWorktree": "", + "AddWorktree": "" + }, + "Bisect": { + "MarkStart": "Mark %s as %s (start bisect)", + "MarkSkipCurrent": "", + "MarkSkipSelected": "", + "ResetTitle": "'git bisect' 를 리셋", + "ResetPrompt": "정말로 'git bisect' 를 리셋하시겠습니까?", + "ResetOption": "Bisect를 리셋", + "ChooseTerms": "", + "OldTermPrompt": "", + "NewTermPrompt": "", + "BisectMenuTitle": "Bisect", + "Mark": "Mark %s as %s", + "SkipCurrent": "%s 를 스킵", + "SkipSelected": "", + "CompleteTitle": "Bisect 완료", + "CompletePrompt": "Bisect complete! The following commit introduced the change:\n\n%s\n\nDo you want to reset 'git bisect' now?", + "CompletePromptIndeterminate": "Bisect complete! Some commits were skipped, so any of the following commits may have introduced the change:\n\n%s\n\nDo you want to reset 'git bisect' now?", + "Bisecting": "" + }, + "Log": { + "EditRebase": "", + "MoveCommitUp": "", + "MoveCommitDown": "", + "CherryPickCommits": "", + "HandleUndo": "", + "HandleMidRebaseCommand": "", + "RemoveFile": "", + "CopyToClipboard": "", + "Remove": "", + "CreateFileWithContent": "", + "AppendingLineToFile": "", + "EditRebaseFromBaseCommit": "" + }, + "BreakingChangesTitle": "", + "BreakingChangesMessage": "", + "BreakingChangesByVersion": null +} diff --git a/pkg/i18n/translations/nl.json b/pkg/i18n/translations/nl.json new file mode 100644 index 00000000000..cad8517b013 --- /dev/null +++ b/pkg/i18n/translations/nl.json @@ -0,0 +1,924 @@ +{ + "NotEnoughSpace": "Niet genoeg ruimte om de panelen te renderen", + "DiffTitle": "Diff", + "FilesTitle": "Bestanden", + "BranchesTitle": "Branches", + "CommitsTitle": "Commits", + "StashTitle": "Stash", + "SnakeTitle": "", + "EasterEgg": "", + "UnstagedChanges": "Unstaged wijzigingen", + "StagedChanges": "Staged wijzigingen", + "MainTitle": "Hoofd", + "StagingTitle": "Staging", + "MergingTitle": "Mergen", + "MergeConfirmTitle": "", + "NormalTitle": "Normaal", + "LogTitle": "", + "CommitSummary": "Commitbericht", + "CredentialsUsername": "Gebruikersnaam", + "CredentialsPassword": "Wachtwoord", + "CredentialsPassphrase": "Voer een wachtwoordzin in voor de SSH-sleutel", + "CredentialsPIN": "", + "PassUnameWrong": "Wachtwoord en/of gebruikersnaam verkeerd", + "Commit": "Commit veranderingen", + "CommitTooltip": "", + "AmendLastCommit": "Wijzig laatste commit", + "AmendLastCommitTitle": "Wijzig laatste commit", + "SureToAmend": "Weet je zeker dat je de laatste commit wilt wijzigen? U kunt het commit-bericht wijzigen vanuit het commits-paneel.", + "NoCommitToAmend": "Er is geen commits om te wijzigen.", + "CommitChangesWithEditor": "Commit veranderingen met de git editor", + "FindBaseCommitForFixup": "", + "FindBaseCommitForFixupTooltip": "", + "NoBaseCommitsFound": "", + "MultipleBaseCommitsFoundStaged": "", + "MultipleBaseCommitsFoundUnstaged": "", + "BaseCommitIsAlreadyOnMainBranch": "", + "BaseCommitIsNotInCurrentView": "", + "HunksWithOnlyAddedLinesWarning": "", + "StatusTitle": "Status", + "GlobalTitle": "Globale sneltoetsen", + "Menu": "Menu", + "Execute": "Uitvoeren", + "Stage": "Toggle staged", + "StageTooltip": "", + "ToggleStagedAll": "Toggle staged alle", + "ToggleStagedAllTooltip": "", + "ToggleTreeView": "Toggle bestandsboom weergave", + "ToggleTreeViewTooltip": "", + "OpenDiffTool": "", + "OpenMergeTool": "", + "OpenMergeToolTooltip": "", + "Refresh": "Verversen", + "RefreshTooltip": "", + "Push": "Push", + "Pull": "Pull", + "PushTooltip": "", + "PullTooltip": "", + "Scroll": "Scroll", + "FileFilter": "", + "CopyToClipboardMenu": "", + "CopyFileName": "", + "CopyFilePath": "", + "CopyFileDiffTooltip": "", + "CopySelectedDiff": "", + "CopyAllFilesDiff": "", + "NoContentToCopyError": "", + "FileNameCopiedToast": "", + "FilePathCopiedToast": "", + "FileDiffCopiedToast": "", + "AllFilesDiffCopiedToast": "", + "FilterStagedFiles": "Show only staged files", + "FilterUnstagedFiles": "Show only unstaged files", + "ResetFilter": "Reset commit file state filter", + "MergeConflictsTitle": "Merge conflicten", + "Checkout": "Uitchecken", + "CheckoutTooltip": "", + "CantCheckoutBranchWhilePulling": "", + "TagCheckoutTooltip": "", + "RemoteBranchCheckoutTooltip": "", + "CantPullOrPushSameBranchTwice": "", + "NoChangedFiles": "Geen veranderde bestanden", + "SoftReset": "Zacht reset", + "AlreadyCheckedOutBranch": "Je hebt deze branch al uitgecheckt", + "SureForceCheckout": "Weet je zeker dat je het uitchecken wil forceren? Al je lokale verandering zullen worden verwijdert", + "ForceCheckoutBranch": "Forceer uitchecken op deze branch", + "BranchName": "Branch naam", + "NewBranchNameBranchOff": "Nieuw branch naam (Branch is afgeleid van '{{.branchName}}')", + "CantDeleteCheckOutBranch": "Je kan een uitgecheckte branch niet verwijderen!", + "DeleteBranchTitle": "", + "DeleteLocalBranch": "", + "DeleteRemoteBranchOption": "", + "DeleteRemoteBranchPrompt": "", + "ForceDeleteBranchTitle": "", + "ForceDeleteBranchMessage": "Weet je zeker dat je branch '{{.selectedBranchName}}' geforceerd wil verwijderen?", + "RebaseBranch": "Rebase branch", + "RebaseBranchTooltip": "", + "CantRebaseOntoSelf": "Je kan niet een branch rebasen op zichzelf", + "CantMergeBranchIntoItself": "Je kan niet een branch in zichzelf mergen", + "ForceCheckout": "Forceer checkout", + "ForceCheckoutTooltip": "", + "CheckoutByName": "Uitchecken bij naam", + "CheckoutByNameTooltip": "", + "RemoteBranchCheckoutTitle": "", + "CheckoutTypeNewBranch": "", + "CheckoutTypeNewBranchTooltip": "", + "CheckoutTypeDetachedHead": "", + "CheckoutTypeDetachedHeadTooltip": "", + "NewBranch": "Nieuwe branch", + "NewBranchFromStashTooltip": "", + "NoBranchesThisRepo": "Geen branches voor deze repo", + "CommitWithoutMessageErr": "Je kan geen commit maken zonder commit bericht", + "Close": "Sluiten", + "CloseCancel": "Sluiten", + "Confirm": "Bevestig", + "Quit": "Quit", + "SquashTooltip": "", + "CannotSquashOrFixupFirstCommit": "There's no commit below to squash into", + "Fixup": "Fixup", + "FixupTooltip": "", + "SureFixupThisCommit": "Weet je zeker dat je fixup wil uitvoeren op deze commit? De commit hieronder zol worden squashed in deze", + "SureSquashThisCommit": "Weet je zeker dat je deze commit wil samenvoegen met de commit hieronder?", + "Squash": "Squash", + "PickCommitTooltip": "Kies commit (wanneer midden in rebase)", + "Pick": "", + "CantPickDisabledReason": "", + "Edit": "", + "RevertCommit": "Commit ongedaan maken", + "Revert": "", + "RevertCommitTooltip": "", + "Reword": "Hernoem commit", + "CommitRewordTooltip": "", + "DropCommit": "Verwijder commit", + "DropCommitTooltip": "", + "MoveDownCommit": "Verplaats commit 1 naar beneden", + "MoveUpCommit": "Verplaats commit 1 naar boven", + "CannotMoveAnyFurther": "", + "EditCommit": "", + "EditCommitTooltip": "Wijzig commit", + "AmendCommitTooltip": "Wijzig commit met staged veranderingen", + "Amend": "", + "ResetAuthor": "", + "ResetAuthorTooltip": "", + "SetAuthor": "", + "SetAuthorTooltip": "", + "AddCoAuthor": "", + "AmendCommitAttribute": "", + "AmendCommitAttributeTooltip": "", + "SetAuthorPromptTitle": "", + "AddCoAuthorPromptTitle": "", + "AddCoAuthorTooltip": "", + "SureResetCommitAuthor": "", + "RewordCommitEditor": "Hernoem commit met editor", + "NoCommitsThisBranch": "Geen commits in deze branch", + "UpdateRefHere": "", + "Error": "Foutmelding", + "Undo": "Ongedaan maken", + "UndoReflog": "Ongedaan maken (via reflog) (experimenteel)", + "RedoReflog": "Redo (via reflog) (experimenteel)", + "UndoTooltip": "", + "RedoTooltip": "", + "UndoMergeResolveTooltip": "", + "DiscardAllTooltip": "", + "DiscardUnstagedTooltip": "", + "Pop": "Pop", + "StashPopTooltip": "", + "Drop": "Laten vallen", + "StashDropTooltip": "", + "Apply": "Toepassen", + "StashApplyTooltip": "", + "NoStashEntries": "Geen stash items", + "StashDrop": "Stash laten vallen", + "SureDropStashEntry": "Weet je het zeker dat je deze stash entry wil laten vallen?", + "StashPop": "Stash pop", + "SurePopStashEntry": "Weet je zeker dat je deze stash entry wil poppen?", + "StashApply": "Stash toepassen", + "SureApplyStashEntry": "Weet je zeker dat je deze stash entry wil toepassen?", + "NoTrackedStagedFilesStash": "Je hebt geen tracked/staged bestanden om te laten stashen", + "NoFilesToStash": "", + "StashChanges": "Stash veranderingen", + "RenameStash": "Rename stash", + "RenameStashPrompt": "Rename stash: {{.stashName}}", + "OpenConfig": "Open config bestand", + "EditConfig": "Verander config bestand", + "ForcePush": "Forceer push", + "ForcePushPrompt": "Jouw branch is afgeweken van de remote branch. Druk 'esc' om te annuleren, of 'enter' om geforceert te pushen.", + "ForcePushDisabled": "Your branch has diverged from the remote branch and you've disabled force pushing", + "UpdatesRejected": "", + "UpdatesRejectedAndForcePushDisabled": "", + "CheckForUpdate": "Check voor updates", + "CheckingForUpdates": "Zoeken naar updates...", + "UpdateAvailableTitle": "", + "UpdateAvailable": "", + "UpdateInProgressWaitingStatus": "", + "UpdateCompletedTitle": "", + "UpdateCompleted": "", + "FailedToRetrieveLatestVersionErr": "", + "OnLatestVersionErr": "Je hebt al de laatste versie", + "MajorVersionErr": "Nieuwe versie ({{.newVersion}}) is niet backwards compatibele vergeleken met de huidige versie ({{.currentVersion}})", + "CouldNotFindBinaryErr": "Kon geen binary vinden op {{.url}}", + "UpdateFailedErr": "", + "ConfirmQuitDuringUpdateTitle": "", + "ConfirmQuitDuringUpdate": "", + "MergeToolTitle": "", + "MergeToolPrompt": "", + "IntroPopupMessage": "Bedankt voor het gebruik maken van lazygit! 2 dingen die je moet weten:\n\n1) Als je meer van lazygit zijn features wilt leren bekijk dan deze video:\n https://youtu.be/CPLdltN7wgE\n\n2) Als je git gebruikt, ben je een programmeur! Met jouw hulp kunnen we lazygit verbeteren, dus overweeg om een ​​donateur te worden en mee te doen aan het plezier op\n https://github.com/jesseduffield/lazygit", + "DeprecatedEditConfigWarning": "", + "GitconfigParseErr": "Gogit kon je gitconfig bestand niet goed parsen door de aanwezigheid van losstaande '\\' tekens. Het weghalen van deze tekens zou het probleem moeten oplossen. ", + "EditFile": "Verander bestand", + "EditFileTooltip": "", + "OpenFile": "Open bestand", + "OpenFileTooltip": "", + "OpenInEditor": "", + "IgnoreFile": "Voeg toe aan .gitignore", + "ExcludeFile": "", + "RefreshFiles": "Refresh bestanden", + "Merge": "Merge in met huidige checked out branch", + "MergeBranchTooltip": "", + "ConfirmQuit": "Weet je zeker dat je dit programma wil sluiten?", + "SwitchRepo": "Wissel naar een recente repo", + "AllBranchesLogGraph": "Alle logs van de branch laten zien", + "UnsupportedGitService": "Niet-ondersteunde git-service", + "CopyPullRequestURL": "Kopieer de URL van het pull-verzoek naar het klembord", + "NoBranchOnRemote": "Deze branch bestaat niet op de remote. U moet het eerst naar de remote pushen.", + "Fetch": "Fetch", + "FetchTooltip": "", + "NoAutomaticGitFetchTitle": "Geen automatische git fetch", + "NoAutomaticGitFetchBody": "Lazygit kan niet \"git fetch\" uitvoeren in een privé repository, gebruik f in het branches paneel om \"git fetch\" manueel uit te voeren", + "FileEnter": "Stage individuele hunks/lijnen", + "FileEnterTooltip": "", + "FileStagingRequirements": "Kan alleen individuele lijnen stagen van getrackte bestanden met onstaged veranderingen", + "StageSelectionTooltip": "Toggle lijnen staged / unstaged", + "DiscardSelection": "Verwijdert change (git reset)", + "DiscardSelectionTooltip": "", + "ToggleSelectHunk": "Toggle selecteer hunk", + "ToggleSelectHunkTooltip": "", + "ToggleSelectionForPatch": "Voeg toe/verwijder lijn(en) in patch", + "ToggleSelectionForPatchTooltip": "", + "EditHunk": "", + "EditHunkTooltip": "", + "ToggleStagingView": "Ga naar een ander paneel", + "ToggleStagingViewTooltip": "", + "ReturnToFilesPanel": "Ga terug naar het bestanden paneel", + "FastForward": "Fast-forward deze branch vanaf zijn upstream", + "FastForwardTooltip": "", + "FastForwarding": "Fast-forwarding", + "FoundConflictsTitle": "Conflicten!", + "ViewConflictsMenuItem": "", + "AbortMenuItem": "", + "PickHunk": "Kies stuk", + "PickAllHunks": "Kies beide stukken", + "ViewMergeRebaseOptions": "Bekijk merge/rebase opties", + "ViewMergeRebaseOptionsTooltip": "", + "ViewMergeOptions": "", + "ViewRebaseOptions": "", + "NotMergingOrRebasing": "Je bent momenteel niet aan het rebasen of mergen", + "AlreadyRebasing": "", + "RecentRepos": "Recente repositories", + "MergeOptionsTitle": "Merge opties", + "RebaseOptionsTitle": "Rebase opties", + "CommitSummaryTitle": "Commit bericht", + "CommitDescriptionTitle": "", + "CommitDescriptionSubTitle": "", + "LocalBranchesTitle": "Branches", + "SearchTitle": "Zoek", + "TagsTitle": "Tags", + "MenuTitle": "Menu", + "CommitMenuTitle": "", + "RemotesTitle": "Remotes", + "RemoteBranchesTitle": "Remote branches", + "PatchBuildingTitle": "Patch bouwen", + "InformationTitle": "Informatie", + "SecondaryTitle": "Secondary", + "ReflogCommitsTitle": "Reflog", + "ConflictsResolved": "Alle merge conflicten zijn opgelost. Wilt je verder gaan?", + "Continue": "", + "RebasingTitle": "", + "RebasingFromBaseCommitTitle": "", + "SimpleRebase": "", + "InteractiveRebase": "", + "RebaseOntoBaseBranch": "", + "InteractiveRebaseTooltip": "", + "RebaseOntoBaseBranchTooltip": "", + "MustSelectTodoCommits": "", + "ConfirmMerge": "Weet je zeker dat je '{{.selectedBranch}}' in '{{.checkedOutBranch}}' wil mergen?", + "FwdNoUpstream": "Kan niet de branch vooruitspoelen zonder upstream", + "FwdNoLocalUpstream": "", + "FwdCommitsToPush": "Je kan niet vooruitspoelen als de branch geen nieuwe commits heeft", + "PullRequestNoUpstream": "", + "ErrorOccurred": "Er is iets fout gegaan! Zou je hier een issue aan willen maken", + "NoRoom": "Niet genoeg ruimte", + "YouAreHere": "JE BENT HIER", + "YouDied": "", + "RewordNotSupported": "Herformatteren van commits in interactief rebasen is nog niet ondersteund", + "ChangingThisActionIsNotAllowed": "", + "CherryPickCopy": "Kopieer commit (cherry-pick)", + "CherryPickCopyTooltip": "", + "CherryPickCopyRange": "", + "CherryPickCopyRangeTooltip": "", + "PasteCommits": "Plak commits (cherry-pick)", + "SureCherryPick": "Weet je zeker dat je de gekopieerde commits naar deze branch wil cherry-picken?", + "CherryPick": "Cherry-Pick", + "CannotCherryPickNonCommit": "", + "CannotCherryPickMergeCommit": "", + "Donate": "Doneer", + "AskQuestion": "", + "PrevLine": "Selecteer de vorige lijn", + "NextLine": "Selecteer de volgende lijn", + "PrevHunk": "Selecteer de vorige hunk", + "NextHunk": "Selecteer de volgende hunk", + "PrevConflict": "Selecteer voorgaand conflict", + "NextConflict": "Selecteer volgende conflict", + "SelectPrevHunk": "Selecteer bovenste hunk", + "SelectNextHunk": "Selecteer onderste hunk", + "ScrollDown": "Scroll omlaag", + "ScrollUp": "Scroll omhoog", + "ScrollUpMainWindow": "Scroll naar beneden vanaf hoofdpaneel", + "ScrollDownMainWindow": "Scroll naar beneden vanaf hoofdpaneel", + "AmendCommitTitle": "Commit wijzigen", + "AmendCommitPrompt": "Weet je zeker dat je deze commit wil wijzigen met de vorige staged bestanden?", + "DropCommitTitle": "Verwijder commit", + "DropCommitPrompt": "Weet je zeker dat je deze commit wil verwijderen?", + "DropUpdateRefPrompt": "", + "PullingStatus": "Pullen", + "PushingStatus": "Pushen", + "FetchingStatus": "Fetchen", + "SquashingStatus": "Squashen", + "FixingStatus": "Fixing up", + "DeletingStatus": "Verwijderen", + "DroppingStatus": "", + "MovingStatus": "Verplaatsen", + "RebasingStatus": "Rebasen", + "MergingStatus": "", + "LowercaseRebasingStatus": "", + "LowercaseMergingStatus": "", + "AmendingStatus": "Wijzigen", + "CherryPickingStatus": "Cherry-picken", + "UndoingStatus": "Ongedaan maken", + "RedoingStatus": "Redoing", + "CheckingOutStatus": "Uitchecken", + "CommittingStatus": "", + "RevertingStatus": "", + "CreatingFixupCommitStatus": "", + "CommitFiles": "Commit bestanden", + "SubCommitsDynamicTitle": "", + "CommitFilesDynamicTitle": "", + "RemoteBranchesDynamicTitle": "", + "ViewItemFiles": "Bekijk gecommite bestanden", + "ViewItemFilesTooltip": "", + "CommitFilesTitle": "Commit bestanden", + "CheckoutCommitFileTooltip": "Bestand uitchecken", + "CanOnlyDiscardFromLocalCommits": "", + "Remove": "", + "DiscardOldFileChangeTooltip": "Uitsluit deze commit zijn veranderingen aan dit bestand", + "DiscardFileChangesTitle": "Uitsluit bestand zijn veranderingen", + "DiscardFileChangesPrompt": "Weet je zeker dat je de wijzigingen van deze commit in dit bestand wilt weggooien? Als dit bestand is gecreëerd in deze commit dan zal dit bestand worden verwijdert", + "DisabledForGPG": "Onderdelen niet beschikbaar voor gebruikers die GPG gebruiken", + "CreateRepo": "Niet in een git repository. Creëer een nieuwe git repository? (y/n): ", + "BareRepo": "", + "InitialBranch": "", + "NoRecentRepositories": "", + "IncorrectNotARepository": "", + "AutoStashTitle": "Autostash?", + "AutoStashPrompt": "Je moet je veranderingen stashen en poppen om ze over te brengen. Dit automatisch doen? (enter/esc)", + "StashPrefix": "Auto-stashing veranderingen voor ", + "Discard": "Bekijk 'veranderingen ongedaan maken' opties", + "DiscardChangesTitle": "", + "DiscardFileChangesTooltip": "", + "Cancel": "Annuleren", + "DiscardAllChanges": "Negeer alle wijzigingen", + "DiscardUnstagedChanges": "Negeer unstaged wijzigingen", + "DiscardAllChangesToAllFiles": "Verwijder werkende tree", + "DiscardAnyUnstagedChanges": "Gooi unstaged wijzigingen weg", + "DiscardUntrackedFiles": "Negeer niet-gevonden bestanden", + "DiscardStagedChanges": "", + "HardReset": "Harde reset", + "BranchDeleteTooltip": "", + "TagDeleteTooltip": "", + "Delete": "", + "Reset": "", + "ResetTooltip": "", + "ViewResetOptions": "Bekijk reset opties", + "FileResetOptionsTooltip": "", + "CreateFixupCommit": "Creëer fixup commit", + "CreateFixupCommitTooltip": "Creëer fixup commit", + "CreateAmendCommit": "", + "FixupMenu_Fixup": "", + "FixupMenu_FixupTooltip": "", + "FixupMenu_AmendWithChanges": "", + "FixupMenu_AmendWithChangesTooltip": "", + "FixupMenu_AmendWithoutChanges": "", + "FixupMenu_AmendWithoutChangesTooltip": "", + "SquashAboveCommitsTooltip": "Squash bovenstaande commits", + "SquashCommitsAboveSelectedTooltip": "", + "SquashCommitsInCurrentBranchTooltip": "", + "SquashAboveCommits": "", + "SquashCommitsInCurrentBranch": "", + "SquashCommitsAboveSelectedCommit": "", + "CannotSquashCommitsInCurrentBranch": "", + "ExecuteCustomCommand": "Voer aangepaste commando uit", + "ExecuteCustomCommandTooltip": "", + "CustomCommand": "Aangepaste commando:", + "CommitChangesWithoutHook": "Commit veranderingen zonder pre-commit hook", + "SkipHookPrefixNotConfigured": "Je hebt nog niet een commit bericht voorvoegsel ingesteld voor het overslaan van hooks. Set `git.skipHookPrefix = 'WIP'` in je config", + "ResetTo": "Reset naar", + "ResetSoftTooltip": "", + "ResetMixedTooltip": "", + "ResetHardTooltip": "", + "PressEnterToReturn": "Press om terug te gaan naar lazygit", + "ViewStashOptions": "Bekijk stash opties", + "ViewStashOptionsTooltip": "", + "Stash": "", + "StashTooltip": "", + "StashAllChanges": "Stash-bestanden", + "StashStagedChanges": "", + "StashAllChangesKeepIndex": "Stash staged wijzigingen", + "StashUnstagedChanges": "", + "StashIncludeUntrackedChanges": "", + "StashOptions": "Stash opties", + "NotARepository": "Fout: moet in een git repository uitgevoerd worden", + "WorkingDirectoryDoesNotExist": "", + "Jump": "Ga naar paneel", + "ScrollLeftRight": "", + "ScrollLeft": "", + "ScrollRight": "", + "DiscardPatch": "Patch weg gooien", + "DiscardPatchConfirm": "Je kan alleen maar een patch bouwen van 1 commit. Huidige patch weggooien?", + "DiscardPatchSameCommitConfirm": "", + "CantPatchWhileRebasingError": "Je kan geen patch bouwen of patch commando uitvoeren wanneer je in een merging of rebasing state zit", + "ToggleAddToPatch": "Toggle bestand inbegrepen in patch", + "ToggleAddToPatchTooltip": "", + "ToggleAllInPatch": "", + "ToggleAllInPatchTooltip": "", + "UpdatingPatch": "", + "ViewPatchOptions": "Bekijk aangepaste patch opties", + "PatchOptionsTitle": "Patch opties", + "NoPatchError": "Nog geen patch gecreëerd. Om een patch te bouwen gebruik 'space' op een commit bestand of 'enter' om een spesiefieke lijnen toe te voegen", + "EmptyPatchError": "", + "EnterCommitFile": "Enter bestand om geselecteerde regels toe te voegen aan de patch", + "EnterCommitFileTooltip": "", + "ExitCustomPatchBuilder": "Sluit lijn-bij-lijn modus", + "EnterUpstream": "Enter upstream als '\u003cremote\u003e \u003cbranchnaam\u003e'", + "InvalidUpstream": "", + "ReturnToRemotesList": "Ga terug naar remotes lijst", + "NewRemote": "Voeg een nieuwe remote toe", + "NewRemoteName": "Nieuwe remote name:", + "NewRemoteUrl": "Nieuwe remote url:", + "ViewBranches": "", + "EditRemoteName": "Enter updated remote naam voor {{.remoteName}}:", + "EditRemoteUrl": "Enter updated remote url voor {{.remoteName}}:", + "RemoveRemote": "Verwijder remote", + "RemoveRemoteTooltip": "", + "RemoveRemotePrompt": "Weet je zeker dat je deze remote wilt verwijderen", + "DeleteRemoteBranch": "Verwijder remote branch", + "DeleteRemoteBranchMessage": "Weet je zeker dat je deze remote branch wilt verwijderen", + "DeleteRemoteBranchTooltip": "", + "SetAsUpstream": "", + "SetAsUpstreamTooltip": "Stel in als upstream van uitgecheckte branch", + "SetUpstream": "Stel in als upstream van uitgecheckte branch", + "UnsetUpstream": "", + "ViewDivergenceFromUpstream": "", + "ViewDivergenceFromBaseBranch": "", + "CouldNotDetermineBaseBranch": "", + "DivergenceSectionHeaderLocal": "", + "DivergenceSectionHeaderRemote": "", + "ViewUpstreamResetOptions": "", + "ViewUpstreamResetOptionsTooltip": "", + "ViewUpstreamRebaseOptions": "", + "ViewUpstreamRebaseOptionsTooltip": "", + "UpstreamGenericName": "", + "SetUpstreamTitle": "Stel in als upstream branch", + "SetUpstreamMessage": "Weet je zeker dat je de upstream branch van '{{.checkedOut}}' naar '{{.selected}}' wilt zetten", + "EditRemoteTooltip": "Wijzig remote", + "TagCommit": "Tag commit", + "TagCommitTooltip": "", + "TagMenuTitle": "", + "TagNameTitle": "Tag naam:", + "TagMessageTitle": "", + "LightweightTag": "", + "AnnotatedTag": "", + "DeleteTagTitle": "", + "DeleteLocalTag": "", + "DeleteRemoteTag": "", + "SelectRemoteTagUpstream": "", + "DeleteRemoteTagPrompt": "", + "RemoteTagDeletedMessage": "", + "PushTagTitle": "Remote om tag '{{.tagName}}' te pushen naar:", + "PushTag": "Push tag", + "PushTagTooltip": "", + "NewTag": "Creëer tag", + "NewTagTooltip": "", + "CreatingTag": "", + "ForceTag": "", + "ForceTagPrompt": "", + "FetchRemoteTooltip": "Fetch remote", + "FetchingRemoteStatus": "Remote fetchen", + "CheckoutCommit": "Checkout commit", + "CheckoutCommitTooltip": "", + "SureCheckoutThisCommit": "Weet je zeker dat je deze commit wil uitchecken?", + "GitFlowOptions": "Laat git-flow opties zien", + "NotAGitFlowBranch": "Dit lijkt geen git flow branch te zijn", + "NewBranchNamePrompt": "Noem een nieuwe branch naam", + "IgnoreTracked": "Negeer tracked bestand", + "ExcludeTracked": "", + "IgnoreTrackedPrompt": "Weet je zeker dat je een getracked bestand wil negeren?", + "ExcludeTrackedPrompt": "", + "ViewResetToUpstreamOptions": "Bekijk upstream reset opties", + "NextScreenMode": "Volgende scherm modus (normaal/half/groot)", + "PrevScreenMode": "Vorige scherm modus", + "StartSearch": "Start met zoeken", + "StartFilter": "", + "Panel": "Paneel", + "Keybindings": "Sneltoetsen", + "KeybindingsLegend": "", + "KeybindingsMenuSectionLocal": "", + "KeybindingsMenuSectionGlobal": "", + "KeybindingsMenuSectionNavigation": "", + "RenameBranch": "Hernoem branch", + "Upstream": "", + "UpstreamTooltip": "", + "BranchUpstreamOptionsTitle": "", + "ViewBranchUpstreamOptions": "", + "ViewBranchUpstreamOptionsTooltip": "", + "UpstreamNotSetError": "", + "NewGitFlowBranchPrompt": "Nieuwe '{{.branchType}}' naam:", + "RenameBranchWarning": "Deze branch volgt een remote. Deze actie zal alleen de locale branch name wijzigen niet de naam van de remote branch. Verder gaan?", + "OpenKeybindingsMenu": "Open menu", + "ResetCherryPick": "Reset cherry-picked (gekopieerde) commits selectie", + "NextTab": "Volgende tabblad", + "PrevTab": "Vorige tabblad", + "CantUndoWhileRebasing": "Kan niet ongedaan maken terwijl je aan het rebasen bent", + "CantRedoWhileRebasing": "Kan niet opnieuw doen (redo) terwijl je aan het rebasen bent", + "MustStashWarning": "Een patch in de index stoppen vereist stashen en onstashen van je wijzigingen. Als er iets verkeert gaat kan je je bestanden terug vinden in de stash. Verder gaan?", + "MustStashTitle": "Moet stashen", + "ConfirmationTitle": "Bevestigingspaneel", + "PrevPage": "Vorige pagina", + "NextPage": "Volgende pagina", + "GotoTop": "Scroll naar boven", + "GotoBottom": "Scroll naar beneden", + "FilteringBy": "Filteren bij", + "ResetInParentheses": "(reset)", + "OpenFilteringMenu": "Bekijk scoping opties", + "OpenFilteringMenuTooltip": "", + "FilterBy": "Filter bij", + "ExitFilterMode": "Stop met filteren bij pad", + "ExitFilterModeAuthor": "", + "FilterPathOption": "Vulin pad om op te filteren", + "FilterAuthorOption": "", + "EnterFileName": "Vulin path:", + "EnterAuthor": "", + "FilteringMenuTitle": "Filteren", + "WillCancelExistingFilterTooltip": "", + "MustExitFilterModeTitle": "Command niet beschikbaar", + "MustExitFilterModePrompt": "Command niet beschikbaar in filter modus. Sluit filter modus?", + "Diff": "Diff", + "EnterRefToDiff": "Vul in ref naar diff", + "EnterRefName": "Vul in ref:", + "ExitDiffMode": "Sluit diff mode", + "DiffingMenuTitle": "Diffen", + "SwapDiff": "Keer diff richting om", + "ViewDiffingOptions": "Open diff menu", + "ViewDiffingOptionsTooltip": "", + "OpenCommandLogMenu": "", + "OpenCommandLogMenuTooltip": "", + "ShowingGitDiff": "Laat output zien voor:", + "CommitDiff": "", + "CopyCommitHashToClipboard": "Kopieer commit hash naar klembord", + "CommitHash": "", + "CommitURL": "", + "CopyCommitMessageToClipboard": "Kopieer commit bericht naar klembord", + "CommitMessage": "", + "CommitSubject": "", + "CommitAuthor": "", + "CopyCommitAttributeToClipboard": "", + "CopyCommitAttributeToClipboardTooltip": "", + "CopyBranchNameToClipboard": "Kopieer branch name naar klembord", + "CopyPathToClipboard": "Kopieer de bestandsnaam naar het klembord", + "CommitPrefixPatternError": "Fout in commitPrefix patroon", + "CopySelectedTextToClipboard": "", + "NoFilesStagedTitle": "Geen bestanden gestaged", + "NoFilesStagedPrompt": "Je hebt geen bestanden gestaged. Commit alle bestanden?", + "BranchNotFoundTitle": "Branch niet gevonden", + "BranchNotFoundPrompt": "Branch niet gevonden. Creëer een nieuwe branch genaamd", + "BranchUnknown": "", + "DiscardChangeTitle": "", + "DiscardChangePrompt": "", + "CreateNewBranchFromCommit": "Creëer nieuwe branch van commit", + "BuildingPatch": "", + "ViewCommits": "Bekijk commits", + "MinGitVersionError": "", + "RunningCustomCommandStatus": "", + "SubmoduleStashAndReset": "", + "AndResetSubmodules": "", + "EnterSubmoduleTooltip": "Enter submodule", + "Enter": "", + "CopySubmoduleNameToClipboard": "Kopieer submodule naam naar klembord", + "RemoveSubmodule": "", + "RemoveSubmoduleTooltip": "", + "RemoveSubmodulePrompt": "", + "ResettingSubmoduleStatus": "", + "NewSubmoduleName": "", + "NewSubmoduleUrl": "", + "NewSubmodulePath": "", + "NewSubmodule": "Voeg nieuwe submodule toe", + "AddingSubmoduleStatus": "", + "UpdateSubmoduleUrl": "", + "UpdatingSubmoduleUrlStatus": "", + "EditSubmoduleUrl": "", + "InitializingSubmoduleStatus": "", + "InitSubmoduleTooltip": "Initialiseer submodule", + "Update": "", + "Initialize": "", + "SubmoduleUpdateTooltip": "", + "UpdatingSubmoduleStatus": "", + "BulkInitSubmodules": "", + "BulkUpdateSubmodules": "", + "BulkDeinitSubmodules": "", + "ViewBulkSubmoduleOptions": "Bekijk bulk submodule opties", + "BulkSubmoduleOptions": "", + "RunningCommand": "", + "SubCommitsTitle": "", + "SubmodulesTitle": "", + "NavigationTitle": "Lijstpaneel navigatie", + "SuggestionsCheatsheetTitle": "", + "SuggestionsTitle": "", + "SuggestionsSubtitle": "", + "ExtrasTitle": "", + "PushingTagStatus": "", + "PullRequestURLCopiedToClipboard": "Pull-aanvraag-URL gekopieerd naar klembord", + "CommitDiffCopiedToClipboard": "", + "CommitURLCopiedToClipboard": "", + "CommitMessageCopiedToClipboard": "Commit message gekopieerd naar klembord", + "CommitSubjectCopiedToClipboard": "", + "CommitAuthorCopiedToClipboard": "", + "PatchCopiedToClipboard": "", + "CopiedToClipboard": "gekopieerd naar klembord", + "ErrCannotEditDirectory": "", + "ErrStageDirWithInlineMergeConflicts": "", + "ErrRepositoryMovedOrDeleted": "", + "ErrWorktreeMovedOrRemoved": "", + "CommandLog": "", + "ToggleShowCommandLog": "", + "FocusCommandLog": "", + "CommandLogHeader": "", + "RandomTip": "", + "SelectParentCommitForMerge": "", + "ToggleWhitespaceInDiffView": "", + "ToggleWhitespaceInDiffViewTooltip": "", + "IgnoreWhitespaceDiffViewSubTitle": "", + "IgnoreWhitespaceNotSupportedHere": "", + "IncreaseContextInDiffView": "", + "IncreaseContextInDiffViewTooltip": "", + "DecreaseContextInDiffView": "", + "DecreaseContextInDiffViewTooltip": "", + "DiffContextSizeChanged": "", + "CreatePullRequestOptions": "Bekijk opties voor pull-aanvraag", + "DefaultBranch": "", + "SelectBranch": "", + "CreatePullRequest": "Maak een pull-request", + "SelectConfigFile": "", + "NoConfigFileFoundErr": "", + "LoadingFileSuggestions": "", + "LoadingCommits": "", + "MustSpecifyOriginError": "", + "GitOutput": "", + "GitCommandFailed": "", + "AbortTitle": "", + "AbortPrompt": "", + "OpenLogMenu": "", + "OpenLogMenuTooltip": "", + "LogMenuTitle": "", + "ToggleShowGitGraphAll": "", + "ShowGitGraph": "", + "SortOrder": "", + "SortAlphabetical": "", + "SortByDate": "", + "SortByRecency": "", + "SortBasedOnReflog": "", + "SortCommits": "", + "CantChangeContextSizeError": "", + "OpenCommitInBrowser": "", + "ViewBisectOptions": "", + "ConfirmRevertCommit": "Weet u zeker dat u {{.selectedCommit}} ongedaan wilt maken?", + "RewordInEditorTitle": "", + "RewordInEditorPrompt": "", + "CheckoutPrompt": "", + "HardResetAutostashPrompt": "", + "UpstreamGone": "", + "NukeDescription": "", + "DiscardStagedChangesDescription": "", + "EmptyOutput": "", + "Patch": "", + "CustomPatch": "", + "CommitsCopied": "", + "CommitCopied": "", + "ResetPatch": "", + "ResetPatchTooltip": "", + "ApplyPatch": "", + "ApplyPatchTooltip": "", + "ApplyPatchInReverse": "", + "ApplyPatchInReverseTooltip": "", + "RemovePatchFromOriginalCommit": "", + "RemovePatchFromOriginalCommitTooltip": "", + "MovePatchOutIntoIndex": "", + "MovePatchOutIntoIndexTooltip": "", + "MovePatchIntoNewCommit": "", + "MovePatchIntoNewCommitTooltip": "", + "MovePatchToSelectedCommit": "", + "MovePatchToSelectedCommitTooltip": "", + "CopyPatchToClipboard": "", + "NoMatchesFor": "", + "MatchesFor": "", + "SearchKeybindings": "", + "SearchPrefix": "", + "FilterPrefix": "", + "ExitSearchMode": "", + "ExitTextFilterMode": "", + "Switch": "", + "SwitchToWorktree": "", + "SwitchToWorktreeTooltip": "", + "AlreadyCheckedOutByWorktree": "", + "BranchCheckedOutByWorktree": "", + "DetachWorktreeTooltip": "", + "Switching": "", + "RemoveWorktree": "", + "RemoveWorktreeTitle": "", + "DetachWorktree": "", + "DetachingWorktree": "", + "WorktreesTitle": "", + "WorktreeTitle": "", + "RemoveWorktreePrompt": "", + "ForceRemoveWorktreePrompt": "", + "RemovingWorktree": "", + "AddingWorktree": "", + "CantDeleteCurrentWorktree": "", + "AlreadyInWorktree": "", + "CantDeleteMainWorktree": "", + "NoWorktreesThisRepo": "", + "MissingWorktree": "", + "MainWorktree": "", + "NewWorktree": "", + "NewWorktreePath": "", + "NewWorktreeBase": "", + "RemoveWorktreeTooltip": "", + "BranchNameCannotBeBlank": "", + "NewBranchName": "", + "NewBranchNameLeaveBlank": "", + "ViewWorktreeOptions": "", + "CreateWorktreeFrom": "", + "CreateWorktreeFromDetached": "", + "LcWorktree": "", + "ChangingDirectoryTo": "", + "Name": "", + "Branch": "", + "Path": "", + "MarkedBaseCommitStatus": "", + "MarkAsBaseCommit": "", + "MarkAsBaseCommitTooltip": "", + "MarkedCommitMarker": "", + "PleaseGoToURL": "", + "NoCopiedCommits": "", + "DisabledMenuItemPrefix": "", + "QuickStartInteractiveRebase": "", + "QuickStartInteractiveRebaseTooltip": "", + "CannotQuickStartInteractiveRebase": "", + "ToggleRangeSelect": "Toggle drag selecteer", + "RangeSelectUp": "", + "RangeSelectDown": "", + "RangeSelectNotSupported": "", + "NoItemSelected": "", + "SelectedItemIsNotABranch": "", + "SelectedItemDoesNotHaveFiles": "", + "RangeSelectNotSupportedForSubmodules": "", + "OldCherryPickKeyWarning": "", + "CommandDoesNotSupportOpeningInEditor": "", + "Actions": { + "CheckoutCommit": "", + "CheckoutTag": "", + "CheckoutBranch": "", + "ForceCheckoutBranch": "", + "DeleteLocalBranch": "", + "DeleteBranch": "", + "Merge": "", + "RebaseBranch": "", + "RenameBranch": "", + "CreateBranch": "", + "FastForwardBranch": "", + "CherryPick": "", + "CheckoutFile": "", + "DiscardOldFileChange": "", + "SquashCommitDown": "", + "FixupCommit": "", + "RewordCommit": "", + "DropCommit": "", + "EditCommit": "", + "AmendCommit": "", + "ResetCommitAuthor": "", + "SetCommitAuthor": "", + "AddCommitCoAuthor": "", + "RevertCommit": "", + "CreateFixupCommit": "", + "SquashAllAboveFixupCommits": "", + "MoveCommitUp": "", + "MoveCommitDown": "", + "CopyCommitMessageToClipboard": "", + "CopyCommitSubjectToClipboard": "", + "CopyCommitDiffToClipboard": "", + "CopyCommitHashToClipboard": "", + "CopyCommitURLToClipboard": "", + "CopyCommitAuthorToClipboard": "", + "CopyCommitAttributeToClipboard": "", + "CopyPatchToClipboard": "", + "CustomCommand": "", + "DiscardAllChangesInDirectory": "", + "DiscardUnstagedChangesInDirectory": "", + "DiscardAllChangesInFile": "", + "DiscardAllUnstagedChangesInFile": "", + "StageFile": "", + "StageResolvedFiles": "", + "UnstageFile": "", + "UnstageAllFiles": "", + "StageAllFiles": "", + "IgnoreExcludeFile": "", + "IgnoreFileErr": "", + "ExcludeFile": "", + "ExcludeGitIgnoreErr": "", + "Commit": "", + "EditFile": "", + "Push": "", + "Pull": "", + "OpenFile": "", + "OpenFileTooltip": "", + "StashAllChanges": "", + "StashAllChangesKeepIndex": "", + "StashStagedChanges": "", + "StashUnstagedChanges": "", + "StashIncludeUntrackedChanges": "", + "GitFlowFinish": "", + "GitFlowStart": "", + "CopyToClipboard": "", + "CopySelectedTextToClipboard": "", + "RemovePatchFromCommit": "", + "MovePatchToSelectedCommit": "", + "MovePatchIntoIndex": "", + "MovePatchIntoNewCommit": "", + "DeleteRemoteBranch": "", + "SetBranchUpstream": "", + "AddRemote": "", + "RemoveRemote": "", + "UpdateRemote": "", + "ApplyPatch": "", + "Stash": "", + "RenameStash": "", + "RemoveSubmodule": "", + "ResetSubmodule": "", + "AddSubmodule": "", + "UpdateSubmoduleUrl": "", + "InitialiseSubmodule": "", + "BulkInitialiseSubmodules": "", + "BulkUpdateSubmodules": "", + "BulkDeinitialiseSubmodules": "", + "UpdateSubmodule": "", + "CreateLightweightTag": "", + "CreateAnnotatedTag": "", + "DeleteLocalTag": "", + "DeleteRemoteTag": "", + "PushTag": "", + "NukeWorkingTree": "", + "DiscardUnstagedFileChanges": "", + "RemoveUntrackedFiles": "", + "RemoveStagedFiles": "", + "SoftReset": "", + "MixedReset": "", + "HardReset": "", + "Undo": "", + "Redo": "", + "CopyPullRequestURL": "", + "OpenDiffTool": "", + "OpenMergeTool": "", + "OpenCommitInBrowser": "", + "OpenPullRequest": "", + "StartBisect": "", + "ResetBisect": "", + "BisectSkip": "", + "BisectMark": "", + "RemoveWorktree": "", + "AddWorktree": "" + }, + "Bisect": { + "MarkStart": "", + "MarkSkipCurrent": "", + "MarkSkipSelected": "", + "ResetTitle": "", + "ResetPrompt": "", + "ResetOption": "", + "ChooseTerms": "", + "OldTermPrompt": "", + "NewTermPrompt": "", + "BisectMenuTitle": "", + "Mark": "", + "SkipCurrent": "", + "SkipSelected": "", + "CompleteTitle": "", + "CompletePrompt": "", + "CompletePromptIndeterminate": "", + "Bisecting": "" + }, + "Log": { + "EditRebase": "", + "MoveCommitUp": "", + "MoveCommitDown": "", + "CherryPickCommits": "", + "HandleUndo": "", + "HandleMidRebaseCommand": "", + "RemoveFile": "", + "CopyToClipboard": "", + "Remove": "", + "CreateFileWithContent": "", + "AppendingLineToFile": "", + "EditRebaseFromBaseCommit": "" + }, + "BreakingChangesTitle": "", + "BreakingChangesMessage": "", + "BreakingChangesByVersion": null +} diff --git a/pkg/i18n/translations/pl.json b/pkg/i18n/translations/pl.json new file mode 100644 index 00000000000..9ec011e22f3 --- /dev/null +++ b/pkg/i18n/translations/pl.json @@ -0,0 +1,926 @@ +{ + "NotEnoughSpace": "Za mało miejsca na wyświetlenie paneli", + "DiffTitle": "Różnice", + "FilesTitle": "Pliki", + "BranchesTitle": "Gałęzie", + "CommitsTitle": "Commity", + "StashTitle": "Schowek", + "SnakeTitle": "Snake", + "EasterEgg": "Jajko wielkanocne", + "UnstagedChanges": "Zmiany niezatwierdzone", + "StagedChanges": "Zmiany zatwierdzone", + "MainTitle": "Główny", + "StagingTitle": "Panel główny (zatwierdzanie)", + "MergingTitle": "Panel główny (scalanie)", + "MergeConfirmTitle": "Scalanie", + "NormalTitle": "Panel główny (normalny)", + "LogTitle": "Dziennik", + "CommitSummary": "Podsumowanie commita", + "CredentialsUsername": "Nazwa użytkownika", + "CredentialsPassword": "Hasło", + "CredentialsPassphrase": "Wprowadź hasło do klucza SSH", + "CredentialsPIN": "Wprowadź PIN do klucza SSH", + "PassUnameWrong": "Niewłaściwe hasło, fraza lub nazwa użytkownika", + "Commit": "Commit", + "CommitTooltip": "Zatwierdź zmiany zatwierdzone.", + "AmendLastCommit": "Popraw ostatni commit", + "AmendLastCommitTitle": "Popraw ostatni commit", + "SureToAmend": "Czy na pewno chcesz poprawić ostatni commit? Następnie możesz zmienić wiadomość commita z panelu commitów.", + "NoCommitToAmend": "Brak commita do poprawienia.", + "CommitChangesWithEditor": "Zatwierdź zmiany używając edytora git", + "FindBaseCommitForFixup": "Znajdź bazowy commit do poprawki", + "FindBaseCommitForFixupTooltip": "Znajdź commit, na którym opierają się Twoje obecne zmiany, w celu poprawienia/zmiany commita. To pozwala Ci uniknąć przeglądania commitów w Twojej gałęzi jeden po drugim, aby zobaczyć, który commit powinien być poprawiony/zmieniony. Zobacz dokumentację: \u003chttps://github.com/jesseduffield/lazygit/tree/master/docs/Fixup_Commits.md\u003e", + "NoBaseCommitsFound": "Nie znaleziono bazowych commitów", + "MultipleBaseCommitsFoundStaged": "Znaleziono wiele bazowych commitów. (Spróbuj zatwierdzić mniej zmian naraz)", + "MultipleBaseCommitsFoundUnstaged": "Znaleziono wiele bazowych commitów. (Spróbuj zatwierdzić część zmian)", + "BaseCommitIsAlreadyOnMainBranch": "Bazowy commit dla tej zmiany jest już na gałęzi głównej", + "BaseCommitIsNotInCurrentView": "Bazowy commit nie jest w bieżącym widoku", + "HunksWithOnlyAddedLinesWarning": "Istnieją zakresy tylko z dodanymi liniami w różnicach; uważaj, aby sprawdzić, czy te należą do znalezionego bazowego commita.\n\nKontynuować?", + "StatusTitle": "Status", + "GlobalTitle": "Globalne skróty klawiszowe", + "Menu": "Menu", + "Execute": "Wykonaj", + "Stage": "Zatwierdź", + "StageTooltip": "Przełącz zatwierdzenie dla wybranego pliku.", + "ToggleStagedAll": "Zatwierdź wszystko", + "ToggleStagedAllTooltip": "Przełącz zatwierdzenie/odznaczenie dla wszystkich plików w drzewie roboczym.", + "ToggleTreeView": "Przełącz widok drzewa plików", + "ToggleTreeViewTooltip": "Przełącz widok plików między płaskim a drzewem. Płaski układ pokazuje wszystkie ścieżki plików na jednej liście, układ drzewa grupuje pliki według katalogów.", + "OpenDiffTool": "Otwórz zewnętrzne narzędzie różnic (git difftool)", + "OpenMergeTool": "Otwórz zewnętrzne narzędzie scalania", + "OpenMergeToolTooltip": "Uruchom `git mergetool`.", + "Refresh": "Odśwież", + "RefreshTooltip": "Odśwież stan git (tj. uruchom `git status`, `git branch`, itp. w tle, aby zaktualizować zawartość paneli). To nie uruchamia `git fetch`.", + "Push": "Wypchnij", + "Pull": "Pociągnij", + "PushTooltip": "Wypchnij bieżącą gałąź do jej gałęzi nadrzędnej. Jeśli nie skonfigurowano gałęzi nadrzędnej, zostaniesz poproszony o skonfigurowanie gałęzi nadrzędnej.", + "PullTooltip": "Pociągnij zmiany z zdalnego dla bieżącej gałęzi. Jeśli nie skonfigurowano gałęzi nadrzędnej, zostaniesz poproszony o skonfigurowanie gałęzi nadrzędnej.", + "Scroll": "Przewiń", + "FileFilter": "Filtruj pliki według statusu", + "CopyToClipboardMenu": "Kopiuj do schowka", + "CopyFileName": "Nazwa pliku", + "CopyFilePath": "Ścieżka", + "CopyFileDiffTooltip": "Jeśli istnieją zatwierdzone elementy, ta komenda bierze pod uwagę tylko je. W przeciwnym razie bierze pod uwagę wszystkie niezatwierdzone.", + "CopySelectedDiff": "Różnice wybranego pliku", + "CopyAllFilesDiff": "Różnice wszystkich plików", + "NoContentToCopyError": "Nic do skopiowania", + "FileNameCopiedToast": "Nazwa pliku skopiowana do schowka", + "FilePathCopiedToast": "Ścieżka pliku skopiowana do schowka", + "FileDiffCopiedToast": "Różnice pliku skopiowane do schowka", + "AllFilesDiffCopiedToast": "Różnice wszystkich plików skopiowane do schowka", + "FilterStagedFiles": "Pokaż tylko zatwierdzone pliki", + "FilterUnstagedFiles": "Pokaż tylko niezatwierdzone pliki", + "ResetFilter": "Resetuj filtr", + "MergeConflictsTitle": "Konflikty scalania", + "Checkout": "Przełącz", + "CheckoutTooltip": "Przełącz wybrany element.", + "CantCheckoutBranchWhilePulling": "Nie możesz przełączyć na inną gałąź podczas pobierania bieżącej gałęzi", + "TagCheckoutTooltip": "Przełącz wybrany tag jako odłączoną głowę (detached HEAD).", + "RemoteBranchCheckoutTooltip": "Przełącz na nową lokalną gałąź na podstawie wybranej gałęzi zdalnej. Nowa gałąź będzie śledzić gałąź zdalną.", + "CantPullOrPushSameBranchTwice": "Nie możesz wypchnąć lub pociągnąć gałęzi, podczas gdy jest już wypychana lub pociągana", + "NoChangedFiles": "Brak zmienionych plików", + "SoftReset": "Miękki reset", + "AlreadyCheckedOutBranch": "Już przełączono na tę gałąź", + "SureForceCheckout": "Czy na pewno chcesz wymusić przełączenie? Stracisz wszystkie lokalne zmiany", + "ForceCheckoutBranch": "Wymuś przełączenie gałęzi", + "BranchName": "Nazwa gałęzi", + "NewBranchNameBranchOff": "Nowa nazwa gałęzi (gałąź oparta na '{{.branchName}}')", + "CantDeleteCheckOutBranch": "Nie możesz usunąć przełączonej gałęzi!", + "DeleteBranchTitle": "Usuń gałąź '{{.selectedBranchName}}'?", + "DeleteLocalBranch": "Usuń lokalną gałąź", + "DeleteRemoteBranchOption": "Usuń gałąź zdalną", + "DeleteRemoteBranchPrompt": "Czy na pewno chcesz usunąć gałąź zdalną '{{.selectedBranchName}}' z '{{.upstream}}'?", + "ForceDeleteBranchTitle": "Wymuś usunięcie gałęzi", + "ForceDeleteBranchMessage": "'{{.selectedBranchName}}' nie jest w pełni scalona. Czy na pewno chcesz ją usunąć?", + "RebaseBranch": "Przebazuj", + "RebaseBranchTooltip": "Przebazuj przełączoną gałąź na wybraną gałąź.", + "CantRebaseOntoSelf": "Nie możesz przebazować gałęzi na siebie", + "CantMergeBranchIntoItself": "Nie możesz scalić gałęzi do siebie", + "ForceCheckout": "Wymuś przełączenie", + "ForceCheckoutTooltip": "Wymuś przełączenie wybranej gałęzi. To spowoduje odrzucenie wszystkich lokalnych zmian w drzewie roboczym przed przełączeniem na wybraną gałąź.", + "CheckoutByName": "Przełącz według nazwy", + "CheckoutByNameTooltip": "Przełącz według nazwy. W polu wprowadzania możesz wpisać '-' aby przełączyć się na ostatnią gałąź.", + "RemoteBranchCheckoutTitle": "", + "CheckoutTypeNewBranch": "", + "CheckoutTypeNewBranchTooltip": "", + "CheckoutTypeDetachedHead": "", + "CheckoutTypeDetachedHeadTooltip": "", + "NewBranch": "Nowa gałąź", + "NewBranchFromStashTooltip": "Utwórz nową gałąź z wybranego wpisu schowka. Działa poprzez przełączenie git na commit, na którym wpis schowka został utworzony, tworzenie nowej gałęzi z tego commita, a następnie zastosowanie wpisu schowka do nowej gałęzi jako dodatkowego commita.", + "NoBranchesThisRepo": "Brak gałęzi dla tego repozytorium", + "CommitWithoutMessageErr": "Nie możesz commitować bez wiadomości commita", + "Close": "Zamknij", + "CloseCancel": "Zamknij/Anuluj", + "Confirm": "Potwierdź", + "Quit": "Wyjdź", + "SquashTooltip": "Scal wybrany commit z commitami poniżej. Wiadomość wybranego commita zostanie dołączona do commita poniżej.", + "CannotSquashOrFixupFirstCommit": "Nie ma commita poniżej do scalenia", + "Fixup": "Poprawka", + "FixupTooltip": "Włącz wybrany commit do commita poniżej. Podobnie do fixup, ale wiadomość wybranego commita zostanie odrzucona.", + "SureFixupThisCommit": "Czy na pewno chcesz 'poprawić' wybrane commit(y) do commita poniżej?", + "SureSquashThisCommit": "Czy na pewno chcesz scalić wybrane commit(y) do commita poniżej?", + "Squash": "Scal", + "PickCommitTooltip": "Oznacz wybrany commit do wybrania (podczas rebazowania). Oznacza to, że commit zostanie zachowany po kontynuacji rebazowania.", + "Pick": "Wybierz", + "CantPickDisabledReason": "Nie możesz wybrać commita podczas rebazowania", + "Edit": "Edytuj", + "RevertCommit": "Cofnij commit", + "Revert": "Cofnij", + "RevertCommitTooltip": "Utwórz commit cofający dla wybranego commita, który stosuje zmiany wybranego commita w odwrotnej kolejności.", + "Reword": "Przeformułuj", + "CommitRewordTooltip": "Przeformułuj wiadomość wybranego commita.", + "DropCommit": "Usuń", + "DropCommitTooltip": "Usuń wybrany commit. To usunie commit z gałęzi za pomocą rebazowania. Jeśli commit wprowadza zmiany, od których zależą późniejsze commity, być może będziesz musiał rozwiązać konflikty scalania.", + "MoveDownCommit": "Przesuń commit w dół", + "MoveUpCommit": "Przesuń commit w górę", + "CannotMoveAnyFurther": "Nie można przesunąć dalej", + "EditCommit": "Edytuj (rozpocznij interaktywne rebazowanie)", + "EditCommitTooltip": "Edytuj wybrany commit. Użyj tego, aby rozpocząć interaktywne rebazowanie od wybranego commita. Podczas trwania rebazowania, to oznaczy wybrany commit do edycji, co oznacza, że po kontynuacji rebazowania, rebazowanie zostanie wstrzymane na wybranym commicie, aby umożliwić wprowadzenie zmian.", + "AmendCommitTooltip": "Popraw commit ze zmianami zatwierdzonymi. Jeśli wybrany commit jest commit HEAD, to wykona `git commit --amend`. W przeciwnym razie commit zostanie poprawiony za pomocą rebazowania.", + "Amend": "Popraw", + "ResetAuthor": "Resetuj autora", + "ResetAuthorTooltip": "Resetuj autora commita do aktualnie skonfigurowanego użytkownika. To również odświeży znacznik czasu autora", + "SetAuthor": "Ustaw autora", + "SetAuthorTooltip": "Ustaw autora na podstawie monitu", + "AddCoAuthor": "Dodaj współautora", + "AmendCommitAttribute": "Popraw atrybut commita", + "AmendCommitAttributeTooltip": "Ustaw/Resetuj autora commita lub ustaw współautora.", + "SetAuthorPromptTitle": "Ustaw autora (musi wyglądać jak 'Imię \u003cEmail\u003e')", + "AddCoAuthorPromptTitle": "Dodaj współautora (musi wyglądać jak 'Imię \u003cEmail\u003e')", + "AddCoAuthorTooltip": "Dodaj współautora używając metadanych Github/Gitlab Co-authored-by.", + "SureResetCommitAuthor": "Pole autora tego commita zostanie zaktualizowane, aby pasowało do skonfigurowanego użytkownika. To również odświeży znacznik czasu autora. Kontynuować?", + "RewordCommitEditor": "Przeformułuj za pomocą edytora", + "NoCommitsThisBranch": "Brak commitów dla tej gałęzi", + "UpdateRefHere": "Zaktualizuj gałąź '{{.ref}}' tutaj", + "Error": "Błąd", + "Undo": "Cofnij", + "UndoReflog": "Cofnij", + "RedoReflog": "Ponów", + "UndoTooltip": "Dziennik reflog zostanie użyty do określenia, jakie polecenie git należy uruchomić, aby cofnąć ostatnie polecenie git. Nie obejmuje to zmian w drzewie roboczym; brane są pod uwagę tylko commity.", + "RedoTooltip": "Dziennik reflog zostanie użyty do określenia, jakie polecenie git należy uruchomić, aby ponowić ostatnie polecenie git. Nie obejmuje to zmian w drzewie roboczym; brane są pod uwagę tylko commity.", + "UndoMergeResolveTooltip": "Cofnij ostatnie rozwiązanie konfliktu scalania.", + "DiscardAllTooltip": "Odrzuć wszystkie zmiany (zarówno zatwierdzone jak i niezatwierdzone) w '{{.path}}'.", + "DiscardUnstagedTooltip": "Odrzuć niezatwierdzone zmiany w '{{.path}}'.", + "Pop": "Wyciągnij", + "StashPopTooltip": "Zastosuj wpis schowka do katalogu roboczego i usuń wpis schowka.", + "Drop": "Usuń", + "StashDropTooltip": "Usuń wpis schowka z listy schowka.", + "Apply": "Zastosuj", + "StashApplyTooltip": "Zastosuj wpis schowka do katalogu roboczego.", + "NoStashEntries": "Brak wpisów schowka", + "StashDrop": "Usuń schowek", + "SureDropStashEntry": "Czy na pewno chcesz usunąć ten wpis schowka?", + "StashPop": "Wyciągnij schowek", + "SurePopStashEntry": "Czy na pewno chcesz wyciągnąć ten wpis schowka?", + "StashApply": "Zastosuj schowek", + "SureApplyStashEntry": "Czy na pewno chcesz zastosować ten wpis schowka?", + "NoTrackedStagedFilesStash": "Nie masz śledzonych/zatwierdzonych plików do schowania", + "NoFilesToStash": "Nie masz plików do schowania", + "StashChanges": "Schowaj zmiany", + "RenameStash": "Zmień nazwę schowka", + "RenameStashPrompt": "Zmień nazwę schowka: {{.stashName}}", + "OpenConfig": "Otwórz plik konfiguracyjny", + "EditConfig": "Edytuj plik konfiguracyjny", + "ForcePush": "Wymuś wysłanie", + "ForcePushPrompt": "Twoja gałąź rozbiegła się z gałęzią zdalną. Naciśnij {{.cancelKey}}, aby anulować, lub {{.confirmKey}}, aby wymusić wysłanie.", + "ForcePushDisabled": "Twoja gałąź rozbiegła się z gałęzią zdalną i masz wyłączone wymuszanie wysyłania", + "UpdatesRejected": "", + "UpdatesRejectedAndForcePushDisabled": "Aktualizacje zostały odrzucone i wyłączyłeś wymuszenie wysłania", + "CheckForUpdate": "Sprawdź aktualizacje", + "CheckingForUpdates": "Sprawdzanie aktualizacji...", + "UpdateAvailableTitle": "Dostępna aktualizacja!", + "UpdateAvailable": "Pobrać i zainstalować wersję {{.newVersion}}?", + "UpdateInProgressWaitingStatus": "Aktualizacja", + "UpdateCompletedTitle": "Aktualizacja zakończona!", + "UpdateCompleted": "Aktualizacja została pomyślnie zainstalowana. Uruchom ponownie lazygit, aby zaczęła działać.", + "FailedToRetrieveLatestVersionErr": "Nie udało się pobrać informacji o wersji", + "OnLatestVersionErr": "Masz już najnowszą wersję", + "MajorVersionErr": "Nowa wersja ({{.newVersion}}) zawiera zmiany niekompatybilne wstecznie w porównaniu z bieżącą wersją ({{.currentVersion}})", + "CouldNotFindBinaryErr": "Nie można znaleźć żadnego pliku binarnego pod adresem {{.url}}", + "UpdateFailedErr": "Aktualizacja nie powiodła się: {{.errMessage}}", + "ConfirmQuitDuringUpdateTitle": "Aktualizacja w toku", + "ConfirmQuitDuringUpdate": "Aktualizacja jest w toku. Czy na pewno chcesz wyjść?", + "MergeToolTitle": "Narzędzie scalania", + "MergeToolPrompt": "Czy na pewno chcesz otworzyć `git mergetool`?", + "IntroPopupMessage": "\nThanks for using lazygit! Seriously you rock. Three things to share with you:\n\n 1) If you want to learn about lazygit's features, watch this vid:\n https://youtu.be/CPLdltN7wgE\n\n 2) Be sure to read the latest release notes at:\n https://github.com/jesseduffield/lazygit/releases\n\n 3) If you're using git, that makes you a programmer! With your help we can make\n lazygit better, so consider becoming a contributor and joining the fun at\n https://github.com/jesseduffield/lazygit\n You can also sponsor me and tell me what to work on by clicking the donate\n button at the bottom right.\n Or even just star the repo to share the love!\n", + "DeprecatedEditConfigWarning": "\n### Deprecated config warning ###\n\nThe following config settings are deprecated and will be removed in a future\nversion:\n{{configs}}\n\nPlease refer to\n\n https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#configuring-file-editing\n\nfor up-to-date information how to configure your editor.\n\n", + "GitconfigParseErr": "Gogit nie mógł przetworzyć pliku gitconfig z powodu obecności niezacytowanych znaków '\\'. Usunięcie ich powinno rozwiązać problem.", + "EditFile": "Edytuj plik", + "EditFileTooltip": "Otwórz plik w zewnętrznym edytorze.", + "OpenFile": "Otwórz plik", + "OpenFileTooltip": "Otwórz plik w domyślnej aplikacji.", + "OpenInEditor": "Otwórz w edytorze", + "IgnoreFile": "Dodaj do .gitignore", + "ExcludeFile": "Dodaj do .git/info/exclude", + "RefreshFiles": "Odśwież pliki", + "Merge": "Scal", + "MergeBranchTooltip": "Scal wybraną gałąź z aktualnie sprawdzoną gałęzią.", + "ConfirmQuit": "Czy na pewno chcesz wyjść?", + "SwitchRepo": "Przełącz na ostatnie repozytorium", + "AllBranchesLogGraph": "Pokaż wszystkie gałęzie w logach", + "UnsupportedGitService": "Nieobsługiwana usługa git", + "CopyPullRequestURL": "Kopiuj adres URL żądania ściągnięcia do schowka", + "NoBranchOnRemote": "Ta gałąź nie istnieje na zdalnym serwerze. Musisz ją najpierw wysłać na zdalny serwer.", + "Fetch": "Pobierz", + "FetchTooltip": "Pobierz zmiany ze zdalnego serwera.", + "NoAutomaticGitFetchTitle": "Brak automatycznego pobierania git", + "NoAutomaticGitFetchBody": "Lazygit nie może używać \"git fetch\" w prywatnym repozytorium; użyj 'f' w panelu plików, aby ręcznie uruchomić \"git fetch\"", + "FileEnter": "Zatwierdź linie / Zwiń katalog", + "FileEnterTooltip": "Jeśli wybrany element jest plikiem, skup się na widoku zatwierdzania, aby móc zatwierdzać poszczególne fragmenty/linie. Jeśli wybrany element jest katalogiem, zwiń/rozwiń go.", + "FileStagingRequirements": "Można zatwierdzać poszczególne linie tylko dla śledzonych plików", + "StageSelectionTooltip": "Przełącz zaznaczenie zatwierdzone/niezatwierdzone.", + "DiscardSelection": "Odrzuć", + "DiscardSelectionTooltip": "Gdy zaznaczona jest niezatwierdzona zmiana, odrzuć ją używając `git reset`. Gdy zaznaczona jest zatwierdzona zmiana, cofnij zatwierdzenie.", + "ToggleSelectHunk": "Zaznacz fragment", + "ToggleSelectHunkTooltip": "Przełącz tryb zaznaczania fragmentu.", + "ToggleSelectionForPatch": "Przełącz linie w łatce", + "ToggleSelectionForPatchTooltip": "", + "EditHunk": "Edytuj fragment", + "EditHunkTooltip": "Edytuj wybrany fragment w zewnętrznym edytorze.", + "ToggleStagingView": "Przełącz widok", + "ToggleStagingViewTooltip": "Przełącz na inny widok (zatwierdzone/niezatwierdzone zmiany).", + "ReturnToFilesPanel": "Wróć do panelu plików", + "FastForward": "Szybkie przewijanie", + "FastForwardTooltip": "Szybkie przewijanie wybranej gałęzi z jej źródła.", + "FastForwarding": "Szybkie przewijanie", + "FoundConflictsTitle": "Konflikty!", + "ViewConflictsMenuItem": "Pokaż konflikty", + "AbortMenuItem": "Przerwij %s", + "PickHunk": "Wybierz fragment", + "PickAllHunks": "Wybierz wszystkie fragmenty", + "ViewMergeRebaseOptions": "Pokaż opcje scalania/rebase", + "ViewMergeRebaseOptionsTooltip": "Pokaż opcje do przerwania/kontynuowania/pominięcia bieżącego scalania/rebase.", + "ViewMergeOptions": "Pokaż opcje scalania", + "ViewRebaseOptions": "Pokaż opcje rebase", + "NotMergingOrRebasing": "Aktualnie nie wykonujesz ani scalania, ani rebase", + "AlreadyRebasing": "Nie można wykonać tej akcji podczas rebase", + "RecentRepos": "Ostatnie repozytoria", + "MergeOptionsTitle": "Opcje scalania", + "RebaseOptionsTitle": "Opcje rebase", + "CommitSummaryTitle": "Podsumowanie commita", + "CommitDescriptionTitle": "Opis commita", + "CommitDescriptionSubTitle": "Naciśnij {{.togglePanelKeyBinding}}, aby przełączyć fokus, {{.commitMenuKeybinding}}, aby otworzyć menu", + "LocalBranchesTitle": "Lokalne gałęzie", + "SearchTitle": "Szukaj", + "TagsTitle": "Tagi", + "MenuTitle": "Menu", + "CommitMenuTitle": "Menu commita", + "RemotesTitle": "Zdalne", + "RemoteBranchesTitle": "Zdalne gałęzie", + "PatchBuildingTitle": "Główny panel (budowanie łatki)", + "InformationTitle": "Informacje", + "SecondaryTitle": "Dodatkowy", + "ReflogCommitsTitle": "Reflog", + "ConflictsResolved": "Wszystkie konflikty scalania rozwiązane. Kontynuować?", + "Continue": "Kontynuuj", + "RebasingTitle": "Rebase '{{.checkedOutBranch}}'", + "RebasingFromBaseCommitTitle": "Rebase '{{.checkedOutBranch}}' od oznaczonego commita bazowego", + "SimpleRebase": "Prosty rebase na '{{.ref}}'", + "InteractiveRebase": "Interaktywny rebase na '{{.ref}}'", + "RebaseOntoBaseBranch": "", + "InteractiveRebaseTooltip": "Rozpocznij interaktywny rebase z przerwaniem na początku, abyś mógł zaktualizować commity TODO przed kontynuacją.", + "RebaseOntoBaseBranchTooltip": "", + "MustSelectTodoCommits": "Podczas rebase ta akcja działa tylko na zaznaczonych commitach TODO.", + "ConfirmMerge": "Czy na pewno chcesz scalić '{{.selectedBranch}}' z '{{.checkedOutBranch}}'?", + "FwdNoUpstream": "Nie można szybko przewinąć gałęzi bez źródła", + "FwdNoLocalUpstream": "Nie można szybko przewinąć gałęzi, której zdalne źródło nie jest zarejestrowane lokalnie", + "FwdCommitsToPush": "Nie można szybko przewinąć gałęzi z commitami do wysłania", + "PullRequestNoUpstream": "Nie można otworzyć żądania ściągnięcia dla gałęzi bez źródła", + "ErrorOccurred": "Wystąpił błąd! Proszę utworzyć zgłoszenie na", + "NoRoom": "Za mało miejsca", + "YouAreHere": "JESTEŚ TUTAJ", + "YouDied": "ZGINĄŁEŚ!", + "RewordNotSupported": "Zmiana słów commitów podczas interaktywnego rebase nie jest obecnie obsługiwana", + "ChangingThisActionIsNotAllowed": "Zmiana tego rodzaju wpisu rebase TODO nie jest dozwolona", + "CherryPickCopy": "Kopiuj (cherry-pick)", + "CherryPickCopyTooltip": "Oznacz commit jako skopiowany. Następnie, w widoku lokalnych commitów, możesz nacisnąć `{{.paste}}`, aby wkleić (cherry-pick) skopiowane commity do sprawdzonej gałęzi. W dowolnym momencie możesz nacisnąć `{{.escape}}`, aby anulować zaznaczenie.", + "CherryPickCopyRange": "", + "CherryPickCopyRangeTooltip": "Oznacz commity jako skopiowane od ostatniego skopiowanego commita do wybranego commita.", + "PasteCommits": "Wklej (cherry-pick)", + "SureCherryPick": "Czy na pewno chcesz cherry-pick skopiowane commity na tę gałąź?", + "CherryPick": "Cherry-pick", + "CannotCherryPickNonCommit": "Nie można cherry-pick tego rodzaju wpisu TODO", + "CannotCherryPickMergeCommit": "Cherry-pick commitów scalających nie jest obsługiwane", + "Donate": "Wesprzyj", + "AskQuestion": "Zadaj pytanie", + "PrevLine": "Wybierz poprzednią linię", + "NextLine": "Wybierz następną linię", + "PrevHunk": "Idź do poprzedniego fragmentu", + "NextHunk": "Idź do następnego fragmentu", + "PrevConflict": "Poprzedni konflikt", + "NextConflict": "Następny konflikt", + "SelectPrevHunk": "Poprzedni fragment", + "SelectNextHunk": "Następny fragment", + "ScrollDown": "Przewiń w dół", + "ScrollUp": "Przewiń w górę", + "ScrollUpMainWindow": "Przewiń główne okno w górę", + "ScrollDownMainWindow": "Przewiń główne okno w dół", + "AmendCommitTitle": "Popraw commit", + "AmendCommitPrompt": "Czy na pewno chcesz poprawić ten commit swoimi zatwierdzonymi plikami?", + "DropCommitTitle": "Usuń commit", + "DropCommitPrompt": "Czy na pewno chcesz usunąć wybrane commity?", + "DropUpdateRefPrompt": "", + "PullingStatus": "Ściąganie", + "PushingStatus": "Wysyłanie", + "FetchingStatus": "Pobieranie", + "SquashingStatus": "Sciskanie", + "FixingStatus": "Naprawianie", + "DeletingStatus": "Usuwanie", + "DroppingStatus": "Upuszczanie", + "MovingStatus": "Przesuwanie", + "RebasingStatus": "Rebase", + "MergingStatus": "Scalanie", + "LowercaseRebasingStatus": "rebase", + "LowercaseMergingStatus": "scalanie", + "AmendingStatus": "Poprawianie", + "CherryPickingStatus": "Cherry-picking", + "UndoingStatus": "Cofanie", + "RedoingStatus": "Ponawianie", + "CheckingOutStatus": "Sprawdzanie", + "CommittingStatus": "Commitowanie", + "RevertingStatus": "Przywracanie", + "CreatingFixupCommitStatus": "Tworzenie commita poprawiającego", + "CommitFiles": "Zatwierdź pliki", + "SubCommitsDynamicTitle": "Commity (%s)", + "CommitFilesDynamicTitle": "Pliki różnic (%s)", + "RemoteBranchesDynamicTitle": "Zdalne gałęzie (%s)", + "ViewItemFiles": "Wyświetl pliki", + "ViewItemFilesTooltip": "Wyświetl pliki zmodyfikowane przez wybrany element.", + "CommitFilesTitle": "Pliki commita", + "CheckoutCommitFileTooltip": "Przełącz plik. Zastępuje plik w twoim drzewie roboczym wersją z wybranego commita.", + "CanOnlyDiscardFromLocalCommits": "Można odrzucić tylko zmiany z lokalnych commitów", + "Remove": "Usuń", + "DiscardOldFileChangeTooltip": "Odrzuć zmiany w tym pliku z tego commita. Uruchamia interaktywny rebase w tle, więc możesz otrzymać konflikt scalania, jeśli późniejszy commit również zmienia ten plik.", + "DiscardFileChangesTitle": "Odrzuć zmiany w pliku", + "DiscardFileChangesPrompt": "Czy na pewno chcesz usunąć zmiany w wybranym pliku/ach z tego commita?\n\nTa akcja uruchomi rebase, cofając te zmiany w pliku. Pamiętaj, że jeśli późniejsze commity zależą od tych zmian, możesz potrzebować rozwiązać konflikty.\nUwaga: Spowoduje to również zresetowanie wszelkich aktywnych niestandardowych łatek.", + "DisabledForGPG": "Funkcja niedostępna dla użytkowników używających GPG", + "CreateRepo": "Nie w repozytorium git. Utworzyć nowe repozytorium git? (t/n): ", + "BareRepo": "Próbujesz otworzyć Lazygit w gołym repozytorium, ale Lazygit jeszcze nie obsługuje gołych repozytoriów. Otworzyć najnowsze repozytorium? (t/n) ", + "InitialBranch": "Nazwa gałęzi? (pozostaw puste dla domyślnej gita): ", + "NoRecentRepositories": "Musisz otworzyć lazygit w repozytorium git. Brak ważnych ostatnich repozytoriów. Wyjście.", + "IncorrectNotARepository": "Wartość 'notARepository' jest nieprawidłowa. Powinna być jedną z 'prompt', 'create', 'skip', lub 'quit'.", + "AutoStashTitle": "Autostash?", + "AutoStashPrompt": "Musisz schować i wyciągnąć swoje zmiany, aby je przenieść. Zrobić to automatycznie? (enter/esc)", + "StashPrefix": "Automatyczne chowanie zmian dla ", + "Discard": "Odrzuć", + "DiscardChangesTitle": "Odrzuć zmiany", + "DiscardFileChangesTooltip": "Wyświetl opcje odrzucania zmian w wybranym pliku.", + "Cancel": "Anuluj", + "DiscardAllChanges": "Odrzuć wszystkie zmiany", + "DiscardUnstagedChanges": "Odrzuć niezatwierdzone zmiany", + "DiscardAllChangesToAllFiles": "Zniszcz drzewo robocze", + "DiscardAnyUnstagedChanges": "Odrzuć niezatwierdzone zmiany", + "DiscardUntrackedFiles": "Odrzuć nieśledzone pliki", + "DiscardStagedChanges": "Odrzuć zatwierdzone zmiany", + "HardReset": "Twardy reset", + "BranchDeleteTooltip": "Wyświetl opcje usuwania lokalnej/odległej gałęzi.", + "TagDeleteTooltip": "Wyświetl opcje usuwania lokalnego/odległego tagu.", + "Delete": "Usuń", + "Reset": "Reset", + "ResetTooltip": "Wyświetl opcje resetu (miękki/mieszany/twardy) do wybranego elementu.", + "ViewResetOptions": "Reset", + "FileResetOptionsTooltip": "Wyświetl opcje resetu dla drzewa roboczego (np. zniszczenie drzewa roboczego).", + "CreateFixupCommit": "Utwórz commit fixup", + "CreateFixupCommitTooltip": "Utwórz commit 'fixup!' dla wybranego commita. Później możesz nacisnąć `{{.squashAbove}}` na tym samym commicie, aby zastosować wszystkie powyższe commity fixup.", + "CreateAmendCommit": "", + "FixupMenu_Fixup": "", + "FixupMenu_FixupTooltip": "", + "FixupMenu_AmendWithChanges": "", + "FixupMenu_AmendWithChangesTooltip": "", + "FixupMenu_AmendWithoutChanges": "", + "FixupMenu_AmendWithoutChangesTooltip": "", + "SquashAboveCommitsTooltip": "Scal wszystkie commity 'fixup!', albo powyżej wybranego commita, albo wszystkie w bieżącej gałęzi (autosquash).", + "SquashCommitsAboveSelectedTooltip": "Scal wszystkie commity 'fixup!' powyżej wybranego commita (autosquash).", + "SquashCommitsInCurrentBranchTooltip": "Scal wszystkie commity 'fixup!' w bieżącej gałęzi (autosquash).", + "SquashAboveCommits": "Zastosuj commity fixup", + "SquashCommitsInCurrentBranch": "W bieżącej gałęzi", + "SquashCommitsAboveSelectedCommit": "Powyżej wybranego commita", + "CannotSquashCommitsInCurrentBranch": "Nie można scalić commitów w bieżącej gałęzi: commit HEAD jest commit merge lub jest obecny na głównej gałęzi.", + "ExecuteCustomCommand": "Wykonaj polecenie niestandardowe", + "ExecuteCustomCommandTooltip": "Wyświetl monit, w którym możesz wprowadzić polecenie powłoki do wykonania. Nie należy mylić z wcześniej skonfigurowanymi poleceniami niestandardowymi.", + "CustomCommand": "Polecenie niestandardowe:", + "CommitChangesWithoutHook": "Zatwierdź zmiany bez hooka pre-commit", + "SkipHookPrefixNotConfigured": "Nie skonfigurowano prefiksu wiadomości commita do pomijania hooków. Ustaw `git.skipHookPrefix = 'WIP'` w swojej konfiguracji", + "ResetTo": "Resetuj do", + "ResetSoftTooltip": "Resetuj HEAD do wybranego commita, zachowując zmiany między bieżącym a wybranym commit jako zmiany zatwierdzone.", + "ResetMixedTooltip": "Resetuj HEAD do wybranego commita, zachowując zmiany między bieżącym a wybranym commit jako zmiany niezatwierdzone.", + "ResetHardTooltip": "Resetuj HEAD do wybranego commita, odrzucając wszystkie zmiany między bieżącym a wybranym commit, jak również wszystkie bieżące modyfikacje w drzewie roboczym.", + "PressEnterToReturn": "Naciśnij enter, aby wrócić do lazygit", + "ViewStashOptions": "Wyświetl opcje schowka", + "ViewStashOptionsTooltip": "Wyświetl opcje schowka (np. schowaj wszystko, schowaj zatwierdzone, schowaj niezatwierdzone).", + "Stash": "Schowaj", + "StashTooltip": "Schowaj wszystkie zmiany. Dla innych wariantów schowania, użyj klawisza wyświetlania opcji schowka.", + "StashAllChanges": "Schowaj wszystkie zmiany", + "StashStagedChanges": "Schowaj zatwierdzone zmiany", + "StashAllChangesKeepIndex": "Schowaj wszystkie zmiany i zachowaj indeks", + "StashUnstagedChanges": "Schowaj niezatwierdzone zmiany", + "StashIncludeUntrackedChanges": "Schowaj wszystkie zmiany włącznie z nieśledzonymi plikami", + "StashOptions": "Opcje schowka", + "NotARepository": "Błąd: musi być uruchomione wewnątrz repozytorium git", + "WorkingDirectoryDoesNotExist": "Błąd: bieżący katalog roboczy nie istnieje", + "Jump": "Skocz do panelu", + "ScrollLeftRight": "Przewiń w lewo/prawo", + "ScrollLeft": "Przewiń w lewo", + "ScrollRight": "Przewiń w prawo", + "DiscardPatch": "Odrzuć łatkę", + "DiscardPatchConfirm": "Możesz zbudować łatkę tylko z jednego commita/stanu schowka na raz. Odrzucić bieżącą łatkę?", + "DiscardPatchSameCommitConfirm": "Masz obecnie zmiany dodane do łatki dla tego commita. Odrzucić bieżącą łatkę?", + "CantPatchWhileRebasingError": "Nie można budować łatki ani uruchamiać poleceń łatki podczas scalania lub rebasowania", + "ToggleAddToPatch": "Przełącz plik włączony w łatkę", + "ToggleAddToPatchTooltip": "Przełącz, czy plik jest włączony w niestandardową łatkę. Zobacz {{.doc}}.", + "ToggleAllInPatch": "Przełącz wszystkie pliki", + "ToggleAllInPatchTooltip": "Dodaj/usuń wszystkie pliki commita do niestandardowej łatki. Zobacz {{.doc}}.", + "UpdatingPatch": "Aktualizowanie łatki", + "ViewPatchOptions": "Wyświetl opcje niestandardowej łatki", + "PatchOptionsTitle": "Opcje łatki", + "NoPatchError": "Brak utworzonej łatki. Aby zacząć budować łatkę, użyj 'spacji' na pliku commita lub enter, aby dodać określone linie", + "EmptyPatchError": "Łatka jest nadal pusta. Najpierw dodaj kilka plików lub linii do łatki.", + "EnterCommitFile": "Wejdź do pliku / Przełącz zwiń katalog", + "EnterCommitFileTooltip": "Jeśli plik jest wybrany, wejdź do pliku, aby móc dodawać/usuwać poszczególne linie do niestandardowej łatki. Jeśli wybrany jest katalog, przełącz katalog.", + "ExitCustomPatchBuilder": "Wyjdź z budowniczego niestandardowej łatki", + "EnterUpstream": "Wprowadź upstream jako '\u003czdalny\u003e \u003cnazwa gałęzi\u003e'", + "InvalidUpstream": "Nieprawidłowy upstream. Musi być w formacie '\u003czdalny\u003e \u003cnazwa gałęzi\u003e'", + "ReturnToRemotesList": "Wróć do listy zdalnych", + "NewRemote": "Nowy zdalny", + "NewRemoteName": "Nowa nazwa zdalnego:", + "NewRemoteUrl": "Nowy URL zdalnego:", + "ViewBranches": "Wyświetl gałęzie", + "EditRemoteName": "Wprowadź zaktualizowaną nazwę zdalnego dla {{.remoteName}}:", + "EditRemoteUrl": "Wprowadź zaktualizowany URL zdalnego dla {{.remoteName}}:", + "RemoveRemote": "Usuń zdalny", + "RemoveRemoteTooltip": "Usuń wybrany zdalny. Wszelkie lokalne gałęzie śledzące gałąź zdalną z tego zdalnego nie zostaną dotknięte.", + "RemoveRemotePrompt": "Czy na pewno chcesz usunąć zdalny", + "DeleteRemoteBranch": "Usuń gałąź zdalną", + "DeleteRemoteBranchMessage": "Czy na pewno chcesz usunąć gałąź zdalną", + "DeleteRemoteBranchTooltip": "Usuń gałąź zdalną ze zdalnego.", + "SetAsUpstream": "Ustaw jako upstream", + "SetAsUpstreamTooltip": "Ustaw wybraną gałąź zdalną jako upstream sprawdzonej gałęzi.", + "SetUpstream": "Ustaw upstream wybranej gałęzi", + "UnsetUpstream": "Usuń upstream wybranej gałęzi", + "ViewDivergenceFromUpstream": "Wyświetl rozbieżność od upstream", + "ViewDivergenceFromBaseBranch": "", + "CouldNotDetermineBaseBranch": "", + "DivergenceSectionHeaderLocal": "Lokalne", + "DivergenceSectionHeaderRemote": "Zdalne", + "ViewUpstreamResetOptions": "Resetuj sprawdzoną gałąź na {{.upstream}}", + "ViewUpstreamResetOptionsTooltip": "Wyświetl opcje resetowania sprawdzonej gałęzi na {{upstream}}. Uwaga: to nie zresetuje wybranej gałęzi na upstream, zresetuje sprawdzoną gałąź na upstream.", + "ViewUpstreamRebaseOptions": "Rebase sprawdzonej gałęzi na {{.upstream}}", + "ViewUpstreamRebaseOptionsTooltip": "Wyświetl opcje rebasowania sprawdzonej gałęzi na {{upstream}}. Uwaga: to nie zrebase'uje wybranej gałęzi na upstream, zrebase'uje sprawdzoną gałąź na upstream.", + "UpstreamGenericName": "upstream wybranej gałęzi", + "SetUpstreamTitle": "Ustaw gałąź upstream", + "SetUpstreamMessage": "Czy na pewno chcesz ustawić gałąź upstream '{{.checkedOut}}' na '{{.selected}}'", + "EditRemoteTooltip": "Edytuj nazwę lub URL wybranego zdalnego.", + "TagCommit": "Otaguj commit", + "TagCommitTooltip": "Utwórz nowy tag wskazujący na wybrany commit. Zostaniesz poproszony o wprowadzenie nazwy tagu i opcjonalnego opisu.", + "TagMenuTitle": "Utwórz tag", + "TagNameTitle": "Nazwa tagu", + "TagMessageTitle": "Opis tagu", + "LightweightTag": "Lekki tag", + "AnnotatedTag": "Tag z adnotacją", + "DeleteTagTitle": "Usuń tag '{{.tagName}}'?", + "DeleteLocalTag": "Usuń lokalny tag", + "DeleteRemoteTag": "Usuń zdalny tag", + "SelectRemoteTagUpstream": "Zdalny, z którego usunąć tag '{{.tagName}}':", + "DeleteRemoteTagPrompt": "Czy na pewno chcesz usunąć zdalny tag '{{.tagName}}' z '{{.upstream}}'?", + "RemoteTagDeletedMessage": "Zdalny tag usunięty", + "PushTagTitle": "Zdalny, do którego wysłać tag '{{.tagName}}':", + "PushTag": "Wyślij tag", + "PushTagTooltip": "Wyślij wybrany tag do zdalnego. Zostaniesz poproszony o wybranie zdalnego.", + "NewTag": "Nowy tag", + "NewTagTooltip": "Utwórz nowy tag z bieżącego commita. Zostaniesz poproszony o wprowadzenie nazwy tagu i opcjonalnego opisu.", + "CreatingTag": "Tworzenie tagu", + "ForceTag": "Wymuś Tag", + "ForceTagPrompt": "Tag '{{.tagName}}' już istnieje. Naciśnij {{.cancelKey}}, aby anulować, lub {{.confirmKey}}, aby nadpisać.", + "FetchRemoteTooltip": "Pobierz aktualizacje z zdalnego repozytorium. Pobiera nowe commity i gałęzie bez scalania ich z lokalnymi gałęziami.", + "FetchingRemoteStatus": "Pobieranie zdalnego", + "CheckoutCommit": "Przełącz commit", + "CheckoutCommitTooltip": "Przełącz wybrany commit jako odłączoną HEAD.", + "SureCheckoutThisCommit": "Czy na pewno chcesz przełączyć ten commit?", + "GitFlowOptions": "Pokaż opcje git-flow", + "NotAGitFlowBranch": "To nie wygląda na gałąź git flow", + "NewBranchNamePrompt": "Wprowadź nową nazwę gałęzi dla gałęzi", + "IgnoreTracked": "Ignoruj śledzony plik", + "ExcludeTracked": "Wyklucz śledzony plik", + "IgnoreTrackedPrompt": "Czy na pewno chcesz zignorować śledzony plik?", + "ExcludeTrackedPrompt": "Czy na pewno chcesz wykluczyć śledzony plik?", + "ViewResetToUpstreamOptions": "Pokaż opcje resetowania do upstream", + "NextScreenMode": "Następny tryb ekranu (normalny/półpełny/pełnoekranowy)", + "PrevScreenMode": "Poprzedni tryb ekranu", + "StartSearch": "Szukaj w bieżącym widoku po tekście", + "StartFilter": "Filtruj bieżący widok po tekście", + "Panel": "Panel", + "Keybindings": "Skróty klawiszowe", + "KeybindingsLegend": "Legenda: `\u003cc-b\u003e` oznacza ctrl+b, `\u003ca-b\u003e` oznacza alt+b, `B` oznacza shift+b", + "KeybindingsMenuSectionLocal": "Lokalne", + "KeybindingsMenuSectionGlobal": "Globalne", + "KeybindingsMenuSectionNavigation": "Nawigacja", + "RenameBranch": "Zmień nazwę gałęzi", + "Upstream": "Upstream", + "UpstreamTooltip": "Pokaż opcje upstream dla wybranej gałęzi, np. ustawianie/usuwanie upstream i resetowanie do upstream.", + "BranchUpstreamOptionsTitle": "Opcje upstream", + "ViewBranchUpstreamOptions": "Pokaż opcje upstream", + "ViewBranchUpstreamOptionsTooltip": "Pokaż opcje dotyczące upstream gałęzi, np. ustawianie/usuwanie upstream i resetowanie do upstream.", + "UpstreamNotSetError": "Wybrana gałąź nie ma upstream (lub upstream nie jest przechowywany lokalnie)", + "NewGitFlowBranchPrompt": "Nowa nazwa {{.branchType}}:", + "RenameBranchWarning": "Ta gałąź śledzi zdalną. Ta akcja zmieni tylko lokalną nazwę gałęzi, nie nazwę zdalnej gałęzi. Kontynuować?", + "OpenKeybindingsMenu": "Otwórz menu przypisań klawiszy", + "ResetCherryPick": "Resetuj wybrane (cherry-picked) commity", + "NextTab": "Następna zakładka", + "PrevTab": "Poprzednia zakładka", + "CantUndoWhileRebasing": "Nie można cofnąć podczas rebasingu", + "CantRedoWhileRebasing": "Nie można ponowić podczas rebasingu", + "MustStashWarning": "Wyjęcie łatki do indeksu wymaga schowania i odschowania zmian. Jeśli coś pójdzie nie tak, będziesz mógł uzyskać dostęp do plików ze schowka. Kontynuować?", + "MustStashTitle": "Musisz schować", + "ConfirmationTitle": "Panel potwierdzenia", + "PrevPage": "Poprzednia strona", + "NextPage": "Następna strona", + "GotoTop": "Przewiń do góry", + "GotoBottom": "Przewiń do dołu", + "FilteringBy": "Filtrowanie przez", + "ResetInParentheses": "(Resetuj)", + "OpenFilteringMenu": "Pokaż opcje filtrowania", + "OpenFilteringMenuTooltip": "Pokaż opcje filtrowania dziennika commitów, tak aby pokazywane były tylko commity pasujące do filtra.", + "FilterBy": "Filtruj przez", + "ExitFilterMode": "Zatrzymaj filtrowanie", + "ExitFilterModeAuthor": "", + "FilterPathOption": "Wprowadź ścieżkę do filtrowania", + "FilterAuthorOption": "Wprowadź autora do filtrowania", + "EnterFileName": "Wprowadź ścieżkę:", + "EnterAuthor": "Wprowadź autora:", + "FilteringMenuTitle": "Filtrowanie", + "WillCancelExistingFilterTooltip": "Uwaga: to anuluje istniejący filtr", + "MustExitFilterModeTitle": "Polecenie niedostępne", + "MustExitFilterModePrompt": "Polecenie niedostępne w trybie filtrowania po ścieżce. Wyjść z trybu filtrowania po ścieżce?", + "Diff": "Różnice", + "EnterRefToDiff": "Wprowadź ref do różnic", + "EnterRefName": "Wprowadź ref:", + "ExitDiffMode": "Wyjdź z trybu różnic", + "DiffingMenuTitle": "Różnicowanie", + "SwapDiff": "Odwróć kierunek różnic", + "ViewDiffingOptions": "Pokaż opcje różnicowania", + "ViewDiffingOptionsTooltip": "Pokaż opcje dotyczące różnicowania dwóch refów, np. różnicowanie względem wybranego refa, wprowadzanie refa do różnicowania i odwracanie kierunku różnic.", + "OpenCommandLogMenu": "Pokaż opcje dziennika poleceń", + "OpenCommandLogMenuTooltip": "Pokaż opcje dla dziennika poleceń, np. pokazywanie/ukrywanie dziennika poleceń i skupienie na dzienniku poleceń.", + "ShowingGitDiff": "Pokazuje wynik dla:", + "CommitDiff": "Różnice commita", + "CopyCommitHashToClipboard": "Kopiuj hash commita do schowka", + "CommitHash": "hash commita", + "CommitURL": "URL commita", + "CopyCommitMessageToClipboard": "Kopiuj wiadomość commita do schowka", + "CommitMessage": "Wiadomość commita", + "CommitSubject": "Temat commita", + "CommitAuthor": "Autor commita", + "CopyCommitAttributeToClipboard": "Kopiuj atrybut commita do schowka", + "CopyCommitAttributeToClipboardTooltip": "Kopiuj atrybut commita do schowka (np. hash, URL, różnice, wiadomość, autor).", + "CopyBranchNameToClipboard": "Kopiuj nazwę gałęzi do schowka", + "CopyPathToClipboard": "Kopiuj ścieżkę do schowka", + "CommitPrefixPatternError": "Błąd w wzorcu commitPrefix", + "CopySelectedTextToClipboard": "Kopiuj zaznaczony tekst do schowka", + "NoFilesStagedTitle": "Brak plików przygotowanych", + "NoFilesStagedPrompt": "Nie przygotowałeś żadnych plików. Zatwierdzić wszystkie pliki?", + "BranchNotFoundTitle": "Gałąź nie znaleziona", + "BranchNotFoundPrompt": "Gałąź nie znaleziona. Utwórz nową gałąź o nazwie", + "BranchUnknown": "Gałąź nieznana", + "DiscardChangeTitle": "Odrzuć zmianę", + "DiscardChangePrompt": "Czy na pewno chcesz odrzucić tę zmianę (git reset)? Jest to nieodwracalne.\nAby wyłączyć to okno dialogowe, ustaw klucz konfiguracyjny 'gui.skipDiscardChangeWarning' na true", + "CreateNewBranchFromCommit": "Utwórz nową gałąź z commita", + "BuildingPatch": "Tworzenie łatki", + "ViewCommits": "Pokaż commity", + "MinGitVersionError": "Wersja Gita musi być co najmniej 2.20 (tj. od 2018 roku). Proszę zaktualizować wersję Gita. Alternatywnie zgłoś problem na https://github.com/jesseduffield/lazygit/issues, aby lazygit był bardziej kompatybilny wstecz.", + "RunningCustomCommandStatus": "Uruchamianie niestandardowego polecenia", + "SubmoduleStashAndReset": "Schowaj niezatwierdzone zmiany submodułu i zaktualizuj", + "AndResetSubmodules": "I zresetuj submoduły", + "EnterSubmoduleTooltip": "Wejdź do submodułu. Po wejściu do submodułu możesz nacisnąć `{{.escape}}`, aby wrócić do repozytorium nadrzędnego.", + "Enter": "Wejdź", + "CopySubmoduleNameToClipboard": "Kopiuj nazwę submodułu do schowka", + "RemoveSubmodule": "Usuń submoduł", + "RemoveSubmoduleTooltip": "Usuń wybrany submoduł i odpowiadający mu katalog.", + "RemoveSubmodulePrompt": "Czy na pewno chcesz usunąć submoduł '%s' i odpowiadający mu katalog? Jest to nieodwracalne.", + "ResettingSubmoduleStatus": "Resetowanie submodułu", + "NewSubmoduleName": "Nowa nazwa submodułu:", + "NewSubmoduleUrl": "Nowy URL submodułu:", + "NewSubmodulePath": "Nowa ścieżka submodułu:", + "NewSubmodule": "Nowy submoduł", + "AddingSubmoduleStatus": "Dodawanie submodułu", + "UpdateSubmoduleUrl": "Zaktualizuj URL dla submodułu '%s'", + "UpdatingSubmoduleUrlStatus": "Aktualizowanie URL", + "EditSubmoduleUrl": "Zaktualizuj URL submodułu", + "InitializingSubmoduleStatus": "Inicjalizowanie submodułu", + "InitSubmoduleTooltip": "Zainicjuj wybrany submoduł, aby przygotować do pobrania. Prawdopodobnie chcesz to kontynuować, wywołując akcję 'update', aby pobrać submoduł.", + "Update": "Aktualizuj", + "Initialize": "Zainicjuj", + "SubmoduleUpdateTooltip": "Aktualizuj wybrany submoduł.", + "UpdatingSubmoduleStatus": "Aktualizowanie submodułu", + "BulkInitSubmodules": "Masowe inicjowanie submodułów", + "BulkUpdateSubmodules": "Masowa aktualizacja submodułów", + "BulkDeinitSubmodules": "Masowe wyłączanie submodułów", + "ViewBulkSubmoduleOptions": "Pokaż opcje masowych operacji na submodułach", + "BulkSubmoduleOptions": "Opcje masowych operacji na submodułach", + "RunningCommand": "Uruchamianie polecenia", + "SubCommitsTitle": "Sub-commity", + "SubmodulesTitle": "Submoduły", + "NavigationTitle": "Nawigacja panelu listy", + "SuggestionsCheatsheetTitle": "Podpowiedzi", + "SuggestionsTitle": "Podpowiedzi (naciśnij %s, aby skupić)", + "SuggestionsSubtitle": "", + "ExtrasTitle": "Dziennik poleceń", + "PushingTagStatus": "Wysyłanie tagu", + "PullRequestURLCopiedToClipboard": "URL żądania ściągnięcia skopiowany do schowka", + "CommitDiffCopiedToClipboard": "Różnice commita skopiowane do schowka", + "CommitURLCopiedToClipboard": "URL commita skopiowany do schowka", + "CommitMessageCopiedToClipboard": "Wiadomość commita skopiowana do schowka", + "CommitSubjectCopiedToClipboard": "Temat commita skopiowany do schowka", + "CommitAuthorCopiedToClipboard": "Autor commita skopiowany do schowka", + "PatchCopiedToClipboard": "Łatka skopiowana do schowka", + "CopiedToClipboard": "skopiowane do schowka", + "ErrCannotEditDirectory": "Nie można edytować katalogu: można edytować tylko pojedyncze pliki", + "ErrStageDirWithInlineMergeConflicts": "Nie można przygotować/odprzygotować katalogu zawierającego pliki z konfliktami scalania w linii. Proszę najpierw rozwiązać konflikty scalania", + "ErrRepositoryMovedOrDeleted": "Nie można znaleźć repozytorium. Mogło zostać przeniesione lub usunięte ¯\\_(ツ)_/¯", + "ErrWorktreeMovedOrRemoved": "Nie można znaleźć drzewa roboczego. Mogło zostać przeniesione lub usunięte ¯\\_(ツ)_/¯", + "CommandLog": "Dziennik poleceń", + "ToggleShowCommandLog": "Przełącz pokazywanie/ukrywanie dziennika poleceń", + "FocusCommandLog": "Skup na dzienniku poleceń", + "CommandLogHeader": "Możesz ukryć/skupić się na tym panelu naciskając '%s'\n", + "RandomTip": "Losowa porada", + "SelectParentCommitForMerge": "Wybierz nadrzędny commit do scalenia", + "ToggleWhitespaceInDiffView": "Przełącz białe znaki", + "ToggleWhitespaceInDiffViewTooltip": "Przełącz czy zmiany białych znaków są pokazywane w widoku różnic.", + "IgnoreWhitespaceDiffViewSubTitle": "(ignorując białe znaki)", + "IgnoreWhitespaceNotSupportedHere": "Ignorowanie białych znaków nie jest wspierane w tym widoku", + "IncreaseContextInDiffView": "Zwiększ rozmiar kontekstu w widoku różnic", + "IncreaseContextInDiffViewTooltip": "Zwiększ ilość kontekstu pokazywanego wokół zmian w widoku różnic.", + "DecreaseContextInDiffView": "Zmniejsz rozmiar kontekstu w widoku różnic", + "DecreaseContextInDiffViewTooltip": "Zmniejsz ilość kontekstu pokazywanego wokół zmian w widoku różnic.", + "DiffContextSizeChanged": "Zmieniono rozmiar kontekstu różnic na %d", + "CreatePullRequestOptions": "Zobacz opcje tworzenia pull requesta", + "DefaultBranch": "Domyślny branch", + "SelectBranch": "Wybierz branch", + "CreatePullRequest": "Utwórz żądanie ściągnięcia", + "SelectConfigFile": "Wybierz plik konfiguracyjny", + "NoConfigFileFoundErr": "Nie znaleziono pliku konfiguracyjnego", + "LoadingFileSuggestions": "Ładowanie sugestii plików", + "LoadingCommits": "Ładowanie commitów", + "MustSpecifyOriginError": "Musisz określić zdalne repozytorium jeśli określasz branch", + "GitOutput": "Wyjście Gita:", + "GitCommandFailed": "Polecenie Gita nie powiodło się. Sprawdź logi poleceń po szczegóły (otwórz za pomocą %s)", + "AbortTitle": "Przerwij %s", + "AbortPrompt": "Czy na pewno chcesz przerwać bieżące %s?", + "OpenLogMenu": "Zobacz opcje logów", + "OpenLogMenuTooltip": "Zobacz opcje dla logów commitów, np. zmiana kolejności sortowania, ukrywanie grafu gita, pokazywanie całego grafu gita.", + "LogMenuTitle": "Opcje logów commitów", + "ToggleShowGitGraphAll": "Przełącz pokazanie całego grafu gita (dodaj flagę `--all` do `git log`)", + "ShowGitGraph": "Pokaż graf gita", + "SortOrder": "Kolejność sortowania", + "SortAlphabetical": "Alfabetycznie", + "SortByDate": "Data", + "SortByRecency": "Najnowsze", + "SortBasedOnReflog": "(na podstawie reflog)", + "SortCommits": "Kolejność sortowania commitów", + "CantChangeContextSizeError": "Nie można zmienić rozmiaru kontekstu będąc w trybie budowania patcha, ponieważ byliśmy zbyt leniwi, aby to wspierać przy wydaniu funkcji. Jeśli naprawdę tego chcesz, daj nam znać!", + "OpenCommitInBrowser": "Otwórz commit w przeglądarce", + "ViewBisectOptions": "Zobacz opcje bisect", + "ConfirmRevertCommit": "Czy na pewno chcesz cofnąć {{.selectedCommit}}?", + "RewordInEditorTitle": "Przeformułuj w edytorze", + "RewordInEditorPrompt": "Czy na pewno chcesz przeformułować ten commit w swoim edytorze?", + "CheckoutPrompt": "Czy na pewno chcesz przełączyć się na '%s'?", + "HardResetAutostashPrompt": "Czy na pewno chcesz zrobić twardy reset do '%s'? Auto-stash zostanie wykonany jeśli będzie potrzebny.", + "UpstreamGone": "(upstream zniknął)", + "NukeDescription": "Jeśli chcesz, aby wszystkie zmiany w drzewie pracy zniknęły, to jest sposób na to. Jeśli są brudne zmiany w submodule, to zostaną one zapisane w submodule(s).", + "DiscardStagedChangesDescription": "To stworzy nowy wpis stash zawierający tylko pliki w stanie staged, a następnie go usunie, tak że drzewo pracy zostanie tylko ze zmianami niezatwierdzonymi", + "EmptyOutput": "\u003cPuste wyjście\u003e", + "Patch": "Patch", + "CustomPatch": "Niestandardowy patch", + "CommitsCopied": "commitów skopiowanych", + "CommitCopied": "commit skopiowany", + "ResetPatch": "Resetuj patch", + "ResetPatchTooltip": "Wyczyść bieżący patch.", + "ApplyPatch": "Zastosuj patch", + "ApplyPatchTooltip": "Zastosuj bieżący patch do drzewa pracy.", + "ApplyPatchInReverse": "Zastosuj patch w odwrotności", + "ApplyPatchInReverseTooltip": "Zastosuj bieżący patch w odwrotności do drzewa pracy.", + "RemovePatchFromOriginalCommit": "Usuń patch z oryginalnego commita (%s)", + "RemovePatchFromOriginalCommitTooltip": "Usuń bieżący patch z jego commita. Jest to osiągane przez rozpoczęcie interaktywnego rebase na commicie, zastosowanie patcha w odwrotności, a następnie kontynuowanie rebase. Jeśli późniejsze commity zależą od patcha, możesz musieć rozwiązać konflikty.", + "MovePatchOutIntoIndex": "Przenieś patch do indeksu", + "MovePatchOutIntoIndexTooltip": "Przenieś patch z jego commita do indeksu. Jest to osiągane przez rozpoczęcie interaktywnego rebase na commicie, zastosowanie patcha w odwrotności, kontynuowanie rebase do zakończenia, a następnie zastosowanie patcha do indeksu. Jeśli późniejsze commity zależą od patcha, możesz musieć rozwiązać konflikty.", + "MovePatchIntoNewCommit": "Przenieś patch do nowego commita", + "MovePatchIntoNewCommitTooltip": "Przenieś patch z jego commita do nowego commita na górze oryginalnego commita. Jest to osiągane przez rozpoczęcie interaktywnego rebase na oryginalnym commicie, zastosowanie patcha w odwrotności, następnie zastosowanie patcha do indeksu i zatwierdzenie go jako nowy commit, przed kontynuowaniem rebase do zakończenia. Jeśli późniejsze commity zależą od patcha, możesz musieć rozwiązać konflikty.", + "MovePatchToSelectedCommit": "Przenieś patch do wybranego commita (%s)", + "MovePatchToSelectedCommitTooltip": "Przenieś patch z jego oryginalnego commita do wybranego commita. Jest to osiągane przez rozpoczęcie interaktywnego rebase na oryginalnym commicie, zastosowanie patcha w odwrotności, następnie kontynuowanie rebase do wybranego commita, przed zastosowaniem patcha do przodu i zmodyfikowaniem wybranego commita. Rebase jest następnie kontynuowany do zakończenia. Jeśli commity między źródłem a miejscem docelowym zależą od patcha, możesz musieć rozwiązać konflikty.", + "CopyPatchToClipboard": "Kopiuj patch do schowka", + "NoMatchesFor": "Brak dopasowań dla '%s' %s", + "MatchesFor": "dopasowania dla '%s' (%d z %d) %s", + "SearchKeybindings": "%s: Następne dopasowanie, %s: Poprzednie dopasowanie, %s: Wyjdź z trybu wyszukiwania", + "SearchPrefix": "Szukaj: ", + "FilterPrefix": "Filtruj: ", + "ExitSearchMode": "%s: Wyjdź z trybu wyszukiwania", + "ExitTextFilterMode": "%s: Wyjdź z trybu filtrowania", + "Switch": "Przełącz", + "SwitchToWorktree": "Przełącz do drzewa pracy", + "SwitchToWorktreeTooltip": "Przełącz do wybranego drzewa pracy.", + "AlreadyCheckedOutByWorktree": "Ten branch jest już używany przez drzewo pracy {{.worktreeName}}. Czy chcesz przełączyć się do tego drzewa pracy?", + "BranchCheckedOutByWorktree": "Branch {{.branchName}} jest używany przez drzewo pracy {{.worktreeName}}", + "DetachWorktreeTooltip": "To uruchomi `git checkout --detach` na drzewie pracy, tak że przestanie ono używać brancha, ale drzewo pracy drzewa pracy zostanie nietknięte.", + "Switching": "Przełączanie", + "RemoveWorktree": "Usuń drzewo pracy", + "RemoveWorktreeTitle": "Usuń drzewo pracy", + "DetachWorktree": "Odłącz drzewo pracy", + "DetachingWorktree": "Odłączanie drzewa pracy", + "WorktreesTitle": "Drzewa pracy", + "WorktreeTitle": "Drzewo pracy", + "RemoveWorktreePrompt": "Czy na pewno chcesz usunąć drzewo pracy '{{.worktreeName}}'?", + "ForceRemoveWorktreePrompt": "'{{.worktreeName}}' zawiera zmodyfikowane lub nieśledzone pliki (szczerze mówiąc, może zawierać oba). Czy na pewno chcesz to usunąć?", + "RemovingWorktree": "Usuwanie drzewa pracy", + "AddingWorktree": "Dodawanie drzewa pracy", + "CantDeleteCurrentWorktree": "Nie możesz usunąć bieżącego drzewa pracy!", + "AlreadyInWorktree": "Jesteś już w wybranym drzewie pracy", + "CantDeleteMainWorktree": "Nie możesz usunąć głównego drzewa pracy!", + "NoWorktreesThisRepo": "Brak drzew pracy", + "MissingWorktree": "(brakujące)", + "MainWorktree": "(główne)", + "NewWorktree": "Nowe drzewo pracy", + "NewWorktreePath": "Nowa ścieżka drzewa pracy", + "NewWorktreeBase": "Nowa bazowa ref drzewa pracy", + "RemoveWorktreeTooltip": "Usuń wybrane drzewo pracy. To usunie zarówno katalog drzewa pracy, jak i metadane o drzewie pracy w katalogu .git.", + "BranchNameCannotBeBlank": "Nazwa brancha nie może być pusta", + "NewBranchName": "Nowa nazwa brancha", + "NewBranchNameLeaveBlank": "Nowa nazwa brancha (pozostaw puste, aby przełączyć {{.default}})", + "ViewWorktreeOptions": "Zobacz opcje drzewa pracy", + "CreateWorktreeFrom": "Utwórz drzewo pracy z {{.ref}}", + "CreateWorktreeFromDetached": "Utwórz drzewo pracy z {{.ref}} (odłączone)", + "LcWorktree": "drzewo pracy", + "ChangingDirectoryTo": "Zmiana katalogu na {{.path}}", + "Name": "Nazwa", + "Branch": "Branch", + "Path": "Ścieżka", + "MarkedBaseCommitStatus": "Oznaczono bazowy commit dla rebase", + "MarkAsBaseCommit": "Oznacz jako bazowy commit dla rebase", + "MarkAsBaseCommitTooltip": "Wybierz bazowy commit dla następnego rebase. Kiedy robisz rebase na branch, tylko commity powyżej bazowego commita zostaną przeniesione. Używa to polecenia `git rebase --onto`.", + "MarkedCommitMarker": "↑↑↑ Rebase rozpocznie się stąd ↑↑↑", + "PleaseGoToURL": "Proszę przejdź do {{.url}}", + "NoCopiedCommits": "Brak skopiowanych commitów", + "DisabledMenuItemPrefix": "Wyłączone: ", + "QuickStartInteractiveRebase": "Rozpocznij interaktywny rebase", + "QuickStartInteractiveRebaseTooltip": "Rozpocznij interaktywny rebase dla commitów na twoim branchu. To będzie zawierać wszystkie commity od HEAD do pierwszego commita scalenia lub commita głównego brancha.\nJeśli chcesz zamiast tego rozpocząć interaktywny rebase od wybranego commita, naciśnij `{{.editKey}}`.", + "CannotQuickStartInteractiveRebase": "Nie można rozpocząć interaktywnego rebase: commit HEAD jest commit'em scalenia lub jest obecny na głównym branchu, więc nie ma odpowiedniego bazowego commita, od którego można by zacząć rebase. Możesz rozpocząć interaktywny rebase z konkretnego commita, wybierając commit i naciskając `{{.editKey}}`.", + "ToggleRangeSelect": "Przełącz zaznaczenie zakresu", + "RangeSelectUp": "Zaznacz zakres w górę", + "RangeSelectDown": "Zaznacz zakres w dół", + "RangeSelectNotSupported": "Akcja nie wspiera zaznaczania zakresu, proszę wybrać pojedynczy element", + "NoItemSelected": "Nie wybrano elementu", + "SelectedItemIsNotABranch": "Wybrany element nie jest branch'em", + "SelectedItemDoesNotHaveFiles": "Wybrany element nie ma plików do wyświetlenia", + "RangeSelectNotSupportedForSubmodules": "Zaznaczanie zakresu nie jest wspierane dla submodułów", + "OldCherryPickKeyWarning": "Klawisz 'c' nie jest już domyślnym klawiszem do kopiowania commitów do cherry pick. Proszę użyj `{{.copy}}` zamiast tego (i `{{.paste}}` aby wkleić). Powodem tej zmiany jest to, że klawisz 'v' do wybierania zakresu linii podczas stagingu jest teraz używany również do wybierania zakresu linii w każdym widoku listy, co oznacza, że musieliśmy znaleźć nowy klawisz do wklejania commitów, i jeśli zamierzamy teraz używać `{{.paste}}` do wklejania commitów, możemy równie dobrze użyć `{{.copy}}` do ich kopiowania. Jeśli chcesz skonfigurować klawisze, aby uzyskać stare zachowanie, ustaw następujące w swojej konfiguracji:\n\nkeybinding:\n universal:\n toggleRangeSelect: \u003ccoś innego niż v\u003e\n commits:\n cherryPickCopy: 'c'\n pasteCommits: 'v'", + "CommandDoesNotSupportOpeningInEditor": "", + "Actions": { + "CheckoutCommit": "Przełącz commit", + "CheckoutTag": "Przełącz tag", + "CheckoutBranch": "Przełącz gałąź", + "ForceCheckoutBranch": "Wymuś przełączenie gałęzi", + "DeleteLocalBranch": "Usuń lokalną gałąź", + "DeleteBranch": "Usuń gałąź", + "Merge": "Scal", + "RebaseBranch": "Rebazuj gałąź", + "RenameBranch": "Zmień nazwę gałęzi", + "CreateBranch": "Utwórz gałąź", + "FastForwardBranch": "Szybkie przewijanie gałęzi", + "CherryPick": "(Cherry-pick) wklej commity", + "CheckoutFile": "Przełącz plik", + "DiscardOldFileChange": "Odrzuć starą zmianę w pliku", + "SquashCommitDown": "Scal commit w dół", + "FixupCommit": "Popraw commit", + "RewordCommit": "Zmień treść commita", + "DropCommit": "Odrzuć commit", + "EditCommit": "Edytuj commit", + "AmendCommit": "Popraw commit", + "ResetCommitAuthor": "Zresetuj autora commita", + "SetCommitAuthor": "Ustaw autora commita", + "AddCommitCoAuthor": "", + "RevertCommit": "Cofnij commit", + "CreateFixupCommit": "Utwórz commit poprawkowy", + "SquashAllAboveFixupCommits": "Scal wszystkie powyższe commity poprawkowe", + "MoveCommitUp": "Przenieś commit w górę", + "MoveCommitDown": "Przenieś commit w dół", + "CopyCommitMessageToClipboard": "Kopiuj wiadomość commita do schowka", + "CopyCommitSubjectToClipboard": "Kopiuj temat commita do schowka", + "CopyCommitDiffToClipboard": "Kopiuj różnice commita do schowka", + "CopyCommitHashToClipboard": "Kopiuj hash commita do schowka", + "CopyCommitURLToClipboard": "Kopiuj URL commita do schowka", + "CopyCommitAuthorToClipboard": "Kopiuj autora commita do schowka", + "CopyCommitAttributeToClipboard": "Kopiuj do schowka", + "CopyPatchToClipboard": "Kopiuj łatkę do schowka", + "CustomCommand": "Polecenie niestandardowe", + "DiscardAllChangesInDirectory": "Odrzuć wszystkie zmiany w katalogu", + "DiscardUnstagedChangesInDirectory": "Odrzuć niezatwierdzone zmiany w katalogu", + "DiscardAllChangesInFile": "Odrzuć wszystkie zmiany w wybranych plikach", + "DiscardAllUnstagedChangesInFile": "Odrzuć wszystkie niezatwierdzone zmiany w wybranych plikach", + "StageFile": "Dodaj plik do indeksu", + "StageResolvedFiles": "Dodaj pliki, których konflikty scalania zostały rozwiązane", + "UnstageFile": "Usuń plik z indeksu", + "UnstageAllFiles": "Usuń wszystkie pliki z indeksu", + "StageAllFiles": "Dodaj wszystkie pliki do indeksu", + "IgnoreExcludeFile": "Ignoruj lub wyklucz plik", + "IgnoreFileErr": "Nie można zignorować .gitignore", + "ExcludeFile": "Wyklucz plik", + "ExcludeGitIgnoreErr": "Nie można wykluczyć .gitignore", + "Commit": "Commituj", + "EditFile": "Edytuj plik", + "Push": "Wypchnij", + "Pull": "Pociągnij", + "OpenFile": "Otwórz plik", + "OpenFileTooltip": "", + "StashAllChanges": "Schowaj wszystkie zmiany", + "StashAllChangesKeepIndex": "Schowaj wszystkie zmiany i zachowaj indeks", + "StashStagedChanges": "Schowaj zatwierdzone zmiany", + "StashUnstagedChanges": "Schowaj niezatwierdzone zmiany", + "StashIncludeUntrackedChanges": "Schowaj wszystkie zmiany włącznie z nieśledzonymi plikami", + "GitFlowFinish": "git flow zakończ", + "GitFlowStart": "git flow rozpocznij", + "CopyToClipboard": "Kopiuj do schowka", + "CopySelectedTextToClipboard": "Kopiuj zaznaczony tekst do schowka", + "RemovePatchFromCommit": "Usuń łatkę z commita", + "MovePatchToSelectedCommit": "Przenieś łatkę do wybranego commita", + "MovePatchIntoIndex": "Przenieś łatkę do indeksu", + "MovePatchIntoNewCommit": "Przenieś łatkę do nowego commita", + "DeleteRemoteBranch": "Usuń zdalną gałąź", + "SetBranchUpstream": "Ustaw gałąź nadrzędną", + "AddRemote": "Dodaj zdalne", + "RemoveRemote": "Usuń zdalne", + "UpdateRemote": "Aktualizuj zdalne", + "ApplyPatch": "Zastosuj łatkę", + "Stash": "Schowaj", + "RenameStash": "Zmień nazwę schowka", + "RemoveSubmodule": "Usuń podmoduł", + "ResetSubmodule": "Resetuj podmoduł", + "AddSubmodule": "Dodaj podmoduł", + "UpdateSubmoduleUrl": "Aktualizuj URL podmodułu", + "InitialiseSubmodule": "Zainicjuj podmoduł", + "BulkInitialiseSubmodules": "Masowo zainicjuj podmoduły", + "BulkUpdateSubmodules": "Masowo aktualizuj podmoduły", + "BulkDeinitialiseSubmodules": "Masowo deinicjuj podmoduły", + "UpdateSubmodule": "Aktualizuj podmoduł", + "CreateLightweightTag": "Utwórz lekki tag", + "CreateAnnotatedTag": "Utwórz opisowy tag", + "DeleteLocalTag": "Usuń lokalny tag", + "DeleteRemoteTag": "Usuń zdalny tag", + "PushTag": "Wypchnij tag", + "NukeWorkingTree": "Zniszcz drzewo robocze", + "DiscardUnstagedFileChanges": "Odrzuć niezatwierdzone zmiany w pliku", + "RemoveUntrackedFiles": "Usuń nieśledzone pliki", + "RemoveStagedFiles": "Usuń zatwierdzone pliki", + "SoftReset": "Miękki reset", + "MixedReset": "Mieszany reset", + "HardReset": "Twardy reset", + "Undo": "Cofnij", + "Redo": "Ponów", + "CopyPullRequestURL": "Kopiuj URL żądania ściągnięcia", + "OpenDiffTool": "Otwórz narzędzie różnic", + "OpenMergeTool": "Otwórz narzędzie scalania", + "OpenCommitInBrowser": "Otwórz commit w przeglądarce", + "OpenPullRequest": "Otwórz żądanie ściągnięcia w przeglądarce", + "StartBisect": "Rozpocznij bisect", + "ResetBisect": "Resetuj bisect", + "BisectSkip": "Pomiń bisect", + "BisectMark": "Oznacz bisect", + "RemoveWorktree": "Usuń drzewo robocze", + "AddWorktree": "Dodaj drzewo robocze" + }, + "Bisect": { + "MarkStart": "Oznacz %s jako %s (rozpocznij bisect)", + "MarkSkipCurrent": "", + "MarkSkipSelected": "", + "ResetTitle": "Resetuj 'git bisect'", + "ResetPrompt": "Czy na pewno chcesz zresetować 'git bisect'?", + "ResetOption": "Resetuj bisect", + "ChooseTerms": "Wybierz terminy bisect", + "OldTermPrompt": "Termin dla starego/dobrego commita:", + "NewTermPrompt": "Termin dla nowego/złego commita:", + "BisectMenuTitle": "Bisect", + "Mark": "Oznacz bieżący commit (%s) jako %s", + "SkipCurrent": "Pomiń bieżący commit (%s)", + "SkipSelected": "Pomiń wybrany commit (%s)", + "CompleteTitle": "Bisect zakończony", + "CompletePrompt": "Bisect zakończony! Następujący commit wprowadził zmianę:\n\n%s\n\nCzy chcesz teraz zresetować 'git bisect'?", + "CompletePromptIndeterminate": "Bisect zakończony! Niektóre commity zostały pominięte, więc którykolwiek z następujących commitów mógł wprowadzić zmianę:\n\n%s\n\nCzy chcesz teraz zresetować 'git bisect'?", + "Bisecting": "Bisectowanie" + }, + "Log": { + "EditRebase": "Rozpoczynanie interaktywnego rebazowania od '{{.ref}}'", + "MoveCommitUp": "Przenoszenie TODO w dół: '{{.shortHash}}'", + "MoveCommitDown": "Przenoszenie TODO w dół: '{{.shortHash}}'", + "CherryPickCommits": "Cherry-picking commitów:\n'{{.commitLines}}'", + "HandleUndo": "Cofanie ostatniego rozwiązania konfliktu", + "HandleMidRebaseCommand": "Aktualizacja akcji rebazowania commita {{.shortHash}} na '{{.action}}'", + "RemoveFile": "Usuwanie ścieżki '{{.path}}'", + "CopyToClipboard": "Kopiowanie '{{.str}}' do schowka", + "Remove": "Usuwanie '{{.filename}}'", + "CreateFileWithContent": "Tworzenie pliku '{{.path}}'", + "AppendingLineToFile": "Dodawanie '{{.line}}' do pliku '{{.filename}}'", + "EditRebaseFromBaseCommit": "Rozpoczynanie interaktywnego rebazowania od '{{.baseCommit}}' na '{{.targetBranchName}}" + }, + "BreakingChangesTitle": "Zmiany przełomowe", + "BreakingChangesMessage": "Aktualizujesz do nowej wersji lazygit, która zawiera zmiany przełomowe. Proszę przejrzeć poniższe notatki i zaktualizować swoją konfigurację, jeśli jest to konieczne.\nAby uzyskać więcej informacji, zobacz pełne notatki do wydania na \u003chttps://github.com/jesseduffield/lazygit/releases\u003e.", + "BreakingChangesByVersion": { + "0.41.0": "- Gdy naciśniesz 'g', aby wywołać menu resetu git, opcja 'mixed' jest teraz pierwsza i domyślna, a nie 'soft'. Jest to dlatego, że 'mixed' jest najczęściej używaną opcją.\n- Panel wiadomości commita teraz domyślnie zawija tekst (tj. dodaje znaki nowej linii, gdy osiągniesz margines). Możesz dostosować konfigurację w następujący sposób:\n\ngit:\n commit:\n autoWrapCommitMessage: true\n autoWrapWidth: 72\n\n- Klawisz 'v' był już używany w widoku staging do rozpoczęcia zaznaczania zakresu, ale teraz możesz go użyć do rozpoczęcia zaznaczania zakresu w dowolnym widoku. Niestety koliduje to z klawiszem 'v' dla wklejania commitów (cherry-pick), więc teraz wklejanie commitów odbywa się za pomocą 'shift+V', a dla spójności kopiowanie commitów odbywa się teraz za pomocą 'shift+C' zamiast 'c'. Zauważ, że klawisz 'v' to tylko jeden ze sposobów na rozpoczęcie zaznaczania zakresu: możesz zamiast tego użyć shift+góra/dół. Więc jeśli chcesz skonfigurować klawisze cherry-pick, aby uzyskać stare zachowanie, ustaw następujące w swojej konfiguracji:\n\nkeybinding:\n universal:\n toggleRangeSelect: \u003ccoś innego niż v\u003e\n commits:\n cherryPickCopy: 'c'\n pasteCommits: 'v'\n\n- Sciskanie fixupów za pomocą 'shift-S' teraz wywołuje menu, z domyślną opcją sciskania wszystkich commitów fixup w gałęzi. Oryginalne zachowanie sciskania tylko commitów fixup powyżej wybranego commita jest nadal dostępne jako druga opcja w tym menu.\n- Statusy ładowania push/pull/fetch są teraz wyświetlane przy gałęzi, a nie w popupie. Pozwala to np. na równoczesne fetchowanie wielu gałęzi i widzenie statusu dla każdej gałęzi.\n- Graf logu git w widoku commitów jest teraz zawsze wyświetlany domyślnie (wcześniej był wyświetlany tylko, gdy widok był maksymalizowany). Jeśli uznasz to za zbyt hałaśliwe, możesz to zmienić za pomocą ctrl+L -\u003e 'Pokaż graf git' -\u003e 'gdy maksymalizowany'\n\t " + } +} diff --git a/pkg/i18n/translations/ru.json b/pkg/i18n/translations/ru.json new file mode 100644 index 00000000000..e2a30d39825 --- /dev/null +++ b/pkg/i18n/translations/ru.json @@ -0,0 +1,924 @@ +{ + "NotEnoughSpace": "Недостаточно места для отрисовки панелей", + "DiffTitle": "Сравнения", + "FilesTitle": "Файлы", + "BranchesTitle": "Ветки", + "CommitsTitle": "Коммиты", + "StashTitle": "Хранилище", + "SnakeTitle": "Змейка", + "EasterEgg": "Пасхалка", + "UnstagedChanges": "Непроиндексированные Изменения", + "StagedChanges": "Проиндексированные Изменения", + "MainTitle": "Главная", + "StagingTitle": "Главная панель (Индексирование)", + "MergingTitle": "Главная панель (Слияние)", + "MergeConfirmTitle": "Слияние", + "NormalTitle": "Главная панель (Обычный)", + "LogTitle": "Журнал", + "CommitSummary": "Сводка коммита", + "CredentialsUsername": "Имя пользователя", + "CredentialsPassword": "Пароль", + "CredentialsPassphrase": "Введите пароль для SSH ключа", + "CredentialsPIN": "Введите PIN-код для SSH ключа", + "PassUnameWrong": "Неверный пароль, кодовая фраза и/или имя пользователя", + "Commit": "Сохранить изменения", + "CommitTooltip": "", + "AmendLastCommit": "Правка последнего коммита", + "AmendLastCommitTitle": "Правка Последнего Коммита", + "SureToAmend": "Вы уверены, что хотите править последний коммит? Впоследствии можно изменить сообщение коммита на панели коммитов.", + "NoCommitToAmend": "Не найден коммит для внесения поправок.", + "CommitChangesWithEditor": "Сохранить изменения с помощью редактора git", + "FindBaseCommitForFixup": "", + "FindBaseCommitForFixupTooltip": "", + "NoBaseCommitsFound": "", + "MultipleBaseCommitsFoundStaged": "", + "MultipleBaseCommitsFoundUnstaged": "", + "BaseCommitIsAlreadyOnMainBranch": "", + "BaseCommitIsNotInCurrentView": "", + "HunksWithOnlyAddedLinesWarning": "", + "StatusTitle": "Статус", + "GlobalTitle": "Глобальные сочетания клавиш", + "Menu": "Меню", + "Execute": "Выполнить", + "Stage": "Переключить индекс", + "StageTooltip": "", + "ToggleStagedAll": "Все проиндексированные/непроиндексированные", + "ToggleStagedAllTooltip": "", + "ToggleTreeView": "Переключить вид дерева файлов", + "ToggleTreeViewTooltip": "", + "OpenDiffTool": "", + "OpenMergeTool": "Открыть внешний инструмент слияния (git mergetool)", + "OpenMergeToolTooltip": "", + "Refresh": "Обновить", + "RefreshTooltip": "", + "Push": "Отправить изменения", + "Pull": "Получить и слить изменения", + "PushTooltip": "", + "PullTooltip": "", + "Scroll": "Прокрутить", + "FileFilter": "Фильтровать файлы (проиндексированные/непроиндексированные)", + "CopyToClipboardMenu": "", + "CopyFileName": "", + "CopyFilePath": "", + "CopyFileDiffTooltip": "", + "CopySelectedDiff": "", + "CopyAllFilesDiff": "", + "NoContentToCopyError": "", + "FileNameCopiedToast": "", + "FilePathCopiedToast": "", + "FileDiffCopiedToast": "", + "AllFilesDiffCopiedToast": "", + "FilterStagedFiles": "Показывать только проиндексированные файлы", + "FilterUnstagedFiles": "Показывать только непроиндексированные файлы", + "ResetFilter": "Сбросить фильтр", + "MergeConflictsTitle": "Конфликты Слияния", + "Checkout": "Переключить", + "CheckoutTooltip": "", + "CantCheckoutBranchWhilePulling": "", + "TagCheckoutTooltip": "", + "RemoteBranchCheckoutTooltip": "", + "CantPullOrPushSameBranchTwice": "", + "NoChangedFiles": "Нет изменённых файлов", + "SoftReset": "Мягкий сброс", + "AlreadyCheckedOutBranch": "Вы уже переключились в эту ветку", + "SureForceCheckout": "Вы уверены, что хотите принудительная переключить? Вы потеряете все локальные изменения", + "ForceCheckoutBranch": "Принудительное Переключение Ветки", + "BranchName": "Название ветки", + "NewBranchNameBranchOff": "Название новой ветки (Ветка с '{{.branchName}}')", + "CantDeleteCheckOutBranch": "Невозможно удалить переключённую ветку!", + "DeleteBranchTitle": "", + "DeleteLocalBranch": "", + "DeleteRemoteBranchOption": "", + "DeleteRemoteBranchPrompt": "", + "ForceDeleteBranchTitle": "", + "ForceDeleteBranchMessage": "'{{.selectedBranchName}}' не полностью слилась. Вы уверены, что хотите удалить его?", + "RebaseBranch": "Перебазировать переключённую ветку на эту ветку", + "RebaseBranchTooltip": "", + "CantRebaseOntoSelf": "Невозможно перебазировать ветку на себя", + "CantMergeBranchIntoItself": "Невозможно объединить ветку в себя", + "ForceCheckout": "Принудительное переключение", + "ForceCheckoutTooltip": "", + "CheckoutByName": "Переключить по названию", + "CheckoutByNameTooltip": "", + "RemoteBranchCheckoutTitle": "", + "CheckoutTypeNewBranch": "", + "CheckoutTypeNewBranchTooltip": "", + "CheckoutTypeDetachedHead": "", + "CheckoutTypeDetachedHeadTooltip": "", + "NewBranch": "Новая ветка", + "NewBranchFromStashTooltip": "", + "NoBranchesThisRepo": "Нет веток для этого репозитория", + "CommitWithoutMessageErr": "Вы не можете сохранить изменения без сообщения коммита", + "Close": "Закрыть", + "CloseCancel": "Закрыть/отменить", + "Confirm": "Подтвердить", + "Quit": "Выйти", + "SquashTooltip": "", + "CannotSquashOrFixupFirstCommit": "Ниже нет коммита, который можно было бы объединить", + "Fixup": "Объединить несколько коммитов в один отбросив сообщение коммита (Fixup) ", + "FixupTooltip": "", + "SureFixupThisCommit": "Вы уверены, что хотите объединить несколько коммитов, отбросив сообщение коммита? Он будет объединён с коммитом ниже", + "SureSquashThisCommit": "Вы уверены, что хотите объединить несколько коммитов в нижний коммит?", + "Squash": "Объединить коммиты (Squash)", + "PickCommitTooltip": "Выбрать коммит (в середине перебазирования)", + "Pick": "", + "CantPickDisabledReason": "", + "Edit": "", + "RevertCommit": "Отменить коммит", + "Revert": "", + "RevertCommitTooltip": "", + "Reword": "Перефразировать коммит", + "CommitRewordTooltip": "", + "DropCommit": "Удалить коммит", + "DropCommitTooltip": "", + "MoveDownCommit": "Переместить коммит вниз на один", + "MoveUpCommit": "Переместить коммит вверх на один", + "CannotMoveAnyFurther": "", + "EditCommit": "", + "EditCommitTooltip": "Изменить коммит", + "AmendCommitTooltip": "Править последний коммит с проиндексированными изменениями", + "Amend": "", + "ResetAuthor": "Сброс автора коммита", + "ResetAuthorTooltip": "", + "SetAuthor": "Установить автора", + "SetAuthorTooltip": "", + "AddCoAuthor": "", + "AmendCommitAttribute": "Установить/убрать автора коммита", + "AmendCommitAttributeTooltip": "", + "SetAuthorPromptTitle": "Установить автора (должно выглядеть как «Имя \u003cEmail\u003e»)", + "AddCoAuthorPromptTitle": "", + "AddCoAuthorTooltip": "", + "SureResetCommitAuthor": "Поле автора этого автора будет обновлено в соответствии с настроенным пользователем. Это также обновляет временную метку автора. Продолжить?", + "RewordCommitEditor": "Переписать коммит с помощью редактора", + "NoCommitsThisBranch": "Нет коммитов для этой ветки", + "UpdateRefHere": "Обновить ветку '{{.ref}}' здесь", + "Error": "Ошибка", + "Undo": "Отменить", + "UndoReflog": "Отменить (через reflog) (экспериментальный)", + "RedoReflog": "Повторить (через reflog) (экспериментальный)", + "UndoTooltip": "Журнал ссылок (reflog) будет использоваться для определения того, какую команду git запустить, чтобы отменить последнюю команду git. Сюда не входят изменения в рабочем дереве; учитываются только коммиты.", + "RedoTooltip": "Журнал ссылок (reflog) будет использоваться для определения того, какую команду git нужно запустить, чтобы повторить последнюю команду git. Сюда не входят изменения в рабочем дереве; учитываются только коммиты.", + "UndoMergeResolveTooltip": "", + "DiscardAllTooltip": "Отменить проиндексированные и непроиндексированные изменения в '{{.path}}'.", + "DiscardUnstagedTooltip": "Отменить непроиндексированные изменения в '{{.path}}'.", + "Pop": "Применить припрятанные изменения и тут же удалить их из хранилища", + "StashPopTooltip": "", + "Drop": "Удалить припрятанные изменения из хранилища", + "StashDropTooltip": "", + "Apply": "Применить припрятанные изменения", + "StashApplyTooltip": "", + "NoStashEntries": "Нет записей в хранилище", + "StashDrop": "Сбросить хранилище", + "SureDropStashEntry": "Вы уверены, что хотите удалить эту запись хранилища?", + "StashPop": "Применить припрятанные изменения и тут же удалить их из хранилища", + "SurePopStashEntry": "Вы уверены, что хотите применить эти припрятанные изменения и тут же удалить их из хранилища?", + "StashApply": "Применить припрятанные изменения", + "SureApplyStashEntry": "Вы уверены, что хотите применить эти припрятанные изменения?", + "NoTrackedStagedFilesStash": "У вас нет отслеженных/проиндексированных файлов для хранения", + "NoFilesToStash": "У вас нет файлов для хранения", + "StashChanges": "Припрятать изменения", + "RenameStash": "Переименовать хранилище", + "RenameStashPrompt": "Переименовать хранилище: {{.stashName}}", + "OpenConfig": "Открыть файл конфигурации", + "EditConfig": "Редактировать файл конфигурации", + "ForcePush": "Принудительная отправка изменении", + "ForcePushPrompt": "Ветка отклонилась от удалённой ветки. Нажмите «esc», чтобы отменить, или «enter», чтобы начать принудительную отправку изменении.", + "ForcePushDisabled": "Ветка отклонилась от удалённой ветки. Принудительная отправка изменении была отключена", + "UpdatesRejected": "", + "UpdatesRejectedAndForcePushDisabled": "Обновления были отклонены. Принудительная отправка изменении была отключена", + "CheckForUpdate": "Проверить обновления", + "CheckingForUpdates": "Проверка обновлений...", + "UpdateAvailableTitle": "Доступно обновление!", + "UpdateAvailable": "Скачать и установить версию {{.newVersion}}?", + "UpdateInProgressWaitingStatus": "Обновление", + "UpdateCompletedTitle": "Обновление завершено!", + "UpdateCompleted": "Обновление успешно установлено. Перезапустите lazygit, чтобы обновление вступило в силу.", + "FailedToRetrieveLatestVersionErr": "Не удалось получить информацию о версии", + "OnLatestVersionErr": "Установлена последняя версия", + "MajorVersionErr": "Новая версия ({{.newVersion}}) содержит несовместимые с предыдущими версии изменения по сравнению с текущей версией ({{.currentVersion}})", + "CouldNotFindBinaryErr": "Не удалось найти бинарный файл на {{.url}}", + "UpdateFailedErr": "Не удалось обновить: {{.errMessage}}", + "ConfirmQuitDuringUpdateTitle": "Идёт Обновление", + "ConfirmQuitDuringUpdate": "Выполняется обновление. Вы уверены, что хотите выйти?", + "MergeToolTitle": "Инструмент слияния", + "MergeToolPrompt": "Вы уверены, что хотите открыть `git mergetool`?", + "IntroPopupMessage": "\nБлагодарю за использование lazygit! Серьёзно, вы просто супер. Три вещи, которыми я хочу поделиться:\n\n 1) Чтобы узнать о возможностях lazygit, посмотрите это видео:\n https://youtu.be/CPLdltN7wgE\n\n 2) Обязательно ознакомьтесь с последними примечаниями к выпуску перейдя по ссылке:\n https://github.com/jesseduffield/lazygit/releases\n\n 3) Используете git? Значит Вы программист! С Вашей помощью мы можем сделать lazygit лучше,\n станьте участником и присоединиться к веселью в\n https://github.com/jesseduffield/lazygit\n Вы также можете поддержать меня и рассказать, над чем мне ещё стоит поработать,\n нажав на кнопку \"Поддержать\" в правом нижнем углу.\n Или поделиться любовь просто добавив репозиторий в избранные.\n", + "DeprecatedEditConfigWarning": "\n### Предупреждение об устаревшей конфигурации ###\n\nСледующие параметры конфигурации устарели и будут удалены в будущей\nверсии:\n{{configs}}\n\nПожалуйста, ознакомьтесь с\n\n https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#configuring-file-editing\n\nдля получения актуальной информации о том, как настроить ваш редактор.\n\n", + "GitconfigParseErr": "Gogit не удалось проанализировать ваш файл gitconfig из-за наличия символов «\\» без кавычек. Их удаление должно решить проблему.", + "EditFile": "Редактировать файл", + "EditFileTooltip": "", + "OpenFile": "Открыть файл", + "OpenFileTooltip": "", + "OpenInEditor": "", + "IgnoreFile": "Добавить в .gitignore", + "ExcludeFile": "Добавить в .git/info/exclude", + "RefreshFiles": "Обновить файлы", + "Merge": "Слияние с текущей переключённой веткой", + "MergeBranchTooltip": "", + "ConfirmQuit": "Вы уверены, что хотите выйти?", + "SwitchRepo": "Переключиться на последний репозиторий", + "AllBranchesLogGraph": "Показать все логи ветки", + "UnsupportedGitService": "Неподдерживаемая служба git", + "CopyPullRequestURL": "Скопировать URL запроса на принятие изменений в буфер обмена", + "NoBranchOnRemote": "Этой ветки не существует в удалённом репозитории. Сначала вам нужно его отправить в удалённый репозитории.", + "Fetch": "Получить изменения", + "FetchTooltip": "", + "NoAutomaticGitFetchTitle": "Нет автоматического получения изменении", + "NoAutomaticGitFetchBody": "Lazygit не может использовать «git fetch» в приватном репозитории; используйте «f» на панели файлов, чтобы запустить «git fetch» вручную", + "FileEnter": "Проиндексировать отдельные части/строки для файла или свернуть/развернуть для каталога", + "FileEnterTooltip": "", + "FileStagingRequirements": "Можно проиндексировать только отдельные строки для отслеживаемых файлов", + "StageSelectionTooltip": "Переключить строку в проиндексированные / непроиндексированные", + "DiscardSelection": "Отменить изменение (git reset)", + "DiscardSelectionTooltip": "", + "ToggleSelectHunk": "Переключить выборку частей", + "ToggleSelectHunkTooltip": "", + "ToggleSelectionForPatch": "Добавить/удалить строку(и) для патча", + "ToggleSelectionForPatchTooltip": "", + "EditHunk": "Изменить эту часть", + "EditHunkTooltip": "", + "ToggleStagingView": "Переключиться на другую панель (проиндексированные/непроиндексированные изменения)", + "ToggleStagingViewTooltip": "", + "ReturnToFilesPanel": "Вернуться к панели файлов", + "FastForward": "Перемотать эту ветку вперёд из её upstream-ветки", + "FastForwardTooltip": "", + "FastForwarding": "Получить изменения и перемотать вперёд", + "FoundConflictsTitle": "Конфликты!", + "ViewConflictsMenuItem": "Просмотр конфликтов", + "AbortMenuItem": "Прервать %s", + "PickHunk": "Выбрать эту часть", + "PickAllHunks": "Выбрать все части", + "ViewMergeRebaseOptions": "Просмотреть параметры слияния/перебазирования", + "ViewMergeRebaseOptionsTooltip": "", + "ViewMergeOptions": "", + "ViewRebaseOptions": "", + "NotMergingOrRebasing": "В данный момент вы не выполняете ни перебазирования, ни слияние", + "AlreadyRebasing": "Невозможно выполнить это действие во время перебазирования", + "RecentRepos": "Последние репозитории", + "MergeOptionsTitle": "Параметры слияния", + "RebaseOptionsTitle": "Параметры перебазирования", + "CommitSummaryTitle": "Сводка коммита", + "CommitDescriptionTitle": "Описание коммита", + "CommitDescriptionSubTitle": "Нажмите вкладку, чтобы переключить фокус", + "LocalBranchesTitle": "Локальные Ветки", + "SearchTitle": "Поиск", + "TagsTitle": "Теги", + "MenuTitle": "Меню", + "CommitMenuTitle": "", + "RemotesTitle": "Удалённые репозитории", + "RemoteBranchesTitle": "Удалённые ветки", + "PatchBuildingTitle": "Главная панель (сборка патчей)", + "InformationTitle": "Информация", + "SecondaryTitle": "Вторичный", + "ReflogCommitsTitle": "Журнал ссылок (Reflog)", + "ConflictsResolved": "Все конфликты слияния разрешены. Продолжить?", + "Continue": "Продолжить", + "RebasingTitle": "Перебазировать '{{.checkedOutBranch}}'", + "RebasingFromBaseCommitTitle": "", + "SimpleRebase": "Простая перебазировка на '{{.ref}}'", + "InteractiveRebase": "Интерактивная перебазировка на '{{.ref}}'", + "RebaseOntoBaseBranch": "", + "InteractiveRebaseTooltip": "Начать интерактивную перебазировку с перерыва в начале, чтобы можно было обновить TODO коммиты, прежде чем продолжить.", + "RebaseOntoBaseBranchTooltip": "", + "MustSelectTodoCommits": "", + "ConfirmMerge": "Вы уверены, что хотите to merge '{{.selectedBranch}}' into '{{.checkedOutBranch}}'?", + "FwdNoUpstream": "Невозможно перемотать ветку без upstream-ветки", + "FwdNoLocalUpstream": "Невозможно перемотать ветку. Удалённый репозитории не зарегистрирован локально", + "FwdCommitsToPush": "Невозможно перемотать ветку с коммитами для отправки", + "PullRequestNoUpstream": "", + "ErrorOccurred": "Произошла ошибка! Пожалуйста, заявите о проблеме на", + "NoRoom": "Недостаточно места", + "YouAreHere": "ВЫ ЗДЕСЬ", + "YouDied": "ТЫ УМЕР!", + "RewordNotSupported": "Переформулировка коммитов при интерактивном перебазировании в настоящее время не поддерживается", + "ChangingThisActionIsNotAllowed": "Изменение этого типа записи todo перебазирования не допускается", + "CherryPickCopy": "Скопировать отобранные коммит (cherry-pick)", + "CherryPickCopyTooltip": "", + "CherryPickCopyRange": "", + "CherryPickCopyRangeTooltip": "", + "PasteCommits": "Вставить отобранные коммиты (cherry-pick)", + "SureCherryPick": "Вы уверены, что хотите выборочно применить (cherry-picked) отобранные коммиты в эту ветку?", + "CherryPick": "Выборочная отборка (Cherry-Pick)", + "CannotCherryPickNonCommit": "", + "CannotCherryPickMergeCommit": "", + "Donate": "Пожертвовать", + "AskQuestion": "Задать вопрос", + "PrevLine": "Выбрать предыдущую строку", + "NextLine": "Выбрать следующую строку", + "PrevHunk": "Выбрать предыдущую часть", + "NextHunk": "Выбрать следующую часть", + "PrevConflict": "Выбрать предыдущий конфликт", + "NextConflict": "Выбрать следующий конфликт", + "SelectPrevHunk": "Выбрать предыдущую часть", + "SelectNextHunk": "Выбрать следующую часть", + "ScrollDown": "Прокрутить вниз", + "ScrollUp": "Прокрутить вверх", + "ScrollUpMainWindow": "Прокрутить вверх главную панель", + "ScrollDownMainWindow": "Прокрутить вниз главную панель", + "AmendCommitTitle": "Править коммит (amend)", + "AmendCommitPrompt": "Вы уверены, что хотите править этот коммит проиндексированными файлами?", + "DropCommitTitle": "Удалить коммит", + "DropCommitPrompt": "Вы уверены, что хотите удалить этот коммит?", + "DropUpdateRefPrompt": "", + "PullingStatus": "Получение и слияние изменении", + "PushingStatus": "Отправка изменении", + "FetchingStatus": "Получение изменении", + "SquashingStatus": "Объединение коммитов", + "FixingStatus": "Объединение коммитов, отбросив сообщение коммита", + "DeletingStatus": "Удаление", + "DroppingStatus": "", + "MovingStatus": "Перемещение", + "RebasingStatus": "Перебазирование", + "MergingStatus": "Слияние", + "LowercaseRebasingStatus": "перебазировка", + "LowercaseMergingStatus": "слияние", + "AmendingStatus": "Правка коммита", + "CherryPickingStatus": "Выборочная отборка (cherry-picking)", + "UndoingStatus": "Отмена последней команды", + "RedoingStatus": "Выполнение последней команды", + "CheckingOutStatus": "Переключение", + "CommittingStatus": "Сохранение изменении", + "RevertingStatus": "", + "CreatingFixupCommitStatus": "", + "CommitFiles": "Сохранить изменения файлов", + "SubCommitsDynamicTitle": "Коммиты (%s)", + "CommitFilesDynamicTitle": "Различия файлов (%s)", + "RemoteBranchesDynamicTitle": "Удалённые ветки (%s)", + "ViewItemFiles": "Просмотреть файлы выбранного элемента", + "ViewItemFilesTooltip": "", + "CommitFilesTitle": "Сохранить Изменения Файлов", + "CheckoutCommitFileTooltip": "Переключить файл", + "CanOnlyDiscardFromLocalCommits": "Изменения можно отменить только из локальных коммитов.", + "Remove": "", + "DiscardOldFileChangeTooltip": "Отменить изменения коммита в этом файле", + "DiscardFileChangesTitle": "Отменить изменения файла", + "DiscardFileChangesPrompt": "Вы уверены, что хотите удалить изменения в выбранных файлах из этого коммита?\n\nЭто действие запустит перебазирование и отменит изменения в этих файлах. Обратите внимание, что если последующие коммиты зависят от этих изменений, вам, возможно, придется разрешить конфликты.\nПримечание: это также сбросит все активные пользовательские патчи.", + "DisabledForGPG": "Функция недоступна для пользователей, использующих GPG", + "CreateRepo": "Не в git репозитории. Создать новый git репозиторий? (y/n):", + "BareRepo": "Вы пытались открыть Lazygit в пустом репозитории, но Lazygit ещё не поддерживает пустые репозитории. Открыть последний репозиторий? (y/n)", + "InitialBranch": "Название ветки? (оставьте пустым для git по умолчанию):", + "NoRecentRepositories": "Необходимо открыть lazygit в git репозитории. Нет валидных последних репозиториев. Выход.", + "IncorrectNotARepository": "Неверное значение 'notARepository'. Это должно быть одним из 'prompt', 'create', 'skip', или 'quit'.", + "AutoStashTitle": "Автосохранить изменения?", + "AutoStashPrompt": "Чтобы перенести изменения, их нужно сохранить и вынуть. Сделать это автоматически? (enter/esc)", + "StashPrefix": "Автосохранение изменений для", + "Discard": "Просмотреть параметры «отмены изменении»", + "DiscardChangesTitle": "", + "DiscardFileChangesTooltip": "", + "Cancel": "Отменить", + "DiscardAllChanges": "Отменить все изменения", + "DiscardUnstagedChanges": "Отменить непроиндексированные изменения", + "DiscardAllChangesToAllFiles": "Разбомбить рабочее дерево?", + "DiscardAnyUnstagedChanges": "Отменить непроиндексированные изменения", + "DiscardUntrackedFiles": "Удалить неотслеживаемые файлы", + "DiscardStagedChanges": "Отменить проиндексированные изменения", + "HardReset": "Жёсткий сброс", + "BranchDeleteTooltip": "", + "TagDeleteTooltip": "", + "Delete": "", + "Reset": "", + "ResetTooltip": "", + "ViewResetOptions": "Просмотреть параметры сброса", + "FileResetOptionsTooltip": "", + "CreateFixupCommit": "Создать fixup коммит", + "CreateFixupCommitTooltip": "Создать fixup коммит для этого коммита", + "CreateAmendCommit": "", + "FixupMenu_Fixup": "", + "FixupMenu_FixupTooltip": "", + "FixupMenu_AmendWithChanges": "", + "FixupMenu_AmendWithChangesTooltip": "", + "FixupMenu_AmendWithoutChanges": "", + "FixupMenu_AmendWithoutChangesTooltip": "", + "SquashAboveCommitsTooltip": "Объединить все 'fixup!' коммиты выше в выбранный коммит (автосохранение)", + "SquashCommitsAboveSelectedTooltip": "", + "SquashCommitsInCurrentBranchTooltip": "", + "SquashAboveCommits": "", + "SquashCommitsInCurrentBranch": "", + "SquashCommitsAboveSelectedCommit": "", + "CannotSquashCommitsInCurrentBranch": "", + "ExecuteCustomCommand": "Выполнить пользовательскую команду", + "ExecuteCustomCommandTooltip": "", + "CustomCommand": "Пользовательская Команда:", + "CommitChangesWithoutHook": "Закоммитить изменения без предварительного хука коммита", + "SkipHookPrefixNotConfigured": "Вы не настроили префикс сообщения коммита для пропуска хуков. Установите `git.skipHookPrefix = 'WIP'` в вашей конфигурации", + "ResetTo": "Сбросить на", + "ResetSoftTooltip": "", + "ResetMixedTooltip": "", + "ResetHardTooltip": "", + "PressEnterToReturn": "Нажмите Enter, чтобы вернуться в lazygit", + "ViewStashOptions": "Просмотреть параметры хранилища", + "ViewStashOptionsTooltip": "", + "Stash": "", + "StashTooltip": "", + "StashAllChanges": "Припрятать все изменения", + "StashStagedChanges": "Припрятать проиндексированные изменения", + "StashAllChangesKeepIndex": "Припрятать все изменения и сохранить индекс", + "StashUnstagedChanges": "Припрятать непроиндексированные изменения", + "StashIncludeUntrackedChanges": "Припрятать все изменения, включая неотслеживаемые файлы", + "StashOptions": "Параметры хранилища", + "NotARepository": "Ошибка: необходимо запустить внутри git репозитория", + "WorkingDirectoryDoesNotExist": "", + "Jump": "Перейти к панели", + "ScrollLeftRight": "Прокрутить влево/вправо", + "ScrollLeft": "Прокрутить влево", + "ScrollRight": "Прокрутить вправо", + "DiscardPatch": "Отменить патч", + "DiscardPatchConfirm": "Вы можете собрать патч только из одной записи коммита/хранилища за раз. Отменить текущий патч?", + "DiscardPatchSameCommitConfirm": "", + "CantPatchWhileRebasingError": "Вы не можете создавать патчи или запускать команды патча, находясь в состоянии слияния или перемещения.", + "ToggleAddToPatch": "Переключить файлы включённые в патч", + "ToggleAddToPatchTooltip": "", + "ToggleAllInPatch": "Переключить все файлы, включённые в патч", + "ToggleAllInPatchTooltip": "", + "UpdatingPatch": "Обновление патча", + "ViewPatchOptions": "Просмотреть пользовательские параметры патча", + "PatchOptionsTitle": "Параметры патча", + "NoPatchError": "Патч ещё не создан. Чтобы начать сборку патча, используйте «пробел» в файле коммита или введите, чтобы добавить определённые строки.", + "EmptyPatchError": "", + "EnterCommitFile": "Введите файл, чтобы добавить выбранные строки в патч (или свернуть каталог переключения)", + "EnterCommitFileTooltip": "", + "ExitCustomPatchBuilder": "Выйти из сборщика пользовательских патчей", + "EnterUpstream": "Введите upstream как '\u003cremote\u003e \u003cbranchname\u003e'", + "InvalidUpstream": "Недействительный upstream. Должен быть в формате '\u003cremote\u003e \u003cbranchname\u003e'", + "ReturnToRemotesList": "Вернуться к списку удалённых репозитории", + "NewRemote": "Добавить новую удалённую ветку", + "NewRemoteName": "Название новой удалённой ветки", + "NewRemoteUrl": "Ссылка новой удалённой ветки", + "ViewBranches": "", + "EditRemoteName": "Введите новое название для удалённое ветки {{.remoteName}}:", + "EditRemoteUrl": "Введите новую ссылку для удалённое ветки {{.remoteName}}:", + "RemoveRemote": "Удалить удалённую ветку", + "RemoveRemoteTooltip": "", + "RemoveRemotePrompt": "Вы уверены, что хотите удалить удалённую ветку?", + "DeleteRemoteBranch": "Удалить Удалённую Ветку", + "DeleteRemoteBranchMessage": "Вы уверены, что хотите удалить удалённую ветку", + "DeleteRemoteBranchTooltip": "", + "SetAsUpstream": "", + "SetAsUpstreamTooltip": "Установить как upstream-ветку переключённую ветку", + "SetUpstream": "Установить upstream-ветку из выбранной ветки", + "UnsetUpstream": "Убрать upstream-ветку из выбранной ветки", + "ViewDivergenceFromUpstream": "", + "ViewDivergenceFromBaseBranch": "", + "CouldNotDetermineBaseBranch": "", + "DivergenceSectionHeaderLocal": "", + "DivergenceSectionHeaderRemote": "", + "ViewUpstreamResetOptions": "", + "ViewUpstreamResetOptionsTooltip": "", + "ViewUpstreamRebaseOptions": "", + "ViewUpstreamRebaseOptionsTooltip": "", + "UpstreamGenericName": "", + "SetUpstreamTitle": "Установить upstream-ветку", + "SetUpstreamMessage": "Вы уверены, что хотите установить upstream-ветвь '{{.checkedOut}}' на '{{.selected}}'", + "EditRemoteTooltip": "Редактировать удалённый репозитории", + "TagCommit": "Пометить коммит тегом", + "TagCommitTooltip": "", + "TagMenuTitle": "Создать тег", + "TagNameTitle": "Название тега", + "TagMessageTitle": "Сообщения тега", + "LightweightTag": "Легковесный тег", + "AnnotatedTag": "Аннотированный тег", + "DeleteTagTitle": "Удалить тег", + "DeleteLocalTag": "", + "DeleteRemoteTag": "", + "SelectRemoteTagUpstream": "", + "DeleteRemoteTagPrompt": "", + "RemoteTagDeletedMessage": "", + "PushTagTitle": "Удалённый репозитории для отправки тега '{{.tagName}}' в:", + "PushTag": "Отправить тег", + "PushTagTooltip": "", + "NewTag": "Создать тег", + "NewTagTooltip": "", + "CreatingTag": "", + "ForceTag": "", + "ForceTagPrompt": "", + "FetchRemoteTooltip": "Получение изменения из удалённого репозитория", + "FetchingRemoteStatus": "Получение статуса удалённого репозитория", + "CheckoutCommit": "Переключить коммит", + "CheckoutCommitTooltip": "", + "SureCheckoutThisCommit": "Вы уверены, что хотите переключить коммит?", + "GitFlowOptions": "Показать параметры git-flow", + "NotAGitFlowBranch": "Это не похоже на ветку git-flow", + "NewBranchNamePrompt": "Введите новое название ветки", + "IgnoreTracked": "Игнорировать отслеживаемый файл", + "ExcludeTracked": "Исключить отслеживаемый файл", + "IgnoreTrackedPrompt": "Вы уверены, что хотите игнорировать отслеживаемый файл?", + "ExcludeTrackedPrompt": "Вы уверены, что хотите исключить отслеживаемый файл?", + "ViewResetToUpstreamOptions": "Просмотреть параметры сброса upstream-ветки", + "NextScreenMode": "Следующий режим экрана (нормальный/полуэкранный/полноэкранный)", + "PrevScreenMode": "Предыдущий режим экрана", + "StartSearch": "Найти", + "StartFilter": "", + "Panel": "Панель", + "Keybindings": "Связки клавиш", + "KeybindingsLegend": "Связки клавиш", + "KeybindingsMenuSectionLocal": "", + "KeybindingsMenuSectionGlobal": "", + "KeybindingsMenuSectionNavigation": "", + "RenameBranch": "Переименовать ветку", + "Upstream": "", + "UpstreamTooltip": "", + "BranchUpstreamOptionsTitle": "", + "ViewBranchUpstreamOptions": "", + "ViewBranchUpstreamOptionsTooltip": "", + "UpstreamNotSetError": "", + "NewGitFlowBranchPrompt": "Новое {{.branchType}} название:", + "RenameBranchWarning": "Эта ветвь отслеживает удалённый репозитории. Это действие переименует только имя локальной ветки, а не имя удалённой ветки. Продолжать?", + "OpenKeybindingsMenu": "Открыть меню", + "ResetCherryPick": "Сбросить отобранную (скопированную | cherry-picked) выборку коммитов", + "NextTab": "Следующая вкладка", + "PrevTab": "Предыдущая вкладка", + "CantUndoWhileRebasing": "Невозможно отменить во время перебазирования", + "CantRedoWhileRebasing": "Невозможно повторить при перебазировании", + "MustStashWarning": "Вытаскивание исправления в индекс требует сохранения и распаковки ваших изменений. Если что-то пойдёт не так, можно получить доступ к файлам из хранилища. Продолжить?", + "MustStashTitle": "Необходимо припрятать", + "ConfirmationTitle": "Панель Подтверждения", + "PrevPage": "Предыдущая страница", + "NextPage": "Следующая страница", + "GotoTop": "Пролистать наверх", + "GotoBottom": "Прокрутить вниз", + "FilteringBy": "Фильтрация по", + "ResetInParentheses": "(сбросить)", + "OpenFilteringMenu": "Просмотреть параметры фильтрации по пути", + "OpenFilteringMenuTooltip": "", + "FilterBy": "Фильтровать по", + "ExitFilterMode": "Прекратить фильтрацию по пути", + "ExitFilterModeAuthor": "", + "FilterPathOption": "Введите путь для фильтрации", + "FilterAuthorOption": "", + "EnterFileName": "Введите путь:", + "EnterAuthor": "", + "FilteringMenuTitle": "Фильтрация", + "WillCancelExistingFilterTooltip": "", + "MustExitFilterModeTitle": "Команда недоступна", + "MustExitFilterModePrompt": "Команда недоступна в режиме фильтрации. Выйти из режима фильтрации?", + "Diff": "Разница", + "EnterRefToDiff": "Введите ссылку для сравнения", + "EnterRefName": "Введите ссылку:", + "ExitDiffMode": "Выйти из режима сравнения", + "DiffingMenuTitle": "Сравнение", + "SwapDiff": "Обратное направление сравнении", + "ViewDiffingOptions": "Открыть меню сравнении", + "ViewDiffingOptionsTooltip": "", + "OpenCommandLogMenu": "Открыть меню журнала команд", + "OpenCommandLogMenuTooltip": "", + "ShowingGitDiff": "Показывает вывод для:", + "CommitDiff": "Разница коммита", + "CopyCommitHashToClipboard": "Скопировать hash коммита в буфер обмена", + "CommitHash": "hash коммита", + "CommitURL": "URL коммита", + "CopyCommitMessageToClipboard": "Скопировать сообщение коммита в буфер обмена", + "CommitMessage": "Полное сообщение коммита", + "CommitSubject": "Тема коммита", + "CommitAuthor": "Автор коммита", + "CopyCommitAttributeToClipboard": "Скопировать атрибут коммита", + "CopyCommitAttributeToClipboardTooltip": "", + "CopyBranchNameToClipboard": "Скопировать название ветки в буфер обмена", + "CopyPathToClipboard": "Скопировать название файла в буфер обмена", + "CommitPrefixPatternError": "Ошибка в шаблоне commitPrefix", + "CopySelectedTextToClipboard": "Скопировать выделенный текст в буфер обмена", + "NoFilesStagedTitle": "Нет проиндексированных файлов", + "NoFilesStagedPrompt": "Нет проиндексированых файлов. Закоммитить все файлы?", + "BranchNotFoundTitle": "Ветка не найдена", + "BranchNotFoundPrompt": "Ветка не найден. Создайте новую ветку с названием", + "BranchUnknown": "Ветка неизвестна", + "DiscardChangeTitle": "Отменить изменение", + "DiscardChangePrompt": "Вы уверены, что хотите отменить это изменение (git reset)? Это необратимо.\nЧтобы отключить этот диалог, установите для конфигурационного ключа 'gui.skipDiscardChangeWarning' значение true.", + "CreateNewBranchFromCommit": "Создать новую ветку с этого коммита", + "BuildingPatch": "Сборка патча", + "ViewCommits": "Просмотреть коммиты", + "MinGitVersionError": "Версия Git должна быть не ниже 2.20 (т. е. начиная с 2018 года). Пожалуйста, обновите версию git. В качестве альтернативы заявите о проблеме на https://github.com/jesseduffield/lazygit/issues, чтобы lazygit был более совместим с предыдущими версиями.", + "RunningCustomCommandStatus": "Запуск пользовательской команды", + "SubmoduleStashAndReset": "Спрятать непроиндексированные изменения подмодуля и обновить", + "AndResetSubmodules": "И сбросить подмодули", + "EnterSubmoduleTooltip": "Ввести подмодуль", + "Enter": "", + "CopySubmoduleNameToClipboard": "Скопировать название подмодуля в буфер обмена", + "RemoveSubmodule": "Удалить подмодуль", + "RemoveSubmoduleTooltip": "", + "RemoveSubmodulePrompt": "Вы уверены, что хотите удалить подмодуль '%s' и соответствующий ему каталог? Это необратимо.", + "ResettingSubmoduleStatus": "Сброс подмодуля", + "NewSubmoduleName": "Названия нового подмодуля:", + "NewSubmoduleUrl": "URL нового подмодуля:", + "NewSubmodulePath": "Путь нового подмодуля:", + "NewSubmodule": "Добавить новый подмодуль", + "AddingSubmoduleStatus": "Добавление подмодуля", + "UpdateSubmoduleUrl": "Обновить URL подмодуля '%s'", + "UpdatingSubmoduleUrlStatus": "Обновление URL", + "EditSubmoduleUrl": "Обновить URL подмодуля", + "InitializingSubmoduleStatus": "Инициализация подмодуля", + "InitSubmoduleTooltip": "Инициализировать подмодуль", + "Update": "", + "Initialize": "", + "SubmoduleUpdateTooltip": "Обновить подмодуль", + "UpdatingSubmoduleStatus": "Обновление подмодуля", + "BulkInitSubmodules": "Массовая инициализация подмодулей", + "BulkUpdateSubmodules": "Массовое обновление подмодулей", + "BulkDeinitSubmodules": "Массовая деинициализация подмодулей", + "ViewBulkSubmoduleOptions": "Просмотреть параметры массового подмодуля", + "BulkSubmoduleOptions": "Параметры массового подмодуля", + "RunningCommand": "Выполнение команды", + "SubCommitsTitle": "Подкоммиты", + "SubmodulesTitle": "Подмодули", + "NavigationTitle": "Навигация по панели списка", + "SuggestionsCheatsheetTitle": "Подсказки", + "SuggestionsTitle": "Подсказки (нажмите %s, чтобы сфокусироваться)", + "SuggestionsSubtitle": "", + "ExtrasTitle": "Журнал команд", + "PushingTagStatus": "Отправка тега", + "PullRequestURLCopiedToClipboard": "URL запроса на принятие изменений скопирован в буфер обмена", + "CommitDiffCopiedToClipboard": "Сравнения коммита скопированы в буфер обмена", + "CommitURLCopiedToClipboard": "URL коммита скопирован в буфер обмена", + "CommitMessageCopiedToClipboard": "Сообщение коммита скопировано в буфер обмена", + "CommitSubjectCopiedToClipboard": "Тема коммита скопирована в буфер обмена", + "CommitAuthorCopiedToClipboard": "Автор коммита скопирован в буфер обмена", + "PatchCopiedToClipboard": "Патч скопирован в буфер обмена", + "CopiedToClipboard": "Скопировано в буфер обмена", + "ErrCannotEditDirectory": "Невозможно редактировать каталог: вы можете редактировать только отдельные файлы", + "ErrStageDirWithInlineMergeConflicts": "Невозможно подготовить/удалить каталог, содержащий файлы со встроенными конфликтами слияния. Сначала устраните конфликты слияния", + "ErrRepositoryMovedOrDeleted": "Не могу найти репозиторий. Возможно, он был перемещён или удалён ¯\\_(ツ)_/¯", + "ErrWorktreeMovedOrRemoved": "", + "CommandLog": "Журнал команд", + "ToggleShowCommandLog": "Показать/скрыть журнал команд", + "FocusCommandLog": "Сфокусировать журнал команд", + "CommandLogHeader": "Вы можете скрыть/сфокусировать эту панель, нажав '%s'\n", + "RandomTip": "Случайный совет", + "SelectParentCommitForMerge": "Выберите родительский коммит для слияния", + "ToggleWhitespaceInDiffView": "Переключить отображение изменении пробелов в просмотрщике сравнении", + "ToggleWhitespaceInDiffViewTooltip": "", + "IgnoreWhitespaceDiffViewSubTitle": "(игнорирование пробелов)", + "IgnoreWhitespaceNotSupportedHere": "Игнорирование пробелов не поддерживается в этом представлении", + "IncreaseContextInDiffView": "Увеличить размер контекста, отображаемого вокруг изменений в просмотрщике сравнении", + "IncreaseContextInDiffViewTooltip": "", + "DecreaseContextInDiffView": "Уменьшите размер контекста, отображаемого вокруг изменений в просмотрщике сравнении", + "DecreaseContextInDiffViewTooltip": "", + "DiffContextSizeChanged": "", + "CreatePullRequestOptions": "Создать параметры запроса принятие изменений", + "DefaultBranch": "Ветка по-умолчанию", + "SelectBranch": "Выбрать ветку", + "CreatePullRequest": "Создать запрос на принятие изменений", + "SelectConfigFile": "Выбрать файл конфигурации", + "NoConfigFileFoundErr": "Файл конфигурации не найден", + "LoadingFileSuggestions": "Загрузка подсказок по файлам", + "LoadingCommits": "Загрузка коммитов", + "MustSpecifyOriginError": "Необходимо указать удалённый репозитории, если указываете ветку", + "GitOutput": "Вывод git:", + "GitCommandFailed": "Ошибка команды Git. Подробности смотрите в журнале команд (открыть с помощью %s)", + "AbortTitle": "Прервать %s", + "AbortPrompt": "Вы уверены, что хотите прервать текущий %s?", + "OpenLogMenu": "Открыть меню журнала", + "OpenLogMenuTooltip": "", + "LogMenuTitle": "Параметры журнала коммитов", + "ToggleShowGitGraphAll": "Переключить отображение всего git графа (передать флаг --all в git log )", + "ShowGitGraph": "Показать git граф", + "SortOrder": "Порядок сортировки", + "SortAlphabetical": "По алфавиту", + "SortByDate": "По дате", + "SortByRecency": "", + "SortBasedOnReflog": "", + "SortCommits": "Упорядочить коммиты", + "CantChangeContextSizeError": "Невозможно изменить контекст в режиме создания патча, потому что мы были слишком ленивы, чтобы поддерживать его при выпуске функции. Если вы действительно этого хотите, пожалуйста, дайте нам знать!", + "OpenCommitInBrowser": "Открыть коммит в браузере", + "ViewBisectOptions": "Просмотреть параметры бинарного поиска", + "ConfirmRevertCommit": "Вы уверены, что хотите отменить {{.selectedCommit}}?", + "RewordInEditorTitle": "Перефразировать в редакторе", + "RewordInEditorPrompt": "Вы уверены, что хотите перефразировать этот коммит вашем редакторе?", + "CheckoutPrompt": "Вы уверены, что хотите переключить '%s'?", + "HardResetAutostashPrompt": "Вы уверены, что хотите сделать жёсткий сброс на '%s'? При необходимости будет выполнен автосохранение в хранилище.", + "UpstreamGone": "(upstream gone)", + "NukeDescription": "Если вы хотите, чтобы все изменения в рабочем дереве исчезли, это способ сделать это. Если есть какие-либо изменения подмодуля, эти изменения будут припрятаны в подмодуле(-ях).", + "DiscardStagedChangesDescription": "Это создаст новую запись в хранилище, содержащую только проиндексированные файлы, а затем удалит её, так что в рабочем дереве останутся только непроиндексированные изменения.", + "EmptyOutput": "\u003cПустой вывод\u003e", + "Patch": "Патч", + "CustomPatch": "Пользовательский патч", + "CommitsCopied": "коммиты скопированы", + "CommitCopied": "коммит скопирован", + "ResetPatch": "Сбросить патч", + "ResetPatchTooltip": "", + "ApplyPatch": "Применить патч", + "ApplyPatchTooltip": "", + "ApplyPatchInReverse": "Применить патч в обратном порядке", + "ApplyPatchInReverseTooltip": "", + "RemovePatchFromOriginalCommit": "Удалить патч из исходного коммита (%s)", + "RemovePatchFromOriginalCommitTooltip": "", + "MovePatchOutIntoIndex": "Переместить патч в индекс", + "MovePatchOutIntoIndexTooltip": "", + "MovePatchIntoNewCommit": "Переместить патч в новый коммит", + "MovePatchIntoNewCommitTooltip": "", + "MovePatchToSelectedCommit": "Переместить патч в выбранный коммит (%s)", + "MovePatchToSelectedCommitTooltip": "", + "CopyPatchToClipboard": "Скопировать патч в буфер обмена", + "NoMatchesFor": "Нет совпадений для '%s' %s", + "MatchesFor": "совпадений для '%s' (%d из %d) %s", + "SearchKeybindings": "%s: Следующее совпадение, %s: Предыдущее совпадение, %s: Выйти из режима поиска", + "SearchPrefix": "Поиск: ", + "FilterPrefix": "", + "ExitSearchMode": "%s: Выйти из режима поиска", + "ExitTextFilterMode": "", + "Switch": "", + "SwitchToWorktree": "", + "SwitchToWorktreeTooltip": "", + "AlreadyCheckedOutByWorktree": "", + "BranchCheckedOutByWorktree": "", + "DetachWorktreeTooltip": "", + "Switching": "", + "RemoveWorktree": "", + "RemoveWorktreeTitle": "", + "DetachWorktree": "", + "DetachingWorktree": "", + "WorktreesTitle": "", + "WorktreeTitle": "", + "RemoveWorktreePrompt": "", + "ForceRemoveWorktreePrompt": "", + "RemovingWorktree": "", + "AddingWorktree": "", + "CantDeleteCurrentWorktree": "", + "AlreadyInWorktree": "", + "CantDeleteMainWorktree": "", + "NoWorktreesThisRepo": "", + "MissingWorktree": "", + "MainWorktree": "", + "NewWorktree": "", + "NewWorktreePath": "", + "NewWorktreeBase": "", + "RemoveWorktreeTooltip": "", + "BranchNameCannotBeBlank": "", + "NewBranchName": "", + "NewBranchNameLeaveBlank": "", + "ViewWorktreeOptions": "", + "CreateWorktreeFrom": "", + "CreateWorktreeFromDetached": "", + "LcWorktree": "", + "ChangingDirectoryTo": "", + "Name": "", + "Branch": "", + "Path": "", + "MarkedBaseCommitStatus": "", + "MarkAsBaseCommit": "", + "MarkAsBaseCommitTooltip": "", + "MarkedCommitMarker": "", + "PleaseGoToURL": "", + "NoCopiedCommits": "", + "DisabledMenuItemPrefix": "", + "QuickStartInteractiveRebase": "", + "QuickStartInteractiveRebaseTooltip": "", + "CannotQuickStartInteractiveRebase": "", + "ToggleRangeSelect": "Переключить выборку перетаскивания", + "RangeSelectUp": "", + "RangeSelectDown": "", + "RangeSelectNotSupported": "", + "NoItemSelected": "", + "SelectedItemIsNotABranch": "", + "SelectedItemDoesNotHaveFiles": "", + "RangeSelectNotSupportedForSubmodules": "", + "OldCherryPickKeyWarning": "", + "CommandDoesNotSupportOpeningInEditor": "", + "Actions": { + "CheckoutCommit": "Переключить коммит", + "CheckoutTag": "Переключить тег", + "CheckoutBranch": "Переключить ветку", + "ForceCheckoutBranch": "Принудительное переключение ветки", + "DeleteLocalBranch": "", + "DeleteBranch": "Удалить ветку", + "Merge": "Слить", + "RebaseBranch": "Перебазировать ветку", + "RenameBranch": "Переименовать ветку", + "CreateBranch": "Создать ветку", + "FastForwardBranch": "Ветка перемотки вперёд", + "CherryPick": "(Cherry-pick) Вставить коммиты", + "CheckoutFile": "Переключить файл", + "DiscardOldFileChange": "Отменить старое изменение файла", + "SquashCommitDown": "Объединить несколько коммитов в один нижний", + "FixupCommit": "Объединить несколько коммитов в один, отбросив сообщение коммита", + "RewordCommit": "Перефразировать коммит", + "DropCommit": "Сбросить коммит", + "EditCommit": "Изменить коммит", + "AmendCommit": "Править коммит (amend)", + "ResetCommitAuthor": "Сброс автора коммита", + "SetCommitAuthor": "Установить автора коммита", + "AddCommitCoAuthor": "", + "RevertCommit": "Отменить коммит", + "CreateFixupCommit": "Создать fixup коммит", + "SquashAllAboveFixupCommits": "Объединить все выше fixup коммиты", + "MoveCommitUp": "Переместить коммит вверх", + "MoveCommitDown": "Переместить коммит вниз", + "CopyCommitMessageToClipboard": "Скопировать сообщение коммита в буфер обмена", + "CopyCommitSubjectToClipboard": "Скопировать тему коммита в буфер обмена", + "CopyCommitDiffToClipboard": "Скопировать сравнения коммита в буфер обмена", + "CopyCommitHashToClipboard": "Скопировать hash коммита в буфер обмена", + "CopyCommitURLToClipboard": "Скопировать URL коммита в буфер обмена", + "CopyCommitAuthorToClipboard": "Скопировать автора коммита в буфер обмена", + "CopyCommitAttributeToClipboard": "Скопировать в буфер обмена", + "CopyPatchToClipboard": "Скопировать патч в буфер обмена", + "CustomCommand": "Пользовательская команда", + "DiscardAllChangesInDirectory": "Отменить все изменения в каталоге", + "DiscardUnstagedChangesInDirectory": "Отменить непроиндексированные изменения в каталоге", + "DiscardAllChangesInFile": "Отменить все изменения в файле", + "DiscardAllUnstagedChangesInFile": "Отменить все непроиндексированные изменения в файле", + "StageFile": "Проиндексировать файл", + "StageResolvedFiles": "Проиндексированные файлы, конфликты слияния которых были устранены", + "UnstageFile": "Непроиндексированные файл", + "UnstageAllFiles": "Удалить все файлы из индекса", + "StageAllFiles": "Проиндексировать все файлы", + "IgnoreExcludeFile": "Игнорировать или исключить файл", + "IgnoreFileErr": "Невозможно игнорировать .gitignore", + "ExcludeFile": "Исключить файл", + "ExcludeGitIgnoreErr": "Невозможно исключить .gitignore", + "Commit": "Коммит", + "EditFile": "Редактировать файл", + "Push": "Отправить изменения", + "Pull": "Получить и слить изменения", + "OpenFile": "Открыть файл", + "OpenFileTooltip": "", + "StashAllChanges": "Припрятать все изменения", + "StashAllChangesKeepIndex": "Припрятать все изменения и сохранить индекс", + "StashStagedChanges": "Припрятать проиндексированные изменения", + "StashUnstagedChanges": "Припрятать непроиндексированные изменения", + "StashIncludeUntrackedChanges": "Припрятать все изменения, включая неотслеживаемые файлы", + "GitFlowFinish": "Завершение Git-потока", + "GitFlowStart": "Запуск Git-потока", + "CopyToClipboard": "Скопировать в буфер обмена", + "CopySelectedTextToClipboard": "Скопировать выделенный текст в буфер обмена", + "RemovePatchFromCommit": "Удалить патч из коммита", + "MovePatchToSelectedCommit": "Переместить патч в выбранный коммит", + "MovePatchIntoIndex": "Переместите патч в индекс", + "MovePatchIntoNewCommit": "Переместить патч в новый коммит", + "DeleteRemoteBranch": "Удалить удалённую ветку", + "SetBranchUpstream": "Установить ветку как upstream", + "AddRemote": "Добавить удалённую ветку", + "RemoveRemote": "Удалить удалённую ветку", + "UpdateRemote": "Обновить удалённую ветку", + "ApplyPatch": "Применить патч", + "Stash": "Хранилище", + "RenameStash": "Переименовать хранилище", + "RemoveSubmodule": "Удалить подмодуль", + "ResetSubmodule": "Сброс подмодуля", + "AddSubmodule": "Добавить подмодуль", + "UpdateSubmoduleUrl": "Обновить URL подмодуля", + "InitialiseSubmodule": "Инициализация подмодуля", + "BulkInitialiseSubmodules": "Массовая инициализация подмодулей", + "BulkUpdateSubmodules": "Массовое обновление подмодулей", + "BulkDeinitialiseSubmodules": "Массовая деинициализация подмодулей", + "UpdateSubmodule": "Обновить подмодуль", + "CreateLightweightTag": "Создать легковесный тег", + "CreateAnnotatedTag": "Создать аннотированный тег", + "DeleteLocalTag": "", + "DeleteRemoteTag": "", + "PushTag": "Отправить тег", + "NukeWorkingTree": "Уничтожить рабочее дерево", + "DiscardUnstagedFileChanges": "Отменить непроиндексированные изменения файла", + "RemoveUntrackedFiles": "Удалить неотслеживаемые файлы", + "RemoveStagedFiles": "Удалить проиндексированные файлы", + "SoftReset": "Мягкий сброс", + "MixedReset": "Смешанный сброс", + "HardReset": "Жёсткий сброс", + "Undo": "Отменить", + "Redo": "Повторить", + "CopyPullRequestURL": "Скопировать запрос на принятие изменений URL", + "OpenDiffTool": "", + "OpenMergeTool": "Открыть инструмент слияния", + "OpenCommitInBrowser": "Открыть коммит в браузере", + "OpenPullRequest": "Открыть запрос на принятие изменений в браузера", + "StartBisect": "Начать бинарный поиск", + "ResetBisect": "Сбросить бинарный поиск", + "BisectSkip": "Пропустить бинарный поиск", + "BisectMark": "Отметить бинарный поиск", + "RemoveWorktree": "", + "AddWorktree": "" + }, + "Bisect": { + "MarkStart": "Отметить %s как %s (начать бинарный поиск)", + "MarkSkipCurrent": "", + "MarkSkipSelected": "", + "ResetTitle": "Сбросить 'git bisect'", + "ResetPrompt": "Вы уверены, что хотите сбросить 'git bisect'?", + "ResetOption": "Сбросить бинарный поиск", + "ChooseTerms": "", + "OldTermPrompt": "", + "NewTermPrompt": "", + "BisectMenuTitle": "Бинарный поиск", + "Mark": "Отметить %s как %s", + "SkipCurrent": "Пропустить %s", + "SkipSelected": "", + "CompleteTitle": "Бинарный поиск завершён", + "CompletePrompt": "Бинарный поиск завершён! Изменения внесённые следующим коммитом:\n\n%s\n\nСбросить 'git bisect' сейчас?", + "CompletePromptIndeterminate": "Бинарный поиск завершён! Некоторые коммиты были пропущены, поэтому любое из следующих коммитов могло внести изменения::\n\n%s\n\nСбросить 'git bisect' сейчас?", + "Bisecting": "Бинарный поиск" + }, + "Log": { + "EditRebase": "", + "MoveCommitUp": "", + "MoveCommitDown": "", + "CherryPickCommits": "", + "HandleUndo": "", + "HandleMidRebaseCommand": "", + "RemoveFile": "", + "CopyToClipboard": "", + "Remove": "", + "CreateFileWithContent": "", + "AppendingLineToFile": "", + "EditRebaseFromBaseCommit": "" + }, + "BreakingChangesTitle": "", + "BreakingChangesMessage": "", + "BreakingChangesByVersion": null +} diff --git a/pkg/i18n/translations/zh-CN.json b/pkg/i18n/translations/zh-CN.json new file mode 100644 index 00000000000..2381408b91c --- /dev/null +++ b/pkg/i18n/translations/zh-CN.json @@ -0,0 +1,924 @@ +{ + "NotEnoughSpace": "没有足够的空间来渲染面板", + "DiffTitle": "差异", + "FilesTitle": "文件", + "BranchesTitle": "分支", + "CommitsTitle": "提交", + "StashTitle": "贮藏", + "SnakeTitle": "", + "EasterEgg": "", + "UnstagedChanges": "未暂存更改", + "StagedChanges": "已暂存更改", + "MainTitle": "主要", + "StagingTitle": "正在暂存", + "MergingTitle": "正在合并", + "MergeConfirmTitle": "", + "NormalTitle": "正常", + "LogTitle": "", + "CommitSummary": "提交信息", + "CredentialsUsername": "用户名", + "CredentialsPassword": "密码", + "CredentialsPassphrase": "输入 SSH 密钥的密码", + "CredentialsPIN": "", + "PassUnameWrong": "密码 和/或 用户名错误", + "Commit": "提交更改", + "CommitTooltip": "", + "AmendLastCommit": "修补最后一次提交", + "AmendLastCommitTitle": "修补最后一次提交", + "SureToAmend": "您确定要修补上一次提交吗?之后您可以从提交面板更改提交消息。", + "NoCommitToAmend": "没有需要提交的修补。", + "CommitChangesWithEditor": "提交更改(使用编辑器编辑提交信息)", + "FindBaseCommitForFixup": "", + "FindBaseCommitForFixupTooltip": "", + "NoBaseCommitsFound": "", + "MultipleBaseCommitsFoundStaged": "", + "MultipleBaseCommitsFoundUnstaged": "", + "BaseCommitIsAlreadyOnMainBranch": "", + "BaseCommitIsNotInCurrentView": "", + "HunksWithOnlyAddedLinesWarning": "", + "StatusTitle": "状态", + "GlobalTitle": "全局键绑定", + "Menu": "菜单", + "Execute": "执行", + "Stage": "切换暂存状态", + "StageTooltip": "", + "ToggleStagedAll": "切换所有文件的暂存状态", + "ToggleStagedAllTooltip": "", + "ToggleTreeView": "切换文件树视图", + "ToggleTreeViewTooltip": "", + "OpenDiffTool": "", + "OpenMergeTool": "打开外部合并工具 (git mergetool)", + "OpenMergeToolTooltip": "", + "Refresh": "刷新", + "RefreshTooltip": "", + "Push": "推送", + "Pull": "拉取", + "PushTooltip": "", + "PullTooltip": "", + "Scroll": "滚动", + "FileFilter": "", + "CopyToClipboardMenu": "", + "CopyFileName": "", + "CopyFilePath": "", + "CopyFileDiffTooltip": "", + "CopySelectedDiff": "", + "CopyAllFilesDiff": "", + "NoContentToCopyError": "", + "FileNameCopiedToast": "", + "FilePathCopiedToast": "", + "FileDiffCopiedToast": "", + "AllFilesDiffCopiedToast": "", + "FilterStagedFiles": "", + "FilterUnstagedFiles": "", + "ResetFilter": "", + "MergeConflictsTitle": "合并冲突", + "Checkout": "检出", + "CheckoutTooltip": "", + "CantCheckoutBranchWhilePulling": "", + "TagCheckoutTooltip": "", + "RemoteBranchCheckoutTooltip": "", + "CantPullOrPushSameBranchTwice": "", + "NoChangedFiles": "没有更改过文件", + "SoftReset": "软重置", + "AlreadyCheckedOutBranch": "您已经检出至此分支", + "SureForceCheckout": "您确定要强制检出吗?您将丢失所有本地更改", + "ForceCheckoutBranch": "强制检出分支", + "BranchName": "分支名称", + "NewBranchNameBranchOff": "新分支名称(基于 {{.branchName}})", + "CantDeleteCheckOutBranch": "您不能删除已检出的分支!", + "DeleteBranchTitle": "", + "DeleteLocalBranch": "", + "DeleteRemoteBranchOption": "", + "DeleteRemoteBranchPrompt": "", + "ForceDeleteBranchTitle": "", + "ForceDeleteBranchMessage": "{{.selectedBranchName}} 还没有被完全合并。您确定要删除它吗?", + "RebaseBranch": "将已检出的分支变基到该分支", + "RebaseBranchTooltip": "", + "CantRebaseOntoSelf": "您不能将分支变基到其自身", + "CantMergeBranchIntoItself": "您不能将分支合并到其自身", + "ForceCheckout": "强制检出", + "ForceCheckoutTooltip": "", + "CheckoutByName": "按名称检出", + "CheckoutByNameTooltip": "", + "RemoteBranchCheckoutTitle": "", + "CheckoutTypeNewBranch": "", + "CheckoutTypeNewBranchTooltip": "", + "CheckoutTypeDetachedHead": "", + "CheckoutTypeDetachedHeadTooltip": "", + "NewBranch": "新分支", + "NewBranchFromStashTooltip": "", + "NoBranchesThisRepo": "此仓库中没有分支", + "CommitWithoutMessageErr": "您必须编写提交消息才能进行提交", + "Close": "关闭", + "CloseCancel": "关闭", + "Confirm": "确认", + "Quit": "退出", + "SquashTooltip": "", + "CannotSquashOrFixupFirstCommit": "There's no commit below to squash into", + "Fixup": "修正(fixup)", + "FixupTooltip": "", + "SureFixupThisCommit": "您确定要“修正”此提交吗?它将合并到下面的提交中", + "SureSquashThisCommit": "您确定要将这个提交压缩到下面的提交中吗?", + "Squash": "压缩", + "PickCommitTooltip": "选择提交(变基过程中)", + "Pick": "", + "CantPickDisabledReason": "", + "Edit": "", + "RevertCommit": "还原提交", + "Revert": "", + "RevertCommitTooltip": "", + "Reword": "改写提交", + "CommitRewordTooltip": "", + "DropCommit": "删除提交", + "DropCommitTooltip": "", + "MoveDownCommit": "下移提交", + "MoveUpCommit": "上移提交", + "CannotMoveAnyFurther": "", + "EditCommit": "", + "EditCommitTooltip": "编辑提交", + "AmendCommitTooltip": "用已暂存的更改来修补提交", + "Amend": "", + "ResetAuthor": "", + "ResetAuthorTooltip": "", + "SetAuthor": "", + "SetAuthorTooltip": "", + "AddCoAuthor": "", + "AmendCommitAttribute": "", + "AmendCommitAttributeTooltip": "", + "SetAuthorPromptTitle": "", + "AddCoAuthorPromptTitle": "", + "AddCoAuthorTooltip": "", + "SureResetCommitAuthor": "", + "RewordCommitEditor": "使用编辑器重命名提交", + "NoCommitsThisBranch": "该分支没有提交", + "UpdateRefHere": "", + "Error": "错误", + "Undo": "撤销", + "UndoReflog": "(通过 reflog)撤销「实验功能」", + "RedoReflog": "(通过 reflog)重做「实验功能」", + "UndoTooltip": "", + "RedoTooltip": "", + "UndoMergeResolveTooltip": "", + "DiscardAllTooltip": "", + "DiscardUnstagedTooltip": "", + "Pop": "应用并删除", + "StashPopTooltip": "", + "Drop": "删除", + "StashDropTooltip": "", + "Apply": "应用", + "StashApplyTooltip": "", + "NoStashEntries": "没有贮藏条目", + "StashDrop": "删除贮藏", + "SureDropStashEntry": "您确定要删除此贮藏条目吗?", + "StashPop": "应用并删除贮藏", + "SurePopStashEntry": "您确定要应用并删除此贮藏条目吗?", + "StashApply": "应用贮藏", + "SureApplyStashEntry": "您确定要应用此贮藏条目?", + "NoTrackedStagedFilesStash": "没有可以贮藏的已跟踪/暂存文件", + "NoFilesToStash": "", + "StashChanges": "贮藏更改", + "RenameStash": "Rename stash", + "RenameStashPrompt": "Rename stash: {{.stashName}}", + "OpenConfig": "打开配置文件", + "EditConfig": "编辑配置文件", + "ForcePush": "强制推送", + "ForcePushPrompt": "您的分支已与远程分支不同。按‘esc’取消,或‘enter’强制推送.", + "ForcePushDisabled": "您的分支已与远程分支不同, 并且您已经禁用了强行推送", + "UpdatesRejected": "", + "UpdatesRejectedAndForcePushDisabled": "更新被拒绝,您已禁用强制推送", + "CheckForUpdate": "检查更新", + "CheckingForUpdates": "正在检查更新…", + "UpdateAvailableTitle": "", + "UpdateAvailable": "", + "UpdateInProgressWaitingStatus": "", + "UpdateCompletedTitle": "", + "UpdateCompleted": "", + "FailedToRetrieveLatestVersionErr": "", + "OnLatestVersionErr": "已是最新版本", + "MajorVersionErr": "新版本 ({{.newVersion}}) 与当前版本 ({{.currentVersion}}) 相比,具有非向后兼容的更改", + "CouldNotFindBinaryErr": "在 {{.url}} 处找不到任何二进制文件", + "UpdateFailedErr": "", + "ConfirmQuitDuringUpdateTitle": "", + "ConfirmQuitDuringUpdate": "", + "MergeToolTitle": "合并工具", + "MergeToolPrompt": "确定要打开 `git mergetool` 吗?", + "IntroPopupMessage": "\n感谢使用 lazygit!你真的太棒了。下面几点你可能会感兴趣:\n\n 1) 观看此视频,快速了解 lazygit 的功能:\n https://youtu.be/CPLdltN7wgE\n\n 2) 记得看看最新发行说明:\n https://github.com/jesseduffield/lazygit/releases\n\n 3) 使用 git 说明你是一位程序员!你可以和我们一起让 lazygit 变得更好。\n 考虑为本项目做些贡献吧:\n https://github.com/jesseduffield/lazygit\n 你也可以直接赞助,并告诉我哪里需要改进,点右下角的捐赠按钮就好了。\n 哪怕只是给仓库点个星星也很棒!\n", + "DeprecatedEditConfigWarning": "", + "GitconfigParseErr": "由于存在未加引号的'\\'字符,因此 Gogit 无法解析您的 gitconfig 文件。删除它们应该可以解决问题。", + "EditFile": "编辑文件", + "EditFileTooltip": "", + "OpenFile": "打开文件", + "OpenFileTooltip": "", + "OpenInEditor": "", + "IgnoreFile": "添加到 .gitignore", + "ExcludeFile": "", + "RefreshFiles": "刷新文件", + "Merge": "合并到当前检出的分支", + "MergeBranchTooltip": "", + "ConfirmQuit": "您确定要退出吗?", + "SwitchRepo": "切换到最近的仓库", + "AllBranchesLogGraph": "显示所有分支的日志", + "UnsupportedGitService": "不支持的 git 服务", + "CopyPullRequestURL": "将抓取请求 URL 复制到剪贴板", + "NoBranchOnRemote": "该分支在远程上不存在. 您需要先将其推送到远程.", + "Fetch": "抓取", + "FetchTooltip": "", + "NoAutomaticGitFetchTitle": "无法自动进行 \"git fetch\"", + "NoAutomaticGitFetchBody": "Lazygit 不能在私人仓库中使用 \"git fetch\"; 请在文件面板中使用 'f' 手动运行 \"git fetch\"", + "FileEnter": "暂存单个 块/行 用于文件, 或 折叠/展开 目录", + "FileEnterTooltip": "", + "FileStagingRequirements": "只能暂存跟踪文件的单独行", + "StageSelectionTooltip": "切换行暂存状态", + "DiscardSelection": "取消变更 (git reset)", + "DiscardSelectionTooltip": "", + "ToggleSelectHunk": "切换选择区块", + "ToggleSelectHunkTooltip": "", + "ToggleSelectionForPatch": "添加/移除 行到补丁", + "ToggleSelectionForPatchTooltip": "", + "EditHunk": "", + "EditHunkTooltip": "", + "ToggleStagingView": "切换到其他面板", + "ToggleStagingViewTooltip": "", + "ReturnToFilesPanel": "返回文件面板", + "FastForward": "从上游快进此分支", + "FastForwardTooltip": "", + "FastForwarding": "抓取并快进", + "FoundConflictsTitle": "自动合并失败", + "ViewConflictsMenuItem": "", + "AbortMenuItem": "", + "PickHunk": "选中区块", + "PickAllHunks": "选中所有区块", + "ViewMergeRebaseOptions": "查看 合并/变基 选项", + "ViewMergeRebaseOptionsTooltip": "", + "ViewMergeOptions": "", + "ViewRebaseOptions": "", + "NotMergingOrRebasing": "您目前既不进行变基也不进行合并", + "AlreadyRebasing": "", + "RecentRepos": "最近的仓库", + "MergeOptionsTitle": "合并选项", + "RebaseOptionsTitle": "变基选项", + "CommitSummaryTitle": "提交讯息", + "CommitDescriptionTitle": "", + "CommitDescriptionSubTitle": "", + "LocalBranchesTitle": "分支页面", + "SearchTitle": "搜索", + "TagsTitle": "标签页面", + "MenuTitle": "菜单", + "CommitMenuTitle": "", + "RemotesTitle": "远程页面", + "RemoteBranchesTitle": "远程分支", + "PatchBuildingTitle": "构建补丁中", + "InformationTitle": "信息", + "SecondaryTitle": "次要", + "ReflogCommitsTitle": "Reflog 页面", + "ConflictsResolved": "已解决所有冲突。是否继续?", + "Continue": "", + "RebasingTitle": "", + "RebasingFromBaseCommitTitle": "", + "SimpleRebase": "", + "InteractiveRebase": "", + "RebaseOntoBaseBranch": "", + "InteractiveRebaseTooltip": "", + "RebaseOntoBaseBranchTooltip": "", + "MustSelectTodoCommits": "", + "ConfirmMerge": "您确定要将分支 {{.selectedBranch}} 合并到 {{.checkedOutBranch}} 吗?", + "FwdNoUpstream": "此分支没有上游,无法快进", + "FwdNoLocalUpstream": "此分支的远程未在本地注册,无法快进", + "FwdCommitsToPush": "此分支带有尚未推送的提交,无法快进", + "PullRequestNoUpstream": "", + "ErrorOccurred": "发生错误!请在以下位置创建 issue", + "NoRoom": "空间不足", + "YouAreHere": "您在这里", + "YouDied": "", + "RewordNotSupported": "当前不支持交互式重新基准化时的重新措词提交", + "ChangingThisActionIsNotAllowed": "", + "CherryPickCopy": "复制提交(拣选)", + "CherryPickCopyTooltip": "", + "CherryPickCopyRange": "", + "CherryPickCopyRangeTooltip": "", + "PasteCommits": "粘贴提交(拣选)", + "SureCherryPick": "您确定要将选中的提交进行拣选到这个分支吗?", + "CherryPick": "拣选 (Cherry-Pick)", + "CannotCherryPickNonCommit": "", + "CannotCherryPickMergeCommit": "", + "Donate": "捐助", + "AskQuestion": "提问咨询", + "PrevLine": "选择上一行", + "NextLine": "选择下一行", + "PrevHunk": "选择上一个区块", + "NextHunk": "选择下一个区块", + "PrevConflict": "选择上一个冲突", + "NextConflict": "选择下一个冲突", + "SelectPrevHunk": "选择顶部块", + "SelectNextHunk": "选择底部块", + "ScrollDown": "向下滚动", + "ScrollUp": "向上滚动", + "ScrollUpMainWindow": "向上滚动主面板", + "ScrollDownMainWindow": "向下滚动主面板", + "AmendCommitTitle": "修改提交", + "AmendCommitPrompt": "您确定要使用暂存文件来修改此提交吗?", + "DropCommitTitle": "删除提交", + "DropCommitPrompt": "您确定要删除此提交吗?", + "DropUpdateRefPrompt": "", + "PullingStatus": "正在拉取", + "PushingStatus": "正在推送", + "FetchingStatus": "正在抓取", + "SquashingStatus": "正在压缩", + "FixingStatus": "正在修正", + "DeletingStatus": "正在删除", + "DroppingStatus": "", + "MovingStatus": "正在移动", + "RebasingStatus": "正在变基", + "MergingStatus": "", + "LowercaseRebasingStatus": "", + "LowercaseMergingStatus": "", + "AmendingStatus": "正在修改", + "CherryPickingStatus": "正在拣选", + "UndoingStatus": "正在撤销", + "RedoingStatus": "正在重做", + "CheckingOutStatus": "长子检出", + "CommittingStatus": "正在提交", + "RevertingStatus": "", + "CreatingFixupCommitStatus": "", + "CommitFiles": "提交文件", + "SubCommitsDynamicTitle": "", + "CommitFilesDynamicTitle": "", + "RemoteBranchesDynamicTitle": "", + "ViewItemFiles": "查看提交的文件", + "ViewItemFilesTooltip": "", + "CommitFilesTitle": "提交文件", + "CheckoutCommitFileTooltip": "检出文件", + "CanOnlyDiscardFromLocalCommits": "", + "Remove": "", + "DiscardOldFileChangeTooltip": "放弃对此文件的提交更改", + "DiscardFileChangesTitle": "放弃文件更改", + "DiscardFileChangesPrompt": "您确定要舍弃此提交对该文件的更改吗?如果此文件是在此提交中创建的,它将被删除", + "DisabledForGPG": "该功能不适用于使用 GPG 的用户", + "CreateRepo": "当前目录不在 git 仓库中。是否在此目录创建一个新的 git 仓库?(y/n): ", + "BareRepo": "", + "InitialBranch": "", + "NoRecentRepositories": "", + "IncorrectNotARepository": "", + "AutoStashTitle": "自动存储?", + "AutoStashPrompt": "您必须隐藏并弹出更改以使更改生效。自动执行?(enter/esc)", + "StashPrefix": "自动隐藏更改 ", + "Discard": "查看'放弃更改'选项", + "DiscardChangesTitle": "", + "DiscardFileChangesTooltip": "", + "Cancel": "取消", + "DiscardAllChanges": "放弃所有更改", + "DiscardUnstagedChanges": "放弃未暂存的变更", + "DiscardAllChangesToAllFiles": "清空工作区", + "DiscardAnyUnstagedChanges": "丢弃未暂存的变更", + "DiscardUntrackedFiles": "丢弃未跟踪的文件", + "DiscardStagedChanges": "", + "HardReset": "硬重置", + "BranchDeleteTooltip": "", + "TagDeleteTooltip": "", + "Delete": "", + "Reset": "", + "ResetTooltip": "", + "ViewResetOptions": "查看重置选项", + "FileResetOptionsTooltip": "", + "CreateFixupCommit": "为此提交创建修正", + "CreateFixupCommitTooltip": "创建修正提交", + "CreateAmendCommit": "", + "FixupMenu_Fixup": "", + "FixupMenu_FixupTooltip": "", + "FixupMenu_AmendWithChanges": "", + "FixupMenu_AmendWithChangesTooltip": "", + "FixupMenu_AmendWithoutChanges": "", + "FixupMenu_AmendWithoutChangesTooltip": "", + "SquashAboveCommitsTooltip": "压缩在所选提交之上的所有“fixup!”提交(自动压缩)", + "SquashCommitsAboveSelectedTooltip": "", + "SquashCommitsInCurrentBranchTooltip": "", + "SquashAboveCommits": "", + "SquashCommitsInCurrentBranch": "", + "SquashCommitsAboveSelectedCommit": "", + "CannotSquashCommitsInCurrentBranch": "", + "ExecuteCustomCommand": "执行自定义命令", + "ExecuteCustomCommandTooltip": "", + "CustomCommand": "自定义命令:", + "CommitChangesWithoutHook": "提交更改而无需预先提交钩子", + "SkipHookPrefixNotConfigured": "您尚未配置用于跳过钩子的提交消息前缀。请在您的配置中设置 `git.skipHookPrefix ='WIP'`", + "ResetTo": "重置为", + "ResetSoftTooltip": "", + "ResetMixedTooltip": "", + "ResetHardTooltip": "", + "PressEnterToReturn": "按下 Enter 键返回 lazygit", + "ViewStashOptions": "查看贮藏选项", + "ViewStashOptionsTooltip": "", + "Stash": "", + "StashTooltip": "", + "StashAllChanges": "将所有更改加入贮藏", + "StashStagedChanges": "", + "StashAllChangesKeepIndex": "将已暂存的更改加入贮藏", + "StashUnstagedChanges": "", + "StashIncludeUntrackedChanges": "", + "StashOptions": "贮藏选项", + "NotARepository": "错误:必须在 git 仓库中运行", + "WorkingDirectoryDoesNotExist": "", + "Jump": "跳到面板", + "ScrollLeftRight": "左右滚动", + "ScrollLeft": "向左滚动", + "ScrollRight": "向右滚动", + "DiscardPatch": "丢弃补丁", + "DiscardPatchConfirm": "您一次只能通过一个提交或贮藏条目构建补丁。需要放弃当前补丁吗?", + "DiscardPatchSameCommitConfirm": "", + "CantPatchWhileRebasingError": "处于合并或变基状态时,您无法构建修补程序或运行修补程序命令", + "ToggleAddToPatch": "补丁中包含的切换文件", + "ToggleAddToPatchTooltip": "", + "ToggleAllInPatch": "", + "ToggleAllInPatchTooltip": "", + "UpdatingPatch": "", + "ViewPatchOptions": "查看自定义补丁选项", + "PatchOptionsTitle": "补丁选项", + "NoPatchError": "尚未创建补丁。你可以在提交中的文件上按下“空格”或使用“回车”添加其中的特定行以开始构建补丁", + "EmptyPatchError": "", + "EnterCommitFile": "输入文件以将所选行添加到补丁中(或切换目录折叠)", + "EnterCommitFileTooltip": "", + "ExitCustomPatchBuilder": "退出逐行模式", + "EnterUpstream": "以这种格式输入上游:'\u003c远程仓库\u003e \u003c分支名称\u003e'", + "InvalidUpstream": "上游格式无效,格式应当为:'\u003cremote\u003e \u003cbranchname\u003e'", + "ReturnToRemotesList": "返回远程仓库列表", + "NewRemote": "添加新的远程仓库", + "NewRemoteName": "新远程仓库名称:", + "NewRemoteUrl": "新远程仓库 URL:", + "ViewBranches": "", + "EditRemoteName": "输入远程仓库 {{.remoteName}} 的新名称:", + "EditRemoteUrl": "输入远程仓库 {{.remoteName}} 的新 URL:", + "RemoveRemote": "删除远程", + "RemoveRemoteTooltip": "", + "RemoveRemotePrompt": "您确定要删除远程仓库吗?", + "DeleteRemoteBranch": "删除远程分支", + "DeleteRemoteBranchMessage": "您确定要删除远程分支吗?", + "DeleteRemoteBranchTooltip": "", + "SetAsUpstream": "", + "SetAsUpstreamTooltip": "设置为检出分支的上游", + "SetUpstream": "设置为检出分支的上游", + "UnsetUpstream": "", + "ViewDivergenceFromUpstream": "", + "ViewDivergenceFromBaseBranch": "", + "CouldNotDetermineBaseBranch": "", + "DivergenceSectionHeaderLocal": "", + "DivergenceSectionHeaderRemote": "", + "ViewUpstreamResetOptions": "", + "ViewUpstreamResetOptionsTooltip": "", + "ViewUpstreamRebaseOptions": "", + "ViewUpstreamRebaseOptionsTooltip": "", + "UpstreamGenericName": "", + "SetUpstreamTitle": "设置上游分支", + "SetUpstreamMessage": "您确定要将 {{.checkedOut}} 的上游分支设置为 {{.selected}} 吗?", + "EditRemoteTooltip": "编辑远程仓库", + "TagCommit": "标签提交", + "TagCommitTooltip": "", + "TagMenuTitle": "创建标签", + "TagNameTitle": "标签名称", + "TagMessageTitle": "标签消息", + "LightweightTag": "轻量标签", + "AnnotatedTag": "附注标签", + "DeleteTagTitle": "", + "DeleteLocalTag": "", + "DeleteRemoteTag": "", + "SelectRemoteTagUpstream": "", + "DeleteRemoteTagPrompt": "", + "RemoteTagDeletedMessage": "", + "PushTagTitle": "将 {{.tagName}} 推送到远程仓库:", + "PushTag": "推送标签", + "PushTagTooltip": "", + "NewTag": "创建标签", + "NewTagTooltip": "", + "CreatingTag": "", + "ForceTag": "", + "ForceTagPrompt": "", + "FetchRemoteTooltip": "抓取远程仓库", + "FetchingRemoteStatus": "抓取远程仓库中", + "CheckoutCommit": "检出提交", + "CheckoutCommitTooltip": "", + "SureCheckoutThisCommit": "您确定要检出此提交吗?", + "GitFlowOptions": "显示 git-flow 选项", + "NotAGitFlowBranch": "这似乎不是 git flow 分支", + "NewBranchNamePrompt": "输入分支的新名称", + "IgnoreTracked": "忽略跟踪文件", + "ExcludeTracked": "", + "IgnoreTrackedPrompt": "您确定要忽略已跟踪的文件吗?", + "ExcludeTrackedPrompt": "", + "ViewResetToUpstreamOptions": "查看上游重置选项", + "NextScreenMode": "下一屏模式(正常/半屏/全屏)", + "PrevScreenMode": "上一屏模式", + "StartSearch": "开始搜索", + "StartFilter": "", + "Panel": "面板", + "Keybindings": "按键绑定", + "KeybindingsLegend": "", + "KeybindingsMenuSectionLocal": "", + "KeybindingsMenuSectionGlobal": "", + "KeybindingsMenuSectionNavigation": "", + "RenameBranch": "重命名分支", + "Upstream": "", + "UpstreamTooltip": "", + "BranchUpstreamOptionsTitle": "", + "ViewBranchUpstreamOptions": "", + "ViewBranchUpstreamOptionsTooltip": "", + "UpstreamNotSetError": "", + "NewGitFlowBranchPrompt": "新的 {{.branchType}} 名称:", + "RenameBranchWarning": "该分支正在跟踪远程仓库。此操作将仅会重命名本地分支名称,而不会重命名远程分支的名称。确定继续?", + "OpenKeybindingsMenu": "打开菜单", + "ResetCherryPick": "重置已拣选(复制)的提交", + "NextTab": "下一个标签", + "PrevTab": "上一个标签", + "CantUndoWhileRebasing": "进行基础调整时无法撤消", + "CantRedoWhileRebasing": "变基时无法重做", + "MustStashWarning": "将补丁拉出到索引中需要存储和取消存储所做的更改。如果出现问题,您将可以从存储中访问文件。继续?", + "MustStashTitle": "必须保存进度", + "ConfirmationTitle": "确认面板", + "PrevPage": "上一页", + "NextPage": "下一页", + "GotoTop": "滚动到顶部", + "GotoBottom": "滚动到底部", + "FilteringBy": "过滤依据", + "ResetInParentheses": "(重置)", + "OpenFilteringMenu": "查看按路径过滤选项", + "OpenFilteringMenuTooltip": "", + "FilterBy": "过滤", + "ExitFilterMode": "停止按路径过滤", + "ExitFilterModeAuthor": "", + "FilterPathOption": "输入要过滤的路径", + "FilterAuthorOption": "", + "EnterFileName": "输入路径:", + "EnterAuthor": "", + "FilteringMenuTitle": "正在过滤", + "WillCancelExistingFilterTooltip": "", + "MustExitFilterModeTitle": "命令不可用", + "MustExitFilterModePrompt": "命令在过滤模式下不可用。退出过滤模式?", + "Diff": "差异", + "EnterRefToDiff": "输入 ref 以 diff", + "EnterRefName": "输入 ref:", + "ExitDiffMode": "退出差异模式", + "DiffingMenuTitle": "正在 diff", + "SwapDiff": "反向 diff", + "ViewDiffingOptions": "打开 diff 菜单", + "ViewDiffingOptionsTooltip": "", + "OpenCommandLogMenu": "打开命令日志菜单", + "OpenCommandLogMenuTooltip": "", + "ShowingGitDiff": "显示输出:", + "CommitDiff": "", + "CopyCommitHashToClipboard": "将提交的 hash 复制到剪贴板", + "CommitHash": "", + "CommitURL": "", + "CopyCommitMessageToClipboard": "将提交消息复制到剪贴板", + "CommitMessage": "", + "CommitSubject": "", + "CommitAuthor": "", + "CopyCommitAttributeToClipboard": "", + "CopyCommitAttributeToClipboardTooltip": "", + "CopyBranchNameToClipboard": "将分支名称复制到剪贴板", + "CopyPathToClipboard": "将文件名复制到剪贴板", + "CommitPrefixPatternError": "提交前缀模式错误", + "CopySelectedTextToClipboard": "将选中文本复制到剪贴板", + "NoFilesStagedTitle": "没有暂存文件", + "NoFilesStagedPrompt": "您尚未暂存任何文件。提交所有文件?", + "BranchNotFoundTitle": "找不到分支", + "BranchNotFoundPrompt": "找不到分支。创建一个新分支命名为:", + "BranchUnknown": "", + "DiscardChangeTitle": "取消暂存选中的行", + "DiscardChangePrompt": "您确定要删除所选的行(git reset)吗?这是不可逆的。\n要禁用此对话框,请将 'gui.skipDiscardChangeWarning' 的配置键设置为 true", + "CreateNewBranchFromCommit": "从提交创建新分支", + "BuildingPatch": "正在构建补丁", + "ViewCommits": "查看提交", + "MinGitVersionError": "Git 版本必须至少为 2.20(即从 2018 年开始的版本)。请更新 git。或者在 https://github.com/jesseduffield/lazygit/issues 上提出一个问题,以使 lazygit 更加向后兼容。", + "RunningCustomCommandStatus": "正在运行自定义命令", + "SubmoduleStashAndReset": "存放未提交的子模块更改和更新", + "AndResetSubmodules": "和重置子模块", + "EnterSubmoduleTooltip": "输入子模块", + "Enter": "", + "CopySubmoduleNameToClipboard": "将子模块名称复制到剪贴板", + "RemoveSubmodule": "删除子模块", + "RemoveSubmoduleTooltip": "", + "RemoveSubmodulePrompt": "您确定要删除子模块 '%s' 及其对应的目录吗?这是不可逆的。", + "ResettingSubmoduleStatus": "正在重置子模块", + "NewSubmoduleName": "新的子模块名称:", + "NewSubmoduleUrl": "新的子模块 URL:", + "NewSubmodulePath": "新的子模块路径:", + "NewSubmodule": "添加新的子模块", + "AddingSubmoduleStatus": "添加子模块", + "UpdateSubmoduleUrl": "更新子模块 '%s' 的 URL", + "UpdatingSubmoduleUrlStatus": "更新 URL 中", + "EditSubmoduleUrl": "更新子模块 URL", + "InitializingSubmoduleStatus": "正在初始化子模块", + "InitSubmoduleTooltip": "初始化子模块", + "Update": "", + "Initialize": "", + "SubmoduleUpdateTooltip": "更新子模块", + "UpdatingSubmoduleStatus": "正在更新子模块", + "BulkInitSubmodules": "批量初始化子模块", + "BulkUpdateSubmodules": "批量更新子模块", + "BulkDeinitSubmodules": "批量反初始化子模块", + "ViewBulkSubmoduleOptions": "查看批量子模块选项", + "BulkSubmoduleOptions": "批量子模块选项", + "RunningCommand": "运行命令", + "SubCommitsTitle": "子提交", + "SubmodulesTitle": "子模块", + "NavigationTitle": "列表面板导航", + "SuggestionsCheatsheetTitle": "意见建议", + "SuggestionsTitle": "意见建议 (点击 %s 以聚焦)", + "SuggestionsSubtitle": "", + "ExtrasTitle": "附加", + "PushingTagStatus": "推送标签", + "PullRequestURLCopiedToClipboard": "抓取请求网址已复制到剪贴板", + "CommitDiffCopiedToClipboard": "", + "CommitURLCopiedToClipboard": "", + "CommitMessageCopiedToClipboard": "提交消息复制到剪贴板", + "CommitSubjectCopiedToClipboard": "", + "CommitAuthorCopiedToClipboard": "", + "PatchCopiedToClipboard": "", + "CopiedToClipboard": "复制到剪贴板", + "ErrCannotEditDirectory": "无法编辑目录:您只能编辑单个文件", + "ErrStageDirWithInlineMergeConflicts": "无法 暂存/取消暂存 包含具有内联合并冲突的文件的目录。请先解决合并冲突", + "ErrRepositoryMovedOrDeleted": "找不到仓库。它可能已被移动或删除 ¯\\_(ツ)_/¯", + "ErrWorktreeMovedOrRemoved": "", + "CommandLog": "命令日志", + "ToggleShowCommandLog": "切换 显示/隐藏 命令日志", + "FocusCommandLog": "焦点命令日志", + "CommandLogHeader": "您可以通过按 '%s' 隐藏或集中显示该面板,或使用 `gui.showCommandLog: false`\n将其永久隐藏在您的配置中", + "RandomTip": "随机小提示", + "SelectParentCommitForMerge": "选择父提交进行合并", + "ToggleWhitespaceInDiffView": "切换是否在差异视图中显示空白字符差异", + "ToggleWhitespaceInDiffViewTooltip": "", + "IgnoreWhitespaceDiffViewSubTitle": "", + "IgnoreWhitespaceNotSupportedHere": "", + "IncreaseContextInDiffView": "扩大差异视图中显示的上下文范围", + "IncreaseContextInDiffViewTooltip": "", + "DecreaseContextInDiffView": "缩小差异视图中显示的上下文范围", + "DecreaseContextInDiffViewTooltip": "", + "DiffContextSizeChanged": "", + "CreatePullRequestOptions": "创建抓取请求选项", + "DefaultBranch": "默认分支", + "SelectBranch": "选择分支", + "CreatePullRequest": "创建抓取请求", + "SelectConfigFile": "选择配置文件", + "NoConfigFileFoundErr": "找不到配置文件", + "LoadingFileSuggestions": "正在加载文件建议", + "LoadingCommits": "正在加载提交", + "MustSpecifyOriginError": "指定分支时,必须同时指定远程", + "GitOutput": "Git 输出:", + "GitCommandFailed": "Git 命令执行失败。查看命令日志了解详情 (使用 %s 打开)", + "AbortTitle": "放弃 %s", + "AbortPrompt": "您确定要放弃当前 %s 吗?", + "OpenLogMenu": "打开日志菜单", + "OpenLogMenuTooltip": "", + "LogMenuTitle": "提交日志选项", + "ToggleShowGitGraphAll": "切换显示完整 git 分支图 (向 `git log` 命令传入 `--all` 选项)", + "ShowGitGraph": "显示 git 分支图", + "SortOrder": "", + "SortAlphabetical": "", + "SortByDate": "", + "SortByRecency": "", + "SortBasedOnReflog": "", + "SortCommits": "提交排序", + "CantChangeContextSizeError": "无法在补丁构建模式下更改上下文,因为我们在发布该功能时懒得支持它。 如果你真的想要这么做,请告诉我们!", + "OpenCommitInBrowser": "在浏览器中打开提交", + "ViewBisectOptions": "查看二分查找选项", + "ConfirmRevertCommit": "", + "RewordInEditorTitle": "", + "RewordInEditorPrompt": "", + "CheckoutPrompt": "", + "HardResetAutostashPrompt": "", + "UpstreamGone": "", + "NukeDescription": "", + "DiscardStagedChangesDescription": "", + "EmptyOutput": "", + "Patch": "", + "CustomPatch": "", + "CommitsCopied": "", + "CommitCopied": "", + "ResetPatch": "", + "ResetPatchTooltip": "", + "ApplyPatch": "", + "ApplyPatchTooltip": "", + "ApplyPatchInReverse": "", + "ApplyPatchInReverseTooltip": "", + "RemovePatchFromOriginalCommit": "", + "RemovePatchFromOriginalCommitTooltip": "", + "MovePatchOutIntoIndex": "", + "MovePatchOutIntoIndexTooltip": "", + "MovePatchIntoNewCommit": "", + "MovePatchIntoNewCommitTooltip": "", + "MovePatchToSelectedCommit": "", + "MovePatchToSelectedCommitTooltip": "", + "CopyPatchToClipboard": "", + "NoMatchesFor": "", + "MatchesFor": "", + "SearchKeybindings": "", + "SearchPrefix": "", + "FilterPrefix": "", + "ExitSearchMode": "", + "ExitTextFilterMode": "", + "Switch": "", + "SwitchToWorktree": "", + "SwitchToWorktreeTooltip": "", + "AlreadyCheckedOutByWorktree": "", + "BranchCheckedOutByWorktree": "", + "DetachWorktreeTooltip": "", + "Switching": "", + "RemoveWorktree": "", + "RemoveWorktreeTitle": "", + "DetachWorktree": "", + "DetachingWorktree": "", + "WorktreesTitle": "", + "WorktreeTitle": "", + "RemoveWorktreePrompt": "", + "ForceRemoveWorktreePrompt": "", + "RemovingWorktree": "", + "AddingWorktree": "", + "CantDeleteCurrentWorktree": "", + "AlreadyInWorktree": "", + "CantDeleteMainWorktree": "", + "NoWorktreesThisRepo": "", + "MissingWorktree": "", + "MainWorktree": "", + "NewWorktree": "", + "NewWorktreePath": "", + "NewWorktreeBase": "", + "RemoveWorktreeTooltip": "", + "BranchNameCannotBeBlank": "", + "NewBranchName": "", + "NewBranchNameLeaveBlank": "", + "ViewWorktreeOptions": "", + "CreateWorktreeFrom": "", + "CreateWorktreeFromDetached": "", + "LcWorktree": "", + "ChangingDirectoryTo": "", + "Name": "", + "Branch": "", + "Path": "", + "MarkedBaseCommitStatus": "", + "MarkAsBaseCommit": "", + "MarkAsBaseCommitTooltip": "", + "MarkedCommitMarker": "", + "PleaseGoToURL": "", + "NoCopiedCommits": "", + "DisabledMenuItemPrefix": "", + "QuickStartInteractiveRebase": "", + "QuickStartInteractiveRebaseTooltip": "", + "CannotQuickStartInteractiveRebase": "", + "ToggleRangeSelect": "切换拖动选择", + "RangeSelectUp": "", + "RangeSelectDown": "", + "RangeSelectNotSupported": "", + "NoItemSelected": "", + "SelectedItemIsNotABranch": "", + "SelectedItemDoesNotHaveFiles": "", + "RangeSelectNotSupportedForSubmodules": "", + "OldCherryPickKeyWarning": "", + "CommandDoesNotSupportOpeningInEditor": "", + "Actions": { + "CheckoutCommit": "检出提交", + "CheckoutTag": "检出标签", + "CheckoutBranch": "检出分支", + "ForceCheckoutBranch": "强制检出分支", + "DeleteLocalBranch": "", + "DeleteBranch": "", + "Merge": "合并", + "RebaseBranch": "变基分支", + "RenameBranch": "重命名分支", + "CreateBranch": "建立分支", + "FastForwardBranch": "快进分支", + "CherryPick": "(拣选) 粘贴提交", + "CheckoutFile": "检出文件", + "DiscardOldFileChange": "放弃旧文件更改", + "SquashCommitDown": "向下压缩提交", + "FixupCommit": "修正提交", + "RewordCommit": "改写提交", + "DropCommit": "删除提交", + "EditCommit": "编辑提交", + "AmendCommit": "修改提交", + "ResetCommitAuthor": "", + "SetCommitAuthor": "", + "AddCommitCoAuthor": "", + "RevertCommit": "还原提交", + "CreateFixupCommit": "创建修正提交", + "SquashAllAboveFixupCommits": "压缩以上所有的修正提交", + "MoveCommitUp": "上移提交", + "MoveCommitDown": "下移提交", + "CopyCommitMessageToClipboard": "将提交消息复制到剪贴板", + "CopyCommitSubjectToClipboard": "", + "CopyCommitDiffToClipboard": "", + "CopyCommitHashToClipboard": "", + "CopyCommitURLToClipboard": "", + "CopyCommitAuthorToClipboard": "", + "CopyCommitAttributeToClipboard": "", + "CopyPatchToClipboard": "", + "CustomCommand": "自定义命令", + "DiscardAllChangesInDirectory": "丢弃目录中的所有更改", + "DiscardUnstagedChangesInDirectory": "丢弃目录中未暂存的更改", + "DiscardAllChangesInFile": "丢弃文件中的所有更改", + "DiscardAllUnstagedChangesInFile": "丢弃文件中所有未暂存的更改", + "StageFile": "暂存文件", + "StageResolvedFiles": "", + "UnstageFile": "取消暂存文件", + "UnstageAllFiles": "取消暂存所有文件", + "StageAllFiles": "暂存所有文件", + "IgnoreExcludeFile": "忽略文件", + "IgnoreFileErr": "", + "ExcludeFile": "", + "ExcludeGitIgnoreErr": "", + "Commit": "提交 (Commit)", + "EditFile": "编辑文件", + "Push": "推送 (Push)", + "Pull": "拉取 (Pull)", + "OpenFile": "打开文件", + "OpenFileTooltip": "", + "StashAllChanges": "贮藏所有更改", + "StashAllChangesKeepIndex": "", + "StashStagedChanges": "贮藏暂存的更改", + "StashUnstagedChanges": "", + "StashIncludeUntrackedChanges": "", + "GitFlowFinish": "git flow 结果", + "GitFlowStart": "git flow 开始", + "CopyToClipboard": "复制到剪贴板", + "CopySelectedTextToClipboard": "将选中文本复制到剪贴板", + "RemovePatchFromCommit": "从提交中删除补丁", + "MovePatchToSelectedCommit": "将补丁移动到选定的提交", + "MovePatchIntoIndex": "将补丁移到索引", + "MovePatchIntoNewCommit": "将补丁移到新提交中", + "DeleteRemoteBranch": "删除远程分支", + "SetBranchUpstream": "设置分支上游", + "AddRemote": "添加远程", + "RemoveRemote": "移除远程", + "UpdateRemote": "更新远程", + "ApplyPatch": "应用补丁", + "Stash": "贮藏 (Stash)", + "RenameStash": "Rename stash", + "RemoveSubmodule": "删除子模块", + "ResetSubmodule": "重置子模块", + "AddSubmodule": "添加子模块", + "UpdateSubmoduleUrl": "更新子模块 URL", + "InitialiseSubmodule": "初始化子模块", + "BulkInitialiseSubmodules": "批量初始化子模块", + "BulkUpdateSubmodules": "批量更新子模块", + "BulkDeinitialiseSubmodules": "批量取消初始化子模块", + "UpdateSubmodule": "更新子模块", + "CreateLightweightTag": "创建轻量标签", + "CreateAnnotatedTag": "创建附注标签", + "DeleteLocalTag": "", + "DeleteRemoteTag": "", + "PushTag": "推送标签", + "NukeWorkingTree": "Nuke 工作树", + "DiscardUnstagedFileChanges": "放弃未暂存的文件更改", + "RemoveUntrackedFiles": "删除未跟踪的文件", + "RemoveStagedFiles": "", + "SoftReset": "软重置", + "MixedReset": "混合重置", + "HardReset": "硬重置", + "Undo": "撤销", + "Redo": "重做", + "CopyPullRequestURL": "复制拉取请求 URL", + "OpenDiffTool": "", + "OpenMergeTool": "打开合并工具", + "OpenCommitInBrowser": "在浏览器中打开提交", + "OpenPullRequest": "在浏览器中打开拉取请求", + "StartBisect": "开始二分查找 (Bisect)", + "ResetBisect": "重置二分查找", + "BisectSkip": "二分查找跳过", + "BisectMark": "二分查找标记", + "RemoveWorktree": "", + "AddWorktree": "" + }, + "Bisect": { + "MarkStart": "将 %s 标记为 %s (start bisect)", + "MarkSkipCurrent": "", + "MarkSkipSelected": "", + "ResetTitle": "重置 'git bisect'", + "ResetPrompt": "您确定要重置 'git bisect' 吗?", + "ResetOption": "重置二分查找", + "ChooseTerms": "", + "OldTermPrompt": "", + "NewTermPrompt": "", + "BisectMenuTitle": "二分查找", + "Mark": "将 %s 标记为 %s", + "SkipCurrent": "跳过 %s", + "SkipSelected": "", + "CompleteTitle": "二分查找完成", + "CompletePrompt": "二分查找完成!以下提交引入了此变更:\n\n%s\n\n您现在要重置 'git bisect' 吗?", + "CompletePromptIndeterminate": "二分查找完成!一些提交被跳过了,所以下列提交中的任何一个都可能引入了此变更:\n\n%s\n\n您现在要重置 'git bisect' 吗?", + "Bisecting": "" + }, + "Log": { + "EditRebase": "", + "MoveCommitUp": "", + "MoveCommitDown": "", + "CherryPickCommits": "", + "HandleUndo": "", + "HandleMidRebaseCommand": "", + "RemoveFile": "", + "CopyToClipboard": "", + "Remove": "", + "CreateFileWithContent": "", + "AppendingLineToFile": "", + "EditRebaseFromBaseCommit": "" + }, + "BreakingChangesTitle": "", + "BreakingChangesMessage": "", + "BreakingChangesByVersion": null +} diff --git a/pkg/i18n/translations/zh-TW.json b/pkg/i18n/translations/zh-TW.json new file mode 100644 index 00000000000..687ce1d3b7f --- /dev/null +++ b/pkg/i18n/translations/zh-TW.json @@ -0,0 +1,924 @@ +{ + "NotEnoughSpace": "無足夠空間顯示面板", + "DiffTitle": "差異", + "FilesTitle": "檔案", + "BranchesTitle": "分支", + "CommitsTitle": "提交", + "StashTitle": "收藏 (Stash)", + "SnakeTitle": "貪食蛇", + "EasterEgg": "彩蛋", + "UnstagedChanges": "未預存變更", + "StagedChanges": "已預存變更", + "MainTitle": "主要", + "StagingTitle": "主面板(預存)", + "MergingTitle": "主面板(合併)", + "MergeConfirmTitle": "合併", + "NormalTitle": "主面板(一般)", + "LogTitle": "版本記錄", + "CommitSummary": "提交摘要", + "CredentialsUsername": "使用者名稱", + "CredentialsPassword": "密碼", + "CredentialsPassphrase": "SSH 金鑰密語", + "CredentialsPIN": "SSH 金鑰 PIN 碼", + "PassUnameWrong": "密碼、密語或使用者名稱錯誤", + "Commit": "提交變更", + "CommitTooltip": "", + "AmendLastCommit": "修改上次提交", + "AmendLastCommitTitle": "修改上次提交", + "SureToAmend": "是否確定要修改上次提交?之後你可以從提交面板中再次更改此次提交的訊息。", + "NoCommitToAmend": "沒有可以修改的提交。", + "CommitChangesWithEditor": "使用 git 編輯器提交變更", + "FindBaseCommitForFixup": "", + "FindBaseCommitForFixupTooltip": "", + "NoBaseCommitsFound": "", + "MultipleBaseCommitsFoundStaged": "", + "MultipleBaseCommitsFoundUnstaged": "", + "BaseCommitIsAlreadyOnMainBranch": "", + "BaseCommitIsNotInCurrentView": "", + "HunksWithOnlyAddedLinesWarning": "", + "StatusTitle": "狀態", + "GlobalTitle": "全域快捷鍵", + "Menu": "選單", + "Execute": "執行", + "Stage": "切換預存", + "StageTooltip": "", + "ToggleStagedAll": "全部預存/取消預存", + "ToggleStagedAllTooltip": "", + "ToggleTreeView": "顯示檔案樹狀視圖", + "ToggleTreeViewTooltip": "", + "OpenDiffTool": "", + "OpenMergeTool": "開啟外部合併工具 (git mergetool)", + "OpenMergeToolTooltip": "", + "Refresh": "重新整理", + "RefreshTooltip": "", + "Push": "推送", + "Pull": "拉取", + "PushTooltip": "", + "PullTooltip": "", + "Scroll": "捲動", + "FileFilter": "篩選檔案 (預存/未預存)", + "CopyToClipboardMenu": "", + "CopyFileName": "", + "CopyFilePath": "", + "CopyFileDiffTooltip": "", + "CopySelectedDiff": "", + "CopyAllFilesDiff": "", + "NoContentToCopyError": "", + "FileNameCopiedToast": "", + "FilePathCopiedToast": "", + "FileDiffCopiedToast": "", + "AllFilesDiffCopiedToast": "", + "FilterStagedFiles": "僅顯示預存的檔案", + "FilterUnstagedFiles": "僅顯示未預存的檔案", + "ResetFilter": "重設篩選", + "MergeConflictsTitle": "合併衝突", + "Checkout": "檢出", + "CheckoutTooltip": "", + "CantCheckoutBranchWhilePulling": "", + "TagCheckoutTooltip": "", + "RemoteBranchCheckoutTooltip": "", + "CantPullOrPushSameBranchTwice": "", + "NoChangedFiles": "沒有變更的檔案", + "SoftReset": "軟重設", + "AlreadyCheckedOutBranch": "你已經檢出這個分支了", + "SureForceCheckout": "是否強制檢出?這將會使你失去本地的所有更改", + "ForceCheckoutBranch": "強制檢出分支", + "BranchName": "分支名稱", + "NewBranchNameBranchOff": "新的分支名稱 (根據 '{{.branchName}}' 分支創建)", + "CantDeleteCheckOutBranch": "無法刪除已檢出的分支!", + "DeleteBranchTitle": "", + "DeleteLocalBranch": "", + "DeleteRemoteBranchOption": "", + "DeleteRemoteBranchPrompt": "", + "ForceDeleteBranchTitle": "", + "ForceDeleteBranchMessage": "'{{.selectedBranchName}}' 分支尚未完全合併。是否刪除?", + "RebaseBranch": "將已檢出的分支變基至此分支", + "RebaseBranchTooltip": "", + "CantRebaseOntoSelf": "無法將分支變基至自己", + "CantMergeBranchIntoItself": "無法將一個分支合併至自己", + "ForceCheckout": "強制檢出", + "ForceCheckoutTooltip": "", + "CheckoutByName": "根據名稱檢出", + "CheckoutByNameTooltip": "", + "RemoteBranchCheckoutTitle": "", + "CheckoutTypeNewBranch": "", + "CheckoutTypeNewBranchTooltip": "", + "CheckoutTypeDetachedHead": "", + "CheckoutTypeDetachedHeadTooltip": "", + "NewBranch": "新分支", + "NewBranchFromStashTooltip": "", + "NoBranchesThisRepo": "這個版本庫中沒有分支", + "CommitWithoutMessageErr": "沒有提交訊息,無法提交", + "Close": "關閉", + "CloseCancel": "關閉/取消", + "Confirm": "確認", + "Quit": "結束", + "SquashTooltip": "", + "CannotSquashOrFixupFirstCommit": "沒有可以壓縮的提交", + "Fixup": "修復 (Fixup)", + "FixupTooltip": "", + "SureFixupThisCommit": "是否對此提交進行 '修復' ? 其將被合併於以下之提交中", + "SureSquashThisCommit": "是否要把這個提交壓縮到下面的提交中?", + "Squash": "壓縮 (Squash)", + "PickCommitTooltip": "挑選提交 (於變基過程中)", + "Pick": "", + "CantPickDisabledReason": "", + "Edit": "", + "RevertCommit": "還原提交", + "Revert": "", + "RevertCommitTooltip": "", + "Reword": "改寫提交", + "CommitRewordTooltip": "", + "DropCommit": "刪除提交", + "DropCommitTooltip": "", + "MoveDownCommit": "向下移動提交", + "MoveUpCommit": "向上移動提交", + "CannotMoveAnyFurther": "", + "EditCommit": "", + "EditCommitTooltip": "編輯提交", + "AmendCommitTooltip": "使用已預存的更改修正提交", + "Amend": "", + "ResetAuthor": "重設作者", + "ResetAuthorTooltip": "", + "SetAuthor": "設定作者", + "SetAuthorTooltip": "", + "AddCoAuthor": "", + "AmendCommitAttribute": "設定/重設提交作者", + "AmendCommitAttributeTooltip": "", + "SetAuthorPromptTitle": "設定作者(格式:「姓名 \u003c電子郵件\u003e」)", + "AddCoAuthorPromptTitle": "", + "AddCoAuthorTooltip": "", + "SureResetCommitAuthor": "為了符合已配置的使用者,此作者的提交欄位以及時間戳將被更新。是否繼續?", + "RewordCommitEditor": "使用編輯器改寫提交", + "NoCommitsThisBranch": "這個分支沒有提交", + "UpdateRefHere": "在這裡更新 '{{.ref}}' 分支", + "Error": "錯誤", + "Undo": "復原", + "UndoReflog": "復原", + "RedoReflog": "取消復原", + "UndoTooltip": "將使用 reflog 確任 git 指令以復原。這不包括工作區更改;只考慮提交。", + "RedoTooltip": "將使用 reflog 確任 git 指令以重作。這不包括工作區更改;只考慮提交。", + "UndoMergeResolveTooltip": "", + "DiscardAllTooltip": "捨棄 '{{.path}}' 預存/未預存更改。", + "DiscardUnstagedTooltip": "捨棄 '{{.path}}' 未預存更改。", + "Pop": "還原", + "StashPopTooltip": "", + "Drop": "捨棄", + "StashDropTooltip": "", + "Apply": "套用", + "StashApplyTooltip": "", + "NoStashEntries": "沒有收藏記錄", + "StashDrop": "放棄收藏記錄", + "SureDropStashEntry": "是否捨棄這條收藏記錄?", + "StashPop": "還原收藏記錄", + "SurePopStashEntry": "是否從收藏中還原這個記錄?", + "StashApply": "套用收藏記錄", + "SureApplyStashEntry": "是否套用這個收藏記錄?", + "NoTrackedStagedFilesStash": "你沒有被追蹤的、預存的檔案可進行收藏", + "NoFilesToStash": "沒有檔案可以進行收藏", + "StashChanges": "安置現有變更到收藏中", + "RenameStash": "重新命名收藏", + "RenameStashPrompt": "重新命名收藏:{{.stashName}}", + "OpenConfig": "開啟設定檔案", + "EditConfig": "編輯設定檔案", + "ForcePush": "強制推送", + "ForcePushPrompt": "你的分支與遠端分支分岔。按 'ESC' 取消,或按 'Enter' 強制推送。", + "ForcePushDisabled": "你的分支與遠端分支分岔,你已禁用強制推送", + "UpdatesRejected": "", + "UpdatesRejectedAndForcePushDisabled": "更新被拒絕,你已禁用強制推送", + "CheckForUpdate": "檢查更新", + "CheckingForUpdates": "正在檢查更新...", + "UpdateAvailableTitle": "有可用的更新!", + "UpdateAvailable": "下載並安裝版本 {{.newVersion}}?", + "UpdateInProgressWaitingStatus": "更新中", + "UpdateCompletedTitle": "更新已完成!", + "UpdateCompleted": "更新已成功安裝。為了使其生效,請重新啟動 lazygit。", + "FailedToRetrieveLatestVersionErr": "無法取得版本資訊", + "OnLatestVersionErr": "已更新至最新版本", + "MajorVersionErr": "新版本({{.newVersion}})不支援當前版本({{.currentVersion}})更改", + "CouldNotFindBinaryErr": "找不到 {{.url}} 執行檔", + "UpdateFailedErr": "更新失敗:{{.errMessage}}", + "ConfirmQuitDuringUpdateTitle": "正在更新中", + "ConfirmQuitDuringUpdate": "正在進行更新,是否結束?", + "MergeToolTitle": "合併工具", + "MergeToolPrompt": "是否開啟 'git mergetool'?", + "IntroPopupMessage": "\n感謝使用 lazygit!這裡有一些資源可供參考:\n\n 1) 📺lazygit 教學📺:\n https://youtu.be/CPLdltN7wgE\n\n 2) 📣釋出說明📣:\n https://github.com/jesseduffield/lazygit/releases\n\n 3) 💖如果你想要貢獻一份心力你可以💖:\n 改進 lazygit 原始碼:https://github.com/jesseduffield/lazygit\n 按右下角的捐款斗內我們\n 或單存添加 lazygit 到你的 star 清單內以增加曝光度都能大力的幫助我們!\n", + "DeprecatedEditConfigWarning": "\n### Deprecated config warning ###\n\n以下設定已被取代並將於未來版本中刪除:\n{{configs}}\n\n編輯器設定教學:\n\n https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#configuring-file-editing\n\n", + "GitconfigParseErr": "Gogit 無法解析你的 gitconfig 檔案,因為存在未引用的 '\\' 字符,刪除它們應該可以解決這個問題。", + "EditFile": "編輯檔案", + "EditFileTooltip": "", + "OpenFile": "開啟檔案", + "OpenFileTooltip": "", + "OpenInEditor": "", + "IgnoreFile": "添加到 .gitignore", + "ExcludeFile": "添加到 .git/info/exclude", + "RefreshFiles": "重新整理檔案", + "Merge": "合併到當前檢出的分支", + "MergeBranchTooltip": "", + "ConfirmQuit": "是否結束?", + "SwitchRepo": "切換到最近使用的版本庫", + "AllBranchesLogGraph": "顯示所有分支日誌", + "UnsupportedGitService": "不支援的 git 服務", + "CopyPullRequestURL": "複製拉取請求的 URL 到剪貼板", + "NoBranchOnRemote": "這個分支在遠端不存在。需要先將其推送至遠端。", + "Fetch": "擷取", + "FetchTooltip": "", + "NoAutomaticGitFetchTitle": "手動 git 擷取", + "NoAutomaticGitFetchBody": "lazygit 無法在私有庫使用 \"git 擷取\";在檔案面板中使用 'f' 手動執行 \"git 擷取\"", + "FileEnter": "選擇檔案中的單個程式碼塊/行,或展開/折疊目錄", + "FileEnterTooltip": "", + "FileStagingRequirements": "只能選擇跟踪檔案中的單個行", + "StageSelectionTooltip": "切換現有行的狀態 (已預存/未預存)", + "DiscardSelection": "刪除變更 (git reset)", + "DiscardSelectionTooltip": "", + "ToggleSelectHunk": "切換選擇程式碼塊", + "ToggleSelectHunkTooltip": "", + "ToggleSelectionForPatch": "向 (或從) 補丁中添加/刪除行", + "ToggleSelectionForPatchTooltip": "", + "EditHunk": "編輯程式碼塊", + "EditHunkTooltip": "", + "ToggleStagingView": "切換至另一個面板 (已預存/未預存更改)", + "ToggleStagingViewTooltip": "", + "ReturnToFilesPanel": "返回檔案面板", + "FastForward": "從上游快進此分支", + "FastForwardTooltip": "", + "FastForwarding": "的擷取和快進中", + "FoundConflictsTitle": "自動合併失敗", + "ViewConflictsMenuItem": "", + "AbortMenuItem": "", + "PickHunk": "挑選程式碼片段", + "PickAllHunks": "挑選所有程式碼片段", + "ViewMergeRebaseOptions": "查看合併/變基選項", + "ViewMergeRebaseOptionsTooltip": "", + "ViewMergeOptions": "", + "ViewRebaseOptions": "", + "NotMergingOrRebasing": "你當前既不在變基也不在合併中", + "AlreadyRebasing": "無法在變基期間執行此操作", + "RecentRepos": "最近的版本庫", + "MergeOptionsTitle": "合併選項", + "RebaseOptionsTitle": "變基選項", + "CommitSummaryTitle": "提交摘要", + "CommitDescriptionTitle": "提交描述", + "CommitDescriptionSubTitle": "按 tab 鍵聚焦", + "LocalBranchesTitle": "本地分支", + "SearchTitle": "搜尋", + "TagsTitle": "標籤", + "MenuTitle": "功能表", + "CommitMenuTitle": "", + "RemotesTitle": "遠端", + "RemoteBranchesTitle": "遠端分支", + "PatchBuildingTitle": "主面板 (補丁生成)", + "InformationTitle": "資訊", + "SecondaryTitle": "次要", + "ReflogCommitsTitle": "日誌", + "ConflictsResolved": "所有合併衝突都已解決。是否繼續?", + "Continue": "確認", + "RebasingTitle": "將 '{{.checkedOutBranch}}'", + "RebasingFromBaseCommitTitle": "", + "SimpleRebase": "簡單變基 變基至 '{{.ref}}'", + "InteractiveRebase": "互動變基 變基至 '{{.ref}}'", + "RebaseOntoBaseBranch": "", + "InteractiveRebaseTooltip": "開始一個互動變基,以中斷開始,這樣你可以在繼續之前更新TODO提交", + "RebaseOntoBaseBranchTooltip": "", + "MustSelectTodoCommits": "", + "ConfirmMerge": "是否將 '{{.selectedBranch}}' 合併至 '{{.checkedOutBranch}}' ?", + "FwdNoUpstream": "無法快進無上游分支", + "FwdNoLocalUpstream": "無法快進尚未在本地註冊的遠端分支", + "FwdCommitsToPush": "無法快進帶有尚未推送的提交的分支", + "PullRequestNoUpstream": "", + "ErrorOccurred": "發生錯誤!請在此詢問錯誤:", + "NoRoom": "無足夠的空間", + "YouAreHere": "你在這", + "YouDied": "你死了!", + "RewordNotSupported": "在互動變基期間改寫提交目前不支援", + "ChangingThisActionIsNotAllowed": "不允許更改此類變基待辦事項", + "CherryPickCopy": "複製提交 (揀選)", + "CherryPickCopyTooltip": "", + "CherryPickCopyRange": "", + "CherryPickCopyRangeTooltip": "", + "PasteCommits": "貼上提交 (揀選)", + "SureCherryPick": "是否將複製的提交揀選到此分支?", + "CherryPick": "揀選 (Cherry-pick)", + "CannotCherryPickNonCommit": "", + "CannotCherryPickMergeCommit": "", + "Donate": "贊助", + "AskQuestion": "諮詢", + "PrevLine": "選擇上一行", + "NextLine": "選擇下一行", + "PrevHunk": "選擇上一段", + "NextHunk": "選擇下一段", + "PrevConflict": "選擇上一個衝突", + "NextConflict": "選擇下一個衝突", + "SelectPrevHunk": "選擇上一段", + "SelectNextHunk": "選擇下一段", + "ScrollDown": "向下捲動", + "ScrollUp": "向上捲動", + "ScrollUpMainWindow": "向上捲動主面板", + "ScrollDownMainWindow": "向下捲動主面板", + "AmendCommitTitle": "修改提交", + "AmendCommitPrompt": "是否使用預存檔案修改提交?", + "DropCommitTitle": "刪除提交", + "DropCommitPrompt": "是否刪除此提交?", + "DropUpdateRefPrompt": "", + "PullingStatus": "拉取", + "PushingStatus": "推送", + "FetchingStatus": "擷取", + "SquashingStatus": "壓縮中", + "FixingStatus": "修復中", + "DeletingStatus": "刪除中", + "DroppingStatus": "", + "MovingStatus": "移動中", + "RebasingStatus": "變基中", + "MergingStatus": "合併中", + "LowercaseRebasingStatus": "變基", + "LowercaseMergingStatus": "合併", + "AmendingStatus": "修改中", + "CherryPickingStatus": "揀選中", + "UndoingStatus": "復原中", + "RedoingStatus": "重做中", + "CheckingOutStatus": "檢出中", + "CommittingStatus": "提交中", + "RevertingStatus": "還原中", + "CreatingFixupCommitStatus": "", + "CommitFiles": "提交檔案", + "SubCommitsDynamicTitle": "提交 (共 %s項)", + "CommitFilesDynamicTitle": "差異檔案 (共 %s項)", + "RemoteBranchesDynamicTitle": "遠端分支 (共 %s項)", + "ViewItemFiles": "檢視所選項目的檔案", + "ViewItemFilesTooltip": "", + "CommitFilesTitle": "提交檔案", + "CheckoutCommitFileTooltip": "檢出檔案", + "CanOnlyDiscardFromLocalCommits": "", + "Remove": "", + "DiscardOldFileChangeTooltip": "", + "DiscardFileChangesTitle": "捨棄檔案更改", + "DiscardFileChangesPrompt": "是否捨棄此提交?如果這個檔案是在此提交中創建的,它將被刪除", + "DisabledForGPG": "此功能不適用於 GPG 加密", + "CreateRepo": "未在 git 版本庫中。是否建立新版本庫? (y/n): ", + "BareRepo": "你嘗試在裸版本庫中開啟 Lazygit,但 Lazygit 尚未支援裸版本庫。是否開啟最新版本庫? (y/n) ", + "InitialBranch": "分支名稱?(留空使用 git 的預設值):", + "NoRecentRepositories": "必須在 git 版本庫中開啟 lazygit。沒有有效的最近版本庫。退出。", + "IncorrectNotARepository": "無效 `notARepository` 輸入。輸入應為「prompt」、「create」、「skip」、或「quit」。", + "AutoStashTitle": "是否自動收藏?", + "AutoStashPrompt": "必須收藏並拾起變更才得以繼續操作。是否自動執行?(Enter/Esc)", + "StashPrefix": "自動收藏 ", + "Discard": "", + "DiscardChangesTitle": "", + "DiscardFileChangesTooltip": "", + "Cancel": "取消", + "DiscardAllChanges": "刪除所有變更", + "DiscardUnstagedChanges": "刪除未預存變更", + "DiscardAllChangesToAllFiles": "刪除工作目錄", + "DiscardAnyUnstagedChanges": "刪除未預存變更", + "DiscardUntrackedFiles": "刪除未追蹤檔案", + "DiscardStagedChanges": "刪除已預存變更", + "HardReset": "強制重設", + "BranchDeleteTooltip": "", + "TagDeleteTooltip": "", + "Delete": "", + "Reset": "", + "ResetTooltip": "", + "ViewResetOptions": "檢視重設選項", + "FileResetOptionsTooltip": "", + "CreateFixupCommit": "建立修復提交", + "CreateFixupCommitTooltip": "為此提交建立修復提交", + "CreateAmendCommit": "", + "FixupMenu_Fixup": "", + "FixupMenu_FixupTooltip": "", + "FixupMenu_AmendWithChanges": "", + "FixupMenu_AmendWithChangesTooltip": "", + "FixupMenu_AmendWithoutChanges": "", + "FixupMenu_AmendWithoutChangesTooltip": "", + "SquashAboveCommitsTooltip": "是否壓縮上方 {{.commit}} 所有「fixup」提交?", + "SquashCommitsAboveSelectedTooltip": "", + "SquashCommitsInCurrentBranchTooltip": "", + "SquashAboveCommits": "壓縮上方所有「fixup」提交(自動壓縮)", + "SquashCommitsInCurrentBranch": "", + "SquashCommitsAboveSelectedCommit": "", + "CannotSquashCommitsInCurrentBranch": "", + "ExecuteCustomCommand": "執行自訂命令", + "ExecuteCustomCommandTooltip": "", + "CustomCommand": "自訂命令:", + "CommitChangesWithoutHook": "沒有預提交 hook 就提交更改", + "SkipHookPrefixNotConfigured": "你尚未配置略過 hook 的提交訊息前綴,請在設定中設置 `git.skipHookPrefix = 'WIP'`", + "ResetTo": "重設至", + "ResetSoftTooltip": "", + "ResetMixedTooltip": "", + "ResetHardTooltip": "", + "PressEnterToReturn": "按 Enter 返回到 lazygit", + "ViewStashOptions": "檢視收藏選項", + "ViewStashOptionsTooltip": "", + "Stash": "", + "StashTooltip": "", + "StashAllChanges": "收藏所有變更", + "StashStagedChanges": "收藏已預存變更", + "StashAllChangesKeepIndex": "收藏所有變更並保留預存區", + "StashUnstagedChanges": "收藏未預存變更", + "StashIncludeUntrackedChanges": "收藏所有變更,包括未追蹤檔案", + "StashOptions": "收藏選項", + "NotARepository": "錯誤:必須在 git 版本庫中執行", + "WorkingDirectoryDoesNotExist": "", + "Jump": "跳轉至面板", + "ScrollLeftRight": "左右捲動", + "ScrollLeft": "向左捲動", + "ScrollRight": "向右捲動", + "DiscardPatch": "捨棄補丁", + "DiscardPatchConfirm": "你只能從單一提交或收藏項目建立一個補丁。是否捨棄當前補丁?", + "DiscardPatchSameCommitConfirm": "", + "CantPatchWhileRebasingError": "在合併或變基狀態下,你不能建立或運行補丁命令", + "ToggleAddToPatch": "切換檔案是否包含在補丁中", + "ToggleAddToPatchTooltip": "", + "ToggleAllInPatch": "切換所有檔案是否包含在補丁中", + "ToggleAllInPatchTooltip": "", + "UpdatingPatch": "正在更新補丁", + "ViewPatchOptions": "檢視自訂補丁選項", + "PatchOptionsTitle": "補丁選項", + "NoPatchError": "尚未建立補丁。要開始建立補丁,請在提交檔案上使用空格或輸入以添加特定行", + "EmptyPatchError": "", + "EnterCommitFile": "輸入檔案以將選定的行添加至補丁(或切換目錄折疊)", + "EnterCommitFileTooltip": "", + "ExitCustomPatchBuilder": "退出自訂補丁建立器", + "EnterUpstream": "輸入上游為 '\u003cremote\u003e \u003cbranchname\u003e'", + "InvalidUpstream": "無效的上游。必須符合 '\u003cremote\u003e \u003cbranchname\u003e' 的格式", + "ReturnToRemotesList": "返回遠端列表", + "NewRemote": "新增遠端", + "NewRemoteName": "新遠端名稱:", + "NewRemoteUrl": "新遠端 URL:", + "ViewBranches": "", + "EditRemoteName": "輸入更新 {{.remoteName}} 遠端名稱:", + "EditRemoteUrl": "輸入更新 {{.remoteName}} 遠端 URL:", + "RemoveRemote": "移除遠端", + "RemoveRemoteTooltip": "", + "RemoveRemotePrompt": "你確定要移除遠端?", + "DeleteRemoteBranch": "刪除遠端分支", + "DeleteRemoteBranchMessage": "你確定要刪除遠端分支?", + "DeleteRemoteBranchTooltip": "", + "SetAsUpstream": "", + "SetAsUpstreamTooltip": "將此分支設為當前分支之上游", + "SetUpstream": "設定所選分支之上游", + "UnsetUpstream": "取消設定選定分支之上游", + "ViewDivergenceFromUpstream": "", + "ViewDivergenceFromBaseBranch": "", + "CouldNotDetermineBaseBranch": "", + "DivergenceSectionHeaderLocal": "", + "DivergenceSectionHeaderRemote": "", + "ViewUpstreamResetOptions": "", + "ViewUpstreamResetOptionsTooltip": "", + "ViewUpstreamRebaseOptions": "", + "ViewUpstreamRebaseOptionsTooltip": "", + "UpstreamGenericName": "", + "SetUpstreamTitle": "設定上游分支", + "SetUpstreamMessage": "你確定要將 '{{. selected}}' 設為 '{{.checkedOut}}' 的上游分支?", + "EditRemoteTooltip": "編輯遠端", + "TagCommit": "打標籤到提交", + "TagCommitTooltip": "", + "TagMenuTitle": "建立標籤", + "TagNameTitle": "標籤名稱", + "TagMessageTitle": "標籤訊息", + "LightweightTag": "輕量標籤", + "AnnotatedTag": "附註標籤", + "DeleteTagTitle": "", + "DeleteLocalTag": "", + "DeleteRemoteTag": "", + "SelectRemoteTagUpstream": "", + "DeleteRemoteTagPrompt": "", + "RemoteTagDeletedMessage": "", + "PushTagTitle": "推送標籤 '{{.tagName}}' 至遠端:", + "PushTag": "推送標籤", + "PushTagTooltip": "", + "NewTag": "建立標籤", + "NewTagTooltip": "", + "CreatingTag": "", + "ForceTag": "", + "ForceTagPrompt": "", + "FetchRemoteTooltip": "擷取遠端", + "FetchingRemoteStatus": "正在擷取遠端", + "CheckoutCommit": "檢出提交", + "CheckoutCommitTooltip": "", + "SureCheckoutThisCommit": "你確定要檢出這個提交?", + "GitFlowOptions": "顯示 git-flow 選項", + "NotAGitFlowBranch": "這似乎不是一個 git flow 分支", + "NewBranchNamePrompt": "為分支輸入新名稱", + "IgnoreTracked": "忽略已追蹤檔案", + "ExcludeTracked": "排除已追蹤檔案", + "IgnoreTrackedPrompt": "你確定要忽略一個已追蹤的檔案?", + "ExcludeTrackedPrompt": "", + "ViewResetToUpstreamOptions": "檢視上游重設選項", + "NextScreenMode": "下一個螢幕模式(常規/半螢幕/全螢幕)", + "PrevScreenMode": "上一個螢幕模式", + "StartSearch": "搜尋", + "StartFilter": "搜尋", + "Panel": "面板", + "Keybindings": "鍵盤快捷鍵", + "KeybindingsLegend": "說明:`\u003cc-b\u003e` 表示 Ctrl+B、`\u003ca-b\u003e` 表示 Alt+B,`B`表示 Shift+B", + "KeybindingsMenuSectionLocal": "", + "KeybindingsMenuSectionGlobal": "", + "KeybindingsMenuSectionNavigation": "", + "RenameBranch": "重新命名分支", + "Upstream": "", + "UpstreamTooltip": "", + "BranchUpstreamOptionsTitle": "上游分支設定", + "ViewBranchUpstreamOptions": "檢視上游設定", + "ViewBranchUpstreamOptionsTooltip": "檢視有關上游分支的設定(例如重設至上游)", + "UpstreamNotSetError": "目標分支沒有上游分支(或其上游分支未儲存於本地)", + "NewGitFlowBranchPrompt": "{{.branchType}} 名稱:", + "RenameBranchWarning": "此分支正在追蹤遠端分支。此操作僅會重新命名本地分支名稱,而不是遠端分支的名稱。是否繼續?", + "OpenKeybindingsMenu": "開啟選單", + "ResetCherryPick": "重設選定的揀選 (複製) 提交", + "NextTab": "下一個索引標籤", + "PrevTab": "上一個索引標籤", + "CantUndoWhileRebasing": "在變基時無法復原", + "CantRedoWhileRebasing": "在變基時無法取消復原", + "MustStashWarning": "將補丁提取到索引中需要收藏並取消收藏你的變更。如果出現問題,你可以從收藏中訪問你的檔案。是否繼續?", + "MustStashTitle": "必須收藏", + "ConfirmationTitle": "確認面板", + "PrevPage": "上一頁", + "NextPage": "下一頁", + "GotoTop": "捲動到頂部", + "GotoBottom": "捲動到底部", + "FilteringBy": "篩選方式", + "ResetInParentheses": "(已重設)", + "OpenFilteringMenu": "檢視篩選路徑選項", + "OpenFilteringMenuTooltip": "", + "FilterBy": "篩選路徑", + "ExitFilterMode": "停止按路徑篩選", + "ExitFilterModeAuthor": "", + "FilterPathOption": "輸入要依路徑篩選的路徑", + "FilterAuthorOption": "", + "EnterFileName": "輸入路徑:", + "EnterAuthor": "", + "FilteringMenuTitle": "篩選", + "WillCancelExistingFilterTooltip": "", + "MustExitFilterModeTitle": "命令不可用", + "MustExitFilterModePrompt": "在按路徑篩選的模式下,該命令不可用。是否退出按路徑篩選的模式?", + "Diff": "差異", + "EnterRefToDiff": "輸入欲比較之 Ref", + "EnterRefName": "輸入 Ref:", + "ExitDiffMode": "退出差異模式", + "DiffingMenuTitle": "差異比較", + "SwapDiff": "反轉差異方向", + "ViewDiffingOptions": "開啟差異比較選單", + "ViewDiffingOptionsTooltip": "", + "OpenCommandLogMenu": "開啟命令記錄選單", + "OpenCommandLogMenuTooltip": "", + "ShowingGitDiff": "顯示輸出:", + "CommitDiff": "提交差異", + "CopyCommitHashToClipboard": "複製提交 hash 到剪貼簿", + "CommitHash": "提交 hash", + "CommitURL": "提交 URL", + "CopyCommitMessageToClipboard": "複製提交訊息到剪貼簿", + "CommitMessage": "提交訊息", + "CommitSubject": "", + "CommitAuthor": "提交者", + "CopyCommitAttributeToClipboard": "複製提交屬性", + "CopyCommitAttributeToClipboardTooltip": "", + "CopyBranchNameToClipboard": "複製分支名稱到剪貼簿", + "CopyPathToClipboard": "複製檔案名稱到剪貼簿", + "CommitPrefixPatternError": "commitPrefix 模式錯誤", + "CopySelectedTextToClipboard": "複製所選文本至剪貼簿", + "NoFilesStagedTitle": "沒有檔案預存", + "NoFilesStagedPrompt": "你沒有預存任何檔案。提交所有檔案?", + "BranchNotFoundTitle": "找不到分支", + "BranchNotFoundPrompt": "找不到分支。新分支名稱", + "BranchUnknown": "分支未知", + "DiscardChangeTitle": "取消預存行", + "DiscardChangePrompt": "是否刪除所選行(git reset)?此操作不可逆。\n將「gui.skipDiscardChangeWarning」設為 true 可禁用此警告。", + "CreateNewBranchFromCommit": "從提交建立新分支", + "BuildingPatch": "正在建立補丁", + "ViewCommits": "檢視提交", + "MinGitVersionError": "請升級 git 至新於 2.20(即從 2018 年起)之版本。或於 https://github.com/jesseduffield/lazygit/issues 上回報問題使 lazygit 能支援更舊的 git 版本。", + "RunningCustomCommandStatus": "正在執行自訂命令", + "SubmoduleStashAndReset": "收藏未提交的子模組變更並更新", + "AndResetSubmodules": "以及重設子模組", + "EnterSubmoduleTooltip": "進入子模組", + "Enter": "", + "CopySubmoduleNameToClipboard": "複製子模組名稱到剪貼簿", + "RemoveSubmodule": "移除子模組", + "RemoveSubmoduleTooltip": "", + "RemoveSubmodulePrompt": "是否確定要刪除子模組 '%s' 以及它相應的目錄?此操作是不可逆的。", + "ResettingSubmoduleStatus": "重設子模型中", + "NewSubmoduleName": "子模組名稱:", + "NewSubmoduleUrl": "新子模組 URL:", + "NewSubmodulePath": "新子模組路徑:", + "NewSubmodule": "新增子模組", + "AddingSubmoduleStatus": "正在新增子模組", + "UpdateSubmoduleUrl": "更新子模組 '%s' 的 URL", + "UpdatingSubmoduleUrlStatus": "正在更新 URL", + "EditSubmoduleUrl": "更新子模組 URL", + "InitializingSubmoduleStatus": "正在初始化子模組", + "InitSubmoduleTooltip": "初始化子模組", + "Update": "", + "Initialize": "", + "SubmoduleUpdateTooltip": "更新子模組", + "UpdatingSubmoduleStatus": "正在更新子模組", + "BulkInitSubmodules": "批量初始化子模組", + "BulkUpdateSubmodules": "批量更新子模組", + "BulkDeinitSubmodules": "批量解除子模組初始化", + "ViewBulkSubmoduleOptions": "查看批量子模組選項", + "BulkSubmoduleOptions": "批量子模組選項", + "RunningCommand": "正在執行命令", + "SubCommitsTitle": "子提交", + "SubmodulesTitle": "子模組", + "NavigationTitle": "移動", + "SuggestionsCheatsheetTitle": "提示", + "SuggestionsTitle": "提示(按 %s 進入焦點)", + "SuggestionsSubtitle": "", + "ExtrasTitle": "命令記錄", + "PushingTagStatus": "正在推送標籤", + "PullRequestURLCopiedToClipboard": "複製拉取請求 URL 至剪貼簿", + "CommitDiffCopiedToClipboard": "已複製提交差異至剪貼簿", + "CommitURLCopiedToClipboard": "已複製提交 URL 至剪貼簿", + "CommitMessageCopiedToClipboard": "已複製提交訊息至剪貼簿", + "CommitSubjectCopiedToClipboard": "", + "CommitAuthorCopiedToClipboard": "已複製提交者至剪貼簿", + "PatchCopiedToClipboard": "已複製補丁至剪貼簿", + "CopiedToClipboard": "已複製至剪貼簿", + "ErrCannotEditDirectory": "無法編輯目錄:你只能編輯單獨的檔案", + "ErrStageDirWithInlineMergeConflicts": "不能預存/取消預存包含具備內嵌合併衝突的檔案的目錄。請先解決合併衝突", + "ErrRepositoryMovedOrDeleted": "找不到版本庫。可能已被移動或刪除", + "ErrWorktreeMovedOrRemoved": "", + "CommandLog": "命令記錄", + "ToggleShowCommandLog": "切換顯示/隱藏命令記錄", + "FocusCommandLog": "聚焦命令記錄", + "CommandLogHeader": " '%s' 隱藏/聚焦此面板\n", + "RandomTip": "隨機提示", + "SelectParentCommitForMerge": "選擇合併的父提交", + "ToggleWhitespaceInDiffView": "切換是否在差異檢視中顯示空格變更", + "ToggleWhitespaceInDiffViewTooltip": "", + "IgnoreWhitespaceDiffViewSubTitle": "(忽略空格)", + "IgnoreWhitespaceNotSupportedHere": "在此檢視中不支援忽略空格", + "IncreaseContextInDiffView": "增加差異檢視中顯示變更周圍上下文的大小", + "IncreaseContextInDiffViewTooltip": "", + "DecreaseContextInDiffView": "減小差異檢視中顯示變更周圍上下文的大小", + "DecreaseContextInDiffViewTooltip": "", + "DiffContextSizeChanged": "", + "CreatePullRequestOptions": "建立拉取請求選項", + "DefaultBranch": "預設分支", + "SelectBranch": "選擇分支", + "CreatePullRequest": "建立拉取請求", + "SelectConfigFile": "選擇設定檔", + "NoConfigFileFoundErr": "找不到設定檔", + "LoadingFileSuggestions": "正在加載檔案建議", + "LoadingCommits": "正在加載提交", + "MustSpecifyOriginError": "如果指定分支,必須指定遠端", + "GitOutput": "git 輸出:", + "GitCommandFailed": "git 命令失敗。請查看命令記錄以獲取詳細資訊(按 %s 開啟)", + "AbortTitle": "中止%s", + "AbortPrompt": "是否確定要中止當前的%s?", + "OpenLogMenu": "開啟記錄選單", + "OpenLogMenuTooltip": "", + "LogMenuTitle": "提交記錄選項", + "ToggleShowGitGraphAll": "切換顯示整個 git 圖表(將 `--all` 標誌傳遞給 `git log`)", + "ShowGitGraph": "顯示 git 圖表", + "SortOrder": "", + "SortAlphabetical": "", + "SortByDate": "", + "SortByRecency": "", + "SortBasedOnReflog": "", + "SortCommits": "提交排序順序", + "CantChangeContextSizeError": "在製作補丁期間無法更改上下文大小,因為當發布功能時我們太懒了以至於沒有支援它。如果你真的需要它,請告訴我們!", + "OpenCommitInBrowser": "在瀏覽器中開啟提交", + "ViewBisectOptions": "查看二分選項", + "ConfirmRevertCommit": "是否還原 {{.selectedCommit}} ?", + "RewordInEditorTitle": "在編輯器中改寫", + "RewordInEditorPrompt": "是否在編輯器中改寫此提交?", + "CheckoutPrompt": "是否檢出 '%s' ?", + "HardResetAutostashPrompt": "是否強制重設為 '%s' ?如果需要會進行自動存儲。", + "UpstreamGone": "(上游已經不存在)", + "NukeDescription": "如果你想讓所有工作樹上的變更消失,這就是要做的方式。如果有未提交的子模組變更,它將把這些變更藏在子模組中。", + "DiscardStagedChangesDescription": "這將創建一個新的存儲條目,其中只包含預存檔案,然後如果存儲條目不需要,將其刪除,因此工作樹僅保留未預存的變更。", + "EmptyOutput": "\u003c空輸出\u003e", + "Patch": "補丁", + "CustomPatch": "自定義補丁", + "CommitsCopied": "提交已複製", + "CommitCopied": "提交已複製", + "ResetPatch": "重設補丁", + "ResetPatchTooltip": "", + "ApplyPatch": "套用補丁", + "ApplyPatchTooltip": "", + "ApplyPatchInReverse": "反向套用補丁", + "ApplyPatchInReverseTooltip": "", + "RemovePatchFromOriginalCommit": "從原始提交中刪除補丁(%s)", + "RemovePatchFromOriginalCommitTooltip": "", + "MovePatchOutIntoIndex": "將補丁移到預存區", + "MovePatchOutIntoIndexTooltip": "", + "MovePatchIntoNewCommit": "將補丁移到新的提交", + "MovePatchIntoNewCommitTooltip": "", + "MovePatchToSelectedCommit": "將補丁移到選定的提交(%s)", + "MovePatchToSelectedCommitTooltip": "", + "CopyPatchToClipboard": "將補丁複製到剪貼簿", + "NoMatchesFor": "沒有找到符合 '%s' %s 的結果", + "MatchesFor": "符合 '%s' 的結果(%d/%d)%s", + "SearchKeybindings": "%s:下一個結果,%s:上一個結果,%s:退出搜尋模式", + "SearchPrefix": "搜尋:", + "FilterPrefix": "篩選:", + "ExitSearchMode": "%s:退出搜尋模式", + "ExitTextFilterMode": "", + "Switch": "", + "SwitchToWorktree": "切換至工作目錄面板", + "SwitchToWorktreeTooltip": "", + "AlreadyCheckedOutByWorktree": "此分支已被檢出到 {{.worktreeName}} 是否切換到此工作目錄?", + "BranchCheckedOutByWorktree": "分支 {{.branchName}} 已被 {{.worktreeName}} 檢出", + "DetachWorktreeTooltip": "此將在工作目錄中執行 `git checkout --detach` 以解開分支與它的連結,但工作目錄本身將不被更動", + "Switching": "切換中", + "RemoveWorktree": "刪除工作目錄", + "RemoveWorktreeTitle": "刪除工作目錄", + "DetachWorktree": "解開工作目錄連結", + "DetachingWorktree": "正在解除工作目錄連結", + "WorktreesTitle": "工作目錄", + "WorktreeTitle": "工作目錄", + "RemoveWorktreePrompt": "是否刪除 {{.worktreeName}} 工作目錄?", + "ForceRemoveWorktreePrompt": "'{{.worktreeName}}' 包括已更動或未追蹤的檔案。是否繼續刪除工作目錄?", + "RemovingWorktree": "正在刪除工作目錄", + "AddingWorktree": "正在建立工作目錄", + "CantDeleteCurrentWorktree": "無法刪除當前工作目錄!", + "AlreadyInWorktree": "已經在目標工作目錄內", + "CantDeleteMainWorktree": "無法刪除主要工作目錄!", + "NoWorktreesThisRepo": "無工作目錄", + "MissingWorktree": "(失蹤)", + "MainWorktree": "(主要)", + "NewWorktree": "", + "NewWorktreePath": "工作目錄路徑", + "NewWorktreeBase": "工作目錄來源", + "RemoveWorktreeTooltip": "", + "BranchNameCannotBeBlank": "分支名稱不能為空", + "NewBranchName": "分支名稱", + "NewBranchNameLeaveBlank": "分支名稱(留空將檢出 {{.default}})", + "ViewWorktreeOptions": "檢視工作目錄選項", + "CreateWorktreeFrom": "從 {{.ref}} 建立工作目錄", + "CreateWorktreeFromDetached": "從 {{.ref}} 建立工作目錄(未連結)", + "LcWorktree": "工作目錄", + "ChangingDirectoryTo": "切換至 {{.path}}", + "Name": "名稱", + "Branch": "分支", + "Path": "路徑", + "MarkedBaseCommitStatus": "為了變基已標注基準提交", + "MarkAsBaseCommit": "為了變基已標注提交為基準提交", + "MarkAsBaseCommitTooltip": "請為了下一次變基選擇一項基準提交;此將執行 `git rebase --onto`。", + "MarkedCommitMarker": "↑↑↑ 將由此變基 ↑↑↑", + "PleaseGoToURL": "請開啟 URL:{{.url}}", + "NoCopiedCommits": "未複製提交", + "DisabledMenuItemPrefix": "已停用:", + "QuickStartInteractiveRebase": "", + "QuickStartInteractiveRebaseTooltip": "", + "CannotQuickStartInteractiveRebase": "", + "ToggleRangeSelect": "切換拖曳選擇", + "RangeSelectUp": "", + "RangeSelectDown": "", + "RangeSelectNotSupported": "", + "NoItemSelected": "", + "SelectedItemIsNotABranch": "", + "SelectedItemDoesNotHaveFiles": "", + "RangeSelectNotSupportedForSubmodules": "", + "OldCherryPickKeyWarning": "", + "CommandDoesNotSupportOpeningInEditor": "", + "Actions": { + "CheckoutCommit": "檢出提交", + "CheckoutTag": "檢出標籤", + "CheckoutBranch": "檢出分支", + "ForceCheckoutBranch": "強制檢出分支", + "DeleteLocalBranch": "", + "DeleteBranch": "刪除分支", + "Merge": "合併", + "RebaseBranch": "變基分支", + "RenameBranch": "重新命名分支", + "CreateBranch": "建立分支", + "FastForwardBranch": "快進分支", + "CherryPick": "(Cherry-pick)複製提交", + "CheckoutFile": "檢出檔案", + "DiscardOldFileChange": "放棄舊檔案更改", + "SquashCommitDown": "下列次方執行 Squash", + "FixupCommit": "修復提交", + "RewordCommit": "改寫提交", + "DropCommit": "捨棄提交", + "EditCommit": "編輯提交", + "AmendCommit": "修改提交", + "ResetCommitAuthor": "重設提交作者", + "SetCommitAuthor": "設置提交作者", + "AddCommitCoAuthor": "", + "RevertCommit": "還原提交", + "CreateFixupCommit": "建立修改提交", + "SquashAllAboveFixupCommits": "Squash 所有上面的修改提交", + "MoveCommitUp": "上移提交", + "MoveCommitDown": "下移提交", + "CopyCommitMessageToClipboard": "將提交訊息複製到剪貼簿", + "CopyCommitSubjectToClipboard": "", + "CopyCommitDiffToClipboard": "將提交差異複製到剪貼簿", + "CopyCommitHashToClipboard": "將提交 hash 複製到剪貼簿", + "CopyCommitURLToClipboard": "將提交 URL 複製到剪貼簿", + "CopyCommitAuthorToClipboard": "將提交作者複製到剪貼簿", + "CopyCommitAttributeToClipboard": "複製到剪貼簿", + "CopyPatchToClipboard": "將補丁複製到剪貼簿", + "CustomCommand": "自定義命令", + "DiscardAllChangesInDirectory": "捨棄目錄中的所有更改", + "DiscardUnstagedChangesInDirectory": "捨棄目錄中未預存的更改", + "DiscardAllChangesInFile": "捨棄檔案中的所有更改", + "DiscardAllUnstagedChangesInFile": "捨棄檔案中未預存的所有更改", + "StageFile": "預存檔案", + "StageResolvedFiles": "預存已解決合併衝突的檔案", + "UnstageFile": "取消預存檔案", + "UnstageAllFiles": "取消預存所有檔案", + "StageAllFiles": "預存所有檔案", + "IgnoreExcludeFile": "忽略或排除檔案", + "IgnoreFileErr": "無法忽略 .gitignore 檔案", + "ExcludeFile": "排除檔案", + "ExcludeGitIgnoreErr": "無法排除 .gitignore 檔案", + "Commit": "提交", + "EditFile": "編輯檔案", + "Push": "推送", + "Pull": "拉取", + "OpenFile": "開啟檔案", + "OpenFileTooltip": "", + "StashAllChanges": "收藏所有更改", + "StashAllChangesKeepIndex": "收藏所有更改並保留索引", + "StashStagedChanges": "收藏已預存的更改", + "StashUnstagedChanges": "收藏未預存的更改", + "StashIncludeUntrackedChanges": "收藏所有更改,包括未追蹤的檔案", + "GitFlowFinish": "`git flow` 完成", + "GitFlowStart": "`git flow` 開始", + "CopyToClipboard": "複製到剪貼簿", + "CopySelectedTextToClipboard": "複製所選文本到剪貼簿", + "RemovePatchFromCommit": "從提交中刪除補丁", + "MovePatchToSelectedCommit": "將補丁移動到所選提交", + "MovePatchIntoIndex": "將補丁移動到索引中", + "MovePatchIntoNewCommit": "將補丁移動到新提交中", + "DeleteRemoteBranch": "刪除遠端分支", + "SetBranchUpstream": "設置分支上游", + "AddRemote": "添加遠端", + "RemoveRemote": "移除遠端", + "UpdateRemote": "更新遠端", + "ApplyPatch": "套用補丁", + "Stash": "收藏 (Stash)", + "RenameStash": "重命名暫存", + "RemoveSubmodule": "移除子模塊", + "ResetSubmodule": "重設子模塊", + "AddSubmodule": "添加子模塊", + "UpdateSubmoduleUrl": "更新子模塊 URL", + "InitialiseSubmodule": "初始化子模塊", + "BulkInitialiseSubmodules": "批量初始化子模塊", + "BulkUpdateSubmodules": "批量更新子模塊", + "BulkDeinitialiseSubmodules": "批量取消初始化子模塊", + "UpdateSubmodule": "更新子模塊", + "CreateLightweightTag": "建立輕量標籤", + "CreateAnnotatedTag": "建立附註標籤", + "DeleteLocalTag": "", + "DeleteRemoteTag": "", + "PushTag": "推送標籤", + "NukeWorkingTree": "清空工作樹", + "DiscardUnstagedFileChanges": "放棄未預存的檔案更改", + "RemoveUntrackedFiles": "移除未追蹤的檔案", + "RemoveStagedFiles": "移除已預存的檔案", + "SoftReset": "軟重設", + "MixedReset": "混合重設", + "HardReset": "強制重設", + "Undo": "復原", + "Redo": "重做", + "CopyPullRequestURL": "複製拉取請求的 URL", + "OpenDiffTool": "", + "OpenMergeTool": "開啟合併工具", + "OpenCommitInBrowser": "在瀏覽器中開啟提交", + "OpenPullRequest": "在瀏覽器中開啟拉取請求", + "StartBisect": "開始二分查找", + "ResetBisect": "重設二分查找", + "BisectSkip": "二分查找跳過", + "BisectMark": "二分查找標記", + "RemoveWorktree": "", + "AddWorktree": "" + }, + "Bisect": { + "MarkStart": "將 %s 標記為 %s(開始二分查找)", + "MarkSkipCurrent": "", + "MarkSkipSelected": "", + "ResetTitle": "重設 `git bisect`", + "ResetPrompt": "是否重設 `git bisect`?", + "ResetOption": "重設二分查找", + "ChooseTerms": "", + "OldTermPrompt": "", + "NewTermPrompt": "", + "BisectMenuTitle": "二分查找", + "Mark": "將 %s 標記為 %s", + "SkipCurrent": "跳過 %s", + "SkipSelected": "", + "CompleteTitle": "二分查找完成", + "CompletePrompt": "二分查找完成!以下提交引入了更改:\n\n%s\n\n是否重設 `git bisect` ?", + "CompletePromptIndeterminate": "二分查找完成!有一些提交被跳過,因此以下任何提交皆可能引進更改:\n\n%s\n\n是否重設 `git bisect`?", + "Bisecting": "二分查找中" + }, + "Log": { + "EditRebase": "", + "MoveCommitUp": "", + "MoveCommitDown": "", + "CherryPickCommits": "", + "HandleUndo": "", + "HandleMidRebaseCommand": "", + "RemoveFile": "", + "CopyToClipboard": "", + "Remove": "", + "CreateFileWithContent": "", + "AppendingLineToFile": "", + "EditRebaseFromBaseCommit": "" + }, + "BreakingChangesTitle": "", + "BreakingChangesMessage": "", + "BreakingChangesByVersion": null +} From b34de70c9998aa4e5db210a448f9f9404d5b1417 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Sat, 8 Jun 2024 11:35:12 +0200 Subject: [PATCH 101/157] Remove all empty strings I guess I could have coded this into the export script, but I was too lazy and just did it manually in VS Code, which was easy enough. --- pkg/i18n/translations/ja.json | 525 +-------------------------- pkg/i18n/translations/ko.json | 380 +------------------- pkg/i18n/translations/nl.json | 595 +------------------------------ pkg/i18n/translations/pl.json | 27 -- pkg/i18n/translations/ru.json | 294 +-------------- pkg/i18n/translations/zh-CN.json | 425 +--------------------- pkg/i18n/translations/zh-TW.json | 258 +------------- 7 files changed, 14 insertions(+), 2490 deletions(-) diff --git a/pkg/i18n/translations/ja.json b/pkg/i18n/translations/ja.json index 55e2399b386..8b1c9dc8fc5 100644 --- a/pkg/i18n/translations/ja.json +++ b/pkg/i18n/translations/ja.json @@ -5,8 +5,6 @@ "BranchesTitle": "ブランチ", "CommitsTitle": "コミット", "StashTitle": "Stash", - "SnakeTitle": "", - "EasterEgg": "", "UnstagedChanges": "ステージされていない変更", "StagedChanges": "ステージされた変更", "MainTitle": "メイン", @@ -19,154 +17,60 @@ "CredentialsUsername": "ユーザ名", "CredentialsPassword": "パスワード", "CredentialsPassphrase": "SSH鍵のパスフレーズを入力", - "CredentialsPIN": "", "PassUnameWrong": "パスワード, パスフレーズまたはユーザ名が間違っています。", "Commit": "変更をコミット", - "CommitTooltip": "", "AmendLastCommit": "最新のコミットにamend", "AmendLastCommitTitle": "最新のコミットにamend", "SureToAmend": "最新のコミットに変更をamendします。よろしいですか? コミットメッセージはコミットパネルから変更できます。", "NoCommitToAmend": "Amend可能なコミットが存在しません。", "CommitChangesWithEditor": "gitエディタを使用して変更をコミット", - "FindBaseCommitForFixup": "", - "FindBaseCommitForFixupTooltip": "", - "NoBaseCommitsFound": "", - "MultipleBaseCommitsFoundStaged": "", - "MultipleBaseCommitsFoundUnstaged": "", - "BaseCommitIsAlreadyOnMainBranch": "", - "BaseCommitIsNotInCurrentView": "", - "HunksWithOnlyAddedLinesWarning": "", "StatusTitle": "ステータス", "GlobalTitle": "グローバルキーバインド", "Menu": "メニュー", "Execute": "実行", "Stage": "ステージ/アンステージ", - "StageTooltip": "", "ToggleStagedAll": "すべての変更をステージ/アンステージ", - "ToggleStagedAllTooltip": "", "ToggleTreeView": "ファイルツリーの表示を切り替え", - "ToggleTreeViewTooltip": "", - "OpenDiffTool": "", "OpenMergeTool": "Git mergetoolを開く", - "OpenMergeToolTooltip": "", "Refresh": "リフレッシュ", - "RefreshTooltip": "", "Push": "Push", "Pull": "Pull", - "PushTooltip": "", - "PullTooltip": "", "Scroll": "スクロール", "FileFilter": "ファイルをフィルタ (ステージ/アンステージ)", - "CopyToClipboardMenu": "", - "CopyFileName": "", - "CopyFilePath": "", - "CopyFileDiffTooltip": "", - "CopySelectedDiff": "", - "CopyAllFilesDiff": "", - "NoContentToCopyError": "", - "FileNameCopiedToast": "", - "FilePathCopiedToast": "", - "FileDiffCopiedToast": "", - "AllFilesDiffCopiedToast": "", "FilterStagedFiles": "ステージされたファイルのみを表示", "FilterUnstagedFiles": "ステージされていないファイルのみを表示", "ResetFilter": "フィルタをリセット", "MergeConflictsTitle": "マージコンフリクト", "Checkout": "チェックアウト", - "CheckoutTooltip": "", - "CantCheckoutBranchWhilePulling": "", - "TagCheckoutTooltip": "", - "RemoteBranchCheckoutTooltip": "", - "CantPullOrPushSameBranchTwice": "", - "NoChangedFiles": "", "SoftReset": "Softリセット", "AlreadyCheckedOutBranch": "ブランチはすでにチェックアウトされています。", - "SureForceCheckout": "", - "ForceCheckoutBranch": "", "BranchName": "ブランチ名", "NewBranchNameBranchOff": "新規ブランチ名 ('{{.branchName}}' に作成)", "CantDeleteCheckOutBranch": "チェックアウト中のブランチは削除できません!", - "DeleteBranchTitle": "", - "DeleteLocalBranch": "", - "DeleteRemoteBranchOption": "", - "DeleteRemoteBranchPrompt": "", - "ForceDeleteBranchTitle": "", - "ForceDeleteBranchMessage": "", - "RebaseBranch": "", - "RebaseBranchTooltip": "", "CantRebaseOntoSelf": "ブランチを自分自身にリベースすることはできません。", "CantMergeBranchIntoItself": "ブランチを自分自身にマージすることはできません。", - "ForceCheckout": "", - "ForceCheckoutTooltip": "", - "CheckoutByName": "", - "CheckoutByNameTooltip": "", - "RemoteBranchCheckoutTitle": "", - "CheckoutTypeNewBranch": "", - "CheckoutTypeNewBranchTooltip": "", - "CheckoutTypeDetachedHead": "", - "CheckoutTypeDetachedHeadTooltip": "", "NewBranch": "新しいブランチを作成", - "NewBranchFromStashTooltip": "", "NoBranchesThisRepo": "リポジトリにブランチが存在しません", "CommitWithoutMessageErr": "コミットメッセージを入力してください", "Close": "閉じる", "CloseCancel": "閉じる/キャンセル", "Confirm": "確認", "Quit": "終了", - "SquashTooltip": "", - "CannotSquashOrFixupFirstCommit": "", - "Fixup": "", - "FixupTooltip": "", - "SureFixupThisCommit": "", - "SureSquashThisCommit": "", - "Squash": "", - "PickCommitTooltip": "", - "Pick": "", - "CantPickDisabledReason": "", - "Edit": "", "RevertCommit": "コミットをrevert", - "Revert": "", - "RevertCommitTooltip": "", "Reword": "コミットメッセージを変更", - "CommitRewordTooltip": "", "DropCommit": "コミットを削除", - "DropCommitTooltip": "", "MoveDownCommit": "コミットを1つ下に移動", "MoveUpCommit": "コミットを1つ上に移動", - "CannotMoveAnyFurther": "", - "EditCommit": "", "EditCommitTooltip": "コミットを編集", "AmendCommitTooltip": "ステージされた変更でamendコミット", - "Amend": "", - "ResetAuthor": "", - "ResetAuthorTooltip": "", - "SetAuthor": "", - "SetAuthorTooltip": "", - "AddCoAuthor": "", - "AmendCommitAttribute": "", - "AmendCommitAttributeTooltip": "", - "SetAuthorPromptTitle": "", - "AddCoAuthorPromptTitle": "", - "AddCoAuthorTooltip": "", - "SureResetCommitAuthor": "", "RewordCommitEditor": "エディタでコミットメッセージを編集", - "NoCommitsThisBranch": "", - "UpdateRefHere": "", "Error": "エラー", "Undo": "アンドゥ", "UndoReflog": "アンドゥ (via reflog) (experimental)", "RedoReflog": "リドゥ (via reflog) (experimental)", - "UndoTooltip": "", - "RedoTooltip": "", - "UndoMergeResolveTooltip": "", - "DiscardAllTooltip": "", - "DiscardUnstagedTooltip": "", "Pop": "Pop", - "StashPopTooltip": "", "Drop": "Drop", - "StashDropTooltip": "", "Apply": "適用", - "StashApplyTooltip": "", "NoStashEntries": "Stashが存在しません", "StashDrop": "Stashを削除", "SureDropStashEntry": "Stashを削除します。よろしいですか?", @@ -174,8 +78,6 @@ "SurePopStashEntry": "Stashをpopします。よろしいですか?", "StashApply": "Stashを適用", "SureApplyStashEntry": "Stashを適用します。よろしいですか?", - "NoTrackedStagedFilesStash": "", - "NoFilesToStash": "", "StashChanges": "変更をStash", "RenameStash": "Stashを変更", "RenameStashPrompt": "Stash名を変更: {{.stashName}}", @@ -184,8 +86,6 @@ "ForcePush": "Force push", "ForcePushPrompt": "ブランチがリモートブランチから分岐しています。'esc'でキャンセル, または'enter'でforce pushします。", "ForcePushDisabled": "ブランチがリモートブランチから分岐しています。force pushは無効化されています。", - "UpdatesRejected": "", - "UpdatesRejectedAndForcePushDisabled": "", "CheckForUpdate": "更新を確認", "CheckingForUpdates": "更新を確認中...", "UpdateAvailableTitle": "最新リリース!", @@ -203,18 +103,11 @@ "MergeToolTitle": "マージツール", "MergeToolPrompt": "`git mergetool`を開きます。よろしいですか?", "IntroPopupMessage": "\nThanks for using lazygit! Seriously you rock. Three things to share with you:\n\n 1) If you want to learn about lazygit's features, watch this vid:\n https://youtu.be/CPLdltN7wgE\n\n 2) Be sure to read the latest release notes at:\n https://github.com/jesseduffield/lazygit/releases\n\n 3) If you're using git, that makes you a programmer! With your help we can make\n lazygit better, so consider becoming a contributor and joining the fun at\n https://github.com/jesseduffield/lazygit\n You can also sponsor me and tell me what to work on by clicking the donate\n button at the bottom right.\n Or even just star the repo to share the love!\n", - "DeprecatedEditConfigWarning": "", - "GitconfigParseErr": "", "EditFile": "ファイルを編集", - "EditFileTooltip": "", "OpenFile": "ファイルを開く", - "OpenFileTooltip": "", - "OpenInEditor": "", "IgnoreFile": ".gitignoreに追加", - "ExcludeFile": "", "RefreshFiles": "ファイルをリフレッシュ", "Merge": "現在のブランチにマージ", - "MergeBranchTooltip": "", "ConfirmQuit": "終了します。よろしいですか?", "SwitchRepo": "最近使用したリポジトリに切り替え", "AllBranchesLogGraph": "すべてのブランチログを表示", @@ -222,85 +115,29 @@ "CopyPullRequestURL": "Pull RequestのURLをクリップボードにコピー", "NoBranchOnRemote": "ブランチがリモートに存在しません。リモートにpushしてください。", "Fetch": "Fetch", - "FetchTooltip": "", - "NoAutomaticGitFetchTitle": "", - "NoAutomaticGitFetchBody": "", - "FileEnter": "", - "FileEnterTooltip": "", - "FileStagingRequirements": "", "StageSelectionTooltip": "選択行をステージ/アンステージ", "DiscardSelection": "変更を削除 (git reset)", - "DiscardSelectionTooltip": "", "ToggleSelectHunk": "Hunk選択を切り替え", - "ToggleSelectHunkTooltip": "", "ToggleSelectionForPatch": "行をパッチに追加/削除", - "ToggleSelectionForPatchTooltip": "", - "EditHunk": "", - "EditHunkTooltip": "", "ToggleStagingView": "パネルを切り替え", - "ToggleStagingViewTooltip": "", "ReturnToFilesPanel": "ファイル一覧に戻る", - "FastForward": "", - "FastForwardTooltip": "", - "FastForwarding": "", - "FoundConflictsTitle": "", - "ViewConflictsMenuItem": "", - "AbortMenuItem": "", - "PickHunk": "", - "PickAllHunks": "", - "ViewMergeRebaseOptions": "", - "ViewMergeRebaseOptionsTooltip": "", - "ViewMergeOptions": "", - "ViewRebaseOptions": "", - "NotMergingOrRebasing": "", - "AlreadyRebasing": "", "RecentRepos": "最近使用したリポジトリ", - "MergeOptionsTitle": "", - "RebaseOptionsTitle": "", "CommitSummaryTitle": "コミットメッセージ", - "CommitDescriptionTitle": "", - "CommitDescriptionSubTitle": "", "LocalBranchesTitle": "ブランチ", "SearchTitle": "検索", "TagsTitle": "タグ", "MenuTitle": "メニュー", - "CommitMenuTitle": "", "RemotesTitle": "リモート", "RemoteBranchesTitle": "リモートブランチ", "PatchBuildingTitle": "メインパネル (Patch Building)", "InformationTitle": "Information", "SecondaryTitle": "Secondary", "ReflogCommitsTitle": "参照ログ", - "ConflictsResolved": "", - "Continue": "", - "RebasingTitle": "", - "RebasingFromBaseCommitTitle": "", - "SimpleRebase": "", - "InteractiveRebase": "", - "RebaseOntoBaseBranch": "", - "InteractiveRebaseTooltip": "", - "RebaseOntoBaseBranchTooltip": "", - "MustSelectTodoCommits": "", - "ConfirmMerge": "", - "FwdNoUpstream": "", - "FwdNoLocalUpstream": "", - "FwdCommitsToPush": "", - "PullRequestNoUpstream": "", "ErrorOccurred": "エラーが発生しました! issueを作成してください: ", - "NoRoom": "", "YouAreHere": "現在位置", - "YouDied": "", - "RewordNotSupported": "", - "ChangingThisActionIsNotAllowed": "", "CherryPickCopy": "コミットをコピー (cherry-pick)", - "CherryPickCopyTooltip": "", - "CherryPickCopyRange": "", - "CherryPickCopyRangeTooltip": "", "PasteCommits": "コミットを貼り付け (cherry-pick)", - "SureCherryPick": "", "CherryPick": "Cherry-Pick", - "CannotCherryPickNonCommit": "", - "CannotCherryPickMergeCommit": "", "Donate": "支援", "AskQuestion": "質問", "PrevLine": "前の行を選択", @@ -319,268 +156,95 @@ "AmendCommitPrompt": "ステージされたファイルで現在のコミットをamendします。よろしいですか?", "DropCommitTitle": "コミットを削除", "DropCommitPrompt": "選択されたコミットを削除します。よろしいですか?", - "DropUpdateRefPrompt": "", "PullingStatus": "Pull中", "PushingStatus": "Push中", "FetchingStatus": "Fetch中", - "SquashingStatus": "", - "FixingStatus": "", - "DeletingStatus": "", - "DroppingStatus": "", - "MovingStatus": "", - "RebasingStatus": "", - "MergingStatus": "", - "LowercaseRebasingStatus": "", - "LowercaseMergingStatus": "", - "AmendingStatus": "", - "CherryPickingStatus": "", - "UndoingStatus": "", - "RedoingStatus": "", - "CheckingOutStatus": "", - "CommittingStatus": "", - "RevertingStatus": "", - "CreatingFixupCommitStatus": "", "CommitFiles": "Commit files", "SubCommitsDynamicTitle": "コミット (%s)", "CommitFilesDynamicTitle": "Diff files (%s)", "RemoteBranchesDynamicTitle": "リモートブランチ (%s)", - "ViewItemFiles": "", - "ViewItemFilesTooltip": "", "CommitFilesTitle": "コミットファイル", - "CheckoutCommitFileTooltip": "", - "CanOnlyDiscardFromLocalCommits": "", - "Remove": "", - "DiscardOldFileChangeTooltip": "", "DiscardFileChangesTitle": "ファイルの変更を破棄", - "DiscardFileChangesPrompt": "", - "DisabledForGPG": "", "CreateRepo": "Gitリポジトリではありません。リポジトリを作成しますか? (y/n): ", - "BareRepo": "", - "InitialBranch": "", - "NoRecentRepositories": "", - "IncorrectNotARepository": "", - "AutoStashTitle": "", - "AutoStashPrompt": "", - "StashPrefix": "", - "Discard": "", - "DiscardChangesTitle": "", - "DiscardFileChangesTooltip": "", "Cancel": "キャンセル", "DiscardAllChanges": "すべての変更を破棄", - "DiscardUnstagedChanges": "", - "DiscardAllChangesToAllFiles": "", - "DiscardAnyUnstagedChanges": "", - "DiscardUntrackedFiles": "", - "DiscardStagedChanges": "", "HardReset": "hardリセット", - "BranchDeleteTooltip": "", - "TagDeleteTooltip": "", - "Delete": "", - "Reset": "", - "ResetTooltip": "", - "ViewResetOptions": "", - "FileResetOptionsTooltip": "", "CreateFixupCommit": "Fixupコミットを作成", "CreateFixupCommitTooltip": "このコミットに対するfixupコミットを作成", - "CreateAmendCommit": "", - "FixupMenu_Fixup": "", - "FixupMenu_FixupTooltip": "", - "FixupMenu_AmendWithChanges": "", - "FixupMenu_AmendWithChangesTooltip": "", - "FixupMenu_AmendWithoutChanges": "", - "FixupMenu_AmendWithoutChangesTooltip": "", - "SquashAboveCommitsTooltip": "", - "SquashCommitsAboveSelectedTooltip": "", - "SquashCommitsInCurrentBranchTooltip": "", - "SquashAboveCommits": "", - "SquashCommitsInCurrentBranch": "", - "SquashCommitsAboveSelectedCommit": "", - "CannotSquashCommitsInCurrentBranch": "", "ExecuteCustomCommand": "カスタムコマンドを実行", - "ExecuteCustomCommandTooltip": "", "CustomCommand": "カスタムコマンド:", "CommitChangesWithoutHook": "pre-commitフックを実行せずに変更をコミット", - "SkipHookPrefixNotConfigured": "", - "ResetTo": "", - "ResetSoftTooltip": "", - "ResetMixedTooltip": "", - "ResetHardTooltip": "", "PressEnterToReturn": "Enterを入力してください", - "ViewStashOptions": "", - "ViewStashOptionsTooltip": "", - "Stash": "", - "StashTooltip": "", "StashAllChanges": "変更をstash", - "StashStagedChanges": "", - "StashAllChangesKeepIndex": "", - "StashUnstagedChanges": "", - "StashIncludeUntrackedChanges": "", - "StashOptions": "", - "NotARepository": "", - "WorkingDirectoryDoesNotExist": "", "Jump": "パネルに移動", "ScrollLeftRight": "左右にスクロール", "ScrollLeft": "左スクロール", "ScrollRight": "右スクロール", "DiscardPatch": "パッチを破棄", - "DiscardPatchConfirm": "", - "DiscardPatchSameCommitConfirm": "", - "CantPatchWhileRebasingError": "", - "ToggleAddToPatch": "", - "ToggleAddToPatchTooltip": "", - "ToggleAllInPatch": "", - "ToggleAllInPatchTooltip": "", - "UpdatingPatch": "", - "ViewPatchOptions": "", - "PatchOptionsTitle": "", - "NoPatchError": "", - "EmptyPatchError": "", - "EnterCommitFile": "", - "EnterCommitFileTooltip": "", - "ExitCustomPatchBuilder": "", "EnterUpstream": "'\u003cremote\u003e \u003cbranchname\u003e' の形式でupstreamを入力", "InvalidUpstream": "Upstreamの形式が正しくありません。'\u003cremote\u003e \u003cbranchname\u003e' の形式で入力してください。", "ReturnToRemotesList": "リモート一覧に戻る", "NewRemote": "リモートを新規追加", "NewRemoteName": "新規リモート名:", "NewRemoteUrl": "新規リモートURL:", - "ViewBranches": "", "EditRemoteName": "{{.remoteName}} の新しいリモート名を入力:", "EditRemoteUrl": "{{.remoteName}} の新しいリモートURLを入力:", "RemoveRemote": "リモートを削除", - "RemoveRemoteTooltip": "", "RemoveRemotePrompt": "リモートを削除します。よろしいですか?", "DeleteRemoteBranch": "リモートブランチを削除", "DeleteRemoteBranchMessage": "リモートブランチを削除します。よろしいですか", - "DeleteRemoteBranchTooltip": "", - "SetAsUpstream": "", - "SetAsUpstreamTooltip": "", - "SetUpstream": "", - "UnsetUpstream": "", - "ViewDivergenceFromUpstream": "", - "ViewDivergenceFromBaseBranch": "", - "CouldNotDetermineBaseBranch": "", - "DivergenceSectionHeaderLocal": "", - "DivergenceSectionHeaderRemote": "", - "ViewUpstreamResetOptions": "", - "ViewUpstreamResetOptionsTooltip": "", - "ViewUpstreamRebaseOptions": "", - "ViewUpstreamRebaseOptionsTooltip": "", - "UpstreamGenericName": "", - "SetUpstreamTitle": "", - "SetUpstreamMessage": "", "EditRemoteTooltip": "リモートを編集", "TagCommit": "タグを作成", - "TagCommitTooltip": "", "TagMenuTitle": "タグを作成", "TagNameTitle": "タグ名", "TagMessageTitle": "タグメッセージ", "LightweightTag": "軽量タグ", "AnnotatedTag": "注釈付きタグ", - "DeleteTagTitle": "", - "DeleteLocalTag": "", - "DeleteRemoteTag": "", - "SelectRemoteTagUpstream": "", - "DeleteRemoteTagPrompt": "", - "RemoteTagDeletedMessage": "", "PushTagTitle": "リモートにタグ '{{.tagName}}' をpush", "PushTag": "タグをpush", - "PushTagTooltip": "", "NewTag": "タグを作成", - "NewTagTooltip": "", - "CreatingTag": "", - "ForceTag": "", - "ForceTagPrompt": "", "FetchRemoteTooltip": "リモートをfetch", "FetchingRemoteStatus": "リモートをfetch", "CheckoutCommit": "コミットをチェックアウト", - "CheckoutCommitTooltip": "", "SureCheckoutThisCommit": "選択されたコミットをチェックアウトします。よろしいですか?", - "GitFlowOptions": "", - "NotAGitFlowBranch": "", "NewBranchNamePrompt": "新しいブランチ名を入力", - "IgnoreTracked": "", - "ExcludeTracked": "", - "IgnoreTrackedPrompt": "", - "ExcludeTrackedPrompt": "", - "ViewResetToUpstreamOptions": "", "NextScreenMode": "次のスクリーンモード (normal/half/fullscreen)", "PrevScreenMode": "前のスクリーンモード", "StartSearch": "検索を開始", - "StartFilter": "", "Panel": "パネル", "Keybindings": "キーバインド", - "KeybindingsLegend": "", - "KeybindingsMenuSectionLocal": "", - "KeybindingsMenuSectionGlobal": "", - "KeybindingsMenuSectionNavigation": "", "RenameBranch": "ブランチ名を変更", - "Upstream": "", - "UpstreamTooltip": "", - "BranchUpstreamOptionsTitle": "", - "ViewBranchUpstreamOptions": "", - "ViewBranchUpstreamOptionsTooltip": "", - "UpstreamNotSetError": "", - "NewGitFlowBranchPrompt": "", - "RenameBranchWarning": "", "OpenKeybindingsMenu": "メニューを開く", - "ResetCherryPick": "", "NextTab": "次のタブ", "PrevTab": "前のタブ", "CantUndoWhileRebasing": "リベース中はアンドゥできません。", "CantRedoWhileRebasing": "リベース中はリドゥできません。", - "MustStashWarning": "", - "MustStashTitle": "", "ConfirmationTitle": "確認パネル", "PrevPage": "前のページ", "NextPage": "次のページ", "GotoTop": "最上部までスクロール", "GotoBottom": "最下部までスクロール", - "FilteringBy": "", - "ResetInParentheses": "", - "OpenFilteringMenu": "", - "OpenFilteringMenuTooltip": "", - "FilterBy": "", - "ExitFilterMode": "", - "ExitFilterModeAuthor": "", - "FilterPathOption": "", - "FilterAuthorOption": "", - "EnterFileName": "", - "EnterAuthor": "", - "FilteringMenuTitle": "", - "WillCancelExistingFilterTooltip": "", - "MustExitFilterModeTitle": "", - "MustExitFilterModePrompt": "", "Diff": "差分", - "EnterRefToDiff": "", "EnterRefName": "参照を入力:", "ExitDiffMode": "差分モードを終了", "DiffingMenuTitle": "差分", - "SwapDiff": "", "ViewDiffingOptions": "差分メニューを開く", - "ViewDiffingOptionsTooltip": "", "OpenCommandLogMenu": "コマンドログメニューを開く", - "OpenCommandLogMenuTooltip": "", - "ShowingGitDiff": "", "CommitDiff": "コミットの差分", "CopyCommitHashToClipboard": "コミットのhashをクリップボードにコピー", "CommitHash": "コミットのhash", "CommitURL": "コミットのURL", "CopyCommitMessageToClipboard": "コミットメッセージをクリップボードにコピー", "CommitMessage": "コミットメッセージ", - "CommitSubject": "", "CommitAuthor": "コミットの作成者名", "CopyCommitAttributeToClipboard": "コミットの情報をコピー", - "CopyCommitAttributeToClipboardTooltip": "", "CopyBranchNameToClipboard": "ブランチ名をクリップボードにコピー", "CopyPathToClipboard": "ファイル名をクリップボードにコピー", - "CommitPrefixPatternError": "", "CopySelectedTextToClipboard": "選択されたテキストをクリップボードにコピー", "NoFilesStagedTitle": "ファイルがステージされていません", "NoFilesStagedPrompt": "ファイルがステージされていません。すべての変更をコミットしますか?", "BranchNotFoundTitle": "ブランチが見つかりませんでした。", "BranchNotFoundPrompt": "ブランチが見つかりませんでした。新しくブランチを作成します ", - "BranchUnknown": "", "DiscardChangeTitle": "選択行をアンステージ", "DiscardChangePrompt": "選択された行を削除 (git reset) します。よろしいですか? この操作は取り消せません。\nこの警告を無効化するには設定ファイルの 'gui.skipDiscardChangeWarning' を true に設定してください。", "CreateNewBranchFromCommit": "コミットにブランチを作成", @@ -588,13 +252,9 @@ "ViewCommits": "コミットを閲覧", "MinGitVersionError": "Lazygitの実行にはGit 2.20以降のバージョンが必要です。Gitを更新してください。もしくは、lazygitの後方互換性を改善するために https://github.com/jesseduffield/lazygit/issues にissueを作成してください。", "RunningCustomCommandStatus": "カスタムコマンドを実行", - "SubmoduleStashAndReset": "", - "AndResetSubmodules": "", "EnterSubmoduleTooltip": "サブモジュールを開く", - "Enter": "", "CopySubmoduleNameToClipboard": "サブモジュール名をクリップボードにコピー", "RemoveSubmodule": "サブモジュールを削除", - "RemoveSubmoduleTooltip": "", "RemoveSubmodulePrompt": "サブモジュール '%s' とそのディレクトリを削除します。よろしいですか? この操作は取り消せません。", "ResettingSubmoduleStatus": "サブモジュールをリセット", "NewSubmoduleName": "新規サブモジュール名:", @@ -607,208 +267,71 @@ "EditSubmoduleUrl": "サブモジュールのURLを更新", "InitializingSubmoduleStatus": "サブモジュールを初期化", "InitSubmoduleTooltip": "サブモジュールを初期化", - "Update": "", - "Initialize": "", "SubmoduleUpdateTooltip": "サブモジュールを更新", "UpdatingSubmoduleStatus": "サブモジュールを更新", "BulkInitSubmodules": "サブモジュールを一括初期化", "BulkUpdateSubmodules": "サブモジュールを一括更新", - "BulkDeinitSubmodules": "", - "ViewBulkSubmoduleOptions": "", - "BulkSubmoduleOptions": "", - "RunningCommand": "", - "SubCommitsTitle": "", "SubmodulesTitle": "サブモジュール", "NavigationTitle": "一覧パネルの操作", - "SuggestionsCheatsheetTitle": "", - "SuggestionsTitle": "", - "SuggestionsSubtitle": "", "ExtrasTitle": "コマンドログ", - "PushingTagStatus": "", "PullRequestURLCopiedToClipboard": "Pull requestのURLがクリップボードにコピーされました", "CommitDiffCopiedToClipboard": "コミットの差分がクリップボードにコピーされました", "CommitURLCopiedToClipboard": "コミットのURLがクリップボードにコピーされました", "CommitMessageCopiedToClipboard": "コミットメッセージがクリップボードにコピーされました", - "CommitSubjectCopiedToClipboard": "", "CommitAuthorCopiedToClipboard": "コミットの作成者名がクリップボードにコピーされました", - "PatchCopiedToClipboard": "", "CopiedToClipboard": "クリップボードにコピーされました", "ErrCannotEditDirectory": "ディレクトリは編集できません。", "ErrStageDirWithInlineMergeConflicts": "マージコンフリクトの発生したファイルを含むディレクトリはステージ/アンステージできません。マージコンフリクトを解決してください。", "ErrRepositoryMovedOrDeleted": "リポジトリが見つかりません。すでに削除されたか、移動された可能性があります ¯\\_(ツ)_/¯", - "ErrWorktreeMovedOrRemoved": "", "CommandLog": "コマンドログ", "ToggleShowCommandLog": "コマンドログの表示/非表示を切り替え", "FocusCommandLog": "コマンドログにフォーカス", "CommandLogHeader": "コマンドログの表示/非表示は '%s' で切り替えられます。\n", "RandomTip": "ランダムTips", - "SelectParentCommitForMerge": "", "ToggleWhitespaceInDiffView": "空白文字の差分の表示有無を切り替え", - "ToggleWhitespaceInDiffViewTooltip": "", - "IgnoreWhitespaceDiffViewSubTitle": "", - "IgnoreWhitespaceNotSupportedHere": "", - "IncreaseContextInDiffView": "", - "IncreaseContextInDiffViewTooltip": "", - "DecreaseContextInDiffView": "", - "DecreaseContextInDiffViewTooltip": "", - "DiffContextSizeChanged": "", - "CreatePullRequestOptions": "", "DefaultBranch": "デフォルトブランチ", "SelectBranch": "ブランチを選択", "CreatePullRequest": "Pull Requestを作成", "SelectConfigFile": "設定ファイルを選択", "NoConfigFileFoundErr": "設定ファイルが見つかりませんでした。", - "LoadingFileSuggestions": "", - "LoadingCommits": "", - "MustSpecifyOriginError": "", - "GitOutput": "", - "GitCommandFailed": "", "AbortTitle": "%sを中止", "AbortPrompt": "実施中の%sを中止します。よろしいですか?", "OpenLogMenu": "ログメニューを開く", - "OpenLogMenuTooltip": "", "LogMenuTitle": "コミットログオプション", - "ToggleShowGitGraphAll": "", "ShowGitGraph": "コミットグラフの表示", "SortOrder": "並び替え", "SortAlphabetical": "アルファベット順", "SortByDate": "日付順", - "SortByRecency": "", - "SortBasedOnReflog": "", "SortCommits": "コミットの表示順", - "CantChangeContextSizeError": "", "OpenCommitInBrowser": "ブラウザでコミットを開く", - "ViewBisectOptions": "", - "ConfirmRevertCommit": "", "RewordInEditorTitle": "コミットメッセージをエディタで編集", - "RewordInEditorPrompt": "", - "CheckoutPrompt": "", - "HardResetAutostashPrompt": "", - "UpstreamGone": "", - "NukeDescription": "", - "DiscardStagedChangesDescription": "", - "EmptyOutput": "", - "Patch": "", - "CustomPatch": "", - "CommitsCopied": "", - "CommitCopied": "", - "ResetPatch": "", - "ResetPatchTooltip": "", - "ApplyPatch": "", - "ApplyPatchTooltip": "", - "ApplyPatchInReverse": "", - "ApplyPatchInReverseTooltip": "", - "RemovePatchFromOriginalCommit": "", - "RemovePatchFromOriginalCommitTooltip": "", - "MovePatchOutIntoIndex": "", - "MovePatchOutIntoIndexTooltip": "", - "MovePatchIntoNewCommit": "", - "MovePatchIntoNewCommitTooltip": "", - "MovePatchToSelectedCommit": "", - "MovePatchToSelectedCommitTooltip": "", - "CopyPatchToClipboard": "", - "NoMatchesFor": "", - "MatchesFor": "", - "SearchKeybindings": "", - "SearchPrefix": "", - "FilterPrefix": "", - "ExitSearchMode": "", - "ExitTextFilterMode": "", - "Switch": "", - "SwitchToWorktree": "", - "SwitchToWorktreeTooltip": "", - "AlreadyCheckedOutByWorktree": "", - "BranchCheckedOutByWorktree": "", - "DetachWorktreeTooltip": "", - "Switching": "", - "RemoveWorktree": "", - "RemoveWorktreeTitle": "", - "DetachWorktree": "", - "DetachingWorktree": "", - "WorktreesTitle": "", - "WorktreeTitle": "", - "RemoveWorktreePrompt": "", - "ForceRemoveWorktreePrompt": "", - "RemovingWorktree": "", - "AddingWorktree": "", - "CantDeleteCurrentWorktree": "", - "AlreadyInWorktree": "", - "CantDeleteMainWorktree": "", - "NoWorktreesThisRepo": "", - "MissingWorktree": "", - "MainWorktree": "", - "NewWorktree": "", - "NewWorktreePath": "", - "NewWorktreeBase": "", - "RemoveWorktreeTooltip": "", - "BranchNameCannotBeBlank": "", - "NewBranchName": "", - "NewBranchNameLeaveBlank": "", - "ViewWorktreeOptions": "", - "CreateWorktreeFrom": "", - "CreateWorktreeFromDetached": "", - "LcWorktree": "", - "ChangingDirectoryTo": "", - "Name": "", - "Branch": "", - "Path": "", - "MarkedBaseCommitStatus": "", - "MarkAsBaseCommit": "", - "MarkAsBaseCommitTooltip": "", - "MarkedCommitMarker": "", - "PleaseGoToURL": "", - "NoCopiedCommits": "", - "DisabledMenuItemPrefix": "", - "QuickStartInteractiveRebase": "", - "QuickStartInteractiveRebaseTooltip": "", - "CannotQuickStartInteractiveRebase": "", "ToggleRangeSelect": "範囲選択を切り替え", - "RangeSelectUp": "", - "RangeSelectDown": "", - "RangeSelectNotSupported": "", - "NoItemSelected": "", - "SelectedItemIsNotABranch": "", - "SelectedItemDoesNotHaveFiles": "", - "RangeSelectNotSupportedForSubmodules": "", - "OldCherryPickKeyWarning": "", - "CommandDoesNotSupportOpeningInEditor": "", "Actions": { "CheckoutCommit": "コミットをチェックアウト", "CheckoutTag": "タグをチェックアウト", "CheckoutBranch": "ブランチをチェックアウト", "ForceCheckoutBranch": "ブランチを強制的にチェックアウト", - "DeleteLocalBranch": "", "DeleteBranch": "ブランチを削除", "Merge": "マージ", - "RebaseBranch": "", "RenameBranch": "ブランチ名を変更", "CreateBranch": "ブランチを作成", "FastForwardBranch": "ブランチをfast forward", - "CherryPick": "", "CheckoutFile": "ファイルをチェックアウトs", - "DiscardOldFileChange": "", - "SquashCommitDown": "", "FixupCommit": "Fixupコミット", "RewordCommit": "コミットメッセージを変更", "DropCommit": "コミットを削除", "EditCommit": "コミットを編集", "AmendCommit": "Amendコミット", - "ResetCommitAuthor": "", - "SetCommitAuthor": "", - "AddCommitCoAuthor": "", "RevertCommit": "コミットをrevert", "CreateFixupCommit": "fixupコミットを作成", - "SquashAllAboveFixupCommits": "", "MoveCommitUp": "コミットを上に移動", "MoveCommitDown": "コミットを下に移動", "CopyCommitMessageToClipboard": "コミットメッセージをクリップボードにコピー", - "CopyCommitSubjectToClipboard": "", "CopyCommitDiffToClipboard": "コミットの差分をクリップボードにコピー", "CopyCommitHashToClipboard": "コミットhashをクリップボードにコピー", "CopyCommitURLToClipboard": "コミットのURLをクリップボードにコピー", "CopyCommitAuthorToClipboard": "コミットの作成者名をクリップボードにコピー", "CopyCommitAttributeToClipboard": "クリップボードにコピー", - "CopyPatchToClipboard": "", "CustomCommand": "カスタムコマンド", "DiscardAllChangesInDirectory": "ディレクトリ内のすべての変更を破棄", "DiscardUnstagedChangesInDirectory": "ディレクトリ内のすべてのステージされていない変更を破棄", @@ -820,20 +343,13 @@ "UnstageAllFiles": "すべてのファイルをアンステージ", "StageAllFiles": "すべてのファイルをステージ", "IgnoreExcludeFile": "ファイルをignore", - "IgnoreFileErr": "", - "ExcludeFile": "", - "ExcludeGitIgnoreErr": "", "Commit": "コミット", "EditFile": "ファイルを編集", "Push": "Push", "Pull": "Pull", "OpenFile": "ファイルを開く", - "OpenFileTooltip": "", "StashAllChanges": "すべての変更をStash", - "StashAllChangesKeepIndex": "", "StashStagedChanges": "ステージされた変更をStash", - "StashUnstagedChanges": "", - "StashIncludeUntrackedChanges": "", "GitFlowFinish": "Git flow finish", "GitFlowStart": "Git Flow start", "CopyToClipboard": "クリップボードにコピー", @@ -857,68 +373,33 @@ "InitialiseSubmodule": "サブモジュールを初期化", "BulkInitialiseSubmodules": "サブモジュールを一括初期化", "BulkUpdateSubmodules": "サブモジュールを一括更新", - "BulkDeinitialiseSubmodules": "", "UpdateSubmodule": "サブモジュールを更新", "CreateLightweightTag": "軽量タグを作成", "CreateAnnotatedTag": "注釈付きタグを作成", - "DeleteLocalTag": "", - "DeleteRemoteTag": "", "PushTag": "タグをpush", - "NukeWorkingTree": "", - "DiscardUnstagedFileChanges": "", - "RemoveUntrackedFiles": "", - "RemoveStagedFiles": "", "SoftReset": "Softリセット", "MixedReset": "Mixedリセット", "HardReset": "Hardリセット", "Undo": "アンドゥ", "Redo": "リドゥ", "CopyPullRequestURL": "Pull requestのURLをコピー", - "OpenDiffTool": "", "OpenMergeTool": "マージツールを開く", "OpenCommitInBrowser": "コミットをブラウザで開く", "OpenPullRequest": "Pull requestをブラウザで開く", "StartBisect": "Bisectを開始", "ResetBisect": "Bisectをリセット", "BisectSkip": "Bisectをスキップ", - "BisectMark": "Bisectをマーク", - "RemoveWorktree": "", - "AddWorktree": "" + "BisectMark": "Bisectをマーク" }, "Bisect": { - "MarkStart": "", - "MarkSkipCurrent": "", - "MarkSkipSelected": "", "ResetTitle": "'git bisect' をリセット", "ResetPrompt": "'git bisect' をリセットします。よろしいですか?", "ResetOption": "Bisectをリセット", - "ChooseTerms": "", - "OldTermPrompt": "", - "NewTermPrompt": "", "BisectMenuTitle": "bisect", - "Mark": "", "SkipCurrent": "%s をスキップする", - "SkipSelected": "", - "CompleteTitle": "Bisect完了", - "CompletePrompt": "", - "CompletePromptIndeterminate": "", - "Bisecting": "" + "CompleteTitle": "Bisect完了" }, "Log": { - "EditRebase": "", - "MoveCommitUp": "", - "MoveCommitDown": "", - "CherryPickCommits": "", - "HandleUndo": "", - "HandleMidRebaseCommand": "", - "RemoveFile": "", - "CopyToClipboard": "", - "Remove": "", - "CreateFileWithContent": "", - "AppendingLineToFile": "", "EditRebaseFromBaseCommit": "" - }, - "BreakingChangesTitle": "", - "BreakingChangesMessage": "", - "BreakingChangesByVersion": null + } } diff --git a/pkg/i18n/translations/ko.json b/pkg/i18n/translations/ko.json index 4bc25f6af2b..edd5f9c1829 100644 --- a/pkg/i18n/translations/ko.json +++ b/pkg/i18n/translations/ko.json @@ -5,8 +5,6 @@ "BranchesTitle": "브랜치", "CommitsTitle": "커밋", "StashTitle": "Stash", - "SnakeTitle": "", - "EasterEgg": "", "UnstagedChanges": "Staged되지 않은 변경 내용", "StagedChanges": "Staged된 변경 내용", "MainTitle": "메인", @@ -19,65 +17,31 @@ "CredentialsUsername": "사용자 이름", "CredentialsPassword": "패스워드", "CredentialsPassphrase": "SSH키의 passphrase 입력", - "CredentialsPIN": "", "PassUnameWrong": "패스워드, passphrase 또는 사용자 이름이 잘못되었습니다.", "Commit": "커밋 변경내용", - "CommitTooltip": "", "AmendLastCommit": "마지맛 커밋 수정", "AmendLastCommitTitle": "마지막 커밋 수정", "SureToAmend": "마지막 커밋을 수정하시겠습니까? 그런 다음 커밋 패널에서 커밋 메시지를 변경할 수 있습니다.", "NoCommitToAmend": "Amend 가능한 커밋이 없습니다.", "CommitChangesWithEditor": "Git 편집기를 사용하여 변경 내용을 커밋합니다.", - "FindBaseCommitForFixup": "", - "FindBaseCommitForFixupTooltip": "", - "NoBaseCommitsFound": "", - "MultipleBaseCommitsFoundStaged": "", - "MultipleBaseCommitsFoundUnstaged": "", - "BaseCommitIsAlreadyOnMainBranch": "", - "BaseCommitIsNotInCurrentView": "", - "HunksWithOnlyAddedLinesWarning": "", "StatusTitle": "상태", "GlobalTitle": "글로벌 키 바인딩", "Menu": "메뉴", "Execute": "실행", "Stage": "Staged 전환", - "StageTooltip": "", "ToggleStagedAll": "모든 변경을 Staged/unstaged으로 전환", - "ToggleStagedAllTooltip": "", "ToggleTreeView": "파일 트리뷰로 전환", - "ToggleTreeViewTooltip": "", - "OpenDiffTool": "", "OpenMergeTool": "Git mergetool를 열기", - "OpenMergeToolTooltip": "", "Refresh": "새로고침", - "RefreshTooltip": "", "Push": "푸시", "Pull": "업데이트", - "PushTooltip": "", - "PullTooltip": "", "Scroll": "스크롤", "FileFilter": "파일을 필터하기 (Staged/unstaged)", - "CopyToClipboardMenu": "", - "CopyFileName": "", - "CopyFilePath": "", - "CopyFileDiffTooltip": "", - "CopySelectedDiff": "", - "CopyAllFilesDiff": "", - "NoContentToCopyError": "", - "FileNameCopiedToast": "", - "FilePathCopiedToast": "", - "FileDiffCopiedToast": "", - "AllFilesDiffCopiedToast": "", "FilterStagedFiles": "Staged된 파일만 표시", "FilterUnstagedFiles": "Stage되지 않은 파일만 표시", "ResetFilter": "필터 리셋", "MergeConflictsTitle": "병합 충돌 내용", "Checkout": "체크아웃", - "CheckoutTooltip": "", - "CantCheckoutBranchWhilePulling": "", - "TagCheckoutTooltip": "", - "RemoteBranchCheckoutTooltip": "", - "CantPullOrPushSameBranchTwice": "", "NoChangedFiles": "변경된 파일이 없습니다.", "SoftReset": "소프트 리셋", "AlreadyCheckedOutBranch": "브랜치가 이미 체크아웃 되었습니다", @@ -86,87 +50,43 @@ "BranchName": "브랜치 이름", "NewBranchNameBranchOff": "새 브랜치 이름 (branch is off of '{{.branchName}}')", "CantDeleteCheckOutBranch": "체크아웃하는 브랜치는 삭제할 수 없습니다!", - "DeleteBranchTitle": "", - "DeleteLocalBranch": "", - "DeleteRemoteBranchOption": "", - "DeleteRemoteBranchPrompt": "", - "ForceDeleteBranchTitle": "", "ForceDeleteBranchMessage": "'{{.selectedBranchName}}'는 완전히 병합되지 않았습니다. 정말 삭제하시겠습니까?", "RebaseBranch": "체크아웃된 브랜치를 이 브랜치에 리베이스", - "RebaseBranchTooltip": "", "CantRebaseOntoSelf": "브랜치를 자기 자신에게 리베이스할 수는 없습니다.", "CantMergeBranchIntoItself": "브랜치를 자기 자신에게 병합할 수는 없습니다.", "ForceCheckout": "강제 체크아웃", - "ForceCheckoutTooltip": "", "CheckoutByName": "이름으로 체크아웃", - "CheckoutByNameTooltip": "", - "RemoteBranchCheckoutTitle": "", - "CheckoutTypeNewBranch": "", - "CheckoutTypeNewBranchTooltip": "", - "CheckoutTypeDetachedHead": "", - "CheckoutTypeDetachedHeadTooltip": "", "NewBranch": "새 브랜치 생성", - "NewBranchFromStashTooltip": "", "NoBranchesThisRepo": "저장소에 브랜치가 존재하지 않습니다.", "CommitWithoutMessageErr": "커밋 메시지를 입력하세요.", "Close": "닫기", "CloseCancel": "닫기/취소", "Confirm": "확인", "Quit": "종료", - "SquashTooltip": "", "CannotSquashOrFixupFirstCommit": "There's no commit below to squash into", "Fixup": "Fixup", - "FixupTooltip": "", "SureFixupThisCommit": "Are you sure you want to 'fixup' this commit? It will be merged into the commit below", "SureSquashThisCommit": "Are you sure you want to squash this commit into the commit below?", "Squash": "Squash", "PickCommitTooltip": "Pick commit (when mid-rebase)", - "Pick": "", - "CantPickDisabledReason": "", - "Edit": "", "RevertCommit": "커밋 되돌리기", - "Revert": "", - "RevertCommitTooltip": "", "Reword": "커밋메시지 변경", - "CommitRewordTooltip": "", "DropCommit": "커밋 삭제", - "DropCommitTooltip": "", "MoveDownCommit": "커밋을 1개 아래로 이동", "MoveUpCommit": "커밋을 1개 위로 이동", - "CannotMoveAnyFurther": "", - "EditCommit": "", "EditCommitTooltip": "커밋을 편집", "AmendCommitTooltip": "Amend commit with staged changes", - "Amend": "", "ResetAuthor": "Reset commit author", - "ResetAuthorTooltip": "", - "SetAuthor": "", - "SetAuthorTooltip": "", - "AddCoAuthor": "", - "AmendCommitAttribute": "", - "AmendCommitAttributeTooltip": "", - "SetAuthorPromptTitle": "", - "AddCoAuthorPromptTitle": "", - "AddCoAuthorTooltip": "", "SureResetCommitAuthor": "The author field of this commit will be updated to match the configured user. This also renews the author timestamp. Continue?", "RewordCommitEditor": "에디터에서 커밋메시지 수정", "NoCommitsThisBranch": "이 브랜치에 커밋이 없습니다.", - "UpdateRefHere": "", "Error": "오류", "Undo": "되돌리기", "UndoReflog": "되돌리기 (reflog) (실험적)", "RedoReflog": "다시 실행 (reflog) (실험적)", - "UndoTooltip": "", - "RedoTooltip": "", - "UndoMergeResolveTooltip": "", - "DiscardAllTooltip": "", - "DiscardUnstagedTooltip": "", "Pop": "Pop", - "StashPopTooltip": "", "Drop": "Drop", - "StashDropTooltip": "", "Apply": "적용", - "StashApplyTooltip": "", "NoStashEntries": "Stash가 존재하지 않습니다.", "StashDrop": "Stash를 삭제", "SureDropStashEntry": "정말로 Stash를 삭제하시겠습니까?", @@ -175,7 +95,6 @@ "StashApply": "Stash 적용", "SureApplyStashEntry": "정말로 Stash를 적용하시겠습니까?", "NoTrackedStagedFilesStash": "You have no tracked/staged files to stash", - "NoFilesToStash": "", "StashChanges": "변경을 Stash", "RenameStash": "Rename stash", "RenameStashPrompt": "Rename stash: {{.stashName}}", @@ -184,7 +103,6 @@ "ForcePush": "강제 푸시", "ForcePushPrompt": "브랜치가 원격 브랜치에서 분기하고 있습니다. 'esc'를 눌러 취소하거나, 'enter'를 눌러 강제로 푸시하세요.", "ForcePushDisabled": "브랜치가 원격 브랜치에서 분기하고 있습니다. force push가 비활성화 되었습니다.", - "UpdatesRejected": "", "UpdatesRejectedAndForcePushDisabled": "업데이트가 거부되었으며 강제 푸시를 비활성화했습니다.", "CheckForUpdate": "업데이트 확인", "CheckingForUpdates": "업데이트 확인 중...", @@ -203,18 +121,12 @@ "MergeToolTitle": "병합 도구", "MergeToolPrompt": "정말로 `git mergetool`을 여시겠습니까?", "IntroPopupMessage": "\nlazygit!를 이용해주셔서 감사합니다. Seriously you rock. Three things to share with you:\n\n 1) lazygit의 기능에 대해 알아보려면 다음 비디오를 참조하세요.\n https://youtu.be/CPLdltN7wgE\n\n 2) 다음 사이트에서 최신 릴리스 노트를 읽어보세요.:\n https://github.com/jesseduffield/lazygit/releases\n\n 3) 만약 당신이 Git을 사용한다면, 그것은 당신을 프로그래머로 만들 것입니다!\n\t 당신의 도움으로 우리는 lazygit을 더 좋게 만들 수 있습니다, 그러니 기여자가 되는 것을 고려해보세요. 그리고 재미에 참여하세요:\n https://github.com/jesseduffield/lazygit\n 또한 오른쪽 하단의 기부 버튼을 클릭하여 저를 후원하고 작업할 내용을 알려주실 수 있습니다.\n 또는 저장소에 스타를 눌러 사랑을 공유할 수도 있습니다!\n", - "DeprecatedEditConfigWarning": "", "GitconfigParseErr": "따옴표로 묶이지 않은 '\\' 문자가 있어서 Gogit이 gitconfig 파일을 분석하지 못했습니다. 이를 제거하면 문제가 해결됩니다.", "EditFile": "파일 편집", - "EditFileTooltip": "", "OpenFile": "파일 닫기", - "OpenFileTooltip": "", - "OpenInEditor": "", "IgnoreFile": ".gitignore에 추가", - "ExcludeFile": "", "RefreshFiles": "파일 새로고침", "Merge": "현재 브랜치에 병합", - "MergeBranchTooltip": "", "ConfirmQuit": "정말로 종료하시겠습니까?", "SwitchRepo": "최근에 사용한 저장소로 전환", "AllBranchesLogGraph": "모든 브랜치 로그 표시", @@ -222,49 +134,31 @@ "CopyPullRequestURL": "풀 리퀘스트 URL을 클립보드에 복사", "NoBranchOnRemote": "브랜치가 원격에 없습니다. 원격에 먼저 푸시해야합니다.", "Fetch": "Fetch", - "FetchTooltip": "", "NoAutomaticGitFetchTitle": "자동 git 업데이트) 없음", "NoAutomaticGitFetchBody": "Lazygit은 private 저장소에서 \"git fetch\"를 사용할 수 없습니다. 파일 패널에서 'f'를 사용하여 \"git fetch\"를 수동으로 실행하세요.", "FileEnter": "Stage individual hunks/lines for file, or collapse/expand for directory", - "FileEnterTooltip": "", "FileStagingRequirements": "추적된 파일에 대해 개별 라인만 stage할 수 있습니다.", "StageSelectionTooltip": "선택한 행을 staged / unstaged", "DiscardSelection": "변경을 삭제 (git reset)", - "DiscardSelectionTooltip": "", "ToggleSelectHunk": "Toggle select hunk", - "ToggleSelectHunkTooltip": "", "ToggleSelectionForPatch": "Line(s)을 패치에 추가/삭제", - "ToggleSelectionForPatchTooltip": "", - "EditHunk": "", - "EditHunkTooltip": "", "ToggleStagingView": "패널 전환", - "ToggleStagingViewTooltip": "", "ReturnToFilesPanel": "파일 목록으로 돌아가기", "FastForward": "Fast-forward this branch from its upstream", - "FastForwardTooltip": "", "FastForwarding": "Fast-forwarding", "FoundConflictsTitle": "Auto-merge failed", - "ViewConflictsMenuItem": "", - "AbortMenuItem": "", "PickHunk": "Pick hunk", "PickAllHunks": "Pick all hunks", "ViewMergeRebaseOptions": "View merge/rebase options", - "ViewMergeRebaseOptionsTooltip": "", - "ViewMergeOptions": "", - "ViewRebaseOptions": "", "NotMergingOrRebasing": "You are currently neither rebasing nor merging", - "AlreadyRebasing": "", "RecentRepos": "최근에 사용한 저장소", "MergeOptionsTitle": "Merge options", "RebaseOptionsTitle": "Rebase options", "CommitSummaryTitle": "커밋메시지", - "CommitDescriptionTitle": "", - "CommitDescriptionSubTitle": "", "LocalBranchesTitle": "브랜치", "SearchTitle": "검색", "TagsTitle": "태그", "MenuTitle": "메뉴", - "CommitMenuTitle": "", "RemotesTitle": "원격", "RemoteBranchesTitle": "원격 브랜치", "PatchBuildingTitle": "메인 패널 (Patch Building)", @@ -272,35 +166,18 @@ "SecondaryTitle": "Secondary", "ReflogCommitsTitle": "Reflog", "ConflictsResolved": "모든 병합 충돌이 해결되었습니다. 계속 할까요?", - "Continue": "", - "RebasingTitle": "", - "RebasingFromBaseCommitTitle": "", - "SimpleRebase": "", - "InteractiveRebase": "", - "RebaseOntoBaseBranch": "", - "InteractiveRebaseTooltip": "", - "RebaseOntoBaseBranchTooltip": "", - "MustSelectTodoCommits": "", "ConfirmMerge": "정말로 '{{.selectedBranch}}' 을(를) '{{.checkedOutBranch}}'에 병합하시겠습니까?", "FwdNoUpstream": "Cannot fast-forward a branch with no upstream", "FwdNoLocalUpstream": "Cannot fast-forward a branch whose remote is not registered locally", "FwdCommitsToPush": "Cannot fast-forward a branch with commits to push", - "PullRequestNoUpstream": "", "ErrorOccurred": "오류가 발생했습니다! issue를 작성해 주세요: ", "NoRoom": "Not enough room", "YouAreHere": "현재 위치", - "YouDied": "", "RewordNotSupported": "Rewording commits while interactively rebasing is not currently supported", - "ChangingThisActionIsNotAllowed": "", "CherryPickCopy": "커밋을 복사 (cherry-pick)", - "CherryPickCopyTooltip": "", - "CherryPickCopyRange": "", - "CherryPickCopyRangeTooltip": "", "PasteCommits": "커밋을 붙여넣기 (cherry-pick)", "SureCherryPick": "정말로 복사한 커밋을 이 브랜치에 체리픽하시겠습니까?", "CherryPick": "체리픽", - "CannotCherryPickNonCommit": "", - "CannotCherryPickMergeCommit": "", "Donate": "후원", "AskQuestion": "질문하기", "PrevLine": "이전 줄 선택", @@ -319,208 +196,113 @@ "AmendCommitPrompt": "Are you sure you want to amend this commit with your staged files?", "DropCommitTitle": "커밋 삭제", "DropCommitPrompt": "정말로 선택한 커밋을 삭제하시겠습니까?", - "DropUpdateRefPrompt": "", "PullingStatus": "업데이트 중", "PushingStatus": "푸시 중", "FetchingStatus": "패치 중", "SquashingStatus": "Squashing", "FixingStatus": "Fixing up", "DeletingStatus": "Deleting", - "DroppingStatus": "", "MovingStatus": "Moving", "RebasingStatus": "Rebasing", - "MergingStatus": "", - "LowercaseRebasingStatus": "", - "LowercaseMergingStatus": "", "AmendingStatus": "Amending", "CherryPickingStatus": "Cherry-picking", "UndoingStatus": "Undoing", "RedoingStatus": "Redoing", "CheckingOutStatus": "Checking out", "CommittingStatus": "Committing", - "RevertingStatus": "", - "CreatingFixupCommitStatus": "", "CommitFiles": "Commit files", "SubCommitsDynamicTitle": "커밋 (%s)", "CommitFilesDynamicTitle": "Diff files (%s)", "RemoteBranchesDynamicTitle": "원격브랜치 (%s)", "ViewItemFiles": "View selected item's files", - "ViewItemFilesTooltip": "", "CommitFilesTitle": "커밋 파일", "CheckoutCommitFileTooltip": "Checkout file", - "CanOnlyDiscardFromLocalCommits": "", - "Remove": "", "DiscardOldFileChangeTooltip": "Discard this commit's changes to this file", "DiscardFileChangesTitle": "파일 변경 사항 버리기", "DiscardFileChangesPrompt": "Are you sure you want to discard this commit's changes to this file? If this file was created in this commit, it will be deleted", "DisabledForGPG": "Feature not available for users using GPG", "CreateRepo": "Git 저장소가 아닙니다. 저장소를 생성하시겠습니까? (y/n): ", - "BareRepo": "", - "InitialBranch": "", - "NoRecentRepositories": "", - "IncorrectNotARepository": "", "AutoStashTitle": "Autostash?", "AutoStashPrompt": "You must stash and pop your changes to bring them across. Do this automatically? (enter/esc)", "StashPrefix": "Auto-stashing changes for ", "Discard": "View 'discard changes' options", - "DiscardChangesTitle": "", - "DiscardFileChangesTooltip": "", "Cancel": "취소", "DiscardAllChanges": "모든 변경사항 버리기", "DiscardUnstagedChanges": "Discard unstaged changes", "DiscardAllChangesToAllFiles": "Nuke working tree", "DiscardAnyUnstagedChanges": "Discard unstaged changes", "DiscardUntrackedFiles": "Discard untracked files", - "DiscardStagedChanges": "", "HardReset": "Hard reset", - "BranchDeleteTooltip": "", - "TagDeleteTooltip": "", - "Delete": "", - "Reset": "", - "ResetTooltip": "", "ViewResetOptions": "View reset options", - "FileResetOptionsTooltip": "", "CreateFixupCommit": "Create fixup commit", "CreateFixupCommitTooltip": "Create fixup commit for this commit", - "CreateAmendCommit": "", - "FixupMenu_Fixup": "", - "FixupMenu_FixupTooltip": "", - "FixupMenu_AmendWithChanges": "", - "FixupMenu_AmendWithChangesTooltip": "", - "FixupMenu_AmendWithoutChanges": "", - "FixupMenu_AmendWithoutChangesTooltip": "", "SquashAboveCommitsTooltip": "Squash all 'fixup!' commits above selected commit (autosquash)", - "SquashCommitsAboveSelectedTooltip": "", - "SquashCommitsInCurrentBranchTooltip": "", - "SquashAboveCommits": "", - "SquashCommitsInCurrentBranch": "", - "SquashCommitsAboveSelectedCommit": "", - "CannotSquashCommitsInCurrentBranch": "", "ExecuteCustomCommand": "Execute custom command", - "ExecuteCustomCommandTooltip": "", "CustomCommand": "Custom command:", "CommitChangesWithoutHook": "Commit changes without pre-commit hook", "SkipHookPrefixNotConfigured": "You have not configured a commit message prefix for skipping hooks. Set `git.skipHookPrefix = 'WIP'` in your config", "ResetTo": "Reset to", - "ResetSoftTooltip": "", - "ResetMixedTooltip": "", - "ResetHardTooltip": "", "PressEnterToReturn": "엔터를 눌러 lazygit으로 돌아갑니다.", "ViewStashOptions": "Stash 옵션 보기", - "ViewStashOptionsTooltip": "", - "Stash": "", - "StashTooltip": "", "StashAllChanges": "변경사항을 Stash", "StashStagedChanges": "Stash staged changes", - "StashAllChangesKeepIndex": "", - "StashUnstagedChanges": "", - "StashIncludeUntrackedChanges": "", "StashOptions": "Stash 옵션", "NotARepository": "Error: must be run inside a git repository", - "WorkingDirectoryDoesNotExist": "", "Jump": "패널로 이동", "ScrollLeftRight": "좌우로 스크롤", "ScrollLeft": "우 스크롤", "ScrollRight": "좌 스크롤", "DiscardPatch": "Patch 버리기", "DiscardPatchConfirm": "You can only build a patch from one commit/stash-entry at a time. Discard current patch?", - "DiscardPatchSameCommitConfirm": "", "CantPatchWhileRebasingError": "You cannot build a patch or run patch commands while in a merging or rebasing state", "ToggleAddToPatch": "Toggle file included in patch", - "ToggleAddToPatchTooltip": "", "ToggleAllInPatch": "Toggle all files included in patch", - "ToggleAllInPatchTooltip": "", "UpdatingPatch": "Updating patch", "ViewPatchOptions": "커스텀 Patch 옵션 보기", "PatchOptionsTitle": "Patch 옵션", "NoPatchError": "No patch created yet. To start building a patch, use 'space' on a commit file or enter to add specific lines", - "EmptyPatchError": "", "EnterCommitFile": "Enter file to add selected lines to the patch (or toggle directory collapsed)", - "EnterCommitFileTooltip": "", - "ExitCustomPatchBuilder": "", "EnterUpstream": "'\u003cremote\u003e \u003cbranchname\u003e'와 같은 형식으로 입력하세요.", "InvalidUpstream": "Upstream의 형식이 잘못되었습니다.'\u003cremote\u003e \u003cbranchname\u003e' 와 같은 형식으로 입력하세요.", "ReturnToRemotesList": "원격목록으로 돌아가기", "NewRemote": "새로운 Remote 추가", "NewRemoteName": "새로운 Remote 이름:", "NewRemoteUrl": "새로운 Remote URL:", - "ViewBranches": "", "EditRemoteName": "{{.remoteName}} 의 새로운 Remote 이름 입력:", "EditRemoteUrl": "{{.remoteName}} 의 새로운 Remote URL 입력:", "RemoveRemote": "Remote를 삭제", - "RemoveRemoteTooltip": "", "RemoveRemotePrompt": "정말로 Remote를 삭제하시겠습니까?", "DeleteRemoteBranch": "원격 브랜치를 삭제", "DeleteRemoteBranchMessage": "정말로 원격 브랜치를 삭제하시겠습니까?", - "DeleteRemoteBranchTooltip": "", - "SetAsUpstream": "", - "SetAsUpstreamTooltip": "", "SetUpstream": "Set as upstream of checked-out branch", - "UnsetUpstream": "", - "ViewDivergenceFromUpstream": "", - "ViewDivergenceFromBaseBranch": "", - "CouldNotDetermineBaseBranch": "", - "DivergenceSectionHeaderLocal": "", - "DivergenceSectionHeaderRemote": "", - "ViewUpstreamResetOptions": "", - "ViewUpstreamResetOptionsTooltip": "", - "ViewUpstreamRebaseOptions": "", - "ViewUpstreamRebaseOptionsTooltip": "", - "UpstreamGenericName": "", "SetUpstreamTitle": "Set upstream branch", "SetUpstreamMessage": "Are you sure you want to set the upstream branch of '{{.checkedOut}}' to '{{.selected}}'", "EditRemoteTooltip": "Remote를 수정", "TagCommit": "Tag commit", - "TagCommitTooltip": "", "TagMenuTitle": "태그 작성", "TagNameTitle": "태그 이름", "TagMessageTitle": "태그 메시지", "LightweightTag": "Lightweight tag", "AnnotatedTag": "Annotated tag", - "DeleteTagTitle": "", - "DeleteLocalTag": "", - "DeleteRemoteTag": "", - "SelectRemoteTagUpstream": "", - "DeleteRemoteTagPrompt": "", - "RemoteTagDeletedMessage": "", "PushTagTitle": "원격에 태그 '{{.tagName}}' 를 푸시", "PushTag": "태그를 push", - "PushTagTooltip": "", "NewTag": "태그를 생성", - "NewTagTooltip": "", - "CreatingTag": "", - "ForceTag": "", - "ForceTagPrompt": "", "FetchRemoteTooltip": "원격을 업데이트", "FetchingRemoteStatus": "원격을 업데이트 중", "CheckoutCommit": "커밋을 체크아웃", - "CheckoutCommitTooltip": "", "SureCheckoutThisCommit": "정말로 선택한 커밋을 체크아웃 하시겠습니까?", "GitFlowOptions": "Git-flow 옵션 보기", "NotAGitFlowBranch": "This does not seem to be a git flow branch", "NewBranchNamePrompt": "새로운 브랜치 이름 입력", "IgnoreTracked": "Ignore tracked file", - "ExcludeTracked": "", "IgnoreTrackedPrompt": "Are you sure you want to ignore a tracked file?", - "ExcludeTrackedPrompt": "", "ViewResetToUpstreamOptions": "View upstream reset options", "NextScreenMode": "다음 스크린 모드 (normal/half/fullscreen)", "PrevScreenMode": "이전 스크린 모드", "StartSearch": "검색 시작", - "StartFilter": "", "Panel": "패널", "Keybindings": "키 바인딩", - "KeybindingsLegend": "", - "KeybindingsMenuSectionLocal": "", - "KeybindingsMenuSectionGlobal": "", - "KeybindingsMenuSectionNavigation": "", "RenameBranch": "브랜치 이름 변경", - "Upstream": "", - "UpstreamTooltip": "", - "BranchUpstreamOptionsTitle": "", - "ViewBranchUpstreamOptions": "", - "ViewBranchUpstreamOptionsTooltip": "", - "UpstreamNotSetError": "", "NewGitFlowBranchPrompt": "New {{.branchType}} name:", "RenameBranchWarning": "This branch is tracking a remote. This action will only rename the local branch name, not the name of the remote branch. Continue?", "OpenKeybindingsMenu": "매뉴 열기", @@ -539,16 +321,11 @@ "FilteringBy": "Filtering by", "ResetInParentheses": "(reset)", "OpenFilteringMenu": "View filter-by-path options", - "OpenFilteringMenuTooltip": "", "FilterBy": "Filter by", "ExitFilterMode": "Stop filtering by path", - "ExitFilterModeAuthor": "", "FilterPathOption": "Enter path to filter by", - "FilterAuthorOption": "", "EnterFileName": "Enter path:", - "EnterAuthor": "", "FilteringMenuTitle": "Filtering", - "WillCancelExistingFilterTooltip": "", "MustExitFilterModeTitle": "Command not available", "MustExitFilterModePrompt": "Command not available in filtered mode. Exit filtered mode?", "Diff": "Diff", @@ -558,9 +335,7 @@ "DiffingMenuTitle": "Diff", "SwapDiff": "Reverse diff direction", "ViewDiffingOptions": "Diff 메뉴 열기", - "ViewDiffingOptionsTooltip": "", "OpenCommandLogMenu": "명령어 로그 메뉴 열기", - "OpenCommandLogMenuTooltip": "", "ShowingGitDiff": "Showing output for:", "CommitDiff": "커밋의 iff", "CopyCommitHashToClipboard": "커밋 해시를 클립보드에 복사", @@ -568,10 +343,8 @@ "CommitURL": "커밋 URL", "CopyCommitMessageToClipboard": "커밋 메시지를 클립보드에 복사", "CommitMessage": "커밋 메시지", - "CommitSubject": "", "CommitAuthor": "커밋 작성자", "CopyCommitAttributeToClipboard": "커밋 attribute 복사", - "CopyCommitAttributeToClipboardTooltip": "", "CopyBranchNameToClipboard": "브랜치명을 클립보드에 복사", "CopyPathToClipboard": "파일명을 클립보드에 복사", "CommitPrefixPatternError": "Error in commitPrefix pattern", @@ -580,7 +353,6 @@ "NoFilesStagedPrompt": "파일이 Staged 되지 않았습니다. 모든 파일을 커밋하시겠습니까?", "BranchNotFoundTitle": "브랜치를 찾을 수 없습니다.", "BranchNotFoundPrompt": "브랜치를 찾을 수 없습니다. 새로운 브랜치를 생성합니다.", - "BranchUnknown": "", "DiscardChangeTitle": "선택한 라인을 unstaged", "DiscardChangePrompt": "정말로 선택한 라인을 삭제 (git reset) 하시겠습니까? 이 조작은 취소할 수 없습니다.\n이 경고를 비활성화 하려면 설정 파일의 'gui.skipDiscardChangeWarning' 를 true로 설정하세요.", "CreateNewBranchFromCommit": "커밋에서 새 브랜치를 만듭니다.", @@ -591,10 +363,8 @@ "SubmoduleStashAndReset": "Stash uncommitted submodule changes and update", "AndResetSubmodules": "And reset submodules", "EnterSubmoduleTooltip": "서브모듈 열기", - "Enter": "", "CopySubmoduleNameToClipboard": "서브모듈 이름을 클립보드에 복사", "RemoveSubmodule": "서브모듈 삭제", - "RemoveSubmoduleTooltip": "", "RemoveSubmodulePrompt": "정말로 서브모듈 '%s'및 해당 디렉토리를 제거하시겠습니까? 이것은 되돌릴 수 없습니다.", "ResettingSubmoduleStatus": "서브모듈를 리셋", "NewSubmoduleName": "새로운 서브모듈이름 :", @@ -607,8 +377,6 @@ "EditSubmoduleUrl": "서브모듈의 URL을 수정", "InitializingSubmoduleStatus": "서브모듈 초기화", "InitSubmoduleTooltip": "서브모듈 초기화", - "Update": "", - "Initialize": "", "SubmoduleUpdateTooltip": "서브모듈 업데이트", "UpdatingSubmoduleStatus": "서브모듈 업데이트", "BulkInitSubmodules": "서브모듈 일괄 초기화", @@ -622,21 +390,17 @@ "NavigationTitle": "List panel navigation", "SuggestionsCheatsheetTitle": "추천", "SuggestionsTitle": "추천 (press %s to focus)", - "SuggestionsSubtitle": "", "ExtrasTitle": "명령어 로그", "PushingTagStatus": "Pushing tag", "PullRequestURLCopiedToClipboard": "풀 리퀘스트의 URL을 클립보드에 복사했습니다.", "CommitDiffCopiedToClipboard": "커밋의 Diff를 클립보드에 복사했습니다.", "CommitURLCopiedToClipboard": "커밋의 URL를 클립보드에 복사했습니다.", "CommitMessageCopiedToClipboard": "커밋 메시지를 클립보드에 복사했습니다.", - "CommitSubjectCopiedToClipboard": "", "CommitAuthorCopiedToClipboard": "커밋 작성자를 클립보드에 복사했습니다.", - "PatchCopiedToClipboard": "", "CopiedToClipboard": "클립보드에 복사했습니다.", "ErrCannotEditDirectory": "디렉토리는 편집할 수 없습니다.", "ErrStageDirWithInlineMergeConflicts": "병합 충돌이 발생한 파일을 포함하는 디렉토리는 Staged/untaged할 수 없습니다. 병합 충돌을 먼저 해결하세요.", "ErrRepositoryMovedOrDeleted": "저장소를 찾을 수 없습니다. 이미 삭제되었거나 이동되었을 가능성이 있습니다. ¯\\_(ツ)_/¯", - "ErrWorktreeMovedOrRemoved": "", "CommandLog": "명령어 로그", "ToggleShowCommandLog": "명령어 로그 표시 여부 전환", "FocusCommandLog": "명령어 로그에 포커스", @@ -644,14 +408,8 @@ "RandomTip": "랜덤 Tip", "SelectParentCommitForMerge": "병합을 위한 상위 커밋 선택", "ToggleWhitespaceInDiffView": "공백문자를 Diff 뷰에서 표시 여부 전환", - "ToggleWhitespaceInDiffViewTooltip": "", - "IgnoreWhitespaceDiffViewSubTitle": "", - "IgnoreWhitespaceNotSupportedHere": "", "IncreaseContextInDiffView": "Diff 보기의 변경 사항 주위에 표시되는 컨텍스트의 크기를 늘리기", - "IncreaseContextInDiffViewTooltip": "", "DecreaseContextInDiffView": "Diff 보기의 변경 사항 주위에 표시되는 컨텍스트 크기 줄이기", - "DecreaseContextInDiffViewTooltip": "", - "DiffContextSizeChanged": "", "CreatePullRequestOptions": "풀 리퀘스트 생성 옵션", "DefaultBranch": "기본 브랜치", "SelectBranch": "브랜치를 선택", @@ -666,15 +424,9 @@ "AbortTitle": "%s 중지", "AbortPrompt": "정말로 실행중인 %s 를 중지할까요?", "OpenLogMenu": "로그 메뉴 열기", - "OpenLogMenuTooltip": "", "LogMenuTitle": "커밋 로그 옵션", "ToggleShowGitGraphAll": "Toggle show whole git graph (pass the `--all` flag to `git log`)", "ShowGitGraph": "커밋 그래프 표시", - "SortOrder": "", - "SortAlphabetical": "", - "SortByDate": "", - "SortByRecency": "", - "SortBasedOnReflog": "", "SortCommits": "커밋 정렬", "CantChangeContextSizeError": "Cannot change context while in patch building mode because we were too lazy to support it when releasing the feature. If you really want it, please let us know!", "OpenCommitInBrowser": "브라우저에서 커밋 열기", @@ -685,100 +437,12 @@ "CheckoutPrompt": "Are you sure you want to checkout '%s'?", "HardResetAutostashPrompt": "Are you sure you want to hard reset to '%s'? An auto-stash will be performed if necessary.", "UpstreamGone": "(upstream gone)", - "NukeDescription": "", - "DiscardStagedChangesDescription": "", - "EmptyOutput": "", - "Patch": "", - "CustomPatch": "", - "CommitsCopied": "", - "CommitCopied": "", - "ResetPatch": "", - "ResetPatchTooltip": "", - "ApplyPatch": "", - "ApplyPatchTooltip": "", - "ApplyPatchInReverse": "", - "ApplyPatchInReverseTooltip": "", - "RemovePatchFromOriginalCommit": "", - "RemovePatchFromOriginalCommitTooltip": "", - "MovePatchOutIntoIndex": "", - "MovePatchOutIntoIndexTooltip": "", - "MovePatchIntoNewCommit": "", - "MovePatchIntoNewCommitTooltip": "", - "MovePatchToSelectedCommit": "", - "MovePatchToSelectedCommitTooltip": "", - "CopyPatchToClipboard": "", - "NoMatchesFor": "", - "MatchesFor": "", - "SearchKeybindings": "", - "SearchPrefix": "", - "FilterPrefix": "", - "ExitSearchMode": "", - "ExitTextFilterMode": "", - "Switch": "", - "SwitchToWorktree": "", - "SwitchToWorktreeTooltip": "", - "AlreadyCheckedOutByWorktree": "", - "BranchCheckedOutByWorktree": "", - "DetachWorktreeTooltip": "", - "Switching": "", - "RemoveWorktree": "", - "RemoveWorktreeTitle": "", - "DetachWorktree": "", - "DetachingWorktree": "", - "WorktreesTitle": "", - "WorktreeTitle": "", - "RemoveWorktreePrompt": "", - "ForceRemoveWorktreePrompt": "", - "RemovingWorktree": "", - "AddingWorktree": "", - "CantDeleteCurrentWorktree": "", - "AlreadyInWorktree": "", - "CantDeleteMainWorktree": "", - "NoWorktreesThisRepo": "", - "MissingWorktree": "", - "MainWorktree": "", - "NewWorktree": "", - "NewWorktreePath": "", - "NewWorktreeBase": "", - "RemoveWorktreeTooltip": "", - "BranchNameCannotBeBlank": "", - "NewBranchName": "", - "NewBranchNameLeaveBlank": "", - "ViewWorktreeOptions": "", - "CreateWorktreeFrom": "", - "CreateWorktreeFromDetached": "", - "LcWorktree": "", - "ChangingDirectoryTo": "", - "Name": "", - "Branch": "", - "Path": "", - "MarkedBaseCommitStatus": "", - "MarkAsBaseCommit": "", - "MarkAsBaseCommitTooltip": "", - "MarkedCommitMarker": "", - "PleaseGoToURL": "", - "NoCopiedCommits": "", - "DisabledMenuItemPrefix": "", - "QuickStartInteractiveRebase": "", - "QuickStartInteractiveRebaseTooltip": "", - "CannotQuickStartInteractiveRebase": "", "ToggleRangeSelect": "드래그 선택 전환", - "RangeSelectUp": "", - "RangeSelectDown": "", - "RangeSelectNotSupported": "", - "NoItemSelected": "", - "SelectedItemIsNotABranch": "", - "SelectedItemDoesNotHaveFiles": "", - "RangeSelectNotSupportedForSubmodules": "", - "OldCherryPickKeyWarning": "", - "CommandDoesNotSupportOpeningInEditor": "", "Actions": { "CheckoutCommit": "커밋 체크아웃", "CheckoutTag": "태그 체크아웃", "CheckoutBranch": "브랜치 체크아웃", "ForceCheckoutBranch": "브랜치 Force 체크아웃", - "DeleteLocalBranch": "", - "DeleteBranch": "", "Merge": "병합", "RebaseBranch": "브랜치 리베이스", "RenameBranch": "브랜치 이름 변경", @@ -794,21 +458,17 @@ "EditCommit": "커밋 수정", "AmendCommit": "커밋 Amend", "ResetCommitAuthor": "커밋 작성자 Reset", - "SetCommitAuthor": "", - "AddCommitCoAuthor": "", "RevertCommit": "커밋 Revert", "CreateFixupCommit": "Fixup 커밋 생성", "SquashAllAboveFixupCommits": "Squash all above fixup commits", "MoveCommitUp": "Move commit up", "MoveCommitDown": "Move commit down", "CopyCommitMessageToClipboard": "커밋 메시지를 클립보드에 복사", - "CopyCommitSubjectToClipboard": "", "CopyCommitDiffToClipboard": "커밋 diff를 클립보드에 복사", "CopyCommitHashToClipboard": "커밋 해시를 클립보드에 복사", "CopyCommitURLToClipboard": "커밋 URL를 클립보드에 복사", "CopyCommitAuthorToClipboard": "커밋 작성자를 클립보드에 복사", "CopyCommitAttributeToClipboard": "클립보드에 복사", - "CopyPatchToClipboard": "", "CustomCommand": "Custom command", "DiscardAllChangesInDirectory": "Discard all changes in directory", "DiscardUnstagedChangesInDirectory": "Discard unstaged changes in directory", @@ -820,20 +480,15 @@ "UnstageAllFiles": "Unstage all files", "StageAllFiles": "Stage all files", "IgnoreExcludeFile": "Ignore file", - "IgnoreFileErr": "", - "ExcludeFile": "", - "ExcludeGitIgnoreErr": "", "Commit": "커밋", "EditFile": "파일 수정", "Push": "푸시", "Pull": "업데이트(Pull)", "OpenFile": "파일 열기", - "OpenFileTooltip": "", "StashAllChanges": "Stash all changes", "StashAllChangesKeepIndex": "Stash all changes and keep index", "StashStagedChanges": "Stash staged changes", "StashUnstagedChanges": "Stash unstaged changes", - "StashIncludeUntrackedChanges": "", "GitFlowFinish": "git flow finish", "GitFlowStart": "git flow start", "CopyToClipboard": "Copy to clipboard", @@ -861,8 +516,6 @@ "UpdateSubmodule": "서브모듈 업데이트", "CreateLightweightTag": "Create lightweight tag", "CreateAnnotatedTag": "Create annotated tag", - "DeleteLocalTag": "", - "DeleteRemoteTag": "", "PushTag": "태그 푸시g", "NukeWorkingTree": "Nuke working tree", "DiscardUnstagedFileChanges": "Unstaged 파일 변경사항 버리기", @@ -874,51 +527,24 @@ "Undo": "되돌리기", "Redo": "다시 실행", "CopyPullRequestURL": "풀 리퀘스트 URL 복사", - "OpenDiffTool": "", "OpenMergeTool": "병합 도구 열기", "OpenCommitInBrowser": "브라우저에서 커밋 열기", "OpenPullRequest": "브라우저에서 풀 리퀘스트 열기", "StartBisect": "Start bisect", "ResetBisect": "Reset bisect", "BisectSkip": "Bisect skip", - "BisectMark": "Bisect mark", - "RemoveWorktree": "", - "AddWorktree": "" + "BisectMark": "Bisect mark" }, "Bisect": { "MarkStart": "Mark %s as %s (start bisect)", - "MarkSkipCurrent": "", - "MarkSkipSelected": "", "ResetTitle": "'git bisect' 를 리셋", "ResetPrompt": "정말로 'git bisect' 를 리셋하시겠습니까?", "ResetOption": "Bisect를 리셋", - "ChooseTerms": "", - "OldTermPrompt": "", - "NewTermPrompt": "", "BisectMenuTitle": "Bisect", "Mark": "Mark %s as %s", "SkipCurrent": "%s 를 스킵", - "SkipSelected": "", "CompleteTitle": "Bisect 완료", "CompletePrompt": "Bisect complete! The following commit introduced the change:\n\n%s\n\nDo you want to reset 'git bisect' now?", - "CompletePromptIndeterminate": "Bisect complete! Some commits were skipped, so any of the following commits may have introduced the change:\n\n%s\n\nDo you want to reset 'git bisect' now?", - "Bisecting": "" - }, - "Log": { - "EditRebase": "", - "MoveCommitUp": "", - "MoveCommitDown": "", - "CherryPickCommits": "", - "HandleUndo": "", - "HandleMidRebaseCommand": "", - "RemoveFile": "", - "CopyToClipboard": "", - "Remove": "", - "CreateFileWithContent": "", - "AppendingLineToFile": "", - "EditRebaseFromBaseCommit": "" - }, - "BreakingChangesTitle": "", - "BreakingChangesMessage": "", - "BreakingChangesByVersion": null + "CompletePromptIndeterminate": "Bisect complete! Some commits were skipped, so any of the following commits may have introduced the change:\n\n%s\n\nDo you want to reset 'git bisect' now?" + } } diff --git a/pkg/i18n/translations/nl.json b/pkg/i18n/translations/nl.json index cad8517b013..ad54b37368d 100644 --- a/pkg/i18n/translations/nl.json +++ b/pkg/i18n/translations/nl.json @@ -5,79 +5,39 @@ "BranchesTitle": "Branches", "CommitsTitle": "Commits", "StashTitle": "Stash", - "SnakeTitle": "", - "EasterEgg": "", "UnstagedChanges": "Unstaged wijzigingen", "StagedChanges": "Staged wijzigingen", "MainTitle": "Hoofd", "StagingTitle": "Staging", "MergingTitle": "Mergen", - "MergeConfirmTitle": "", "NormalTitle": "Normaal", - "LogTitle": "", "CommitSummary": "Commitbericht", "CredentialsUsername": "Gebruikersnaam", "CredentialsPassword": "Wachtwoord", "CredentialsPassphrase": "Voer een wachtwoordzin in voor de SSH-sleutel", - "CredentialsPIN": "", "PassUnameWrong": "Wachtwoord en/of gebruikersnaam verkeerd", "Commit": "Commit veranderingen", - "CommitTooltip": "", "AmendLastCommit": "Wijzig laatste commit", "AmendLastCommitTitle": "Wijzig laatste commit", "SureToAmend": "Weet je zeker dat je de laatste commit wilt wijzigen? U kunt het commit-bericht wijzigen vanuit het commits-paneel.", "NoCommitToAmend": "Er is geen commits om te wijzigen.", "CommitChangesWithEditor": "Commit veranderingen met de git editor", - "FindBaseCommitForFixup": "", - "FindBaseCommitForFixupTooltip": "", - "NoBaseCommitsFound": "", - "MultipleBaseCommitsFoundStaged": "", - "MultipleBaseCommitsFoundUnstaged": "", - "BaseCommitIsAlreadyOnMainBranch": "", - "BaseCommitIsNotInCurrentView": "", - "HunksWithOnlyAddedLinesWarning": "", "StatusTitle": "Status", "GlobalTitle": "Globale sneltoetsen", "Menu": "Menu", "Execute": "Uitvoeren", "Stage": "Toggle staged", - "StageTooltip": "", "ToggleStagedAll": "Toggle staged alle", - "ToggleStagedAllTooltip": "", "ToggleTreeView": "Toggle bestandsboom weergave", - "ToggleTreeViewTooltip": "", - "OpenDiffTool": "", - "OpenMergeTool": "", - "OpenMergeToolTooltip": "", "Refresh": "Verversen", - "RefreshTooltip": "", "Push": "Push", "Pull": "Pull", - "PushTooltip": "", - "PullTooltip": "", "Scroll": "Scroll", - "FileFilter": "", - "CopyToClipboardMenu": "", - "CopyFileName": "", - "CopyFilePath": "", - "CopyFileDiffTooltip": "", - "CopySelectedDiff": "", - "CopyAllFilesDiff": "", - "NoContentToCopyError": "", - "FileNameCopiedToast": "", - "FilePathCopiedToast": "", - "FileDiffCopiedToast": "", - "AllFilesDiffCopiedToast": "", "FilterStagedFiles": "Show only staged files", "FilterUnstagedFiles": "Show only unstaged files", "ResetFilter": "Reset commit file state filter", "MergeConflictsTitle": "Merge conflicten", "Checkout": "Uitchecken", - "CheckoutTooltip": "", - "CantCheckoutBranchWhilePulling": "", - "TagCheckoutTooltip": "", - "RemoteBranchCheckoutTooltip": "", - "CantPullOrPushSameBranchTwice": "", "NoChangedFiles": "Geen veranderde bestanden", "SoftReset": "Zacht reset", "AlreadyCheckedOutBranch": "Je hebt deze branch al uitgecheckt", @@ -86,87 +46,41 @@ "BranchName": "Branch naam", "NewBranchNameBranchOff": "Nieuw branch naam (Branch is afgeleid van '{{.branchName}}')", "CantDeleteCheckOutBranch": "Je kan een uitgecheckte branch niet verwijderen!", - "DeleteBranchTitle": "", - "DeleteLocalBranch": "", - "DeleteRemoteBranchOption": "", - "DeleteRemoteBranchPrompt": "", - "ForceDeleteBranchTitle": "", "ForceDeleteBranchMessage": "Weet je zeker dat je branch '{{.selectedBranchName}}' geforceerd wil verwijderen?", "RebaseBranch": "Rebase branch", - "RebaseBranchTooltip": "", "CantRebaseOntoSelf": "Je kan niet een branch rebasen op zichzelf", "CantMergeBranchIntoItself": "Je kan niet een branch in zichzelf mergen", "ForceCheckout": "Forceer checkout", - "ForceCheckoutTooltip": "", "CheckoutByName": "Uitchecken bij naam", - "CheckoutByNameTooltip": "", - "RemoteBranchCheckoutTitle": "", - "CheckoutTypeNewBranch": "", - "CheckoutTypeNewBranchTooltip": "", - "CheckoutTypeDetachedHead": "", - "CheckoutTypeDetachedHeadTooltip": "", "NewBranch": "Nieuwe branch", - "NewBranchFromStashTooltip": "", "NoBranchesThisRepo": "Geen branches voor deze repo", "CommitWithoutMessageErr": "Je kan geen commit maken zonder commit bericht", "Close": "Sluiten", "CloseCancel": "Sluiten", "Confirm": "Bevestig", "Quit": "Quit", - "SquashTooltip": "", "CannotSquashOrFixupFirstCommit": "There's no commit below to squash into", "Fixup": "Fixup", - "FixupTooltip": "", "SureFixupThisCommit": "Weet je zeker dat je fixup wil uitvoeren op deze commit? De commit hieronder zol worden squashed in deze", "SureSquashThisCommit": "Weet je zeker dat je deze commit wil samenvoegen met de commit hieronder?", "Squash": "Squash", "PickCommitTooltip": "Kies commit (wanneer midden in rebase)", - "Pick": "", - "CantPickDisabledReason": "", - "Edit": "", "RevertCommit": "Commit ongedaan maken", - "Revert": "", - "RevertCommitTooltip": "", "Reword": "Hernoem commit", - "CommitRewordTooltip": "", "DropCommit": "Verwijder commit", - "DropCommitTooltip": "", "MoveDownCommit": "Verplaats commit 1 naar beneden", "MoveUpCommit": "Verplaats commit 1 naar boven", - "CannotMoveAnyFurther": "", - "EditCommit": "", "EditCommitTooltip": "Wijzig commit", "AmendCommitTooltip": "Wijzig commit met staged veranderingen", - "Amend": "", - "ResetAuthor": "", - "ResetAuthorTooltip": "", - "SetAuthor": "", - "SetAuthorTooltip": "", - "AddCoAuthor": "", - "AmendCommitAttribute": "", - "AmendCommitAttributeTooltip": "", - "SetAuthorPromptTitle": "", - "AddCoAuthorPromptTitle": "", - "AddCoAuthorTooltip": "", - "SureResetCommitAuthor": "", "RewordCommitEditor": "Hernoem commit met editor", "NoCommitsThisBranch": "Geen commits in deze branch", - "UpdateRefHere": "", "Error": "Foutmelding", "Undo": "Ongedaan maken", "UndoReflog": "Ongedaan maken (via reflog) (experimenteel)", "RedoReflog": "Redo (via reflog) (experimenteel)", - "UndoTooltip": "", - "RedoTooltip": "", - "UndoMergeResolveTooltip": "", - "DiscardAllTooltip": "", - "DiscardUnstagedTooltip": "", "Pop": "Pop", - "StashPopTooltip": "", "Drop": "Laten vallen", - "StashDropTooltip": "", "Apply": "Toepassen", - "StashApplyTooltip": "", "NoStashEntries": "Geen stash items", "StashDrop": "Stash laten vallen", "SureDropStashEntry": "Weet je het zeker dat je deze stash entry wil laten vallen?", @@ -175,7 +89,6 @@ "StashApply": "Stash toepassen", "SureApplyStashEntry": "Weet je zeker dat je deze stash entry wil toepassen?", "NoTrackedStagedFilesStash": "Je hebt geen tracked/staged bestanden om te laten stashen", - "NoFilesToStash": "", "StashChanges": "Stash veranderingen", "RenameStash": "Rename stash", "RenameStashPrompt": "Rename stash: {{.stashName}}", @@ -184,37 +97,18 @@ "ForcePush": "Forceer push", "ForcePushPrompt": "Jouw branch is afgeweken van de remote branch. Druk 'esc' om te annuleren, of 'enter' om geforceert te pushen.", "ForcePushDisabled": "Your branch has diverged from the remote branch and you've disabled force pushing", - "UpdatesRejected": "", - "UpdatesRejectedAndForcePushDisabled": "", "CheckForUpdate": "Check voor updates", "CheckingForUpdates": "Zoeken naar updates...", - "UpdateAvailableTitle": "", - "UpdateAvailable": "", - "UpdateInProgressWaitingStatus": "", - "UpdateCompletedTitle": "", - "UpdateCompleted": "", - "FailedToRetrieveLatestVersionErr": "", "OnLatestVersionErr": "Je hebt al de laatste versie", "MajorVersionErr": "Nieuwe versie ({{.newVersion}}) is niet backwards compatibele vergeleken met de huidige versie ({{.currentVersion}})", "CouldNotFindBinaryErr": "Kon geen binary vinden op {{.url}}", - "UpdateFailedErr": "", - "ConfirmQuitDuringUpdateTitle": "", - "ConfirmQuitDuringUpdate": "", - "MergeToolTitle": "", - "MergeToolPrompt": "", "IntroPopupMessage": "Bedankt voor het gebruik maken van lazygit! 2 dingen die je moet weten:\n\n1) Als je meer van lazygit zijn features wilt leren bekijk dan deze video:\n https://youtu.be/CPLdltN7wgE\n\n2) Als je git gebruikt, ben je een programmeur! Met jouw hulp kunnen we lazygit verbeteren, dus overweeg om een ​​donateur te worden en mee te doen aan het plezier op\n https://github.com/jesseduffield/lazygit", - "DeprecatedEditConfigWarning": "", "GitconfigParseErr": "Gogit kon je gitconfig bestand niet goed parsen door de aanwezigheid van losstaande '\\' tekens. Het weghalen van deze tekens zou het probleem moeten oplossen. ", "EditFile": "Verander bestand", - "EditFileTooltip": "", "OpenFile": "Open bestand", - "OpenFileTooltip": "", - "OpenInEditor": "", "IgnoreFile": "Voeg toe aan .gitignore", - "ExcludeFile": "", "RefreshFiles": "Refresh bestanden", "Merge": "Merge in met huidige checked out branch", - "MergeBranchTooltip": "", "ConfirmQuit": "Weet je zeker dat je dit programma wil sluiten?", "SwitchRepo": "Wissel naar een recente repo", "AllBranchesLogGraph": "Alle logs van de branch laten zien", @@ -222,49 +116,31 @@ "CopyPullRequestURL": "Kopieer de URL van het pull-verzoek naar het klembord", "NoBranchOnRemote": "Deze branch bestaat niet op de remote. U moet het eerst naar de remote pushen.", "Fetch": "Fetch", - "FetchTooltip": "", "NoAutomaticGitFetchTitle": "Geen automatische git fetch", "NoAutomaticGitFetchBody": "Lazygit kan niet \"git fetch\" uitvoeren in een privé repository, gebruik f in het branches paneel om \"git fetch\" manueel uit te voeren", "FileEnter": "Stage individuele hunks/lijnen", - "FileEnterTooltip": "", "FileStagingRequirements": "Kan alleen individuele lijnen stagen van getrackte bestanden met onstaged veranderingen", "StageSelectionTooltip": "Toggle lijnen staged / unstaged", "DiscardSelection": "Verwijdert change (git reset)", - "DiscardSelectionTooltip": "", "ToggleSelectHunk": "Toggle selecteer hunk", - "ToggleSelectHunkTooltip": "", "ToggleSelectionForPatch": "Voeg toe/verwijder lijn(en) in patch", - "ToggleSelectionForPatchTooltip": "", - "EditHunk": "", - "EditHunkTooltip": "", "ToggleStagingView": "Ga naar een ander paneel", - "ToggleStagingViewTooltip": "", "ReturnToFilesPanel": "Ga terug naar het bestanden paneel", "FastForward": "Fast-forward deze branch vanaf zijn upstream", - "FastForwardTooltip": "", "FastForwarding": "Fast-forwarding", "FoundConflictsTitle": "Conflicten!", - "ViewConflictsMenuItem": "", - "AbortMenuItem": "", "PickHunk": "Kies stuk", "PickAllHunks": "Kies beide stukken", "ViewMergeRebaseOptions": "Bekijk merge/rebase opties", - "ViewMergeRebaseOptionsTooltip": "", - "ViewMergeOptions": "", - "ViewRebaseOptions": "", "NotMergingOrRebasing": "Je bent momenteel niet aan het rebasen of mergen", - "AlreadyRebasing": "", "RecentRepos": "Recente repositories", "MergeOptionsTitle": "Merge opties", "RebaseOptionsTitle": "Rebase opties", "CommitSummaryTitle": "Commit bericht", - "CommitDescriptionTitle": "", - "CommitDescriptionSubTitle": "", "LocalBranchesTitle": "Branches", "SearchTitle": "Zoek", "TagsTitle": "Tags", "MenuTitle": "Menu", - "CommitMenuTitle": "", "RemotesTitle": "Remotes", "RemoteBranchesTitle": "Remote branches", "PatchBuildingTitle": "Patch bouwen", @@ -272,37 +148,18 @@ "SecondaryTitle": "Secondary", "ReflogCommitsTitle": "Reflog", "ConflictsResolved": "Alle merge conflicten zijn opgelost. Wilt je verder gaan?", - "Continue": "", - "RebasingTitle": "", - "RebasingFromBaseCommitTitle": "", - "SimpleRebase": "", - "InteractiveRebase": "", - "RebaseOntoBaseBranch": "", - "InteractiveRebaseTooltip": "", - "RebaseOntoBaseBranchTooltip": "", - "MustSelectTodoCommits": "", "ConfirmMerge": "Weet je zeker dat je '{{.selectedBranch}}' in '{{.checkedOutBranch}}' wil mergen?", "FwdNoUpstream": "Kan niet de branch vooruitspoelen zonder upstream", - "FwdNoLocalUpstream": "", "FwdCommitsToPush": "Je kan niet vooruitspoelen als de branch geen nieuwe commits heeft", - "PullRequestNoUpstream": "", "ErrorOccurred": "Er is iets fout gegaan! Zou je hier een issue aan willen maken", "NoRoom": "Niet genoeg ruimte", "YouAreHere": "JE BENT HIER", - "YouDied": "", "RewordNotSupported": "Herformatteren van commits in interactief rebasen is nog niet ondersteund", - "ChangingThisActionIsNotAllowed": "", "CherryPickCopy": "Kopieer commit (cherry-pick)", - "CherryPickCopyTooltip": "", - "CherryPickCopyRange": "", - "CherryPickCopyRangeTooltip": "", "PasteCommits": "Plak commits (cherry-pick)", "SureCherryPick": "Weet je zeker dat je de gekopieerde commits naar deze branch wil cherry-picken?", "CherryPick": "Cherry-Pick", - "CannotCherryPickNonCommit": "", - "CannotCherryPickMergeCommit": "", "Donate": "Doneer", - "AskQuestion": "", "PrevLine": "Selecteer de vorige lijn", "NextLine": "Selecteer de volgende lijn", "PrevHunk": "Selecteer de vorige hunk", @@ -319,208 +176,101 @@ "AmendCommitPrompt": "Weet je zeker dat je deze commit wil wijzigen met de vorige staged bestanden?", "DropCommitTitle": "Verwijder commit", "DropCommitPrompt": "Weet je zeker dat je deze commit wil verwijderen?", - "DropUpdateRefPrompt": "", "PullingStatus": "Pullen", "PushingStatus": "Pushen", "FetchingStatus": "Fetchen", "SquashingStatus": "Squashen", "FixingStatus": "Fixing up", "DeletingStatus": "Verwijderen", - "DroppingStatus": "", "MovingStatus": "Verplaatsen", "RebasingStatus": "Rebasen", - "MergingStatus": "", - "LowercaseRebasingStatus": "", - "LowercaseMergingStatus": "", "AmendingStatus": "Wijzigen", "CherryPickingStatus": "Cherry-picken", "UndoingStatus": "Ongedaan maken", "RedoingStatus": "Redoing", "CheckingOutStatus": "Uitchecken", - "CommittingStatus": "", - "RevertingStatus": "", - "CreatingFixupCommitStatus": "", "CommitFiles": "Commit bestanden", - "SubCommitsDynamicTitle": "", - "CommitFilesDynamicTitle": "", - "RemoteBranchesDynamicTitle": "", "ViewItemFiles": "Bekijk gecommite bestanden", - "ViewItemFilesTooltip": "", "CommitFilesTitle": "Commit bestanden", "CheckoutCommitFileTooltip": "Bestand uitchecken", - "CanOnlyDiscardFromLocalCommits": "", - "Remove": "", "DiscardOldFileChangeTooltip": "Uitsluit deze commit zijn veranderingen aan dit bestand", "DiscardFileChangesTitle": "Uitsluit bestand zijn veranderingen", "DiscardFileChangesPrompt": "Weet je zeker dat je de wijzigingen van deze commit in dit bestand wilt weggooien? Als dit bestand is gecreëerd in deze commit dan zal dit bestand worden verwijdert", "DisabledForGPG": "Onderdelen niet beschikbaar voor gebruikers die GPG gebruiken", "CreateRepo": "Niet in een git repository. Creëer een nieuwe git repository? (y/n): ", - "BareRepo": "", - "InitialBranch": "", - "NoRecentRepositories": "", - "IncorrectNotARepository": "", "AutoStashTitle": "Autostash?", "AutoStashPrompt": "Je moet je veranderingen stashen en poppen om ze over te brengen. Dit automatisch doen? (enter/esc)", "StashPrefix": "Auto-stashing veranderingen voor ", "Discard": "Bekijk 'veranderingen ongedaan maken' opties", - "DiscardChangesTitle": "", - "DiscardFileChangesTooltip": "", "Cancel": "Annuleren", "DiscardAllChanges": "Negeer alle wijzigingen", "DiscardUnstagedChanges": "Negeer unstaged wijzigingen", "DiscardAllChangesToAllFiles": "Verwijder werkende tree", "DiscardAnyUnstagedChanges": "Gooi unstaged wijzigingen weg", "DiscardUntrackedFiles": "Negeer niet-gevonden bestanden", - "DiscardStagedChanges": "", "HardReset": "Harde reset", - "BranchDeleteTooltip": "", - "TagDeleteTooltip": "", - "Delete": "", - "Reset": "", - "ResetTooltip": "", "ViewResetOptions": "Bekijk reset opties", - "FileResetOptionsTooltip": "", "CreateFixupCommit": "Creëer fixup commit", "CreateFixupCommitTooltip": "Creëer fixup commit", - "CreateAmendCommit": "", - "FixupMenu_Fixup": "", - "FixupMenu_FixupTooltip": "", - "FixupMenu_AmendWithChanges": "", - "FixupMenu_AmendWithChangesTooltip": "", - "FixupMenu_AmendWithoutChanges": "", - "FixupMenu_AmendWithoutChangesTooltip": "", "SquashAboveCommitsTooltip": "Squash bovenstaande commits", - "SquashCommitsAboveSelectedTooltip": "", - "SquashCommitsInCurrentBranchTooltip": "", - "SquashAboveCommits": "", - "SquashCommitsInCurrentBranch": "", - "SquashCommitsAboveSelectedCommit": "", - "CannotSquashCommitsInCurrentBranch": "", "ExecuteCustomCommand": "Voer aangepaste commando uit", - "ExecuteCustomCommandTooltip": "", "CustomCommand": "Aangepaste commando:", "CommitChangesWithoutHook": "Commit veranderingen zonder pre-commit hook", "SkipHookPrefixNotConfigured": "Je hebt nog niet een commit bericht voorvoegsel ingesteld voor het overslaan van hooks. Set `git.skipHookPrefix = 'WIP'` in je config", "ResetTo": "Reset naar", - "ResetSoftTooltip": "", - "ResetMixedTooltip": "", - "ResetHardTooltip": "", "PressEnterToReturn": "Press om terug te gaan naar lazygit", "ViewStashOptions": "Bekijk stash opties", - "ViewStashOptionsTooltip": "", - "Stash": "", - "StashTooltip": "", "StashAllChanges": "Stash-bestanden", - "StashStagedChanges": "", "StashAllChangesKeepIndex": "Stash staged wijzigingen", - "StashUnstagedChanges": "", - "StashIncludeUntrackedChanges": "", "StashOptions": "Stash opties", "NotARepository": "Fout: moet in een git repository uitgevoerd worden", - "WorkingDirectoryDoesNotExist": "", "Jump": "Ga naar paneel", - "ScrollLeftRight": "", - "ScrollLeft": "", - "ScrollRight": "", "DiscardPatch": "Patch weg gooien", "DiscardPatchConfirm": "Je kan alleen maar een patch bouwen van 1 commit. Huidige patch weggooien?", - "DiscardPatchSameCommitConfirm": "", "CantPatchWhileRebasingError": "Je kan geen patch bouwen of patch commando uitvoeren wanneer je in een merging of rebasing state zit", "ToggleAddToPatch": "Toggle bestand inbegrepen in patch", - "ToggleAddToPatchTooltip": "", - "ToggleAllInPatch": "", - "ToggleAllInPatchTooltip": "", - "UpdatingPatch": "", "ViewPatchOptions": "Bekijk aangepaste patch opties", "PatchOptionsTitle": "Patch opties", "NoPatchError": "Nog geen patch gecreëerd. Om een patch te bouwen gebruik 'space' op een commit bestand of 'enter' om een spesiefieke lijnen toe te voegen", - "EmptyPatchError": "", "EnterCommitFile": "Enter bestand om geselecteerde regels toe te voegen aan de patch", - "EnterCommitFileTooltip": "", "ExitCustomPatchBuilder": "Sluit lijn-bij-lijn modus", "EnterUpstream": "Enter upstream als '\u003cremote\u003e \u003cbranchnaam\u003e'", - "InvalidUpstream": "", "ReturnToRemotesList": "Ga terug naar remotes lijst", "NewRemote": "Voeg een nieuwe remote toe", "NewRemoteName": "Nieuwe remote name:", "NewRemoteUrl": "Nieuwe remote url:", - "ViewBranches": "", "EditRemoteName": "Enter updated remote naam voor {{.remoteName}}:", "EditRemoteUrl": "Enter updated remote url voor {{.remoteName}}:", "RemoveRemote": "Verwijder remote", - "RemoveRemoteTooltip": "", "RemoveRemotePrompt": "Weet je zeker dat je deze remote wilt verwijderen", "DeleteRemoteBranch": "Verwijder remote branch", "DeleteRemoteBranchMessage": "Weet je zeker dat je deze remote branch wilt verwijderen", - "DeleteRemoteBranchTooltip": "", - "SetAsUpstream": "", "SetAsUpstreamTooltip": "Stel in als upstream van uitgecheckte branch", "SetUpstream": "Stel in als upstream van uitgecheckte branch", - "UnsetUpstream": "", - "ViewDivergenceFromUpstream": "", - "ViewDivergenceFromBaseBranch": "", - "CouldNotDetermineBaseBranch": "", - "DivergenceSectionHeaderLocal": "", - "DivergenceSectionHeaderRemote": "", - "ViewUpstreamResetOptions": "", - "ViewUpstreamResetOptionsTooltip": "", - "ViewUpstreamRebaseOptions": "", - "ViewUpstreamRebaseOptionsTooltip": "", - "UpstreamGenericName": "", "SetUpstreamTitle": "Stel in als upstream branch", "SetUpstreamMessage": "Weet je zeker dat je de upstream branch van '{{.checkedOut}}' naar '{{.selected}}' wilt zetten", "EditRemoteTooltip": "Wijzig remote", "TagCommit": "Tag commit", - "TagCommitTooltip": "", - "TagMenuTitle": "", "TagNameTitle": "Tag naam:", - "TagMessageTitle": "", - "LightweightTag": "", - "AnnotatedTag": "", - "DeleteTagTitle": "", - "DeleteLocalTag": "", - "DeleteRemoteTag": "", - "SelectRemoteTagUpstream": "", - "DeleteRemoteTagPrompt": "", - "RemoteTagDeletedMessage": "", "PushTagTitle": "Remote om tag '{{.tagName}}' te pushen naar:", "PushTag": "Push tag", - "PushTagTooltip": "", "NewTag": "Creëer tag", - "NewTagTooltip": "", - "CreatingTag": "", - "ForceTag": "", - "ForceTagPrompt": "", "FetchRemoteTooltip": "Fetch remote", "FetchingRemoteStatus": "Remote fetchen", "CheckoutCommit": "Checkout commit", - "CheckoutCommitTooltip": "", "SureCheckoutThisCommit": "Weet je zeker dat je deze commit wil uitchecken?", "GitFlowOptions": "Laat git-flow opties zien", "NotAGitFlowBranch": "Dit lijkt geen git flow branch te zijn", "NewBranchNamePrompt": "Noem een nieuwe branch naam", "IgnoreTracked": "Negeer tracked bestand", - "ExcludeTracked": "", "IgnoreTrackedPrompt": "Weet je zeker dat je een getracked bestand wil negeren?", - "ExcludeTrackedPrompt": "", "ViewResetToUpstreamOptions": "Bekijk upstream reset opties", "NextScreenMode": "Volgende scherm modus (normaal/half/groot)", "PrevScreenMode": "Vorige scherm modus", "StartSearch": "Start met zoeken", - "StartFilter": "", "Panel": "Paneel", "Keybindings": "Sneltoetsen", - "KeybindingsLegend": "", - "KeybindingsMenuSectionLocal": "", - "KeybindingsMenuSectionGlobal": "", - "KeybindingsMenuSectionNavigation": "", "RenameBranch": "Hernoem branch", - "Upstream": "", - "UpstreamTooltip": "", - "BranchUpstreamOptionsTitle": "", - "ViewBranchUpstreamOptions": "", - "ViewBranchUpstreamOptionsTooltip": "", - "UpstreamNotSetError": "", "NewGitFlowBranchPrompt": "Nieuwe '{{.branchType}}' naam:", "RenameBranchWarning": "Deze branch volgt een remote. Deze actie zal alleen de locale branch name wijzigen niet de naam van de remote branch. Verder gaan?", "OpenKeybindingsMenu": "Open menu", @@ -539,16 +289,11 @@ "FilteringBy": "Filteren bij", "ResetInParentheses": "(reset)", "OpenFilteringMenu": "Bekijk scoping opties", - "OpenFilteringMenuTooltip": "", "FilterBy": "Filter bij", "ExitFilterMode": "Stop met filteren bij pad", - "ExitFilterModeAuthor": "", "FilterPathOption": "Vulin pad om op te filteren", - "FilterAuthorOption": "", "EnterFileName": "Vulin path:", - "EnterAuthor": "", "FilteringMenuTitle": "Filteren", - "WillCancelExistingFilterTooltip": "", "MustExitFilterModeTitle": "Command niet beschikbaar", "MustExitFilterModePrompt": "Command niet beschikbaar in filter modus. Sluit filter modus?", "Diff": "Diff", @@ -558,367 +303,29 @@ "DiffingMenuTitle": "Diffen", "SwapDiff": "Keer diff richting om", "ViewDiffingOptions": "Open diff menu", - "ViewDiffingOptionsTooltip": "", - "OpenCommandLogMenu": "", - "OpenCommandLogMenuTooltip": "", "ShowingGitDiff": "Laat output zien voor:", - "CommitDiff": "", "CopyCommitHashToClipboard": "Kopieer commit hash naar klembord", - "CommitHash": "", - "CommitURL": "", "CopyCommitMessageToClipboard": "Kopieer commit bericht naar klembord", - "CommitMessage": "", - "CommitSubject": "", - "CommitAuthor": "", - "CopyCommitAttributeToClipboard": "", - "CopyCommitAttributeToClipboardTooltip": "", "CopyBranchNameToClipboard": "Kopieer branch name naar klembord", "CopyPathToClipboard": "Kopieer de bestandsnaam naar het klembord", "CommitPrefixPatternError": "Fout in commitPrefix patroon", - "CopySelectedTextToClipboard": "", "NoFilesStagedTitle": "Geen bestanden gestaged", "NoFilesStagedPrompt": "Je hebt geen bestanden gestaged. Commit alle bestanden?", "BranchNotFoundTitle": "Branch niet gevonden", "BranchNotFoundPrompt": "Branch niet gevonden. Creëer een nieuwe branch genaamd", - "BranchUnknown": "", - "DiscardChangeTitle": "", - "DiscardChangePrompt": "", "CreateNewBranchFromCommit": "Creëer nieuwe branch van commit", - "BuildingPatch": "", "ViewCommits": "Bekijk commits", - "MinGitVersionError": "", - "RunningCustomCommandStatus": "", - "SubmoduleStashAndReset": "", - "AndResetSubmodules": "", "EnterSubmoduleTooltip": "Enter submodule", - "Enter": "", "CopySubmoduleNameToClipboard": "Kopieer submodule naam naar klembord", - "RemoveSubmodule": "", - "RemoveSubmoduleTooltip": "", - "RemoveSubmodulePrompt": "", - "ResettingSubmoduleStatus": "", - "NewSubmoduleName": "", - "NewSubmoduleUrl": "", - "NewSubmodulePath": "", "NewSubmodule": "Voeg nieuwe submodule toe", - "AddingSubmoduleStatus": "", - "UpdateSubmoduleUrl": "", - "UpdatingSubmoduleUrlStatus": "", - "EditSubmoduleUrl": "", - "InitializingSubmoduleStatus": "", "InitSubmoduleTooltip": "Initialiseer submodule", - "Update": "", - "Initialize": "", - "SubmoduleUpdateTooltip": "", - "UpdatingSubmoduleStatus": "", - "BulkInitSubmodules": "", - "BulkUpdateSubmodules": "", - "BulkDeinitSubmodules": "", "ViewBulkSubmoduleOptions": "Bekijk bulk submodule opties", - "BulkSubmoduleOptions": "", - "RunningCommand": "", - "SubCommitsTitle": "", - "SubmodulesTitle": "", "NavigationTitle": "Lijstpaneel navigatie", - "SuggestionsCheatsheetTitle": "", - "SuggestionsTitle": "", - "SuggestionsSubtitle": "", - "ExtrasTitle": "", - "PushingTagStatus": "", "PullRequestURLCopiedToClipboard": "Pull-aanvraag-URL gekopieerd naar klembord", - "CommitDiffCopiedToClipboard": "", - "CommitURLCopiedToClipboard": "", "CommitMessageCopiedToClipboard": "Commit message gekopieerd naar klembord", - "CommitSubjectCopiedToClipboard": "", - "CommitAuthorCopiedToClipboard": "", - "PatchCopiedToClipboard": "", "CopiedToClipboard": "gekopieerd naar klembord", - "ErrCannotEditDirectory": "", - "ErrStageDirWithInlineMergeConflicts": "", - "ErrRepositoryMovedOrDeleted": "", - "ErrWorktreeMovedOrRemoved": "", - "CommandLog": "", - "ToggleShowCommandLog": "", - "FocusCommandLog": "", - "CommandLogHeader": "", - "RandomTip": "", - "SelectParentCommitForMerge": "", - "ToggleWhitespaceInDiffView": "", - "ToggleWhitespaceInDiffViewTooltip": "", - "IgnoreWhitespaceDiffViewSubTitle": "", - "IgnoreWhitespaceNotSupportedHere": "", - "IncreaseContextInDiffView": "", - "IncreaseContextInDiffViewTooltip": "", - "DecreaseContextInDiffView": "", - "DecreaseContextInDiffViewTooltip": "", - "DiffContextSizeChanged": "", "CreatePullRequestOptions": "Bekijk opties voor pull-aanvraag", - "DefaultBranch": "", - "SelectBranch": "", "CreatePullRequest": "Maak een pull-request", - "SelectConfigFile": "", - "NoConfigFileFoundErr": "", - "LoadingFileSuggestions": "", - "LoadingCommits": "", - "MustSpecifyOriginError": "", - "GitOutput": "", - "GitCommandFailed": "", - "AbortTitle": "", - "AbortPrompt": "", - "OpenLogMenu": "", - "OpenLogMenuTooltip": "", - "LogMenuTitle": "", - "ToggleShowGitGraphAll": "", - "ShowGitGraph": "", - "SortOrder": "", - "SortAlphabetical": "", - "SortByDate": "", - "SortByRecency": "", - "SortBasedOnReflog": "", - "SortCommits": "", - "CantChangeContextSizeError": "", - "OpenCommitInBrowser": "", - "ViewBisectOptions": "", "ConfirmRevertCommit": "Weet u zeker dat u {{.selectedCommit}} ongedaan wilt maken?", - "RewordInEditorTitle": "", - "RewordInEditorPrompt": "", - "CheckoutPrompt": "", - "HardResetAutostashPrompt": "", - "UpstreamGone": "", - "NukeDescription": "", - "DiscardStagedChangesDescription": "", - "EmptyOutput": "", - "Patch": "", - "CustomPatch": "", - "CommitsCopied": "", - "CommitCopied": "", - "ResetPatch": "", - "ResetPatchTooltip": "", - "ApplyPatch": "", - "ApplyPatchTooltip": "", - "ApplyPatchInReverse": "", - "ApplyPatchInReverseTooltip": "", - "RemovePatchFromOriginalCommit": "", - "RemovePatchFromOriginalCommitTooltip": "", - "MovePatchOutIntoIndex": "", - "MovePatchOutIntoIndexTooltip": "", - "MovePatchIntoNewCommit": "", - "MovePatchIntoNewCommitTooltip": "", - "MovePatchToSelectedCommit": "", - "MovePatchToSelectedCommitTooltip": "", - "CopyPatchToClipboard": "", - "NoMatchesFor": "", - "MatchesFor": "", - "SearchKeybindings": "", - "SearchPrefix": "", - "FilterPrefix": "", - "ExitSearchMode": "", - "ExitTextFilterMode": "", - "Switch": "", - "SwitchToWorktree": "", - "SwitchToWorktreeTooltip": "", - "AlreadyCheckedOutByWorktree": "", - "BranchCheckedOutByWorktree": "", - "DetachWorktreeTooltip": "", - "Switching": "", - "RemoveWorktree": "", - "RemoveWorktreeTitle": "", - "DetachWorktree": "", - "DetachingWorktree": "", - "WorktreesTitle": "", - "WorktreeTitle": "", - "RemoveWorktreePrompt": "", - "ForceRemoveWorktreePrompt": "", - "RemovingWorktree": "", - "AddingWorktree": "", - "CantDeleteCurrentWorktree": "", - "AlreadyInWorktree": "", - "CantDeleteMainWorktree": "", - "NoWorktreesThisRepo": "", - "MissingWorktree": "", - "MainWorktree": "", - "NewWorktree": "", - "NewWorktreePath": "", - "NewWorktreeBase": "", - "RemoveWorktreeTooltip": "", - "BranchNameCannotBeBlank": "", - "NewBranchName": "", - "NewBranchNameLeaveBlank": "", - "ViewWorktreeOptions": "", - "CreateWorktreeFrom": "", - "CreateWorktreeFromDetached": "", - "LcWorktree": "", - "ChangingDirectoryTo": "", - "Name": "", - "Branch": "", - "Path": "", - "MarkedBaseCommitStatus": "", - "MarkAsBaseCommit": "", - "MarkAsBaseCommitTooltip": "", - "MarkedCommitMarker": "", - "PleaseGoToURL": "", - "NoCopiedCommits": "", - "DisabledMenuItemPrefix": "", - "QuickStartInteractiveRebase": "", - "QuickStartInteractiveRebaseTooltip": "", - "CannotQuickStartInteractiveRebase": "", - "ToggleRangeSelect": "Toggle drag selecteer", - "RangeSelectUp": "", - "RangeSelectDown": "", - "RangeSelectNotSupported": "", - "NoItemSelected": "", - "SelectedItemIsNotABranch": "", - "SelectedItemDoesNotHaveFiles": "", - "RangeSelectNotSupportedForSubmodules": "", - "OldCherryPickKeyWarning": "", - "CommandDoesNotSupportOpeningInEditor": "", - "Actions": { - "CheckoutCommit": "", - "CheckoutTag": "", - "CheckoutBranch": "", - "ForceCheckoutBranch": "", - "DeleteLocalBranch": "", - "DeleteBranch": "", - "Merge": "", - "RebaseBranch": "", - "RenameBranch": "", - "CreateBranch": "", - "FastForwardBranch": "", - "CherryPick": "", - "CheckoutFile": "", - "DiscardOldFileChange": "", - "SquashCommitDown": "", - "FixupCommit": "", - "RewordCommit": "", - "DropCommit": "", - "EditCommit": "", - "AmendCommit": "", - "ResetCommitAuthor": "", - "SetCommitAuthor": "", - "AddCommitCoAuthor": "", - "RevertCommit": "", - "CreateFixupCommit": "", - "SquashAllAboveFixupCommits": "", - "MoveCommitUp": "", - "MoveCommitDown": "", - "CopyCommitMessageToClipboard": "", - "CopyCommitSubjectToClipboard": "", - "CopyCommitDiffToClipboard": "", - "CopyCommitHashToClipboard": "", - "CopyCommitURLToClipboard": "", - "CopyCommitAuthorToClipboard": "", - "CopyCommitAttributeToClipboard": "", - "CopyPatchToClipboard": "", - "CustomCommand": "", - "DiscardAllChangesInDirectory": "", - "DiscardUnstagedChangesInDirectory": "", - "DiscardAllChangesInFile": "", - "DiscardAllUnstagedChangesInFile": "", - "StageFile": "", - "StageResolvedFiles": "", - "UnstageFile": "", - "UnstageAllFiles": "", - "StageAllFiles": "", - "IgnoreExcludeFile": "", - "IgnoreFileErr": "", - "ExcludeFile": "", - "ExcludeGitIgnoreErr": "", - "Commit": "", - "EditFile": "", - "Push": "", - "Pull": "", - "OpenFile": "", - "OpenFileTooltip": "", - "StashAllChanges": "", - "StashAllChangesKeepIndex": "", - "StashStagedChanges": "", - "StashUnstagedChanges": "", - "StashIncludeUntrackedChanges": "", - "GitFlowFinish": "", - "GitFlowStart": "", - "CopyToClipboard": "", - "CopySelectedTextToClipboard": "", - "RemovePatchFromCommit": "", - "MovePatchToSelectedCommit": "", - "MovePatchIntoIndex": "", - "MovePatchIntoNewCommit": "", - "DeleteRemoteBranch": "", - "SetBranchUpstream": "", - "AddRemote": "", - "RemoveRemote": "", - "UpdateRemote": "", - "ApplyPatch": "", - "Stash": "", - "RenameStash": "", - "RemoveSubmodule": "", - "ResetSubmodule": "", - "AddSubmodule": "", - "UpdateSubmoduleUrl": "", - "InitialiseSubmodule": "", - "BulkInitialiseSubmodules": "", - "BulkUpdateSubmodules": "", - "BulkDeinitialiseSubmodules": "", - "UpdateSubmodule": "", - "CreateLightweightTag": "", - "CreateAnnotatedTag": "", - "DeleteLocalTag": "", - "DeleteRemoteTag": "", - "PushTag": "", - "NukeWorkingTree": "", - "DiscardUnstagedFileChanges": "", - "RemoveUntrackedFiles": "", - "RemoveStagedFiles": "", - "SoftReset": "", - "MixedReset": "", - "HardReset": "", - "Undo": "", - "Redo": "", - "CopyPullRequestURL": "", - "OpenDiffTool": "", - "OpenMergeTool": "", - "OpenCommitInBrowser": "", - "OpenPullRequest": "", - "StartBisect": "", - "ResetBisect": "", - "BisectSkip": "", - "BisectMark": "", - "RemoveWorktree": "", - "AddWorktree": "" - }, - "Bisect": { - "MarkStart": "", - "MarkSkipCurrent": "", - "MarkSkipSelected": "", - "ResetTitle": "", - "ResetPrompt": "", - "ResetOption": "", - "ChooseTerms": "", - "OldTermPrompt": "", - "NewTermPrompt": "", - "BisectMenuTitle": "", - "Mark": "", - "SkipCurrent": "", - "SkipSelected": "", - "CompleteTitle": "", - "CompletePrompt": "", - "CompletePromptIndeterminate": "", - "Bisecting": "" - }, - "Log": { - "EditRebase": "", - "MoveCommitUp": "", - "MoveCommitDown": "", - "CherryPickCommits": "", - "HandleUndo": "", - "HandleMidRebaseCommand": "", - "RemoveFile": "", - "CopyToClipboard": "", - "Remove": "", - "CreateFileWithContent": "", - "AppendingLineToFile": "", - "EditRebaseFromBaseCommit": "" - }, - "BreakingChangesTitle": "", - "BreakingChangesMessage": "", - "BreakingChangesByVersion": null + "ToggleRangeSelect": "Toggle drag selecteer" } diff --git a/pkg/i18n/translations/pl.json b/pkg/i18n/translations/pl.json index 9ec011e22f3..a32f9e30cf8 100644 --- a/pkg/i18n/translations/pl.json +++ b/pkg/i18n/translations/pl.json @@ -100,11 +100,6 @@ "ForceCheckoutTooltip": "Wymuś przełączenie wybranej gałęzi. To spowoduje odrzucenie wszystkich lokalnych zmian w drzewie roboczym przed przełączeniem na wybraną gałąź.", "CheckoutByName": "Przełącz według nazwy", "CheckoutByNameTooltip": "Przełącz według nazwy. W polu wprowadzania możesz wpisać '-' aby przełączyć się na ostatnią gałąź.", - "RemoteBranchCheckoutTitle": "", - "CheckoutTypeNewBranch": "", - "CheckoutTypeNewBranchTooltip": "", - "CheckoutTypeDetachedHead": "", - "CheckoutTypeDetachedHeadTooltip": "", "NewBranch": "Nowa gałąź", "NewBranchFromStashTooltip": "Utwórz nową gałąź z wybranego wpisu schowka. Działa poprzez przełączenie git na commit, na którym wpis schowka został utworzony, tworzenie nowej gałęzi z tego commita, a następnie zastosowanie wpisu schowka do nowej gałęzi jako dodatkowego commita.", "NoBranchesThisRepo": "Brak gałęzi dla tego repozytorium", @@ -184,7 +179,6 @@ "ForcePush": "Wymuś wysłanie", "ForcePushPrompt": "Twoja gałąź rozbiegła się z gałęzią zdalną. Naciśnij {{.cancelKey}}, aby anulować, lub {{.confirmKey}}, aby wymusić wysłanie.", "ForcePushDisabled": "Twoja gałąź rozbiegła się z gałęzią zdalną i masz wyłączone wymuszanie wysyłania", - "UpdatesRejected": "", "UpdatesRejectedAndForcePushDisabled": "Aktualizacje zostały odrzucone i wyłączyłeś wymuszenie wysłania", "CheckForUpdate": "Sprawdź aktualizacje", "CheckingForUpdates": "Sprawdzanie aktualizacji...", @@ -234,7 +228,6 @@ "ToggleSelectHunk": "Zaznacz fragment", "ToggleSelectHunkTooltip": "Przełącz tryb zaznaczania fragmentu.", "ToggleSelectionForPatch": "Przełącz linie w łatce", - "ToggleSelectionForPatchTooltip": "", "EditHunk": "Edytuj fragment", "EditHunkTooltip": "Edytuj wybrany fragment w zewnętrznym edytorze.", "ToggleStagingView": "Przełącz widok", @@ -277,9 +270,7 @@ "RebasingFromBaseCommitTitle": "Rebase '{{.checkedOutBranch}}' od oznaczonego commita bazowego", "SimpleRebase": "Prosty rebase na '{{.ref}}'", "InteractiveRebase": "Interaktywny rebase na '{{.ref}}'", - "RebaseOntoBaseBranch": "", "InteractiveRebaseTooltip": "Rozpocznij interaktywny rebase z przerwaniem na początku, abyś mógł zaktualizować commity TODO przed kontynuacją.", - "RebaseOntoBaseBranchTooltip": "", "MustSelectTodoCommits": "Podczas rebase ta akcja działa tylko na zaznaczonych commitach TODO.", "ConfirmMerge": "Czy na pewno chcesz scalić '{{.selectedBranch}}' z '{{.checkedOutBranch}}'?", "FwdNoUpstream": "Nie można szybko przewinąć gałęzi bez źródła", @@ -294,7 +285,6 @@ "ChangingThisActionIsNotAllowed": "Zmiana tego rodzaju wpisu rebase TODO nie jest dozwolona", "CherryPickCopy": "Kopiuj (cherry-pick)", "CherryPickCopyTooltip": "Oznacz commit jako skopiowany. Następnie, w widoku lokalnych commitów, możesz nacisnąć `{{.paste}}`, aby wkleić (cherry-pick) skopiowane commity do sprawdzonej gałęzi. W dowolnym momencie możesz nacisnąć `{{.escape}}`, aby anulować zaznaczenie.", - "CherryPickCopyRange": "", "CherryPickCopyRangeTooltip": "Oznacz commity jako skopiowane od ostatniego skopiowanego commita do wybranego commita.", "PasteCommits": "Wklej (cherry-pick)", "SureCherryPick": "Czy na pewno chcesz cherry-pick skopiowane commity na tę gałąź?", @@ -319,7 +309,6 @@ "AmendCommitPrompt": "Czy na pewno chcesz poprawić ten commit swoimi zatwierdzonymi plikami?", "DropCommitTitle": "Usuń commit", "DropCommitPrompt": "Czy na pewno chcesz usunąć wybrane commity?", - "DropUpdateRefPrompt": "", "PullingStatus": "Ściąganie", "PushingStatus": "Wysyłanie", "FetchingStatus": "Pobieranie", @@ -382,13 +371,6 @@ "FileResetOptionsTooltip": "Wyświetl opcje resetu dla drzewa roboczego (np. zniszczenie drzewa roboczego).", "CreateFixupCommit": "Utwórz commit fixup", "CreateFixupCommitTooltip": "Utwórz commit 'fixup!' dla wybranego commita. Później możesz nacisnąć `{{.squashAbove}}` na tym samym commicie, aby zastosować wszystkie powyższe commity fixup.", - "CreateAmendCommit": "", - "FixupMenu_Fixup": "", - "FixupMenu_FixupTooltip": "", - "FixupMenu_AmendWithChanges": "", - "FixupMenu_AmendWithChangesTooltip": "", - "FixupMenu_AmendWithoutChanges": "", - "FixupMenu_AmendWithoutChangesTooltip": "", "SquashAboveCommitsTooltip": "Scal wszystkie commity 'fixup!', albo powyżej wybranego commita, albo wszystkie w bieżącej gałęzi (autosquash).", "SquashCommitsAboveSelectedTooltip": "Scal wszystkie commity 'fixup!' powyżej wybranego commita (autosquash).", "SquashCommitsInCurrentBranchTooltip": "Scal wszystkie commity 'fixup!' w bieżącej gałęzi (autosquash).", @@ -458,8 +440,6 @@ "SetUpstream": "Ustaw upstream wybranej gałęzi", "UnsetUpstream": "Usuń upstream wybranej gałęzi", "ViewDivergenceFromUpstream": "Wyświetl rozbieżność od upstream", - "ViewDivergenceFromBaseBranch": "", - "CouldNotDetermineBaseBranch": "", "DivergenceSectionHeaderLocal": "Lokalne", "DivergenceSectionHeaderRemote": "Zdalne", "ViewUpstreamResetOptions": "Resetuj sprawdzoną gałąź na {{.upstream}}", @@ -542,7 +522,6 @@ "OpenFilteringMenuTooltip": "Pokaż opcje filtrowania dziennika commitów, tak aby pokazywane były tylko commity pasujące do filtra.", "FilterBy": "Filtruj przez", "ExitFilterMode": "Zatrzymaj filtrowanie", - "ExitFilterModeAuthor": "", "FilterPathOption": "Wprowadź ścieżkę do filtrowania", "FilterAuthorOption": "Wprowadź autora do filtrowania", "EnterFileName": "Wprowadź ścieżkę:", @@ -622,7 +601,6 @@ "NavigationTitle": "Nawigacja panelu listy", "SuggestionsCheatsheetTitle": "Podpowiedzi", "SuggestionsTitle": "Podpowiedzi (naciśnij %s, aby skupić)", - "SuggestionsSubtitle": "", "ExtrasTitle": "Dziennik poleceń", "PushingTagStatus": "Wysyłanie tagu", "PullRequestURLCopiedToClipboard": "URL żądania ściągnięcia skopiowany do schowka", @@ -771,7 +749,6 @@ "SelectedItemDoesNotHaveFiles": "Wybrany element nie ma plików do wyświetlenia", "RangeSelectNotSupportedForSubmodules": "Zaznaczanie zakresu nie jest wspierane dla submodułów", "OldCherryPickKeyWarning": "Klawisz 'c' nie jest już domyślnym klawiszem do kopiowania commitów do cherry pick. Proszę użyj `{{.copy}}` zamiast tego (i `{{.paste}}` aby wkleić). Powodem tej zmiany jest to, że klawisz 'v' do wybierania zakresu linii podczas stagingu jest teraz używany również do wybierania zakresu linii w każdym widoku listy, co oznacza, że musieliśmy znaleźć nowy klawisz do wklejania commitów, i jeśli zamierzamy teraz używać `{{.paste}}` do wklejania commitów, możemy równie dobrze użyć `{{.copy}}` do ich kopiowania. Jeśli chcesz skonfigurować klawisze, aby uzyskać stare zachowanie, ustaw następujące w swojej konfiguracji:\n\nkeybinding:\n universal:\n toggleRangeSelect: \u003ccoś innego niż v\u003e\n commits:\n cherryPickCopy: 'c'\n pasteCommits: 'v'", - "CommandDoesNotSupportOpeningInEditor": "", "Actions": { "CheckoutCommit": "Przełącz commit", "CheckoutTag": "Przełącz tag", @@ -795,7 +772,6 @@ "AmendCommit": "Popraw commit", "ResetCommitAuthor": "Zresetuj autora commita", "SetCommitAuthor": "Ustaw autora commita", - "AddCommitCoAuthor": "", "RevertCommit": "Cofnij commit", "CreateFixupCommit": "Utwórz commit poprawkowy", "SquashAllAboveFixupCommits": "Scal wszystkie powyższe commity poprawkowe", @@ -828,7 +804,6 @@ "Push": "Wypchnij", "Pull": "Pociągnij", "OpenFile": "Otwórz plik", - "OpenFileTooltip": "", "StashAllChanges": "Schowaj wszystkie zmiany", "StashAllChangesKeepIndex": "Schowaj wszystkie zmiany i zachowaj indeks", "StashStagedChanges": "Schowaj zatwierdzone zmiany", @@ -887,8 +862,6 @@ }, "Bisect": { "MarkStart": "Oznacz %s jako %s (rozpocznij bisect)", - "MarkSkipCurrent": "", - "MarkSkipSelected": "", "ResetTitle": "Resetuj 'git bisect'", "ResetPrompt": "Czy na pewno chcesz zresetować 'git bisect'?", "ResetOption": "Resetuj bisect", diff --git a/pkg/i18n/translations/ru.json b/pkg/i18n/translations/ru.json index e2a30d39825..3427532bff3 100644 --- a/pkg/i18n/translations/ru.json +++ b/pkg/i18n/translations/ru.json @@ -22,62 +22,29 @@ "CredentialsPIN": "Введите PIN-код для SSH ключа", "PassUnameWrong": "Неверный пароль, кодовая фраза и/или имя пользователя", "Commit": "Сохранить изменения", - "CommitTooltip": "", "AmendLastCommit": "Правка последнего коммита", "AmendLastCommitTitle": "Правка Последнего Коммита", "SureToAmend": "Вы уверены, что хотите править последний коммит? Впоследствии можно изменить сообщение коммита на панели коммитов.", "NoCommitToAmend": "Не найден коммит для внесения поправок.", "CommitChangesWithEditor": "Сохранить изменения с помощью редактора git", - "FindBaseCommitForFixup": "", - "FindBaseCommitForFixupTooltip": "", - "NoBaseCommitsFound": "", - "MultipleBaseCommitsFoundStaged": "", - "MultipleBaseCommitsFoundUnstaged": "", - "BaseCommitIsAlreadyOnMainBranch": "", - "BaseCommitIsNotInCurrentView": "", - "HunksWithOnlyAddedLinesWarning": "", "StatusTitle": "Статус", "GlobalTitle": "Глобальные сочетания клавиш", "Menu": "Меню", "Execute": "Выполнить", "Stage": "Переключить индекс", - "StageTooltip": "", "ToggleStagedAll": "Все проиндексированные/непроиндексированные", - "ToggleStagedAllTooltip": "", "ToggleTreeView": "Переключить вид дерева файлов", - "ToggleTreeViewTooltip": "", - "OpenDiffTool": "", "OpenMergeTool": "Открыть внешний инструмент слияния (git mergetool)", - "OpenMergeToolTooltip": "", "Refresh": "Обновить", - "RefreshTooltip": "", "Push": "Отправить изменения", "Pull": "Получить и слить изменения", - "PushTooltip": "", - "PullTooltip": "", "Scroll": "Прокрутить", "FileFilter": "Фильтровать файлы (проиндексированные/непроиндексированные)", - "CopyToClipboardMenu": "", - "CopyFileName": "", - "CopyFilePath": "", - "CopyFileDiffTooltip": "", - "CopySelectedDiff": "", - "CopyAllFilesDiff": "", - "NoContentToCopyError": "", - "FileNameCopiedToast": "", - "FilePathCopiedToast": "", - "FileDiffCopiedToast": "", - "AllFilesDiffCopiedToast": "", "FilterStagedFiles": "Показывать только проиндексированные файлы", "FilterUnstagedFiles": "Показывать только непроиндексированные файлы", "ResetFilter": "Сбросить фильтр", "MergeConflictsTitle": "Конфликты Слияния", "Checkout": "Переключить", - "CheckoutTooltip": "", - "CantCheckoutBranchWhilePulling": "", - "TagCheckoutTooltip": "", - "RemoteBranchCheckoutTooltip": "", - "CantPullOrPushSameBranchTwice": "", "NoChangedFiles": "Нет изменённых файлов", "SoftReset": "Мягкий сброс", "AlreadyCheckedOutBranch": "Вы уже переключились в эту ветку", @@ -86,68 +53,36 @@ "BranchName": "Название ветки", "NewBranchNameBranchOff": "Название новой ветки (Ветка с '{{.branchName}}')", "CantDeleteCheckOutBranch": "Невозможно удалить переключённую ветку!", - "DeleteBranchTitle": "", - "DeleteLocalBranch": "", - "DeleteRemoteBranchOption": "", - "DeleteRemoteBranchPrompt": "", - "ForceDeleteBranchTitle": "", "ForceDeleteBranchMessage": "'{{.selectedBranchName}}' не полностью слилась. Вы уверены, что хотите удалить его?", "RebaseBranch": "Перебазировать переключённую ветку на эту ветку", - "RebaseBranchTooltip": "", "CantRebaseOntoSelf": "Невозможно перебазировать ветку на себя", "CantMergeBranchIntoItself": "Невозможно объединить ветку в себя", "ForceCheckout": "Принудительное переключение", - "ForceCheckoutTooltip": "", "CheckoutByName": "Переключить по названию", - "CheckoutByNameTooltip": "", - "RemoteBranchCheckoutTitle": "", - "CheckoutTypeNewBranch": "", - "CheckoutTypeNewBranchTooltip": "", - "CheckoutTypeDetachedHead": "", - "CheckoutTypeDetachedHeadTooltip": "", "NewBranch": "Новая ветка", - "NewBranchFromStashTooltip": "", "NoBranchesThisRepo": "Нет веток для этого репозитория", "CommitWithoutMessageErr": "Вы не можете сохранить изменения без сообщения коммита", "Close": "Закрыть", "CloseCancel": "Закрыть/отменить", "Confirm": "Подтвердить", "Quit": "Выйти", - "SquashTooltip": "", "CannotSquashOrFixupFirstCommit": "Ниже нет коммита, который можно было бы объединить", "Fixup": "Объединить несколько коммитов в один отбросив сообщение коммита (Fixup) ", - "FixupTooltip": "", "SureFixupThisCommit": "Вы уверены, что хотите объединить несколько коммитов, отбросив сообщение коммита? Он будет объединён с коммитом ниже", "SureSquashThisCommit": "Вы уверены, что хотите объединить несколько коммитов в нижний коммит?", "Squash": "Объединить коммиты (Squash)", "PickCommitTooltip": "Выбрать коммит (в середине перебазирования)", - "Pick": "", - "CantPickDisabledReason": "", - "Edit": "", "RevertCommit": "Отменить коммит", - "Revert": "", - "RevertCommitTooltip": "", "Reword": "Перефразировать коммит", - "CommitRewordTooltip": "", "DropCommit": "Удалить коммит", - "DropCommitTooltip": "", "MoveDownCommit": "Переместить коммит вниз на один", "MoveUpCommit": "Переместить коммит вверх на один", - "CannotMoveAnyFurther": "", - "EditCommit": "", "EditCommitTooltip": "Изменить коммит", "AmendCommitTooltip": "Править последний коммит с проиндексированными изменениями", - "Amend": "", "ResetAuthor": "Сброс автора коммита", - "ResetAuthorTooltip": "", "SetAuthor": "Установить автора", - "SetAuthorTooltip": "", - "AddCoAuthor": "", "AmendCommitAttribute": "Установить/убрать автора коммита", - "AmendCommitAttributeTooltip": "", "SetAuthorPromptTitle": "Установить автора (должно выглядеть как «Имя \u003cEmail\u003e»)", - "AddCoAuthorPromptTitle": "", - "AddCoAuthorTooltip": "", "SureResetCommitAuthor": "Поле автора этого автора будет обновлено в соответствии с настроенным пользователем. Это также обновляет временную метку автора. Продолжить?", "RewordCommitEditor": "Переписать коммит с помощью редактора", "NoCommitsThisBranch": "Нет коммитов для этой ветки", @@ -158,15 +93,11 @@ "RedoReflog": "Повторить (через reflog) (экспериментальный)", "UndoTooltip": "Журнал ссылок (reflog) будет использоваться для определения того, какую команду git запустить, чтобы отменить последнюю команду git. Сюда не входят изменения в рабочем дереве; учитываются только коммиты.", "RedoTooltip": "Журнал ссылок (reflog) будет использоваться для определения того, какую команду git нужно запустить, чтобы повторить последнюю команду git. Сюда не входят изменения в рабочем дереве; учитываются только коммиты.", - "UndoMergeResolveTooltip": "", "DiscardAllTooltip": "Отменить проиндексированные и непроиндексированные изменения в '{{.path}}'.", "DiscardUnstagedTooltip": "Отменить непроиндексированные изменения в '{{.path}}'.", "Pop": "Применить припрятанные изменения и тут же удалить их из хранилища", - "StashPopTooltip": "", "Drop": "Удалить припрятанные изменения из хранилища", - "StashDropTooltip": "", "Apply": "Применить припрятанные изменения", - "StashApplyTooltip": "", "NoStashEntries": "Нет записей в хранилище", "StashDrop": "Сбросить хранилище", "SureDropStashEntry": "Вы уверены, что хотите удалить эту запись хранилища?", @@ -184,7 +115,6 @@ "ForcePush": "Принудительная отправка изменении", "ForcePushPrompt": "Ветка отклонилась от удалённой ветки. Нажмите «esc», чтобы отменить, или «enter», чтобы начать принудительную отправку изменении.", "ForcePushDisabled": "Ветка отклонилась от удалённой ветки. Принудительная отправка изменении была отключена", - "UpdatesRejected": "", "UpdatesRejectedAndForcePushDisabled": "Обновления были отклонены. Принудительная отправка изменении была отключена", "CheckForUpdate": "Проверить обновления", "CheckingForUpdates": "Проверка обновлений...", @@ -206,15 +136,11 @@ "DeprecatedEditConfigWarning": "\n### Предупреждение об устаревшей конфигурации ###\n\nСледующие параметры конфигурации устарели и будут удалены в будущей\nверсии:\n{{configs}}\n\nПожалуйста, ознакомьтесь с\n\n https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#configuring-file-editing\n\nдля получения актуальной информации о том, как настроить ваш редактор.\n\n", "GitconfigParseErr": "Gogit не удалось проанализировать ваш файл gitconfig из-за наличия символов «\\» без кавычек. Их удаление должно решить проблему.", "EditFile": "Редактировать файл", - "EditFileTooltip": "", "OpenFile": "Открыть файл", - "OpenFileTooltip": "", - "OpenInEditor": "", "IgnoreFile": "Добавить в .gitignore", "ExcludeFile": "Добавить в .git/info/exclude", "RefreshFiles": "Обновить файлы", "Merge": "Слияние с текущей переключённой веткой", - "MergeBranchTooltip": "", "ConfirmQuit": "Вы уверены, что хотите выйти?", "SwitchRepo": "Переключиться на последний репозиторий", "AllBranchesLogGraph": "Показать все логи ветки", @@ -222,26 +148,18 @@ "CopyPullRequestURL": "Скопировать URL запроса на принятие изменений в буфер обмена", "NoBranchOnRemote": "Этой ветки не существует в удалённом репозитории. Сначала вам нужно его отправить в удалённый репозитории.", "Fetch": "Получить изменения", - "FetchTooltip": "", "NoAutomaticGitFetchTitle": "Нет автоматического получения изменении", "NoAutomaticGitFetchBody": "Lazygit не может использовать «git fetch» в приватном репозитории; используйте «f» на панели файлов, чтобы запустить «git fetch» вручную", "FileEnter": "Проиндексировать отдельные части/строки для файла или свернуть/развернуть для каталога", - "FileEnterTooltip": "", "FileStagingRequirements": "Можно проиндексировать только отдельные строки для отслеживаемых файлов", "StageSelectionTooltip": "Переключить строку в проиндексированные / непроиндексированные", "DiscardSelection": "Отменить изменение (git reset)", - "DiscardSelectionTooltip": "", "ToggleSelectHunk": "Переключить выборку частей", - "ToggleSelectHunkTooltip": "", "ToggleSelectionForPatch": "Добавить/удалить строку(и) для патча", - "ToggleSelectionForPatchTooltip": "", "EditHunk": "Изменить эту часть", - "EditHunkTooltip": "", "ToggleStagingView": "Переключиться на другую панель (проиндексированные/непроиндексированные изменения)", - "ToggleStagingViewTooltip": "", "ReturnToFilesPanel": "Вернуться к панели файлов", "FastForward": "Перемотать эту ветку вперёд из её upstream-ветки", - "FastForwardTooltip": "", "FastForwarding": "Получить изменения и перемотать вперёд", "FoundConflictsTitle": "Конфликты!", "ViewConflictsMenuItem": "Просмотр конфликтов", @@ -249,9 +167,6 @@ "PickHunk": "Выбрать эту часть", "PickAllHunks": "Выбрать все части", "ViewMergeRebaseOptions": "Просмотреть параметры слияния/перебазирования", - "ViewMergeRebaseOptionsTooltip": "", - "ViewMergeOptions": "", - "ViewRebaseOptions": "", "NotMergingOrRebasing": "В данный момент вы не выполняете ни перебазирования, ни слияние", "AlreadyRebasing": "Невозможно выполнить это действие во время перебазирования", "RecentRepos": "Последние репозитории", @@ -264,7 +179,6 @@ "SearchTitle": "Поиск", "TagsTitle": "Теги", "MenuTitle": "Меню", - "CommitMenuTitle": "", "RemotesTitle": "Удалённые репозитории", "RemoteBranchesTitle": "Удалённые ветки", "PatchBuildingTitle": "Главная панель (сборка патчей)", @@ -274,18 +188,13 @@ "ConflictsResolved": "Все конфликты слияния разрешены. Продолжить?", "Continue": "Продолжить", "RebasingTitle": "Перебазировать '{{.checkedOutBranch}}'", - "RebasingFromBaseCommitTitle": "", "SimpleRebase": "Простая перебазировка на '{{.ref}}'", "InteractiveRebase": "Интерактивная перебазировка на '{{.ref}}'", - "RebaseOntoBaseBranch": "", "InteractiveRebaseTooltip": "Начать интерактивную перебазировку с перерыва в начале, чтобы можно было обновить TODO коммиты, прежде чем продолжить.", - "RebaseOntoBaseBranchTooltip": "", - "MustSelectTodoCommits": "", "ConfirmMerge": "Вы уверены, что хотите to merge '{{.selectedBranch}}' into '{{.checkedOutBranch}}'?", "FwdNoUpstream": "Невозможно перемотать ветку без upstream-ветки", "FwdNoLocalUpstream": "Невозможно перемотать ветку. Удалённый репозитории не зарегистрирован локально", "FwdCommitsToPush": "Невозможно перемотать ветку с коммитами для отправки", - "PullRequestNoUpstream": "", "ErrorOccurred": "Произошла ошибка! Пожалуйста, заявите о проблеме на", "NoRoom": "Недостаточно места", "YouAreHere": "ВЫ ЗДЕСЬ", @@ -293,14 +202,9 @@ "RewordNotSupported": "Переформулировка коммитов при интерактивном перебазировании в настоящее время не поддерживается", "ChangingThisActionIsNotAllowed": "Изменение этого типа записи todo перебазирования не допускается", "CherryPickCopy": "Скопировать отобранные коммит (cherry-pick)", - "CherryPickCopyTooltip": "", - "CherryPickCopyRange": "", - "CherryPickCopyRangeTooltip": "", "PasteCommits": "Вставить отобранные коммиты (cherry-pick)", "SureCherryPick": "Вы уверены, что хотите выборочно применить (cherry-picked) отобранные коммиты в эту ветку?", "CherryPick": "Выборочная отборка (Cherry-Pick)", - "CannotCherryPickNonCommit": "", - "CannotCherryPickMergeCommit": "", "Donate": "Пожертвовать", "AskQuestion": "Задать вопрос", "PrevLine": "Выбрать предыдущую строку", @@ -319,14 +223,12 @@ "AmendCommitPrompt": "Вы уверены, что хотите править этот коммит проиндексированными файлами?", "DropCommitTitle": "Удалить коммит", "DropCommitPrompt": "Вы уверены, что хотите удалить этот коммит?", - "DropUpdateRefPrompt": "", "PullingStatus": "Получение и слияние изменении", "PushingStatus": "Отправка изменении", "FetchingStatus": "Получение изменении", "SquashingStatus": "Объединение коммитов", "FixingStatus": "Объединение коммитов, отбросив сообщение коммита", "DeletingStatus": "Удаление", - "DroppingStatus": "", "MovingStatus": "Перемещение", "RebasingStatus": "Перебазирование", "MergingStatus": "Слияние", @@ -338,18 +240,14 @@ "RedoingStatus": "Выполнение последней команды", "CheckingOutStatus": "Переключение", "CommittingStatus": "Сохранение изменении", - "RevertingStatus": "", - "CreatingFixupCommitStatus": "", "CommitFiles": "Сохранить изменения файлов", "SubCommitsDynamicTitle": "Коммиты (%s)", "CommitFilesDynamicTitle": "Различия файлов (%s)", "RemoteBranchesDynamicTitle": "Удалённые ветки (%s)", "ViewItemFiles": "Просмотреть файлы выбранного элемента", - "ViewItemFilesTooltip": "", "CommitFilesTitle": "Сохранить Изменения Файлов", "CheckoutCommitFileTooltip": "Переключить файл", "CanOnlyDiscardFromLocalCommits": "Изменения можно отменить только из локальных коммитов.", - "Remove": "", "DiscardOldFileChangeTooltip": "Отменить изменения коммита в этом файле", "DiscardFileChangesTitle": "Отменить изменения файла", "DiscardFileChangesPrompt": "Вы уверены, что хотите удалить изменения в выбранных файлах из этого коммита?\n\nЭто действие запустит перебазирование и отменит изменения в этих файлах. Обратите внимание, что если последующие коммиты зависят от этих изменений, вам, возможно, придется разрешить конфликты.\nПримечание: это также сбросит все активные пользовательские патчи.", @@ -363,8 +261,6 @@ "AutoStashPrompt": "Чтобы перенести изменения, их нужно сохранить и вынуть. Сделать это автоматически? (enter/esc)", "StashPrefix": "Автосохранение изменений для", "Discard": "Просмотреть параметры «отмены изменении»", - "DiscardChangesTitle": "", - "DiscardFileChangesTooltip": "", "Cancel": "Отменить", "DiscardAllChanges": "Отменить все изменения", "DiscardUnstagedChanges": "Отменить непроиндексированные изменения", @@ -373,43 +269,17 @@ "DiscardUntrackedFiles": "Удалить неотслеживаемые файлы", "DiscardStagedChanges": "Отменить проиндексированные изменения", "HardReset": "Жёсткий сброс", - "BranchDeleteTooltip": "", - "TagDeleteTooltip": "", - "Delete": "", - "Reset": "", - "ResetTooltip": "", "ViewResetOptions": "Просмотреть параметры сброса", - "FileResetOptionsTooltip": "", "CreateFixupCommit": "Создать fixup коммит", "CreateFixupCommitTooltip": "Создать fixup коммит для этого коммита", - "CreateAmendCommit": "", - "FixupMenu_Fixup": "", - "FixupMenu_FixupTooltip": "", - "FixupMenu_AmendWithChanges": "", - "FixupMenu_AmendWithChangesTooltip": "", - "FixupMenu_AmendWithoutChanges": "", - "FixupMenu_AmendWithoutChangesTooltip": "", "SquashAboveCommitsTooltip": "Объединить все 'fixup!' коммиты выше в выбранный коммит (автосохранение)", - "SquashCommitsAboveSelectedTooltip": "", - "SquashCommitsInCurrentBranchTooltip": "", - "SquashAboveCommits": "", - "SquashCommitsInCurrentBranch": "", - "SquashCommitsAboveSelectedCommit": "", - "CannotSquashCommitsInCurrentBranch": "", "ExecuteCustomCommand": "Выполнить пользовательскую команду", - "ExecuteCustomCommandTooltip": "", "CustomCommand": "Пользовательская Команда:", "CommitChangesWithoutHook": "Закоммитить изменения без предварительного хука коммита", "SkipHookPrefixNotConfigured": "Вы не настроили префикс сообщения коммита для пропуска хуков. Установите `git.skipHookPrefix = 'WIP'` в вашей конфигурации", "ResetTo": "Сбросить на", - "ResetSoftTooltip": "", - "ResetMixedTooltip": "", - "ResetHardTooltip": "", "PressEnterToReturn": "Нажмите Enter, чтобы вернуться в lazygit", "ViewStashOptions": "Просмотреть параметры хранилища", - "ViewStashOptionsTooltip": "", - "Stash": "", - "StashTooltip": "", "StashAllChanges": "Припрятать все изменения", "StashStagedChanges": "Припрятать проиндексированные изменения", "StashAllChangesKeepIndex": "Припрятать все изменения и сохранить индекс", @@ -417,26 +287,20 @@ "StashIncludeUntrackedChanges": "Припрятать все изменения, включая неотслеживаемые файлы", "StashOptions": "Параметры хранилища", "NotARepository": "Ошибка: необходимо запустить внутри git репозитория", - "WorkingDirectoryDoesNotExist": "", "Jump": "Перейти к панели", "ScrollLeftRight": "Прокрутить влево/вправо", "ScrollLeft": "Прокрутить влево", "ScrollRight": "Прокрутить вправо", "DiscardPatch": "Отменить патч", "DiscardPatchConfirm": "Вы можете собрать патч только из одной записи коммита/хранилища за раз. Отменить текущий патч?", - "DiscardPatchSameCommitConfirm": "", "CantPatchWhileRebasingError": "Вы не можете создавать патчи или запускать команды патча, находясь в состоянии слияния или перемещения.", "ToggleAddToPatch": "Переключить файлы включённые в патч", - "ToggleAddToPatchTooltip": "", "ToggleAllInPatch": "Переключить все файлы, включённые в патч", - "ToggleAllInPatchTooltip": "", "UpdatingPatch": "Обновление патча", "ViewPatchOptions": "Просмотреть пользовательские параметры патча", "PatchOptionsTitle": "Параметры патча", "NoPatchError": "Патч ещё не создан. Чтобы начать сборку патча, используйте «пробел» в файле коммита или введите, чтобы добавить определённые строки.", - "EmptyPatchError": "", "EnterCommitFile": "Введите файл, чтобы добавить выбранные строки в патч (или свернуть каталог переключения)", - "EnterCommitFileTooltip": "", "ExitCustomPatchBuilder": "Выйти из сборщика пользовательских патчей", "EnterUpstream": "Введите upstream как '\u003cremote\u003e \u003cbranchname\u003e'", "InvalidUpstream": "Недействительный upstream. Должен быть в формате '\u003cremote\u003e \u003cbranchname\u003e'", @@ -444,57 +308,31 @@ "NewRemote": "Добавить новую удалённую ветку", "NewRemoteName": "Название новой удалённой ветки", "NewRemoteUrl": "Ссылка новой удалённой ветки", - "ViewBranches": "", "EditRemoteName": "Введите новое название для удалённое ветки {{.remoteName}}:", "EditRemoteUrl": "Введите новую ссылку для удалённое ветки {{.remoteName}}:", "RemoveRemote": "Удалить удалённую ветку", - "RemoveRemoteTooltip": "", "RemoveRemotePrompt": "Вы уверены, что хотите удалить удалённую ветку?", "DeleteRemoteBranch": "Удалить Удалённую Ветку", "DeleteRemoteBranchMessage": "Вы уверены, что хотите удалить удалённую ветку", - "DeleteRemoteBranchTooltip": "", - "SetAsUpstream": "", "SetAsUpstreamTooltip": "Установить как upstream-ветку переключённую ветку", "SetUpstream": "Установить upstream-ветку из выбранной ветки", "UnsetUpstream": "Убрать upstream-ветку из выбранной ветки", - "ViewDivergenceFromUpstream": "", - "ViewDivergenceFromBaseBranch": "", - "CouldNotDetermineBaseBranch": "", - "DivergenceSectionHeaderLocal": "", - "DivergenceSectionHeaderRemote": "", - "ViewUpstreamResetOptions": "", - "ViewUpstreamResetOptionsTooltip": "", - "ViewUpstreamRebaseOptions": "", - "ViewUpstreamRebaseOptionsTooltip": "", - "UpstreamGenericName": "", "SetUpstreamTitle": "Установить upstream-ветку", "SetUpstreamMessage": "Вы уверены, что хотите установить upstream-ветвь '{{.checkedOut}}' на '{{.selected}}'", "EditRemoteTooltip": "Редактировать удалённый репозитории", "TagCommit": "Пометить коммит тегом", - "TagCommitTooltip": "", "TagMenuTitle": "Создать тег", "TagNameTitle": "Название тега", "TagMessageTitle": "Сообщения тега", "LightweightTag": "Легковесный тег", "AnnotatedTag": "Аннотированный тег", "DeleteTagTitle": "Удалить тег", - "DeleteLocalTag": "", - "DeleteRemoteTag": "", - "SelectRemoteTagUpstream": "", - "DeleteRemoteTagPrompt": "", - "RemoteTagDeletedMessage": "", "PushTagTitle": "Удалённый репозитории для отправки тега '{{.tagName}}' в:", "PushTag": "Отправить тег", - "PushTagTooltip": "", "NewTag": "Создать тег", - "NewTagTooltip": "", - "CreatingTag": "", - "ForceTag": "", - "ForceTagPrompt": "", "FetchRemoteTooltip": "Получение изменения из удалённого репозитория", "FetchingRemoteStatus": "Получение статуса удалённого репозитория", "CheckoutCommit": "Переключить коммит", - "CheckoutCommitTooltip": "", "SureCheckoutThisCommit": "Вы уверены, что хотите переключить коммит?", "GitFlowOptions": "Показать параметры git-flow", "NotAGitFlowBranch": "Это не похоже на ветку git-flow", @@ -507,20 +345,10 @@ "NextScreenMode": "Следующий режим экрана (нормальный/полуэкранный/полноэкранный)", "PrevScreenMode": "Предыдущий режим экрана", "StartSearch": "Найти", - "StartFilter": "", "Panel": "Панель", "Keybindings": "Связки клавиш", "KeybindingsLegend": "Связки клавиш", - "KeybindingsMenuSectionLocal": "", - "KeybindingsMenuSectionGlobal": "", - "KeybindingsMenuSectionNavigation": "", "RenameBranch": "Переименовать ветку", - "Upstream": "", - "UpstreamTooltip": "", - "BranchUpstreamOptionsTitle": "", - "ViewBranchUpstreamOptions": "", - "ViewBranchUpstreamOptionsTooltip": "", - "UpstreamNotSetError": "", "NewGitFlowBranchPrompt": "Новое {{.branchType}} название:", "RenameBranchWarning": "Эта ветвь отслеживает удалённый репозитории. Это действие переименует только имя локальной ветки, а не имя удалённой ветки. Продолжать?", "OpenKeybindingsMenu": "Открыть меню", @@ -539,16 +367,11 @@ "FilteringBy": "Фильтрация по", "ResetInParentheses": "(сбросить)", "OpenFilteringMenu": "Просмотреть параметры фильтрации по пути", - "OpenFilteringMenuTooltip": "", "FilterBy": "Фильтровать по", "ExitFilterMode": "Прекратить фильтрацию по пути", - "ExitFilterModeAuthor": "", "FilterPathOption": "Введите путь для фильтрации", - "FilterAuthorOption": "", "EnterFileName": "Введите путь:", - "EnterAuthor": "", "FilteringMenuTitle": "Фильтрация", - "WillCancelExistingFilterTooltip": "", "MustExitFilterModeTitle": "Команда недоступна", "MustExitFilterModePrompt": "Команда недоступна в режиме фильтрации. Выйти из режима фильтрации?", "Diff": "Разница", @@ -558,9 +381,7 @@ "DiffingMenuTitle": "Сравнение", "SwapDiff": "Обратное направление сравнении", "ViewDiffingOptions": "Открыть меню сравнении", - "ViewDiffingOptionsTooltip": "", "OpenCommandLogMenu": "Открыть меню журнала команд", - "OpenCommandLogMenuTooltip": "", "ShowingGitDiff": "Показывает вывод для:", "CommitDiff": "Разница коммита", "CopyCommitHashToClipboard": "Скопировать hash коммита в буфер обмена", @@ -571,7 +392,6 @@ "CommitSubject": "Тема коммита", "CommitAuthor": "Автор коммита", "CopyCommitAttributeToClipboard": "Скопировать атрибут коммита", - "CopyCommitAttributeToClipboardTooltip": "", "CopyBranchNameToClipboard": "Скопировать название ветки в буфер обмена", "CopyPathToClipboard": "Скопировать название файла в буфер обмена", "CommitPrefixPatternError": "Ошибка в шаблоне commitPrefix", @@ -591,10 +411,8 @@ "SubmoduleStashAndReset": "Спрятать непроиндексированные изменения подмодуля и обновить", "AndResetSubmodules": "И сбросить подмодули", "EnterSubmoduleTooltip": "Ввести подмодуль", - "Enter": "", "CopySubmoduleNameToClipboard": "Скопировать название подмодуля в буфер обмена", "RemoveSubmodule": "Удалить подмодуль", - "RemoveSubmoduleTooltip": "", "RemoveSubmodulePrompt": "Вы уверены, что хотите удалить подмодуль '%s' и соответствующий ему каталог? Это необратимо.", "ResettingSubmoduleStatus": "Сброс подмодуля", "NewSubmoduleName": "Названия нового подмодуля:", @@ -607,8 +425,6 @@ "EditSubmoduleUrl": "Обновить URL подмодуля", "InitializingSubmoduleStatus": "Инициализация подмодуля", "InitSubmoduleTooltip": "Инициализировать подмодуль", - "Update": "", - "Initialize": "", "SubmoduleUpdateTooltip": "Обновить подмодуль", "UpdatingSubmoduleStatus": "Обновление подмодуля", "BulkInitSubmodules": "Массовая инициализация подмодулей", @@ -622,7 +438,6 @@ "NavigationTitle": "Навигация по панели списка", "SuggestionsCheatsheetTitle": "Подсказки", "SuggestionsTitle": "Подсказки (нажмите %s, чтобы сфокусироваться)", - "SuggestionsSubtitle": "", "ExtrasTitle": "Журнал команд", "PushingTagStatus": "Отправка тега", "PullRequestURLCopiedToClipboard": "URL запроса на принятие изменений скопирован в буфер обмена", @@ -636,7 +451,6 @@ "ErrCannotEditDirectory": "Невозможно редактировать каталог: вы можете редактировать только отдельные файлы", "ErrStageDirWithInlineMergeConflicts": "Невозможно подготовить/удалить каталог, содержащий файлы со встроенными конфликтами слияния. Сначала устраните конфликты слияния", "ErrRepositoryMovedOrDeleted": "Не могу найти репозиторий. Возможно, он был перемещён или удалён ¯\\_(ツ)_/¯", - "ErrWorktreeMovedOrRemoved": "", "CommandLog": "Журнал команд", "ToggleShowCommandLog": "Показать/скрыть журнал команд", "FocusCommandLog": "Сфокусировать журнал команд", @@ -644,14 +458,10 @@ "RandomTip": "Случайный совет", "SelectParentCommitForMerge": "Выберите родительский коммит для слияния", "ToggleWhitespaceInDiffView": "Переключить отображение изменении пробелов в просмотрщике сравнении", - "ToggleWhitespaceInDiffViewTooltip": "", "IgnoreWhitespaceDiffViewSubTitle": "(игнорирование пробелов)", "IgnoreWhitespaceNotSupportedHere": "Игнорирование пробелов не поддерживается в этом представлении", "IncreaseContextInDiffView": "Увеличить размер контекста, отображаемого вокруг изменений в просмотрщике сравнении", - "IncreaseContextInDiffViewTooltip": "", "DecreaseContextInDiffView": "Уменьшите размер контекста, отображаемого вокруг изменений в просмотрщике сравнении", - "DecreaseContextInDiffViewTooltip": "", - "DiffContextSizeChanged": "", "CreatePullRequestOptions": "Создать параметры запроса принятие изменений", "DefaultBranch": "Ветка по-умолчанию", "SelectBranch": "Выбрать ветку", @@ -666,15 +476,12 @@ "AbortTitle": "Прервать %s", "AbortPrompt": "Вы уверены, что хотите прервать текущий %s?", "OpenLogMenu": "Открыть меню журнала", - "OpenLogMenuTooltip": "", "LogMenuTitle": "Параметры журнала коммитов", "ToggleShowGitGraphAll": "Переключить отображение всего git графа (передать флаг --all в git log )", "ShowGitGraph": "Показать git граф", "SortOrder": "Порядок сортировки", "SortAlphabetical": "По алфавиту", "SortByDate": "По дате", - "SortByRecency": "", - "SortBasedOnReflog": "", "SortCommits": "Упорядочить коммиты", "CantChangeContextSizeError": "Невозможно изменить контекст в режиме создания патча, потому что мы были слишком ленивы, чтобы поддерживать его при выпуске функции. Если вы действительно этого хотите, пожалуйста, дайте нам знать!", "OpenCommitInBrowser": "Открыть коммит в браузере", @@ -693,91 +500,24 @@ "CommitsCopied": "коммиты скопированы", "CommitCopied": "коммит скопирован", "ResetPatch": "Сбросить патч", - "ResetPatchTooltip": "", "ApplyPatch": "Применить патч", - "ApplyPatchTooltip": "", "ApplyPatchInReverse": "Применить патч в обратном порядке", - "ApplyPatchInReverseTooltip": "", "RemovePatchFromOriginalCommit": "Удалить патч из исходного коммита (%s)", - "RemovePatchFromOriginalCommitTooltip": "", "MovePatchOutIntoIndex": "Переместить патч в индекс", - "MovePatchOutIntoIndexTooltip": "", "MovePatchIntoNewCommit": "Переместить патч в новый коммит", - "MovePatchIntoNewCommitTooltip": "", "MovePatchToSelectedCommit": "Переместить патч в выбранный коммит (%s)", - "MovePatchToSelectedCommitTooltip": "", "CopyPatchToClipboard": "Скопировать патч в буфер обмена", "NoMatchesFor": "Нет совпадений для '%s' %s", "MatchesFor": "совпадений для '%s' (%d из %d) %s", "SearchKeybindings": "%s: Следующее совпадение, %s: Предыдущее совпадение, %s: Выйти из режима поиска", "SearchPrefix": "Поиск: ", - "FilterPrefix": "", "ExitSearchMode": "%s: Выйти из режима поиска", - "ExitTextFilterMode": "", - "Switch": "", - "SwitchToWorktree": "", - "SwitchToWorktreeTooltip": "", - "AlreadyCheckedOutByWorktree": "", - "BranchCheckedOutByWorktree": "", - "DetachWorktreeTooltip": "", - "Switching": "", - "RemoveWorktree": "", - "RemoveWorktreeTitle": "", - "DetachWorktree": "", - "DetachingWorktree": "", - "WorktreesTitle": "", - "WorktreeTitle": "", - "RemoveWorktreePrompt": "", - "ForceRemoveWorktreePrompt": "", - "RemovingWorktree": "", - "AddingWorktree": "", - "CantDeleteCurrentWorktree": "", - "AlreadyInWorktree": "", - "CantDeleteMainWorktree": "", - "NoWorktreesThisRepo": "", - "MissingWorktree": "", - "MainWorktree": "", - "NewWorktree": "", - "NewWorktreePath": "", - "NewWorktreeBase": "", - "RemoveWorktreeTooltip": "", - "BranchNameCannotBeBlank": "", - "NewBranchName": "", - "NewBranchNameLeaveBlank": "", - "ViewWorktreeOptions": "", - "CreateWorktreeFrom": "", - "CreateWorktreeFromDetached": "", - "LcWorktree": "", - "ChangingDirectoryTo": "", - "Name": "", - "Branch": "", - "Path": "", - "MarkedBaseCommitStatus": "", - "MarkAsBaseCommit": "", - "MarkAsBaseCommitTooltip": "", - "MarkedCommitMarker": "", - "PleaseGoToURL": "", - "NoCopiedCommits": "", - "DisabledMenuItemPrefix": "", - "QuickStartInteractiveRebase": "", - "QuickStartInteractiveRebaseTooltip": "", - "CannotQuickStartInteractiveRebase": "", "ToggleRangeSelect": "Переключить выборку перетаскивания", - "RangeSelectUp": "", - "RangeSelectDown": "", - "RangeSelectNotSupported": "", - "NoItemSelected": "", - "SelectedItemIsNotABranch": "", - "SelectedItemDoesNotHaveFiles": "", - "RangeSelectNotSupportedForSubmodules": "", - "OldCherryPickKeyWarning": "", - "CommandDoesNotSupportOpeningInEditor": "", "Actions": { "CheckoutCommit": "Переключить коммит", "CheckoutTag": "Переключить тег", "CheckoutBranch": "Переключить ветку", "ForceCheckoutBranch": "Принудительное переключение ветки", - "DeleteLocalBranch": "", "DeleteBranch": "Удалить ветку", "Merge": "Слить", "RebaseBranch": "Перебазировать ветку", @@ -795,7 +535,6 @@ "AmendCommit": "Править коммит (amend)", "ResetCommitAuthor": "Сброс автора коммита", "SetCommitAuthor": "Установить автора коммита", - "AddCommitCoAuthor": "", "RevertCommit": "Отменить коммит", "CreateFixupCommit": "Создать fixup коммит", "SquashAllAboveFixupCommits": "Объединить все выше fixup коммиты", @@ -828,7 +567,6 @@ "Push": "Отправить изменения", "Pull": "Получить и слить изменения", "OpenFile": "Открыть файл", - "OpenFileTooltip": "", "StashAllChanges": "Припрятать все изменения", "StashAllChangesKeepIndex": "Припрятать все изменения и сохранить индекс", "StashStagedChanges": "Припрятать проиндексированные изменения", @@ -861,8 +599,6 @@ "UpdateSubmodule": "Обновить подмодуль", "CreateLightweightTag": "Создать легковесный тег", "CreateAnnotatedTag": "Создать аннотированный тег", - "DeleteLocalTag": "", - "DeleteRemoteTag": "", "PushTag": "Отправить тег", "NukeWorkingTree": "Уничтожить рабочее дерево", "DiscardUnstagedFileChanges": "Отменить непроиндексированные изменения файла", @@ -874,51 +610,25 @@ "Undo": "Отменить", "Redo": "Повторить", "CopyPullRequestURL": "Скопировать запрос на принятие изменений URL", - "OpenDiffTool": "", "OpenMergeTool": "Открыть инструмент слияния", "OpenCommitInBrowser": "Открыть коммит в браузере", "OpenPullRequest": "Открыть запрос на принятие изменений в браузера", "StartBisect": "Начать бинарный поиск", "ResetBisect": "Сбросить бинарный поиск", "BisectSkip": "Пропустить бинарный поиск", - "BisectMark": "Отметить бинарный поиск", - "RemoveWorktree": "", - "AddWorktree": "" + "BisectMark": "Отметить бинарный поиск" }, "Bisect": { "MarkStart": "Отметить %s как %s (начать бинарный поиск)", - "MarkSkipCurrent": "", - "MarkSkipSelected": "", "ResetTitle": "Сбросить 'git bisect'", "ResetPrompt": "Вы уверены, что хотите сбросить 'git bisect'?", "ResetOption": "Сбросить бинарный поиск", - "ChooseTerms": "", - "OldTermPrompt": "", - "NewTermPrompt": "", "BisectMenuTitle": "Бинарный поиск", "Mark": "Отметить %s как %s", "SkipCurrent": "Пропустить %s", - "SkipSelected": "", "CompleteTitle": "Бинарный поиск завершён", "CompletePrompt": "Бинарный поиск завершён! Изменения внесённые следующим коммитом:\n\n%s\n\nСбросить 'git bisect' сейчас?", "CompletePromptIndeterminate": "Бинарный поиск завершён! Некоторые коммиты были пропущены, поэтому любое из следующих коммитов могло внести изменения::\n\n%s\n\nСбросить 'git bisect' сейчас?", "Bisecting": "Бинарный поиск" - }, - "Log": { - "EditRebase": "", - "MoveCommitUp": "", - "MoveCommitDown": "", - "CherryPickCommits": "", - "HandleUndo": "", - "HandleMidRebaseCommand": "", - "RemoveFile": "", - "CopyToClipboard": "", - "Remove": "", - "CreateFileWithContent": "", - "AppendingLineToFile": "", - "EditRebaseFromBaseCommit": "" - }, - "BreakingChangesTitle": "", - "BreakingChangesMessage": "", - "BreakingChangesByVersion": null + } } diff --git a/pkg/i18n/translations/zh-CN.json b/pkg/i18n/translations/zh-CN.json index 2381408b91c..90f06b59384 100644 --- a/pkg/i18n/translations/zh-CN.json +++ b/pkg/i18n/translations/zh-CN.json @@ -5,79 +5,37 @@ "BranchesTitle": "分支", "CommitsTitle": "提交", "StashTitle": "贮藏", - "SnakeTitle": "", - "EasterEgg": "", "UnstagedChanges": "未暂存更改", "StagedChanges": "已暂存更改", "MainTitle": "主要", "StagingTitle": "正在暂存", "MergingTitle": "正在合并", - "MergeConfirmTitle": "", "NormalTitle": "正常", - "LogTitle": "", "CommitSummary": "提交信息", "CredentialsUsername": "用户名", "CredentialsPassword": "密码", "CredentialsPassphrase": "输入 SSH 密钥的密码", - "CredentialsPIN": "", "PassUnameWrong": "密码 和/或 用户名错误", "Commit": "提交更改", - "CommitTooltip": "", "AmendLastCommit": "修补最后一次提交", "AmendLastCommitTitle": "修补最后一次提交", "SureToAmend": "您确定要修补上一次提交吗?之后您可以从提交面板更改提交消息。", "NoCommitToAmend": "没有需要提交的修补。", "CommitChangesWithEditor": "提交更改(使用编辑器编辑提交信息)", - "FindBaseCommitForFixup": "", - "FindBaseCommitForFixupTooltip": "", - "NoBaseCommitsFound": "", - "MultipleBaseCommitsFoundStaged": "", - "MultipleBaseCommitsFoundUnstaged": "", - "BaseCommitIsAlreadyOnMainBranch": "", - "BaseCommitIsNotInCurrentView": "", - "HunksWithOnlyAddedLinesWarning": "", "StatusTitle": "状态", "GlobalTitle": "全局键绑定", "Menu": "菜单", "Execute": "执行", "Stage": "切换暂存状态", - "StageTooltip": "", "ToggleStagedAll": "切换所有文件的暂存状态", - "ToggleStagedAllTooltip": "", "ToggleTreeView": "切换文件树视图", - "ToggleTreeViewTooltip": "", - "OpenDiffTool": "", "OpenMergeTool": "打开外部合并工具 (git mergetool)", - "OpenMergeToolTooltip": "", "Refresh": "刷新", - "RefreshTooltip": "", "Push": "推送", "Pull": "拉取", - "PushTooltip": "", - "PullTooltip": "", "Scroll": "滚动", - "FileFilter": "", - "CopyToClipboardMenu": "", - "CopyFileName": "", - "CopyFilePath": "", - "CopyFileDiffTooltip": "", - "CopySelectedDiff": "", - "CopyAllFilesDiff": "", - "NoContentToCopyError": "", - "FileNameCopiedToast": "", - "FilePathCopiedToast": "", - "FileDiffCopiedToast": "", - "AllFilesDiffCopiedToast": "", - "FilterStagedFiles": "", - "FilterUnstagedFiles": "", - "ResetFilter": "", "MergeConflictsTitle": "合并冲突", "Checkout": "检出", - "CheckoutTooltip": "", - "CantCheckoutBranchWhilePulling": "", - "TagCheckoutTooltip": "", - "RemoteBranchCheckoutTooltip": "", - "CantPullOrPushSameBranchTwice": "", "NoChangedFiles": "没有更改过文件", "SoftReset": "软重置", "AlreadyCheckedOutBranch": "您已经检出至此分支", @@ -86,87 +44,41 @@ "BranchName": "分支名称", "NewBranchNameBranchOff": "新分支名称(基于 {{.branchName}})", "CantDeleteCheckOutBranch": "您不能删除已检出的分支!", - "DeleteBranchTitle": "", - "DeleteLocalBranch": "", - "DeleteRemoteBranchOption": "", - "DeleteRemoteBranchPrompt": "", - "ForceDeleteBranchTitle": "", "ForceDeleteBranchMessage": "{{.selectedBranchName}} 还没有被完全合并。您确定要删除它吗?", "RebaseBranch": "将已检出的分支变基到该分支", - "RebaseBranchTooltip": "", "CantRebaseOntoSelf": "您不能将分支变基到其自身", "CantMergeBranchIntoItself": "您不能将分支合并到其自身", "ForceCheckout": "强制检出", - "ForceCheckoutTooltip": "", "CheckoutByName": "按名称检出", - "CheckoutByNameTooltip": "", - "RemoteBranchCheckoutTitle": "", - "CheckoutTypeNewBranch": "", - "CheckoutTypeNewBranchTooltip": "", - "CheckoutTypeDetachedHead": "", - "CheckoutTypeDetachedHeadTooltip": "", "NewBranch": "新分支", - "NewBranchFromStashTooltip": "", "NoBranchesThisRepo": "此仓库中没有分支", "CommitWithoutMessageErr": "您必须编写提交消息才能进行提交", "Close": "关闭", "CloseCancel": "关闭", "Confirm": "确认", "Quit": "退出", - "SquashTooltip": "", "CannotSquashOrFixupFirstCommit": "There's no commit below to squash into", "Fixup": "修正(fixup)", - "FixupTooltip": "", "SureFixupThisCommit": "您确定要“修正”此提交吗?它将合并到下面的提交中", "SureSquashThisCommit": "您确定要将这个提交压缩到下面的提交中吗?", "Squash": "压缩", "PickCommitTooltip": "选择提交(变基过程中)", - "Pick": "", - "CantPickDisabledReason": "", - "Edit": "", "RevertCommit": "还原提交", - "Revert": "", - "RevertCommitTooltip": "", "Reword": "改写提交", - "CommitRewordTooltip": "", "DropCommit": "删除提交", - "DropCommitTooltip": "", "MoveDownCommit": "下移提交", "MoveUpCommit": "上移提交", - "CannotMoveAnyFurther": "", - "EditCommit": "", "EditCommitTooltip": "编辑提交", "AmendCommitTooltip": "用已暂存的更改来修补提交", - "Amend": "", - "ResetAuthor": "", - "ResetAuthorTooltip": "", - "SetAuthor": "", - "SetAuthorTooltip": "", - "AddCoAuthor": "", - "AmendCommitAttribute": "", - "AmendCommitAttributeTooltip": "", - "SetAuthorPromptTitle": "", - "AddCoAuthorPromptTitle": "", - "AddCoAuthorTooltip": "", - "SureResetCommitAuthor": "", "RewordCommitEditor": "使用编辑器重命名提交", "NoCommitsThisBranch": "该分支没有提交", - "UpdateRefHere": "", "Error": "错误", "Undo": "撤销", "UndoReflog": "(通过 reflog)撤销「实验功能」", "RedoReflog": "(通过 reflog)重做「实验功能」", - "UndoTooltip": "", - "RedoTooltip": "", - "UndoMergeResolveTooltip": "", - "DiscardAllTooltip": "", - "DiscardUnstagedTooltip": "", "Pop": "应用并删除", - "StashPopTooltip": "", "Drop": "删除", - "StashDropTooltip": "", "Apply": "应用", - "StashApplyTooltip": "", "NoStashEntries": "没有贮藏条目", "StashDrop": "删除贮藏", "SureDropStashEntry": "您确定要删除此贮藏条目吗?", @@ -175,7 +87,6 @@ "StashApply": "应用贮藏", "SureApplyStashEntry": "您确定要应用此贮藏条目?", "NoTrackedStagedFilesStash": "没有可以贮藏的已跟踪/暂存文件", - "NoFilesToStash": "", "StashChanges": "贮藏更改", "RenameStash": "Rename stash", "RenameStashPrompt": "Rename stash: {{.stashName}}", @@ -184,37 +95,21 @@ "ForcePush": "强制推送", "ForcePushPrompt": "您的分支已与远程分支不同。按‘esc’取消,或‘enter’强制推送.", "ForcePushDisabled": "您的分支已与远程分支不同, 并且您已经禁用了强行推送", - "UpdatesRejected": "", "UpdatesRejectedAndForcePushDisabled": "更新被拒绝,您已禁用强制推送", "CheckForUpdate": "检查更新", "CheckingForUpdates": "正在检查更新…", - "UpdateAvailableTitle": "", - "UpdateAvailable": "", - "UpdateInProgressWaitingStatus": "", - "UpdateCompletedTitle": "", - "UpdateCompleted": "", - "FailedToRetrieveLatestVersionErr": "", "OnLatestVersionErr": "已是最新版本", "MajorVersionErr": "新版本 ({{.newVersion}}) 与当前版本 ({{.currentVersion}}) 相比,具有非向后兼容的更改", "CouldNotFindBinaryErr": "在 {{.url}} 处找不到任何二进制文件", - "UpdateFailedErr": "", - "ConfirmQuitDuringUpdateTitle": "", - "ConfirmQuitDuringUpdate": "", "MergeToolTitle": "合并工具", "MergeToolPrompt": "确定要打开 `git mergetool` 吗?", "IntroPopupMessage": "\n感谢使用 lazygit!你真的太棒了。下面几点你可能会感兴趣:\n\n 1) 观看此视频,快速了解 lazygit 的功能:\n https://youtu.be/CPLdltN7wgE\n\n 2) 记得看看最新发行说明:\n https://github.com/jesseduffield/lazygit/releases\n\n 3) 使用 git 说明你是一位程序员!你可以和我们一起让 lazygit 变得更好。\n 考虑为本项目做些贡献吧:\n https://github.com/jesseduffield/lazygit\n 你也可以直接赞助,并告诉我哪里需要改进,点右下角的捐赠按钮就好了。\n 哪怕只是给仓库点个星星也很棒!\n", - "DeprecatedEditConfigWarning": "", "GitconfigParseErr": "由于存在未加引号的'\\'字符,因此 Gogit 无法解析您的 gitconfig 文件。删除它们应该可以解决问题。", "EditFile": "编辑文件", - "EditFileTooltip": "", "OpenFile": "打开文件", - "OpenFileTooltip": "", - "OpenInEditor": "", "IgnoreFile": "添加到 .gitignore", - "ExcludeFile": "", "RefreshFiles": "刷新文件", "Merge": "合并到当前检出的分支", - "MergeBranchTooltip": "", "ConfirmQuit": "您确定要退出吗?", "SwitchRepo": "切换到最近的仓库", "AllBranchesLogGraph": "显示所有分支的日志", @@ -222,49 +117,31 @@ "CopyPullRequestURL": "将抓取请求 URL 复制到剪贴板", "NoBranchOnRemote": "该分支在远程上不存在. 您需要先将其推送到远程.", "Fetch": "抓取", - "FetchTooltip": "", "NoAutomaticGitFetchTitle": "无法自动进行 \"git fetch\"", "NoAutomaticGitFetchBody": "Lazygit 不能在私人仓库中使用 \"git fetch\"; 请在文件面板中使用 'f' 手动运行 \"git fetch\"", "FileEnter": "暂存单个 块/行 用于文件, 或 折叠/展开 目录", - "FileEnterTooltip": "", "FileStagingRequirements": "只能暂存跟踪文件的单独行", "StageSelectionTooltip": "切换行暂存状态", "DiscardSelection": "取消变更 (git reset)", - "DiscardSelectionTooltip": "", "ToggleSelectHunk": "切换选择区块", - "ToggleSelectHunkTooltip": "", "ToggleSelectionForPatch": "添加/移除 行到补丁", - "ToggleSelectionForPatchTooltip": "", - "EditHunk": "", - "EditHunkTooltip": "", "ToggleStagingView": "切换到其他面板", - "ToggleStagingViewTooltip": "", "ReturnToFilesPanel": "返回文件面板", "FastForward": "从上游快进此分支", - "FastForwardTooltip": "", "FastForwarding": "抓取并快进", "FoundConflictsTitle": "自动合并失败", - "ViewConflictsMenuItem": "", - "AbortMenuItem": "", "PickHunk": "选中区块", "PickAllHunks": "选中所有区块", "ViewMergeRebaseOptions": "查看 合并/变基 选项", - "ViewMergeRebaseOptionsTooltip": "", - "ViewMergeOptions": "", - "ViewRebaseOptions": "", "NotMergingOrRebasing": "您目前既不进行变基也不进行合并", - "AlreadyRebasing": "", "RecentRepos": "最近的仓库", "MergeOptionsTitle": "合并选项", "RebaseOptionsTitle": "变基选项", "CommitSummaryTitle": "提交讯息", - "CommitDescriptionTitle": "", - "CommitDescriptionSubTitle": "", "LocalBranchesTitle": "分支页面", "SearchTitle": "搜索", "TagsTitle": "标签页面", "MenuTitle": "菜单", - "CommitMenuTitle": "", "RemotesTitle": "远程页面", "RemoteBranchesTitle": "远程分支", "PatchBuildingTitle": "构建补丁中", @@ -272,35 +149,18 @@ "SecondaryTitle": "次要", "ReflogCommitsTitle": "Reflog 页面", "ConflictsResolved": "已解决所有冲突。是否继续?", - "Continue": "", - "RebasingTitle": "", - "RebasingFromBaseCommitTitle": "", - "SimpleRebase": "", - "InteractiveRebase": "", - "RebaseOntoBaseBranch": "", - "InteractiveRebaseTooltip": "", - "RebaseOntoBaseBranchTooltip": "", - "MustSelectTodoCommits": "", "ConfirmMerge": "您确定要将分支 {{.selectedBranch}} 合并到 {{.checkedOutBranch}} 吗?", "FwdNoUpstream": "此分支没有上游,无法快进", "FwdNoLocalUpstream": "此分支的远程未在本地注册,无法快进", "FwdCommitsToPush": "此分支带有尚未推送的提交,无法快进", - "PullRequestNoUpstream": "", "ErrorOccurred": "发生错误!请在以下位置创建 issue", "NoRoom": "空间不足", "YouAreHere": "您在这里", - "YouDied": "", "RewordNotSupported": "当前不支持交互式重新基准化时的重新措词提交", - "ChangingThisActionIsNotAllowed": "", "CherryPickCopy": "复制提交(拣选)", - "CherryPickCopyTooltip": "", - "CherryPickCopyRange": "", - "CherryPickCopyRangeTooltip": "", "PasteCommits": "粘贴提交(拣选)", "SureCherryPick": "您确定要将选中的提交进行拣选到这个分支吗?", "CherryPick": "拣选 (Cherry-Pick)", - "CannotCherryPickNonCommit": "", - "CannotCherryPickMergeCommit": "", "Donate": "捐助", "AskQuestion": "提问咨询", "PrevLine": "选择上一行", @@ -319,124 +179,67 @@ "AmendCommitPrompt": "您确定要使用暂存文件来修改此提交吗?", "DropCommitTitle": "删除提交", "DropCommitPrompt": "您确定要删除此提交吗?", - "DropUpdateRefPrompt": "", "PullingStatus": "正在拉取", "PushingStatus": "正在推送", "FetchingStatus": "正在抓取", "SquashingStatus": "正在压缩", "FixingStatus": "正在修正", "DeletingStatus": "正在删除", - "DroppingStatus": "", "MovingStatus": "正在移动", "RebasingStatus": "正在变基", - "MergingStatus": "", - "LowercaseRebasingStatus": "", - "LowercaseMergingStatus": "", "AmendingStatus": "正在修改", "CherryPickingStatus": "正在拣选", "UndoingStatus": "正在撤销", "RedoingStatus": "正在重做", "CheckingOutStatus": "长子检出", "CommittingStatus": "正在提交", - "RevertingStatus": "", - "CreatingFixupCommitStatus": "", "CommitFiles": "提交文件", - "SubCommitsDynamicTitle": "", - "CommitFilesDynamicTitle": "", - "RemoteBranchesDynamicTitle": "", "ViewItemFiles": "查看提交的文件", - "ViewItemFilesTooltip": "", "CommitFilesTitle": "提交文件", "CheckoutCommitFileTooltip": "检出文件", - "CanOnlyDiscardFromLocalCommits": "", - "Remove": "", "DiscardOldFileChangeTooltip": "放弃对此文件的提交更改", "DiscardFileChangesTitle": "放弃文件更改", "DiscardFileChangesPrompt": "您确定要舍弃此提交对该文件的更改吗?如果此文件是在此提交中创建的,它将被删除", "DisabledForGPG": "该功能不适用于使用 GPG 的用户", "CreateRepo": "当前目录不在 git 仓库中。是否在此目录创建一个新的 git 仓库?(y/n): ", - "BareRepo": "", - "InitialBranch": "", - "NoRecentRepositories": "", - "IncorrectNotARepository": "", "AutoStashTitle": "自动存储?", "AutoStashPrompt": "您必须隐藏并弹出更改以使更改生效。自动执行?(enter/esc)", "StashPrefix": "自动隐藏更改 ", "Discard": "查看'放弃更改'选项", - "DiscardChangesTitle": "", - "DiscardFileChangesTooltip": "", "Cancel": "取消", "DiscardAllChanges": "放弃所有更改", "DiscardUnstagedChanges": "放弃未暂存的变更", "DiscardAllChangesToAllFiles": "清空工作区", "DiscardAnyUnstagedChanges": "丢弃未暂存的变更", "DiscardUntrackedFiles": "丢弃未跟踪的文件", - "DiscardStagedChanges": "", "HardReset": "硬重置", - "BranchDeleteTooltip": "", - "TagDeleteTooltip": "", - "Delete": "", - "Reset": "", - "ResetTooltip": "", "ViewResetOptions": "查看重置选项", - "FileResetOptionsTooltip": "", "CreateFixupCommit": "为此提交创建修正", "CreateFixupCommitTooltip": "创建修正提交", - "CreateAmendCommit": "", - "FixupMenu_Fixup": "", - "FixupMenu_FixupTooltip": "", - "FixupMenu_AmendWithChanges": "", - "FixupMenu_AmendWithChangesTooltip": "", - "FixupMenu_AmendWithoutChanges": "", - "FixupMenu_AmendWithoutChangesTooltip": "", "SquashAboveCommitsTooltip": "压缩在所选提交之上的所有“fixup!”提交(自动压缩)", - "SquashCommitsAboveSelectedTooltip": "", - "SquashCommitsInCurrentBranchTooltip": "", - "SquashAboveCommits": "", - "SquashCommitsInCurrentBranch": "", - "SquashCommitsAboveSelectedCommit": "", - "CannotSquashCommitsInCurrentBranch": "", "ExecuteCustomCommand": "执行自定义命令", - "ExecuteCustomCommandTooltip": "", "CustomCommand": "自定义命令:", "CommitChangesWithoutHook": "提交更改而无需预先提交钩子", "SkipHookPrefixNotConfigured": "您尚未配置用于跳过钩子的提交消息前缀。请在您的配置中设置 `git.skipHookPrefix ='WIP'`", "ResetTo": "重置为", - "ResetSoftTooltip": "", - "ResetMixedTooltip": "", - "ResetHardTooltip": "", "PressEnterToReturn": "按下 Enter 键返回 lazygit", "ViewStashOptions": "查看贮藏选项", - "ViewStashOptionsTooltip": "", - "Stash": "", - "StashTooltip": "", "StashAllChanges": "将所有更改加入贮藏", - "StashStagedChanges": "", "StashAllChangesKeepIndex": "将已暂存的更改加入贮藏", - "StashUnstagedChanges": "", - "StashIncludeUntrackedChanges": "", "StashOptions": "贮藏选项", "NotARepository": "错误:必须在 git 仓库中运行", - "WorkingDirectoryDoesNotExist": "", "Jump": "跳到面板", "ScrollLeftRight": "左右滚动", "ScrollLeft": "向左滚动", "ScrollRight": "向右滚动", "DiscardPatch": "丢弃补丁", "DiscardPatchConfirm": "您一次只能通过一个提交或贮藏条目构建补丁。需要放弃当前补丁吗?", - "DiscardPatchSameCommitConfirm": "", "CantPatchWhileRebasingError": "处于合并或变基状态时,您无法构建修补程序或运行修补程序命令", "ToggleAddToPatch": "补丁中包含的切换文件", - "ToggleAddToPatchTooltip": "", - "ToggleAllInPatch": "", - "ToggleAllInPatchTooltip": "", - "UpdatingPatch": "", "ViewPatchOptions": "查看自定义补丁选项", "PatchOptionsTitle": "补丁选项", "NoPatchError": "尚未创建补丁。你可以在提交中的文件上按下“空格”或使用“回车”添加其中的特定行以开始构建补丁", - "EmptyPatchError": "", "EnterCommitFile": "输入文件以将所选行添加到补丁中(或切换目录折叠)", - "EnterCommitFileTooltip": "", "ExitCustomPatchBuilder": "退出逐行模式", "EnterUpstream": "以这种格式输入上游:'\u003c远程仓库\u003e \u003c分支名称\u003e'", "InvalidUpstream": "上游格式无效,格式应当为:'\u003cremote\u003e \u003cbranchname\u003e'", @@ -444,83 +247,42 @@ "NewRemote": "添加新的远程仓库", "NewRemoteName": "新远程仓库名称:", "NewRemoteUrl": "新远程仓库 URL:", - "ViewBranches": "", "EditRemoteName": "输入远程仓库 {{.remoteName}} 的新名称:", "EditRemoteUrl": "输入远程仓库 {{.remoteName}} 的新 URL:", "RemoveRemote": "删除远程", - "RemoveRemoteTooltip": "", "RemoveRemotePrompt": "您确定要删除远程仓库吗?", "DeleteRemoteBranch": "删除远程分支", "DeleteRemoteBranchMessage": "您确定要删除远程分支吗?", - "DeleteRemoteBranchTooltip": "", - "SetAsUpstream": "", "SetAsUpstreamTooltip": "设置为检出分支的上游", "SetUpstream": "设置为检出分支的上游", - "UnsetUpstream": "", - "ViewDivergenceFromUpstream": "", - "ViewDivergenceFromBaseBranch": "", - "CouldNotDetermineBaseBranch": "", - "DivergenceSectionHeaderLocal": "", - "DivergenceSectionHeaderRemote": "", - "ViewUpstreamResetOptions": "", - "ViewUpstreamResetOptionsTooltip": "", - "ViewUpstreamRebaseOptions": "", - "ViewUpstreamRebaseOptionsTooltip": "", - "UpstreamGenericName": "", "SetUpstreamTitle": "设置上游分支", "SetUpstreamMessage": "您确定要将 {{.checkedOut}} 的上游分支设置为 {{.selected}} 吗?", "EditRemoteTooltip": "编辑远程仓库", "TagCommit": "标签提交", - "TagCommitTooltip": "", "TagMenuTitle": "创建标签", "TagNameTitle": "标签名称", "TagMessageTitle": "标签消息", "LightweightTag": "轻量标签", "AnnotatedTag": "附注标签", - "DeleteTagTitle": "", - "DeleteLocalTag": "", - "DeleteRemoteTag": "", - "SelectRemoteTagUpstream": "", - "DeleteRemoteTagPrompt": "", - "RemoteTagDeletedMessage": "", "PushTagTitle": "将 {{.tagName}} 推送到远程仓库:", "PushTag": "推送标签", - "PushTagTooltip": "", "NewTag": "创建标签", - "NewTagTooltip": "", - "CreatingTag": "", - "ForceTag": "", - "ForceTagPrompt": "", "FetchRemoteTooltip": "抓取远程仓库", "FetchingRemoteStatus": "抓取远程仓库中", "CheckoutCommit": "检出提交", - "CheckoutCommitTooltip": "", "SureCheckoutThisCommit": "您确定要检出此提交吗?", "GitFlowOptions": "显示 git-flow 选项", "NotAGitFlowBranch": "这似乎不是 git flow 分支", "NewBranchNamePrompt": "输入分支的新名称", "IgnoreTracked": "忽略跟踪文件", - "ExcludeTracked": "", "IgnoreTrackedPrompt": "您确定要忽略已跟踪的文件吗?", - "ExcludeTrackedPrompt": "", "ViewResetToUpstreamOptions": "查看上游重置选项", "NextScreenMode": "下一屏模式(正常/半屏/全屏)", "PrevScreenMode": "上一屏模式", "StartSearch": "开始搜索", - "StartFilter": "", "Panel": "面板", "Keybindings": "按键绑定", - "KeybindingsLegend": "", - "KeybindingsMenuSectionLocal": "", - "KeybindingsMenuSectionGlobal": "", - "KeybindingsMenuSectionNavigation": "", "RenameBranch": "重命名分支", - "Upstream": "", - "UpstreamTooltip": "", - "BranchUpstreamOptionsTitle": "", - "ViewBranchUpstreamOptions": "", - "ViewBranchUpstreamOptionsTooltip": "", - "UpstreamNotSetError": "", "NewGitFlowBranchPrompt": "新的 {{.branchType}} 名称:", "RenameBranchWarning": "该分支正在跟踪远程仓库。此操作将仅会重命名本地分支名称,而不会重命名远程分支的名称。确定继续?", "OpenKeybindingsMenu": "打开菜单", @@ -539,16 +301,11 @@ "FilteringBy": "过滤依据", "ResetInParentheses": "(重置)", "OpenFilteringMenu": "查看按路径过滤选项", - "OpenFilteringMenuTooltip": "", "FilterBy": "过滤", "ExitFilterMode": "停止按路径过滤", - "ExitFilterModeAuthor": "", "FilterPathOption": "输入要过滤的路径", - "FilterAuthorOption": "", "EnterFileName": "输入路径:", - "EnterAuthor": "", "FilteringMenuTitle": "正在过滤", - "WillCancelExistingFilterTooltip": "", "MustExitFilterModeTitle": "命令不可用", "MustExitFilterModePrompt": "命令在过滤模式下不可用。退出过滤模式?", "Diff": "差异", @@ -558,20 +315,10 @@ "DiffingMenuTitle": "正在 diff", "SwapDiff": "反向 diff", "ViewDiffingOptions": "打开 diff 菜单", - "ViewDiffingOptionsTooltip": "", "OpenCommandLogMenu": "打开命令日志菜单", - "OpenCommandLogMenuTooltip": "", "ShowingGitDiff": "显示输出:", - "CommitDiff": "", "CopyCommitHashToClipboard": "将提交的 hash 复制到剪贴板", - "CommitHash": "", - "CommitURL": "", "CopyCommitMessageToClipboard": "将提交消息复制到剪贴板", - "CommitMessage": "", - "CommitSubject": "", - "CommitAuthor": "", - "CopyCommitAttributeToClipboard": "", - "CopyCommitAttributeToClipboardTooltip": "", "CopyBranchNameToClipboard": "将分支名称复制到剪贴板", "CopyPathToClipboard": "将文件名复制到剪贴板", "CommitPrefixPatternError": "提交前缀模式错误", @@ -580,7 +327,6 @@ "NoFilesStagedPrompt": "您尚未暂存任何文件。提交所有文件?", "BranchNotFoundTitle": "找不到分支", "BranchNotFoundPrompt": "找不到分支。创建一个新分支命名为:", - "BranchUnknown": "", "DiscardChangeTitle": "取消暂存选中的行", "DiscardChangePrompt": "您确定要删除所选的行(git reset)吗?这是不可逆的。\n要禁用此对话框,请将 'gui.skipDiscardChangeWarning' 的配置键设置为 true", "CreateNewBranchFromCommit": "从提交创建新分支", @@ -591,10 +337,8 @@ "SubmoduleStashAndReset": "存放未提交的子模块更改和更新", "AndResetSubmodules": "和重置子模块", "EnterSubmoduleTooltip": "输入子模块", - "Enter": "", "CopySubmoduleNameToClipboard": "将子模块名称复制到剪贴板", "RemoveSubmodule": "删除子模块", - "RemoveSubmoduleTooltip": "", "RemoveSubmodulePrompt": "您确定要删除子模块 '%s' 及其对应的目录吗?这是不可逆的。", "ResettingSubmoduleStatus": "正在重置子模块", "NewSubmoduleName": "新的子模块名称:", @@ -607,8 +351,6 @@ "EditSubmoduleUrl": "更新子模块 URL", "InitializingSubmoduleStatus": "正在初始化子模块", "InitSubmoduleTooltip": "初始化子模块", - "Update": "", - "Initialize": "", "SubmoduleUpdateTooltip": "更新子模块", "UpdatingSubmoduleStatus": "正在更新子模块", "BulkInitSubmodules": "批量初始化子模块", @@ -622,21 +364,14 @@ "NavigationTitle": "列表面板导航", "SuggestionsCheatsheetTitle": "意见建议", "SuggestionsTitle": "意见建议 (点击 %s 以聚焦)", - "SuggestionsSubtitle": "", "ExtrasTitle": "附加", "PushingTagStatus": "推送标签", "PullRequestURLCopiedToClipboard": "抓取请求网址已复制到剪贴板", - "CommitDiffCopiedToClipboard": "", - "CommitURLCopiedToClipboard": "", "CommitMessageCopiedToClipboard": "提交消息复制到剪贴板", - "CommitSubjectCopiedToClipboard": "", - "CommitAuthorCopiedToClipboard": "", - "PatchCopiedToClipboard": "", "CopiedToClipboard": "复制到剪贴板", "ErrCannotEditDirectory": "无法编辑目录:您只能编辑单个文件", "ErrStageDirWithInlineMergeConflicts": "无法 暂存/取消暂存 包含具有内联合并冲突的文件的目录。请先解决合并冲突", "ErrRepositoryMovedOrDeleted": "找不到仓库。它可能已被移动或删除 ¯\\_(ツ)_/¯", - "ErrWorktreeMovedOrRemoved": "", "CommandLog": "命令日志", "ToggleShowCommandLog": "切换 显示/隐藏 命令日志", "FocusCommandLog": "焦点命令日志", @@ -644,14 +379,8 @@ "RandomTip": "随机小提示", "SelectParentCommitForMerge": "选择父提交进行合并", "ToggleWhitespaceInDiffView": "切换是否在差异视图中显示空白字符差异", - "ToggleWhitespaceInDiffViewTooltip": "", - "IgnoreWhitespaceDiffViewSubTitle": "", - "IgnoreWhitespaceNotSupportedHere": "", "IncreaseContextInDiffView": "扩大差异视图中显示的上下文范围", - "IncreaseContextInDiffViewTooltip": "", "DecreaseContextInDiffView": "缩小差异视图中显示的上下文范围", - "DecreaseContextInDiffViewTooltip": "", - "DiffContextSizeChanged": "", "CreatePullRequestOptions": "创建抓取请求选项", "DefaultBranch": "默认分支", "SelectBranch": "选择分支", @@ -666,119 +395,19 @@ "AbortTitle": "放弃 %s", "AbortPrompt": "您确定要放弃当前 %s 吗?", "OpenLogMenu": "打开日志菜单", - "OpenLogMenuTooltip": "", "LogMenuTitle": "提交日志选项", "ToggleShowGitGraphAll": "切换显示完整 git 分支图 (向 `git log` 命令传入 `--all` 选项)", "ShowGitGraph": "显示 git 分支图", - "SortOrder": "", - "SortAlphabetical": "", - "SortByDate": "", - "SortByRecency": "", - "SortBasedOnReflog": "", "SortCommits": "提交排序", "CantChangeContextSizeError": "无法在补丁构建模式下更改上下文,因为我们在发布该功能时懒得支持它。 如果你真的想要这么做,请告诉我们!", "OpenCommitInBrowser": "在浏览器中打开提交", "ViewBisectOptions": "查看二分查找选项", - "ConfirmRevertCommit": "", - "RewordInEditorTitle": "", - "RewordInEditorPrompt": "", - "CheckoutPrompt": "", - "HardResetAutostashPrompt": "", - "UpstreamGone": "", - "NukeDescription": "", - "DiscardStagedChangesDescription": "", - "EmptyOutput": "", - "Patch": "", - "CustomPatch": "", - "CommitsCopied": "", - "CommitCopied": "", - "ResetPatch": "", - "ResetPatchTooltip": "", - "ApplyPatch": "", - "ApplyPatchTooltip": "", - "ApplyPatchInReverse": "", - "ApplyPatchInReverseTooltip": "", - "RemovePatchFromOriginalCommit": "", - "RemovePatchFromOriginalCommitTooltip": "", - "MovePatchOutIntoIndex": "", - "MovePatchOutIntoIndexTooltip": "", - "MovePatchIntoNewCommit": "", - "MovePatchIntoNewCommitTooltip": "", - "MovePatchToSelectedCommit": "", - "MovePatchToSelectedCommitTooltip": "", - "CopyPatchToClipboard": "", - "NoMatchesFor": "", - "MatchesFor": "", - "SearchKeybindings": "", - "SearchPrefix": "", - "FilterPrefix": "", - "ExitSearchMode": "", - "ExitTextFilterMode": "", - "Switch": "", - "SwitchToWorktree": "", - "SwitchToWorktreeTooltip": "", - "AlreadyCheckedOutByWorktree": "", - "BranchCheckedOutByWorktree": "", - "DetachWorktreeTooltip": "", - "Switching": "", - "RemoveWorktree": "", - "RemoveWorktreeTitle": "", - "DetachWorktree": "", - "DetachingWorktree": "", - "WorktreesTitle": "", - "WorktreeTitle": "", - "RemoveWorktreePrompt": "", - "ForceRemoveWorktreePrompt": "", - "RemovingWorktree": "", - "AddingWorktree": "", - "CantDeleteCurrentWorktree": "", - "AlreadyInWorktree": "", - "CantDeleteMainWorktree": "", - "NoWorktreesThisRepo": "", - "MissingWorktree": "", - "MainWorktree": "", - "NewWorktree": "", - "NewWorktreePath": "", - "NewWorktreeBase": "", - "RemoveWorktreeTooltip": "", - "BranchNameCannotBeBlank": "", - "NewBranchName": "", - "NewBranchNameLeaveBlank": "", - "ViewWorktreeOptions": "", - "CreateWorktreeFrom": "", - "CreateWorktreeFromDetached": "", - "LcWorktree": "", - "ChangingDirectoryTo": "", - "Name": "", - "Branch": "", - "Path": "", - "MarkedBaseCommitStatus": "", - "MarkAsBaseCommit": "", - "MarkAsBaseCommitTooltip": "", - "MarkedCommitMarker": "", - "PleaseGoToURL": "", - "NoCopiedCommits": "", - "DisabledMenuItemPrefix": "", - "QuickStartInteractiveRebase": "", - "QuickStartInteractiveRebaseTooltip": "", - "CannotQuickStartInteractiveRebase": "", "ToggleRangeSelect": "切换拖动选择", - "RangeSelectUp": "", - "RangeSelectDown": "", - "RangeSelectNotSupported": "", - "NoItemSelected": "", - "SelectedItemIsNotABranch": "", - "SelectedItemDoesNotHaveFiles": "", - "RangeSelectNotSupportedForSubmodules": "", - "OldCherryPickKeyWarning": "", - "CommandDoesNotSupportOpeningInEditor": "", "Actions": { "CheckoutCommit": "检出提交", "CheckoutTag": "检出标签", "CheckoutBranch": "检出分支", "ForceCheckoutBranch": "强制检出分支", - "DeleteLocalBranch": "", - "DeleteBranch": "", "Merge": "合并", "RebaseBranch": "变基分支", "RenameBranch": "重命名分支", @@ -793,47 +422,29 @@ "DropCommit": "删除提交", "EditCommit": "编辑提交", "AmendCommit": "修改提交", - "ResetCommitAuthor": "", - "SetCommitAuthor": "", - "AddCommitCoAuthor": "", "RevertCommit": "还原提交", "CreateFixupCommit": "创建修正提交", "SquashAllAboveFixupCommits": "压缩以上所有的修正提交", "MoveCommitUp": "上移提交", "MoveCommitDown": "下移提交", "CopyCommitMessageToClipboard": "将提交消息复制到剪贴板", - "CopyCommitSubjectToClipboard": "", - "CopyCommitDiffToClipboard": "", - "CopyCommitHashToClipboard": "", - "CopyCommitURLToClipboard": "", - "CopyCommitAuthorToClipboard": "", - "CopyCommitAttributeToClipboard": "", - "CopyPatchToClipboard": "", "CustomCommand": "自定义命令", "DiscardAllChangesInDirectory": "丢弃目录中的所有更改", "DiscardUnstagedChangesInDirectory": "丢弃目录中未暂存的更改", "DiscardAllChangesInFile": "丢弃文件中的所有更改", "DiscardAllUnstagedChangesInFile": "丢弃文件中所有未暂存的更改", "StageFile": "暂存文件", - "StageResolvedFiles": "", "UnstageFile": "取消暂存文件", "UnstageAllFiles": "取消暂存所有文件", "StageAllFiles": "暂存所有文件", "IgnoreExcludeFile": "忽略文件", - "IgnoreFileErr": "", - "ExcludeFile": "", - "ExcludeGitIgnoreErr": "", "Commit": "提交 (Commit)", "EditFile": "编辑文件", "Push": "推送 (Push)", "Pull": "拉取 (Pull)", "OpenFile": "打开文件", - "OpenFileTooltip": "", "StashAllChanges": "贮藏所有更改", - "StashAllChangesKeepIndex": "", "StashStagedChanges": "贮藏暂存的更改", - "StashUnstagedChanges": "", - "StashIncludeUntrackedChanges": "", "GitFlowFinish": "git flow 结果", "GitFlowStart": "git flow 开始", "CopyToClipboard": "复制到剪贴板", @@ -861,64 +472,34 @@ "UpdateSubmodule": "更新子模块", "CreateLightweightTag": "创建轻量标签", "CreateAnnotatedTag": "创建附注标签", - "DeleteLocalTag": "", - "DeleteRemoteTag": "", "PushTag": "推送标签", "NukeWorkingTree": "Nuke 工作树", "DiscardUnstagedFileChanges": "放弃未暂存的文件更改", "RemoveUntrackedFiles": "删除未跟踪的文件", - "RemoveStagedFiles": "", "SoftReset": "软重置", "MixedReset": "混合重置", "HardReset": "硬重置", "Undo": "撤销", "Redo": "重做", "CopyPullRequestURL": "复制拉取请求 URL", - "OpenDiffTool": "", "OpenMergeTool": "打开合并工具", "OpenCommitInBrowser": "在浏览器中打开提交", "OpenPullRequest": "在浏览器中打开拉取请求", "StartBisect": "开始二分查找 (Bisect)", "ResetBisect": "重置二分查找", "BisectSkip": "二分查找跳过", - "BisectMark": "二分查找标记", - "RemoveWorktree": "", - "AddWorktree": "" + "BisectMark": "二分查找标记" }, "Bisect": { "MarkStart": "将 %s 标记为 %s (start bisect)", - "MarkSkipCurrent": "", - "MarkSkipSelected": "", "ResetTitle": "重置 'git bisect'", "ResetPrompt": "您确定要重置 'git bisect' 吗?", "ResetOption": "重置二分查找", - "ChooseTerms": "", - "OldTermPrompt": "", - "NewTermPrompt": "", "BisectMenuTitle": "二分查找", "Mark": "将 %s 标记为 %s", "SkipCurrent": "跳过 %s", - "SkipSelected": "", "CompleteTitle": "二分查找完成", "CompletePrompt": "二分查找完成!以下提交引入了此变更:\n\n%s\n\n您现在要重置 'git bisect' 吗?", - "CompletePromptIndeterminate": "二分查找完成!一些提交被跳过了,所以下列提交中的任何一个都可能引入了此变更:\n\n%s\n\n您现在要重置 'git bisect' 吗?", - "Bisecting": "" - }, - "Log": { - "EditRebase": "", - "MoveCommitUp": "", - "MoveCommitDown": "", - "CherryPickCommits": "", - "HandleUndo": "", - "HandleMidRebaseCommand": "", - "RemoveFile": "", - "CopyToClipboard": "", - "Remove": "", - "CreateFileWithContent": "", - "AppendingLineToFile": "", - "EditRebaseFromBaseCommit": "" - }, - "BreakingChangesTitle": "", - "BreakingChangesMessage": "", - "BreakingChangesByVersion": null + "CompletePromptIndeterminate": "二分查找完成!一些提交被跳过了,所以下列提交中的任何一个都可能引入了此变更:\n\n%s\n\n您现在要重置 'git bisect' 吗?" + } } diff --git a/pkg/i18n/translations/zh-TW.json b/pkg/i18n/translations/zh-TW.json index 687ce1d3b7f..d7673a2aa25 100644 --- a/pkg/i18n/translations/zh-TW.json +++ b/pkg/i18n/translations/zh-TW.json @@ -22,62 +22,29 @@ "CredentialsPIN": "SSH 金鑰 PIN 碼", "PassUnameWrong": "密碼、密語或使用者名稱錯誤", "Commit": "提交變更", - "CommitTooltip": "", "AmendLastCommit": "修改上次提交", "AmendLastCommitTitle": "修改上次提交", "SureToAmend": "是否確定要修改上次提交?之後你可以從提交面板中再次更改此次提交的訊息。", "NoCommitToAmend": "沒有可以修改的提交。", "CommitChangesWithEditor": "使用 git 編輯器提交變更", - "FindBaseCommitForFixup": "", - "FindBaseCommitForFixupTooltip": "", - "NoBaseCommitsFound": "", - "MultipleBaseCommitsFoundStaged": "", - "MultipleBaseCommitsFoundUnstaged": "", - "BaseCommitIsAlreadyOnMainBranch": "", - "BaseCommitIsNotInCurrentView": "", - "HunksWithOnlyAddedLinesWarning": "", "StatusTitle": "狀態", "GlobalTitle": "全域快捷鍵", "Menu": "選單", "Execute": "執行", "Stage": "切換預存", - "StageTooltip": "", "ToggleStagedAll": "全部預存/取消預存", - "ToggleStagedAllTooltip": "", "ToggleTreeView": "顯示檔案樹狀視圖", - "ToggleTreeViewTooltip": "", - "OpenDiffTool": "", "OpenMergeTool": "開啟外部合併工具 (git mergetool)", - "OpenMergeToolTooltip": "", "Refresh": "重新整理", - "RefreshTooltip": "", "Push": "推送", "Pull": "拉取", - "PushTooltip": "", - "PullTooltip": "", "Scroll": "捲動", "FileFilter": "篩選檔案 (預存/未預存)", - "CopyToClipboardMenu": "", - "CopyFileName": "", - "CopyFilePath": "", - "CopyFileDiffTooltip": "", - "CopySelectedDiff": "", - "CopyAllFilesDiff": "", - "NoContentToCopyError": "", - "FileNameCopiedToast": "", - "FilePathCopiedToast": "", - "FileDiffCopiedToast": "", - "AllFilesDiffCopiedToast": "", "FilterStagedFiles": "僅顯示預存的檔案", "FilterUnstagedFiles": "僅顯示未預存的檔案", "ResetFilter": "重設篩選", "MergeConflictsTitle": "合併衝突", "Checkout": "檢出", - "CheckoutTooltip": "", - "CantCheckoutBranchWhilePulling": "", - "TagCheckoutTooltip": "", - "RemoteBranchCheckoutTooltip": "", - "CantPullOrPushSameBranchTwice": "", "NoChangedFiles": "沒有變更的檔案", "SoftReset": "軟重設", "AlreadyCheckedOutBranch": "你已經檢出這個分支了", @@ -86,68 +53,36 @@ "BranchName": "分支名稱", "NewBranchNameBranchOff": "新的分支名稱 (根據 '{{.branchName}}' 分支創建)", "CantDeleteCheckOutBranch": "無法刪除已檢出的分支!", - "DeleteBranchTitle": "", - "DeleteLocalBranch": "", - "DeleteRemoteBranchOption": "", - "DeleteRemoteBranchPrompt": "", - "ForceDeleteBranchTitle": "", "ForceDeleteBranchMessage": "'{{.selectedBranchName}}' 分支尚未完全合併。是否刪除?", "RebaseBranch": "將已檢出的分支變基至此分支", - "RebaseBranchTooltip": "", "CantRebaseOntoSelf": "無法將分支變基至自己", "CantMergeBranchIntoItself": "無法將一個分支合併至自己", "ForceCheckout": "強制檢出", - "ForceCheckoutTooltip": "", "CheckoutByName": "根據名稱檢出", - "CheckoutByNameTooltip": "", - "RemoteBranchCheckoutTitle": "", - "CheckoutTypeNewBranch": "", - "CheckoutTypeNewBranchTooltip": "", - "CheckoutTypeDetachedHead": "", - "CheckoutTypeDetachedHeadTooltip": "", "NewBranch": "新分支", - "NewBranchFromStashTooltip": "", "NoBranchesThisRepo": "這個版本庫中沒有分支", "CommitWithoutMessageErr": "沒有提交訊息,無法提交", "Close": "關閉", "CloseCancel": "關閉/取消", "Confirm": "確認", "Quit": "結束", - "SquashTooltip": "", "CannotSquashOrFixupFirstCommit": "沒有可以壓縮的提交", "Fixup": "修復 (Fixup)", - "FixupTooltip": "", "SureFixupThisCommit": "是否對此提交進行 '修復' ? 其將被合併於以下之提交中", "SureSquashThisCommit": "是否要把這個提交壓縮到下面的提交中?", "Squash": "壓縮 (Squash)", "PickCommitTooltip": "挑選提交 (於變基過程中)", - "Pick": "", - "CantPickDisabledReason": "", - "Edit": "", "RevertCommit": "還原提交", - "Revert": "", - "RevertCommitTooltip": "", "Reword": "改寫提交", - "CommitRewordTooltip": "", "DropCommit": "刪除提交", - "DropCommitTooltip": "", "MoveDownCommit": "向下移動提交", "MoveUpCommit": "向上移動提交", - "CannotMoveAnyFurther": "", - "EditCommit": "", "EditCommitTooltip": "編輯提交", "AmendCommitTooltip": "使用已預存的更改修正提交", - "Amend": "", "ResetAuthor": "重設作者", - "ResetAuthorTooltip": "", "SetAuthor": "設定作者", - "SetAuthorTooltip": "", - "AddCoAuthor": "", "AmendCommitAttribute": "設定/重設提交作者", - "AmendCommitAttributeTooltip": "", "SetAuthorPromptTitle": "設定作者(格式:「姓名 \u003c電子郵件\u003e」)", - "AddCoAuthorPromptTitle": "", - "AddCoAuthorTooltip": "", "SureResetCommitAuthor": "為了符合已配置的使用者,此作者的提交欄位以及時間戳將被更新。是否繼續?", "RewordCommitEditor": "使用編輯器改寫提交", "NoCommitsThisBranch": "這個分支沒有提交", @@ -158,15 +93,11 @@ "RedoReflog": "取消復原", "UndoTooltip": "將使用 reflog 確任 git 指令以復原。這不包括工作區更改;只考慮提交。", "RedoTooltip": "將使用 reflog 確任 git 指令以重作。這不包括工作區更改;只考慮提交。", - "UndoMergeResolveTooltip": "", "DiscardAllTooltip": "捨棄 '{{.path}}' 預存/未預存更改。", "DiscardUnstagedTooltip": "捨棄 '{{.path}}' 未預存更改。", "Pop": "還原", - "StashPopTooltip": "", "Drop": "捨棄", - "StashDropTooltip": "", "Apply": "套用", - "StashApplyTooltip": "", "NoStashEntries": "沒有收藏記錄", "StashDrop": "放棄收藏記錄", "SureDropStashEntry": "是否捨棄這條收藏記錄?", @@ -184,7 +115,6 @@ "ForcePush": "強制推送", "ForcePushPrompt": "你的分支與遠端分支分岔。按 'ESC' 取消,或按 'Enter' 強制推送。", "ForcePushDisabled": "你的分支與遠端分支分岔,你已禁用強制推送", - "UpdatesRejected": "", "UpdatesRejectedAndForcePushDisabled": "更新被拒絕,你已禁用強制推送", "CheckForUpdate": "檢查更新", "CheckingForUpdates": "正在檢查更新...", @@ -206,15 +136,11 @@ "DeprecatedEditConfigWarning": "\n### Deprecated config warning ###\n\n以下設定已被取代並將於未來版本中刪除:\n{{configs}}\n\n編輯器設定教學:\n\n https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#configuring-file-editing\n\n", "GitconfigParseErr": "Gogit 無法解析你的 gitconfig 檔案,因為存在未引用的 '\\' 字符,刪除它們應該可以解決這個問題。", "EditFile": "編輯檔案", - "EditFileTooltip": "", "OpenFile": "開啟檔案", - "OpenFileTooltip": "", - "OpenInEditor": "", "IgnoreFile": "添加到 .gitignore", "ExcludeFile": "添加到 .git/info/exclude", "RefreshFiles": "重新整理檔案", "Merge": "合併到當前檢出的分支", - "MergeBranchTooltip": "", "ConfirmQuit": "是否結束?", "SwitchRepo": "切換到最近使用的版本庫", "AllBranchesLogGraph": "顯示所有分支日誌", @@ -222,36 +148,23 @@ "CopyPullRequestURL": "複製拉取請求的 URL 到剪貼板", "NoBranchOnRemote": "這個分支在遠端不存在。需要先將其推送至遠端。", "Fetch": "擷取", - "FetchTooltip": "", "NoAutomaticGitFetchTitle": "手動 git 擷取", "NoAutomaticGitFetchBody": "lazygit 無法在私有庫使用 \"git 擷取\";在檔案面板中使用 'f' 手動執行 \"git 擷取\"", "FileEnter": "選擇檔案中的單個程式碼塊/行,或展開/折疊目錄", - "FileEnterTooltip": "", "FileStagingRequirements": "只能選擇跟踪檔案中的單個行", "StageSelectionTooltip": "切換現有行的狀態 (已預存/未預存)", "DiscardSelection": "刪除變更 (git reset)", - "DiscardSelectionTooltip": "", "ToggleSelectHunk": "切換選擇程式碼塊", - "ToggleSelectHunkTooltip": "", "ToggleSelectionForPatch": "向 (或從) 補丁中添加/刪除行", - "ToggleSelectionForPatchTooltip": "", "EditHunk": "編輯程式碼塊", - "EditHunkTooltip": "", "ToggleStagingView": "切換至另一個面板 (已預存/未預存更改)", - "ToggleStagingViewTooltip": "", "ReturnToFilesPanel": "返回檔案面板", "FastForward": "從上游快進此分支", - "FastForwardTooltip": "", "FastForwarding": "的擷取和快進中", "FoundConflictsTitle": "自動合併失敗", - "ViewConflictsMenuItem": "", - "AbortMenuItem": "", "PickHunk": "挑選程式碼片段", "PickAllHunks": "挑選所有程式碼片段", "ViewMergeRebaseOptions": "查看合併/變基選項", - "ViewMergeRebaseOptionsTooltip": "", - "ViewMergeOptions": "", - "ViewRebaseOptions": "", "NotMergingOrRebasing": "你當前既不在變基也不在合併中", "AlreadyRebasing": "無法在變基期間執行此操作", "RecentRepos": "最近的版本庫", @@ -264,7 +177,6 @@ "SearchTitle": "搜尋", "TagsTitle": "標籤", "MenuTitle": "功能表", - "CommitMenuTitle": "", "RemotesTitle": "遠端", "RemoteBranchesTitle": "遠端分支", "PatchBuildingTitle": "主面板 (補丁生成)", @@ -274,18 +186,13 @@ "ConflictsResolved": "所有合併衝突都已解決。是否繼續?", "Continue": "確認", "RebasingTitle": "將 '{{.checkedOutBranch}}'", - "RebasingFromBaseCommitTitle": "", "SimpleRebase": "簡單變基 變基至 '{{.ref}}'", "InteractiveRebase": "互動變基 變基至 '{{.ref}}'", - "RebaseOntoBaseBranch": "", "InteractiveRebaseTooltip": "開始一個互動變基,以中斷開始,這樣你可以在繼續之前更新TODO提交", - "RebaseOntoBaseBranchTooltip": "", - "MustSelectTodoCommits": "", "ConfirmMerge": "是否將 '{{.selectedBranch}}' 合併至 '{{.checkedOutBranch}}' ?", "FwdNoUpstream": "無法快進無上游分支", "FwdNoLocalUpstream": "無法快進尚未在本地註冊的遠端分支", "FwdCommitsToPush": "無法快進帶有尚未推送的提交的分支", - "PullRequestNoUpstream": "", "ErrorOccurred": "發生錯誤!請在此詢問錯誤:", "NoRoom": "無足夠的空間", "YouAreHere": "你在這", @@ -293,14 +200,9 @@ "RewordNotSupported": "在互動變基期間改寫提交目前不支援", "ChangingThisActionIsNotAllowed": "不允許更改此類變基待辦事項", "CherryPickCopy": "複製提交 (揀選)", - "CherryPickCopyTooltip": "", - "CherryPickCopyRange": "", - "CherryPickCopyRangeTooltip": "", "PasteCommits": "貼上提交 (揀選)", "SureCherryPick": "是否將複製的提交揀選到此分支?", "CherryPick": "揀選 (Cherry-pick)", - "CannotCherryPickNonCommit": "", - "CannotCherryPickMergeCommit": "", "Donate": "贊助", "AskQuestion": "諮詢", "PrevLine": "選擇上一行", @@ -319,14 +221,12 @@ "AmendCommitPrompt": "是否使用預存檔案修改提交?", "DropCommitTitle": "刪除提交", "DropCommitPrompt": "是否刪除此提交?", - "DropUpdateRefPrompt": "", "PullingStatus": "拉取", "PushingStatus": "推送", "FetchingStatus": "擷取", "SquashingStatus": "壓縮中", "FixingStatus": "修復中", "DeletingStatus": "刪除中", - "DroppingStatus": "", "MovingStatus": "移動中", "RebasingStatus": "變基中", "MergingStatus": "合併中", @@ -339,18 +239,13 @@ "CheckingOutStatus": "檢出中", "CommittingStatus": "提交中", "RevertingStatus": "還原中", - "CreatingFixupCommitStatus": "", "CommitFiles": "提交檔案", "SubCommitsDynamicTitle": "提交 (共 %s項)", "CommitFilesDynamicTitle": "差異檔案 (共 %s項)", "RemoteBranchesDynamicTitle": "遠端分支 (共 %s項)", "ViewItemFiles": "檢視所選項目的檔案", - "ViewItemFilesTooltip": "", "CommitFilesTitle": "提交檔案", "CheckoutCommitFileTooltip": "檢出檔案", - "CanOnlyDiscardFromLocalCommits": "", - "Remove": "", - "DiscardOldFileChangeTooltip": "", "DiscardFileChangesTitle": "捨棄檔案更改", "DiscardFileChangesPrompt": "是否捨棄此提交?如果這個檔案是在此提交中創建的,它將被刪除", "DisabledForGPG": "此功能不適用於 GPG 加密", @@ -362,9 +257,6 @@ "AutoStashTitle": "是否自動收藏?", "AutoStashPrompt": "必須收藏並拾起變更才得以繼續操作。是否自動執行?(Enter/Esc)", "StashPrefix": "自動收藏 ", - "Discard": "", - "DiscardChangesTitle": "", - "DiscardFileChangesTooltip": "", "Cancel": "取消", "DiscardAllChanges": "刪除所有變更", "DiscardUnstagedChanges": "刪除未預存變更", @@ -373,43 +265,18 @@ "DiscardUntrackedFiles": "刪除未追蹤檔案", "DiscardStagedChanges": "刪除已預存變更", "HardReset": "強制重設", - "BranchDeleteTooltip": "", - "TagDeleteTooltip": "", - "Delete": "", - "Reset": "", - "ResetTooltip": "", "ViewResetOptions": "檢視重設選項", - "FileResetOptionsTooltip": "", "CreateFixupCommit": "建立修復提交", "CreateFixupCommitTooltip": "為此提交建立修復提交", - "CreateAmendCommit": "", - "FixupMenu_Fixup": "", - "FixupMenu_FixupTooltip": "", - "FixupMenu_AmendWithChanges": "", - "FixupMenu_AmendWithChangesTooltip": "", - "FixupMenu_AmendWithoutChanges": "", - "FixupMenu_AmendWithoutChangesTooltip": "", "SquashAboveCommitsTooltip": "是否壓縮上方 {{.commit}} 所有「fixup」提交?", - "SquashCommitsAboveSelectedTooltip": "", - "SquashCommitsInCurrentBranchTooltip": "", "SquashAboveCommits": "壓縮上方所有「fixup」提交(自動壓縮)", - "SquashCommitsInCurrentBranch": "", - "SquashCommitsAboveSelectedCommit": "", - "CannotSquashCommitsInCurrentBranch": "", "ExecuteCustomCommand": "執行自訂命令", - "ExecuteCustomCommandTooltip": "", "CustomCommand": "自訂命令:", "CommitChangesWithoutHook": "沒有預提交 hook 就提交更改", "SkipHookPrefixNotConfigured": "你尚未配置略過 hook 的提交訊息前綴,請在設定中設置 `git.skipHookPrefix = 'WIP'`", "ResetTo": "重設至", - "ResetSoftTooltip": "", - "ResetMixedTooltip": "", - "ResetHardTooltip": "", "PressEnterToReturn": "按 Enter 返回到 lazygit", "ViewStashOptions": "檢視收藏選項", - "ViewStashOptionsTooltip": "", - "Stash": "", - "StashTooltip": "", "StashAllChanges": "收藏所有變更", "StashStagedChanges": "收藏已預存變更", "StashAllChangesKeepIndex": "收藏所有變更並保留預存區", @@ -417,26 +284,20 @@ "StashIncludeUntrackedChanges": "收藏所有變更,包括未追蹤檔案", "StashOptions": "收藏選項", "NotARepository": "錯誤:必須在 git 版本庫中執行", - "WorkingDirectoryDoesNotExist": "", "Jump": "跳轉至面板", "ScrollLeftRight": "左右捲動", "ScrollLeft": "向左捲動", "ScrollRight": "向右捲動", "DiscardPatch": "捨棄補丁", "DiscardPatchConfirm": "你只能從單一提交或收藏項目建立一個補丁。是否捨棄當前補丁?", - "DiscardPatchSameCommitConfirm": "", "CantPatchWhileRebasingError": "在合併或變基狀態下,你不能建立或運行補丁命令", "ToggleAddToPatch": "切換檔案是否包含在補丁中", - "ToggleAddToPatchTooltip": "", "ToggleAllInPatch": "切換所有檔案是否包含在補丁中", - "ToggleAllInPatchTooltip": "", "UpdatingPatch": "正在更新補丁", "ViewPatchOptions": "檢視自訂補丁選項", "PatchOptionsTitle": "補丁選項", "NoPatchError": "尚未建立補丁。要開始建立補丁,請在提交檔案上使用空格或輸入以添加特定行", - "EmptyPatchError": "", "EnterCommitFile": "輸入檔案以將選定的行添加至補丁(或切換目錄折疊)", - "EnterCommitFileTooltip": "", "ExitCustomPatchBuilder": "退出自訂補丁建立器", "EnterUpstream": "輸入上游為 '\u003cremote\u003e \u003cbranchname\u003e'", "InvalidUpstream": "無效的上游。必須符合 '\u003cremote\u003e \u003cbranchname\u003e' 的格式", @@ -444,57 +305,30 @@ "NewRemote": "新增遠端", "NewRemoteName": "新遠端名稱:", "NewRemoteUrl": "新遠端 URL:", - "ViewBranches": "", "EditRemoteName": "輸入更新 {{.remoteName}} 遠端名稱:", "EditRemoteUrl": "輸入更新 {{.remoteName}} 遠端 URL:", "RemoveRemote": "移除遠端", - "RemoveRemoteTooltip": "", "RemoveRemotePrompt": "你確定要移除遠端?", "DeleteRemoteBranch": "刪除遠端分支", "DeleteRemoteBranchMessage": "你確定要刪除遠端分支?", - "DeleteRemoteBranchTooltip": "", - "SetAsUpstream": "", "SetAsUpstreamTooltip": "將此分支設為當前分支之上游", "SetUpstream": "設定所選分支之上游", "UnsetUpstream": "取消設定選定分支之上游", - "ViewDivergenceFromUpstream": "", - "ViewDivergenceFromBaseBranch": "", - "CouldNotDetermineBaseBranch": "", - "DivergenceSectionHeaderLocal": "", - "DivergenceSectionHeaderRemote": "", - "ViewUpstreamResetOptions": "", - "ViewUpstreamResetOptionsTooltip": "", - "ViewUpstreamRebaseOptions": "", - "ViewUpstreamRebaseOptionsTooltip": "", - "UpstreamGenericName": "", "SetUpstreamTitle": "設定上游分支", "SetUpstreamMessage": "你確定要將 '{{. selected}}' 設為 '{{.checkedOut}}' 的上游分支?", "EditRemoteTooltip": "編輯遠端", "TagCommit": "打標籤到提交", - "TagCommitTooltip": "", "TagMenuTitle": "建立標籤", "TagNameTitle": "標籤名稱", "TagMessageTitle": "標籤訊息", "LightweightTag": "輕量標籤", "AnnotatedTag": "附註標籤", - "DeleteTagTitle": "", - "DeleteLocalTag": "", - "DeleteRemoteTag": "", - "SelectRemoteTagUpstream": "", - "DeleteRemoteTagPrompt": "", - "RemoteTagDeletedMessage": "", "PushTagTitle": "推送標籤 '{{.tagName}}' 至遠端:", "PushTag": "推送標籤", - "PushTagTooltip": "", "NewTag": "建立標籤", - "NewTagTooltip": "", - "CreatingTag": "", - "ForceTag": "", - "ForceTagPrompt": "", "FetchRemoteTooltip": "擷取遠端", "FetchingRemoteStatus": "正在擷取遠端", "CheckoutCommit": "檢出提交", - "CheckoutCommitTooltip": "", "SureCheckoutThisCommit": "你確定要檢出這個提交?", "GitFlowOptions": "顯示 git-flow 選項", "NotAGitFlowBranch": "這似乎不是一個 git flow 分支", @@ -502,7 +336,6 @@ "IgnoreTracked": "忽略已追蹤檔案", "ExcludeTracked": "排除已追蹤檔案", "IgnoreTrackedPrompt": "你確定要忽略一個已追蹤的檔案?", - "ExcludeTrackedPrompt": "", "ViewResetToUpstreamOptions": "檢視上游重設選項", "NextScreenMode": "下一個螢幕模式(常規/半螢幕/全螢幕)", "PrevScreenMode": "上一個螢幕模式", @@ -511,12 +344,7 @@ "Panel": "面板", "Keybindings": "鍵盤快捷鍵", "KeybindingsLegend": "說明:`\u003cc-b\u003e` 表示 Ctrl+B、`\u003ca-b\u003e` 表示 Alt+B,`B`表示 Shift+B", - "KeybindingsMenuSectionLocal": "", - "KeybindingsMenuSectionGlobal": "", - "KeybindingsMenuSectionNavigation": "", "RenameBranch": "重新命名分支", - "Upstream": "", - "UpstreamTooltip": "", "BranchUpstreamOptionsTitle": "上游分支設定", "ViewBranchUpstreamOptions": "檢視上游設定", "ViewBranchUpstreamOptionsTooltip": "檢視有關上游分支的設定(例如重設至上游)", @@ -539,16 +367,11 @@ "FilteringBy": "篩選方式", "ResetInParentheses": "(已重設)", "OpenFilteringMenu": "檢視篩選路徑選項", - "OpenFilteringMenuTooltip": "", "FilterBy": "篩選路徑", "ExitFilterMode": "停止按路徑篩選", - "ExitFilterModeAuthor": "", "FilterPathOption": "輸入要依路徑篩選的路徑", - "FilterAuthorOption": "", "EnterFileName": "輸入路徑:", - "EnterAuthor": "", "FilteringMenuTitle": "篩選", - "WillCancelExistingFilterTooltip": "", "MustExitFilterModeTitle": "命令不可用", "MustExitFilterModePrompt": "在按路徑篩選的模式下,該命令不可用。是否退出按路徑篩選的模式?", "Diff": "差異", @@ -558,9 +381,7 @@ "DiffingMenuTitle": "差異比較", "SwapDiff": "反轉差異方向", "ViewDiffingOptions": "開啟差異比較選單", - "ViewDiffingOptionsTooltip": "", "OpenCommandLogMenu": "開啟命令記錄選單", - "OpenCommandLogMenuTooltip": "", "ShowingGitDiff": "顯示輸出:", "CommitDiff": "提交差異", "CopyCommitHashToClipboard": "複製提交 hash 到剪貼簿", @@ -568,10 +389,8 @@ "CommitURL": "提交 URL", "CopyCommitMessageToClipboard": "複製提交訊息到剪貼簿", "CommitMessage": "提交訊息", - "CommitSubject": "", "CommitAuthor": "提交者", "CopyCommitAttributeToClipboard": "複製提交屬性", - "CopyCommitAttributeToClipboardTooltip": "", "CopyBranchNameToClipboard": "複製分支名稱到剪貼簿", "CopyPathToClipboard": "複製檔案名稱到剪貼簿", "CommitPrefixPatternError": "commitPrefix 模式錯誤", @@ -591,10 +410,8 @@ "SubmoduleStashAndReset": "收藏未提交的子模組變更並更新", "AndResetSubmodules": "以及重設子模組", "EnterSubmoduleTooltip": "進入子模組", - "Enter": "", "CopySubmoduleNameToClipboard": "複製子模組名稱到剪貼簿", "RemoveSubmodule": "移除子模組", - "RemoveSubmoduleTooltip": "", "RemoveSubmodulePrompt": "是否確定要刪除子模組 '%s' 以及它相應的目錄?此操作是不可逆的。", "ResettingSubmoduleStatus": "重設子模型中", "NewSubmoduleName": "子模組名稱:", @@ -607,8 +424,6 @@ "EditSubmoduleUrl": "更新子模組 URL", "InitializingSubmoduleStatus": "正在初始化子模組", "InitSubmoduleTooltip": "初始化子模組", - "Update": "", - "Initialize": "", "SubmoduleUpdateTooltip": "更新子模組", "UpdatingSubmoduleStatus": "正在更新子模組", "BulkInitSubmodules": "批量初始化子模組", @@ -622,21 +437,18 @@ "NavigationTitle": "移動", "SuggestionsCheatsheetTitle": "提示", "SuggestionsTitle": "提示(按 %s 進入焦點)", - "SuggestionsSubtitle": "", "ExtrasTitle": "命令記錄", "PushingTagStatus": "正在推送標籤", "PullRequestURLCopiedToClipboard": "複製拉取請求 URL 至剪貼簿", "CommitDiffCopiedToClipboard": "已複製提交差異至剪貼簿", "CommitURLCopiedToClipboard": "已複製提交 URL 至剪貼簿", "CommitMessageCopiedToClipboard": "已複製提交訊息至剪貼簿", - "CommitSubjectCopiedToClipboard": "", "CommitAuthorCopiedToClipboard": "已複製提交者至剪貼簿", "PatchCopiedToClipboard": "已複製補丁至剪貼簿", "CopiedToClipboard": "已複製至剪貼簿", "ErrCannotEditDirectory": "無法編輯目錄:你只能編輯單獨的檔案", "ErrStageDirWithInlineMergeConflicts": "不能預存/取消預存包含具備內嵌合併衝突的檔案的目錄。請先解決合併衝突", "ErrRepositoryMovedOrDeleted": "找不到版本庫。可能已被移動或刪除", - "ErrWorktreeMovedOrRemoved": "", "CommandLog": "命令記錄", "ToggleShowCommandLog": "切換顯示/隱藏命令記錄", "FocusCommandLog": "聚焦命令記錄", @@ -644,14 +456,10 @@ "RandomTip": "隨機提示", "SelectParentCommitForMerge": "選擇合併的父提交", "ToggleWhitespaceInDiffView": "切換是否在差異檢視中顯示空格變更", - "ToggleWhitespaceInDiffViewTooltip": "", "IgnoreWhitespaceDiffViewSubTitle": "(忽略空格)", "IgnoreWhitespaceNotSupportedHere": "在此檢視中不支援忽略空格", "IncreaseContextInDiffView": "增加差異檢視中顯示變更周圍上下文的大小", - "IncreaseContextInDiffViewTooltip": "", "DecreaseContextInDiffView": "減小差異檢視中顯示變更周圍上下文的大小", - "DecreaseContextInDiffViewTooltip": "", - "DiffContextSizeChanged": "", "CreatePullRequestOptions": "建立拉取請求選項", "DefaultBranch": "預設分支", "SelectBranch": "選擇分支", @@ -666,15 +474,9 @@ "AbortTitle": "中止%s", "AbortPrompt": "是否確定要中止當前的%s?", "OpenLogMenu": "開啟記錄選單", - "OpenLogMenuTooltip": "", "LogMenuTitle": "提交記錄選項", "ToggleShowGitGraphAll": "切換顯示整個 git 圖表(將 `--all` 標誌傳遞給 `git log`)", "ShowGitGraph": "顯示 git 圖表", - "SortOrder": "", - "SortAlphabetical": "", - "SortByDate": "", - "SortByRecency": "", - "SortBasedOnReflog": "", "SortCommits": "提交排序順序", "CantChangeContextSizeError": "在製作補丁期間無法更改上下文大小,因為當發布功能時我們太懒了以至於沒有支援它。如果你真的需要它,請告訴我們!", "OpenCommitInBrowser": "在瀏覽器中開啟提交", @@ -693,19 +495,12 @@ "CommitsCopied": "提交已複製", "CommitCopied": "提交已複製", "ResetPatch": "重設補丁", - "ResetPatchTooltip": "", "ApplyPatch": "套用補丁", - "ApplyPatchTooltip": "", "ApplyPatchInReverse": "反向套用補丁", - "ApplyPatchInReverseTooltip": "", "RemovePatchFromOriginalCommit": "從原始提交中刪除補丁(%s)", - "RemovePatchFromOriginalCommitTooltip": "", "MovePatchOutIntoIndex": "將補丁移到預存區", - "MovePatchOutIntoIndexTooltip": "", "MovePatchIntoNewCommit": "將補丁移到新的提交", - "MovePatchIntoNewCommitTooltip": "", "MovePatchToSelectedCommit": "將補丁移到選定的提交(%s)", - "MovePatchToSelectedCommitTooltip": "", "CopyPatchToClipboard": "將補丁複製到剪貼簿", "NoMatchesFor": "沒有找到符合 '%s' %s 的結果", "MatchesFor": "符合 '%s' 的結果(%d/%d)%s", @@ -713,10 +508,7 @@ "SearchPrefix": "搜尋:", "FilterPrefix": "篩選:", "ExitSearchMode": "%s:退出搜尋模式", - "ExitTextFilterMode": "", - "Switch": "", "SwitchToWorktree": "切換至工作目錄面板", - "SwitchToWorktreeTooltip": "", "AlreadyCheckedOutByWorktree": "此分支已被檢出到 {{.worktreeName}} 是否切換到此工作目錄?", "BranchCheckedOutByWorktree": "分支 {{.branchName}} 已被 {{.worktreeName}} 檢出", "DetachWorktreeTooltip": "此將在工作目錄中執行 `git checkout --detach` 以解開分支與它的連結,但工作目錄本身將不被更動", @@ -737,10 +529,8 @@ "NoWorktreesThisRepo": "無工作目錄", "MissingWorktree": "(失蹤)", "MainWorktree": "(主要)", - "NewWorktree": "", "NewWorktreePath": "工作目錄路徑", "NewWorktreeBase": "工作目錄來源", - "RemoveWorktreeTooltip": "", "BranchNameCannotBeBlank": "分支名稱不能為空", "NewBranchName": "分支名稱", "NewBranchNameLeaveBlank": "分支名稱(留空將檢出 {{.default}})", @@ -759,25 +549,12 @@ "PleaseGoToURL": "請開啟 URL:{{.url}}", "NoCopiedCommits": "未複製提交", "DisabledMenuItemPrefix": "已停用:", - "QuickStartInteractiveRebase": "", - "QuickStartInteractiveRebaseTooltip": "", - "CannotQuickStartInteractiveRebase": "", "ToggleRangeSelect": "切換拖曳選擇", - "RangeSelectUp": "", - "RangeSelectDown": "", - "RangeSelectNotSupported": "", - "NoItemSelected": "", - "SelectedItemIsNotABranch": "", - "SelectedItemDoesNotHaveFiles": "", - "RangeSelectNotSupportedForSubmodules": "", - "OldCherryPickKeyWarning": "", - "CommandDoesNotSupportOpeningInEditor": "", "Actions": { "CheckoutCommit": "檢出提交", "CheckoutTag": "檢出標籤", "CheckoutBranch": "檢出分支", "ForceCheckoutBranch": "強制檢出分支", - "DeleteLocalBranch": "", "DeleteBranch": "刪除分支", "Merge": "合併", "RebaseBranch": "變基分支", @@ -795,14 +572,12 @@ "AmendCommit": "修改提交", "ResetCommitAuthor": "重設提交作者", "SetCommitAuthor": "設置提交作者", - "AddCommitCoAuthor": "", "RevertCommit": "還原提交", "CreateFixupCommit": "建立修改提交", "SquashAllAboveFixupCommits": "Squash 所有上面的修改提交", "MoveCommitUp": "上移提交", "MoveCommitDown": "下移提交", "CopyCommitMessageToClipboard": "將提交訊息複製到剪貼簿", - "CopyCommitSubjectToClipboard": "", "CopyCommitDiffToClipboard": "將提交差異複製到剪貼簿", "CopyCommitHashToClipboard": "將提交 hash 複製到剪貼簿", "CopyCommitURLToClipboard": "將提交 URL 複製到剪貼簿", @@ -828,7 +603,6 @@ "Push": "推送", "Pull": "拉取", "OpenFile": "開啟檔案", - "OpenFileTooltip": "", "StashAllChanges": "收藏所有更改", "StashAllChangesKeepIndex": "收藏所有更改並保留索引", "StashStagedChanges": "收藏已預存的更改", @@ -861,8 +635,6 @@ "UpdateSubmodule": "更新子模塊", "CreateLightweightTag": "建立輕量標籤", "CreateAnnotatedTag": "建立附註標籤", - "DeleteLocalTag": "", - "DeleteRemoteTag": "", "PushTag": "推送標籤", "NukeWorkingTree": "清空工作樹", "DiscardUnstagedFileChanges": "放棄未預存的檔案更改", @@ -874,51 +646,25 @@ "Undo": "復原", "Redo": "重做", "CopyPullRequestURL": "複製拉取請求的 URL", - "OpenDiffTool": "", "OpenMergeTool": "開啟合併工具", "OpenCommitInBrowser": "在瀏覽器中開啟提交", "OpenPullRequest": "在瀏覽器中開啟拉取請求", "StartBisect": "開始二分查找", "ResetBisect": "重設二分查找", "BisectSkip": "二分查找跳過", - "BisectMark": "二分查找標記", - "RemoveWorktree": "", - "AddWorktree": "" + "BisectMark": "二分查找標記" }, "Bisect": { "MarkStart": "將 %s 標記為 %s(開始二分查找)", - "MarkSkipCurrent": "", - "MarkSkipSelected": "", "ResetTitle": "重設 `git bisect`", "ResetPrompt": "是否重設 `git bisect`?", "ResetOption": "重設二分查找", - "ChooseTerms": "", - "OldTermPrompt": "", - "NewTermPrompt": "", "BisectMenuTitle": "二分查找", "Mark": "將 %s 標記為 %s", "SkipCurrent": "跳過 %s", - "SkipSelected": "", "CompleteTitle": "二分查找完成", "CompletePrompt": "二分查找完成!以下提交引入了更改:\n\n%s\n\n是否重設 `git bisect` ?", "CompletePromptIndeterminate": "二分查找完成!有一些提交被跳過,因此以下任何提交皆可能引進更改:\n\n%s\n\n是否重設 `git bisect`?", "Bisecting": "二分查找中" - }, - "Log": { - "EditRebase": "", - "MoveCommitUp": "", - "MoveCommitDown": "", - "CherryPickCommits": "", - "HandleUndo": "", - "HandleMidRebaseCommand": "", - "RemoveFile": "", - "CopyToClipboard": "", - "Remove": "", - "CreateFileWithContent": "", - "AppendingLineToFile": "", - "EditRebaseFromBaseCommit": "" - }, - "BreakingChangesTitle": "", - "BreakingChangesMessage": "", - "BreakingChangesByVersion": null + } } From 98e5fd70fb6a1129a18e2d7283e72949ca14451b Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Sat, 8 Jun 2024 12:11:05 +0200 Subject: [PATCH 102/157] Remove non-English translation sets, read them from JSON instead --- cmd/i18n/main.go | 5 +- pkg/cheatsheet/generate.go | 5 +- pkg/cheatsheet/generate_test.go | 2 +- .../hosting_service/hosting_service_test.go | 2 +- pkg/i18n/chinese.go | 544 ---------- pkg/i18n/dutch.go | 335 ------- pkg/i18n/english.go | 4 +- pkg/i18n/i18n.go | 104 +- pkg/i18n/japanese.go | 580 ----------- pkg/i18n/korean.go | 574 ----------- pkg/i18n/polish.go | 929 ------------------ pkg/i18n/russian.go | 673 ------------- pkg/i18n/traditional_chinese.go | 741 -------------- pkg/utils/dummies.go | 4 +- 14 files changed, 98 insertions(+), 4404 deletions(-) delete mode 100644 pkg/i18n/chinese.go delete mode 100644 pkg/i18n/dutch.go delete mode 100644 pkg/i18n/japanese.go delete mode 100644 pkg/i18n/korean.go delete mode 100644 pkg/i18n/polish.go delete mode 100644 pkg/i18n/russian.go delete mode 100644 pkg/i18n/traditional_chinese.go diff --git a/cmd/i18n/main.go b/cmd/i18n/main.go index d05cd828c56..5623c53fcf0 100644 --- a/cmd/i18n/main.go +++ b/cmd/i18n/main.go @@ -8,7 +8,7 @@ import ( "github.com/jesseduffield/lazygit/pkg/i18n" ) -func saveLanguageFileToJson(tr i18n.TranslationSet, filepath string) error { +func saveLanguageFileToJson(tr *i18n.TranslationSet, filepath string) error { jsonData, err := json.MarshalIndent(tr, "", " ") if err != nil { return err @@ -19,7 +19,8 @@ func saveLanguageFileToJson(tr i18n.TranslationSet, filepath string) error { } func saveNonEnglishLanguageFilesToJson() error { - for lang, tr := range i18n.GetTranslationSets() { + translationSets, _ := i18n.GetTranslationSets() + for lang, tr := range translationSets { if lang == "en" { continue } diff --git a/pkg/cheatsheet/generate.go b/pkg/cheatsheet/generate.go index 27667e686f5..5f0d7549d5b 100644 --- a/pkg/cheatsheet/generate.go +++ b/pkg/cheatsheet/generate.go @@ -51,7 +51,10 @@ func GetKeybindingsDir() string { } func generateAtDir(cheatsheetDir string) { - translationSetsByLang := i18n.GetTranslationSets() + translationSetsByLang, err := i18n.GetTranslationSets() + if err != nil { + log.Fatal(err) + } mConfig := config.NewDummyAppConfig() for lang := range translationSetsByLang { diff --git a/pkg/cheatsheet/generate_test.go b/pkg/cheatsheet/generate_test.go index 4d0d92e12a2..4dbf7e3dd72 100644 --- a/pkg/cheatsheet/generate_test.go +++ b/pkg/cheatsheet/generate_test.go @@ -262,7 +262,7 @@ func TestGetBindingSections(t *testing.T) { for _, test := range tests { t.Run(test.testName, func(t *testing.T) { - actual := getBindingSections(test.bindings, &tr) + actual := getBindingSections(test.bindings, tr) assert.EqualValues(t, test.expected, actual) }) } diff --git a/pkg/commands/hosting_service/hosting_service_test.go b/pkg/commands/hosting_service/hosting_service_test.go index 20632e983d8..4ce847bf76c 100644 --- a/pkg/commands/hosting_service/hosting_service_test.go +++ b/pkg/commands/hosting_service/hosting_service_test.go @@ -416,7 +416,7 @@ func TestGetPullRequestURL(t *testing.T) { t.Run(s.testName, func(t *testing.T) { tr := i18n.EnglishTranslationSet() log := &fakes.FakeFieldLogger{} - hostingServiceMgr := NewHostingServiceMgr(log, &tr, s.remoteUrl, s.configServiceDomains) + hostingServiceMgr := NewHostingServiceMgr(log, tr, s.remoteUrl, s.configServiceDomains) s.test(hostingServiceMgr.GetPullRequestURL(s.from, s.to)) log.AssertErrors(t, s.expectedLoggedErrors) }) diff --git a/pkg/i18n/chinese.go b/pkg/i18n/chinese.go deleted file mode 100644 index f8ec9720c46..00000000000 --- a/pkg/i18n/chinese.go +++ /dev/null @@ -1,544 +0,0 @@ -/* - -本翻译文件中的词语的翻译参考了 https://github.com/progit/progit2-zh/blob/master/TRANSLATION_NOTES.asc。 -下方的术语对照表是对其的补充。 - -Translation in this file refer to https://github.com/progit/progit2-zh/blob/master/TRANSLATION_NOTES.asc. -Glossary below is a supplement of that documentation. - -Glossary 术语对照表 - -change 更改 -fixup 修正 -reset 重置 - -*/ - -package i18n - -const chineseIntroPopupMessage = ` -感谢使用 lazygit!你真的太棒了。下面几点你可能会感兴趣: - - 1) 观看此视频,快速了解 lazygit 的功能: - https://youtu.be/CPLdltN7wgE - - 2) 记得看看最新发行说明: - https://github.com/jesseduffield/lazygit/releases - - 3) 使用 git 说明你是一位程序员!你可以和我们一起让 lazygit 变得更好。 - 考虑为本项目做些贡献吧: - https://github.com/jesseduffield/lazygit - 你也可以直接赞助,并告诉我哪里需要改进,点右下角的捐赠按钮就好了。 - 哪怕只是给仓库点个星星也很棒! -` - -// exporting this so we can use it in tests -func chineseTranslationSet() TranslationSet { - return TranslationSet{ - NotEnoughSpace: "没有足够的空间来渲染面板", - DiffTitle: "差异", - FilesTitle: "文件", - BranchesTitle: "分支", - CommitsTitle: "提交", - StashTitle: "贮藏", - UnstagedChanges: `未暂存更改`, - StagedChanges: `已暂存更改`, - MainTitle: "主要", - StagingTitle: "正在暂存", - MergingTitle: "正在合并", - NormalTitle: "正常", - CommitSummary: "提交信息", - CredentialsUsername: "用户名", - CredentialsPassword: "密码", - CredentialsPassphrase: "输入 SSH 密钥的密码", - PassUnameWrong: "密码 和/或 用户名错误", - Commit: "提交更改", - AmendLastCommit: "修补最后一次提交", - AmendLastCommitTitle: "修补最后一次提交", - SureToAmend: "您确定要修补上一次提交吗?之后您可以从提交面板更改提交消息。", - NoCommitToAmend: "没有需要提交的修补。", - CommitChangesWithEditor: "提交更改(使用编辑器编辑提交信息)", - StatusTitle: "状态", - Menu: "菜单", - Execute: "执行", - Stage: "切换暂存状态", - ToggleStagedAll: "切换所有文件的暂存状态", - ToggleTreeView: "切换文件树视图", - OpenMergeTool: "打开外部合并工具 (git mergetool)", - Refresh: "刷新", - Push: "推送", - Pull: "拉取", - Scroll: "滚动", - MergeConflictsTitle: "合并冲突", - Checkout: "检出", - NoChangedFiles: "没有更改过文件", - SoftReset: "软重置", - AlreadyCheckedOutBranch: "您已经检出至此分支", - SureForceCheckout: "您确定要强制检出吗?您将丢失所有本地更改", - ForceCheckoutBranch: "强制检出分支", - BranchName: "分支名称", - NewBranchNameBranchOff: "新分支名称(基于 {{.branchName}})", - CantDeleteCheckOutBranch: "您不能删除已检出的分支!", - ForceDeleteBranchMessage: "{{.selectedBranchName}} 还没有被完全合并。您确定要删除它吗?", - RebaseBranch: "将已检出的分支变基到该分支", - CantRebaseOntoSelf: "您不能将分支变基到其自身", - CantMergeBranchIntoItself: "您不能将分支合并到其自身", - ForceCheckout: "强制检出", - CheckoutByName: "按名称检出", - NewBranch: "新分支", - NoBranchesThisRepo: "此仓库中没有分支", - CommitWithoutMessageErr: "您必须编写提交消息才能进行提交", - CloseCancel: "关闭", - Confirm: "确认", - Close: "关闭", - Quit: "退出", - NoCommitsThisBranch: "该分支没有提交", - CannotSquashOrFixupFirstCommit: "There's no commit below to squash into", - Fixup: "修正(fixup)", - SureFixupThisCommit: "您确定要“修正”此提交吗?它将合并到下面的提交中", - SureSquashThisCommit: "您确定要将这个提交压缩到下面的提交中吗?", - Squash: "压缩", - PickCommitTooltip: "选择提交(变基过程中)", - RevertCommit: "还原提交", - Reword: "改写提交", - DropCommit: "删除提交", - MoveDownCommit: "下移提交", - MoveUpCommit: "上移提交", - EditCommitTooltip: "编辑提交", - AmendCommitTooltip: "用已暂存的更改来修补提交", - RewordCommitEditor: "使用编辑器重命名提交", - Error: "错误", - PickHunk: "选中区块", - PickAllHunks: "选中所有区块", - Undo: "撤销", - UndoReflog: "(通过 reflog)撤销「实验功能」", - RedoReflog: "(通过 reflog)重做「实验功能」", - Pop: "应用并删除", - Drop: "删除", - Apply: "应用", - NoStashEntries: "没有贮藏条目", - StashDrop: "删除贮藏", - SureDropStashEntry: "您确定要删除此贮藏条目吗?", - StashPop: "应用并删除贮藏", - SurePopStashEntry: "您确定要应用并删除此贮藏条目吗?", - StashApply: "应用贮藏", - SureApplyStashEntry: "您确定要应用此贮藏条目?", - NoTrackedStagedFilesStash: "没有可以贮藏的已跟踪/暂存文件", - StashChanges: "贮藏更改", - RenameStash: "Rename stash", - RenameStashPrompt: "Rename stash: {{.stashName}}", - OpenConfig: "打开配置文件", - EditConfig: "编辑配置文件", - ForcePush: "强制推送", - ForcePushPrompt: "您的分支已与远程分支不同。按‘esc’取消,或‘enter’强制推送.", - ForcePushDisabled: "您的分支已与远程分支不同, 并且您已经禁用了强行推送", - UpdatesRejectedAndForcePushDisabled: "更新被拒绝,您已禁用强制推送", - CheckForUpdate: "检查更新", - CheckingForUpdates: "正在检查更新…", - OnLatestVersionErr: "已是最新版本", - MajorVersionErr: "新版本 ({{.newVersion}}) 与当前版本 ({{.currentVersion}}) 相比,具有非向后兼容的更改", - CouldNotFindBinaryErr: "在 {{.url}} 处找不到任何二进制文件", - MergeToolTitle: "合并工具", - MergeToolPrompt: "确定要打开 `git mergetool` 吗?", - IntroPopupMessage: chineseIntroPopupMessage, - GitconfigParseErr: `由于存在未加引号的'\'字符,因此 Gogit 无法解析您的 gitconfig 文件。删除它们应该可以解决问题。`, - EditFile: `编辑文件`, - OpenFile: `打开文件`, - IgnoreFile: `添加到 .gitignore`, - RefreshFiles: `刷新文件`, - Merge: `合并到当前检出的分支`, - ConfirmQuit: `您确定要退出吗?`, - SwitchRepo: `切换到最近的仓库`, - AllBranchesLogGraph: `显示所有分支的日志`, - UnsupportedGitService: `不支持的 git 服务`, - CreatePullRequest: `创建抓取请求`, - CopyPullRequestURL: `将抓取请求 URL 复制到剪贴板`, - NoBranchOnRemote: `该分支在远程上不存在. 您需要先将其推送到远程.`, - Fetch: `抓取`, - NoAutomaticGitFetchTitle: `无法自动进行 "git fetch"`, - NoAutomaticGitFetchBody: `Lazygit 不能在私人仓库中使用 "git fetch"; 请在文件面板中使用 'f' 手动运行 "git fetch"`, - FileEnter: `暂存单个 块/行 用于文件, 或 折叠/展开 目录`, - FileStagingRequirements: `只能暂存跟踪文件的单独行`, - StageSelectionTooltip: `切换行暂存状态`, - DiscardSelection: `取消变更 (git reset)`, - ToggleRangeSelect: `切换拖动选择`, - ToggleSelectHunk: `切换选择区块`, - ToggleSelectionForPatch: `添加/移除 行到补丁`, - ToggleStagingView: `切换到其他面板`, - ReturnToFilesPanel: `返回文件面板`, - FastForward: `从上游快进此分支`, - FastForwarding: "抓取并快进", - FoundConflictsTitle: "自动合并失败", - ViewMergeRebaseOptions: "查看 合并/变基 选项", - NotMergingOrRebasing: "您目前既不进行变基也不进行合并", - RecentRepos: "最近的仓库", - MergeOptionsTitle: "合并选项", - RebaseOptionsTitle: "变基选项", - CommitSummaryTitle: "提交讯息", - LocalBranchesTitle: "分支页面", - SearchTitle: "搜索", - TagsTitle: "标签页面", - MenuTitle: "菜单", - RemotesTitle: "远程页面", - RemoteBranchesTitle: "远程分支", - PatchBuildingTitle: "构建补丁中", - InformationTitle: "信息", - SecondaryTitle: "次要", - ReflogCommitsTitle: "Reflog 页面", - GlobalTitle: "全局键绑定", - ConflictsResolved: "已解决所有冲突。是否继续?", - ConfirmMerge: "您确定要将分支 {{.selectedBranch}} 合并到 {{.checkedOutBranch}} 吗?", - FwdNoUpstream: "此分支没有上游,无法快进", - FwdNoLocalUpstream: "此分支的远程未在本地注册,无法快进", - FwdCommitsToPush: "此分支带有尚未推送的提交,无法快进", - ErrorOccurred: "发生错误!请在以下位置创建 issue", - NoRoom: "空间不足", - YouAreHere: "您在这里", - RewordNotSupported: "当前不支持交互式重新基准化时的重新措词提交", - CherryPickCopy: "复制提交(拣选)", - PasteCommits: "粘贴提交(拣选)", - SureCherryPick: "您确定要将选中的提交进行拣选到这个分支吗?", - CherryPick: "拣选 (Cherry-Pick)", - Donate: "捐助", - AskQuestion: "提问咨询", - PrevLine: "选择上一行", - NextLine: "选择下一行", - PrevHunk: "选择上一个区块", - NextHunk: "选择下一个区块", - PrevConflict: "选择上一个冲突", - NextConflict: "选择下一个冲突", - SelectPrevHunk: "选择顶部块", - SelectNextHunk: "选择底部块", - ScrollDown: "向下滚动", - ScrollUp: "向上滚动", - ScrollUpMainWindow: "向上滚动主面板", - ScrollDownMainWindow: "向下滚动主面板", - AmendCommitTitle: "修改提交", - AmendCommitPrompt: "您确定要使用暂存文件来修改此提交吗?", - DropCommitTitle: "删除提交", - DropCommitPrompt: "您确定要删除此提交吗?", - PullingStatus: "正在拉取", - PushingStatus: "正在推送", - FetchingStatus: "正在抓取", - SquashingStatus: "正在压缩", - FixingStatus: "正在修正", - DeletingStatus: "正在删除", - MovingStatus: "正在移动", - RebasingStatus: "正在变基", - AmendingStatus: "正在修改", - CherryPickingStatus: "正在拣选", - UndoingStatus: "正在撤销", - RedoingStatus: "正在重做", - CheckingOutStatus: "长子检出", - CommittingStatus: "正在提交", - CommitFiles: "提交文件", - ViewItemFiles: "查看提交的文件", - CommitFilesTitle: "提交文件", - CheckoutCommitFileTooltip: "检出文件", - DiscardOldFileChangeTooltip: "放弃对此文件的提交更改", - DiscardFileChangesTitle: "放弃文件更改", - DiscardFileChangesPrompt: "您确定要舍弃此提交对该文件的更改吗?如果此文件是在此提交中创建的,它将被删除", - DisabledForGPG: "该功能不适用于使用 GPG 的用户", - CreateRepo: "当前目录不在 git 仓库中。是否在此目录创建一个新的 git 仓库?(y/n): ", - AutoStashTitle: "自动存储?", - AutoStashPrompt: "您必须隐藏并弹出更改以使更改生效。自动执行?(enter/esc)", - StashPrefix: "自动隐藏更改 ", - Discard: "查看'放弃更改'选项", - Cancel: "取消", - DiscardAllChanges: "放弃所有更改", - DiscardUnstagedChanges: "放弃未暂存的变更", - DiscardAllChangesToAllFiles: "清空工作区", - DiscardAnyUnstagedChanges: "丢弃未暂存的变更", - DiscardUntrackedFiles: "丢弃未跟踪的文件", - HardReset: "硬重置", - ViewResetOptions: `查看重置选项`, - CreateFixupCommit: `为此提交创建修正`, - SquashAboveCommitsTooltip: `压缩在所选提交之上的所有“fixup!”提交(自动压缩)`, - CreateFixupCommitTooltip: `创建修正提交`, - ExecuteCustomCommand: "执行自定义命令", - CustomCommand: "自定义命令:", - CommitChangesWithoutHook: "提交更改而无需预先提交钩子", - SkipHookPrefixNotConfigured: "您尚未配置用于跳过钩子的提交消息前缀。请在您的配置中设置 `git.skipHookPrefix ='WIP'`", - ResetTo: `重置为`, - PressEnterToReturn: "按下 Enter 键返回 lazygit", - ViewStashOptions: "查看贮藏选项", - StashAllChanges: "将所有更改加入贮藏", - StashAllChangesKeepIndex: "将已暂存的更改加入贮藏", - StashOptions: "贮藏选项", - NotARepository: "错误:必须在 git 仓库中运行", - Jump: "跳到面板", - ScrollLeftRight: "左右滚动", - ScrollLeft: "向左滚动", - ScrollRight: "向右滚动", - DiscardPatch: "丢弃补丁", - DiscardPatchConfirm: "您一次只能通过一个提交或贮藏条目构建补丁。需要放弃当前补丁吗?", - CantPatchWhileRebasingError: "处于合并或变基状态时,您无法构建修补程序或运行修补程序命令", - ToggleAddToPatch: "补丁中包含的切换文件", - ViewPatchOptions: "查看自定义补丁选项", - PatchOptionsTitle: "补丁选项", - NoPatchError: "尚未创建补丁。你可以在提交中的文件上按下“空格”或使用“回车”添加其中的特定行以开始构建补丁", - EnterCommitFile: "输入文件以将所选行添加到补丁中(或切换目录折叠)", - ExitCustomPatchBuilder: `退出逐行模式`, - EnterUpstream: `以这种格式输入上游:'<远程仓库> <分支名称>'`, - InvalidUpstream: "上游格式无效,格式应当为:' '", - ReturnToRemotesList: `返回远程仓库列表`, - NewRemote: `添加新的远程仓库`, - NewRemoteName: `新远程仓库名称:`, - NewRemoteUrl: `新远程仓库 URL:`, - EditRemoteName: `输入远程仓库 {{.remoteName}} 的新名称:`, - EditRemoteUrl: `输入远程仓库 {{.remoteName}} 的新 URL:`, - RemoveRemote: `删除远程`, - RemoveRemotePrompt: "您确定要删除远程仓库吗?", - DeleteRemoteBranch: "删除远程分支", - DeleteRemoteBranchMessage: "您确定要删除远程分支吗?", - SetUpstream: "设置为检出分支的上游", - SetAsUpstreamTooltip: "设置为检出分支的上游", - SetUpstreamTitle: "设置上游分支", - SetUpstreamMessage: "您确定要将 {{.checkedOut}} 的上游分支设置为 {{.selected}} 吗?", - EditRemoteTooltip: "编辑远程仓库", - TagCommit: "标签提交", - TagMenuTitle: "创建标签", - TagNameTitle: "标签名称", - TagMessageTitle: "标签消息", - AnnotatedTag: "附注标签", - LightweightTag: "轻量标签", - PushTagTitle: "将 {{.tagName}} 推送到远程仓库:", - PushTag: "推送标签", - NewTag: "创建标签", - FetchRemoteTooltip: "抓取远程仓库", - FetchingRemoteStatus: "抓取远程仓库中", - CheckoutCommit: "检出提交", - SureCheckoutThisCommit: "您确定要检出此提交吗?", - GitFlowOptions: "显示 git-flow 选项", - NotAGitFlowBranch: "这似乎不是 git flow 分支", - NewGitFlowBranchPrompt: "新的 {{.branchType}} 名称:", - IgnoreTracked: "忽略跟踪文件", - IgnoreTrackedPrompt: "您确定要忽略已跟踪的文件吗?", - ViewResetToUpstreamOptions: "查看上游重置选项", - NextScreenMode: "下一屏模式(正常/半屏/全屏)", - PrevScreenMode: "上一屏模式", - StartSearch: "开始搜索", - Panel: "面板", - Keybindings: "按键绑定", - RenameBranch: "重命名分支", - NewBranchNamePrompt: "输入分支的新名称", - RenameBranchWarning: "该分支正在跟踪远程仓库。此操作将仅会重命名本地分支名称,而不会重命名远程分支的名称。确定继续?", - OpenKeybindingsMenu: "打开菜单", - ResetCherryPick: "重置已拣选(复制)的提交", - NextTab: "下一个标签", - PrevTab: "上一个标签", - CantUndoWhileRebasing: "进行基础调整时无法撤消", - CantRedoWhileRebasing: "变基时无法重做", - MustStashWarning: "将补丁拉出到索引中需要存储和取消存储所做的更改。如果出现问题,您将可以从存储中访问文件。继续?", - MustStashTitle: "必须保存进度", - ConfirmationTitle: "确认面板", - PrevPage: "上一页", - NextPage: "下一页", - GotoTop: "滚动到顶部", - GotoBottom: "滚动到底部", - FilteringBy: "过滤依据", - ResetInParentheses: "(重置)", - OpenFilteringMenu: "查看按路径过滤选项", - FilterBy: "过滤", - ExitFilterMode: "停止按路径过滤", - FilterPathOption: "输入要过滤的路径", - EnterFileName: "输入路径:", - FilteringMenuTitle: "正在过滤", - MustExitFilterModeTitle: "命令不可用", - MustExitFilterModePrompt: "命令在过滤模式下不可用。退出过滤模式?", - Diff: "差异", - EnterRefToDiff: "输入 ref 以 diff", - EnterRefName: "输入 ref:", - ExitDiffMode: "退出差异模式", - DiffingMenuTitle: "正在 diff", - SwapDiff: "反向 diff", - ViewDiffingOptions: "打开 diff 菜单", - // 实际视图 (actual view) 是附加视图 (extras view),未来,我打算为附加视图提供更多选项卡,但现在,上面的文本只需要提及“命令日志”这个部分 - OpenCommandLogMenu: "打开命令日志菜单", - ShowingGitDiff: "显示输出:", - CopyCommitHashToClipboard: "将提交的 hash 复制到剪贴板", - CopyCommitMessageToClipboard: "将提交消息复制到剪贴板", - CopyBranchNameToClipboard: "将分支名称复制到剪贴板", - CopyPathToClipboard: "将文件名复制到剪贴板", - CopySelectedTextToClipboard: "将选中文本复制到剪贴板", - CommitPrefixPatternError: "提交前缀模式错误", - NoFilesStagedTitle: "没有暂存文件", - NoFilesStagedPrompt: "您尚未暂存任何文件。提交所有文件?", - BranchNotFoundTitle: "找不到分支", - BranchNotFoundPrompt: "找不到分支。创建一个新分支命名为:", - DiscardChangeTitle: "取消暂存选中的行", - DiscardChangePrompt: "您确定要删除所选的行(git reset)吗?这是不可逆的。\n要禁用此对话框,请将 'gui.skipDiscardChangeWarning' 的配置键设置为 true", - CreateNewBranchFromCommit: "从提交创建新分支", - BuildingPatch: "正在构建补丁", - ViewCommits: "查看提交", - MinGitVersionError: "Git 版本必须至少为 2.20(即从 2018 年开始的版本)。请更新 git。或者在 https://github.com/jesseduffield/lazygit/issues 上提出一个问题,以使 lazygit 更加向后兼容。", - RunningCustomCommandStatus: "正在运行自定义命令", - SubmoduleStashAndReset: "存放未提交的子模块更改和更新", - AndResetSubmodules: "和重置子模块", - EnterSubmoduleTooltip: "输入子模块", - CopySubmoduleNameToClipboard: "将子模块名称复制到剪贴板", - RemoveSubmodule: "删除子模块", - RemoveSubmodulePrompt: "您确定要删除子模块 '%s' 及其对应的目录吗?这是不可逆的。", - ResettingSubmoduleStatus: "正在重置子模块", - NewSubmoduleName: "新的子模块名称:", - NewSubmoduleUrl: "新的子模块 URL:", - NewSubmodulePath: "新的子模块路径:", - NewSubmodule: "添加新的子模块", - AddingSubmoduleStatus: "添加子模块", - UpdateSubmoduleUrl: "更新子模块 '%s' 的 URL", - UpdatingSubmoduleUrlStatus: "更新 URL 中", - EditSubmoduleUrl: "更新子模块 URL", - InitializingSubmoduleStatus: "正在初始化子模块", - InitSubmoduleTooltip: "初始化子模块", - SubmoduleUpdateTooltip: "更新子模块", - UpdatingSubmoduleStatus: "正在更新子模块", - BulkInitSubmodules: "批量初始化子模块", - BulkUpdateSubmodules: "批量更新子模块", - BulkDeinitSubmodules: "批量反初始化子模块", - ViewBulkSubmoduleOptions: "查看批量子模块选项", - BulkSubmoduleOptions: "批量子模块选项", - RunningCommand: "运行命令", - SubCommitsTitle: "子提交", - SubmodulesTitle: "子模块", - NavigationTitle: "列表面板导航", - SuggestionsCheatsheetTitle: "意见建议", - SuggestionsTitle: "意见建议 (点击 %s 以聚焦)", - ExtrasTitle: "附加", - PushingTagStatus: "推送标签", - PullRequestURLCopiedToClipboard: "抓取请求网址已复制到剪贴板", - CommitMessageCopiedToClipboard: "提交消息复制到剪贴板", - CopiedToClipboard: "复制到剪贴板", - ErrCannotEditDirectory: "无法编辑目录:您只能编辑单个文件", - ErrStageDirWithInlineMergeConflicts: "无法 暂存/取消暂存 包含具有内联合并冲突的文件的目录。请先解决合并冲突", - ErrRepositoryMovedOrDeleted: "找不到仓库。它可能已被移动或删除 ¯\\_(ツ)_/¯", - CommandLog: "命令日志", - ToggleShowCommandLog: "切换 显示/隐藏 命令日志", - FocusCommandLog: "焦点命令日志", - CommandLogHeader: "您可以通过按 '%s' 隐藏或集中显示该面板,或使用 `gui.showCommandLog: false`\n将其永久隐藏在您的配置中", - RandomTip: "随机小提示", - SelectParentCommitForMerge: "选择父提交进行合并", - ToggleWhitespaceInDiffView: "切换是否在差异视图中显示空白字符差异", - IncreaseContextInDiffView: "扩大差异视图中显示的上下文范围", - DecreaseContextInDiffView: "缩小差异视图中显示的上下文范围", - CreatePullRequestOptions: "创建抓取请求选项", - DefaultBranch: "默认分支", - SelectBranch: "选择分支", - SelectConfigFile: "选择配置文件", - NoConfigFileFoundErr: "找不到配置文件", - LoadingFileSuggestions: "正在加载文件建议", - LoadingCommits: "正在加载提交", - MustSpecifyOriginError: "指定分支时,必须同时指定远程", - GitOutput: "Git 输出:", - GitCommandFailed: "Git 命令执行失败。查看命令日志了解详情 (使用 %s 打开)", - AbortTitle: "放弃 %s", - AbortPrompt: "您确定要放弃当前 %s 吗?", - OpenLogMenu: "打开日志菜单", - LogMenuTitle: "提交日志选项", - ToggleShowGitGraphAll: "切换显示完整 git 分支图 (向 `git log` 命令传入 `--all` 选项)", - ShowGitGraph: "显示 git 分支图", - SortCommits: "提交排序", - CantChangeContextSizeError: "无法在补丁构建模式下更改上下文,因为我们在发布该功能时懒得支持它。 如果你真的想要这么做,请告诉我们!", - OpenCommitInBrowser: "在浏览器中打开提交", - ViewBisectOptions: "查看二分查找选项", - Actions: Actions{ - // TODO: combine this with the original keybinding descriptions (those are all in lowercase atm) - CheckoutCommit: "检出提交", - CheckoutTag: "检出标签", - CheckoutBranch: "检出分支", - ForceCheckoutBranch: "强制检出分支", - Merge: "合并", - RebaseBranch: "变基分支", - RenameBranch: "重命名分支", - CreateBranch: "建立分支", - CherryPick: "(拣选) 粘贴提交", - CheckoutFile: "检出文件", - DiscardOldFileChange: "放弃旧文件更改", - SquashCommitDown: "向下压缩提交", - FixupCommit: "修正提交", - RewordCommit: "改写提交", - DropCommit: "删除提交", - EditCommit: "编辑提交", - AmendCommit: "修改提交", - RevertCommit: "还原提交", - CreateFixupCommit: "创建修正提交", - SquashAllAboveFixupCommits: "压缩以上所有的修正提交", - CreateLightweightTag: "创建轻量标签", - CreateAnnotatedTag: "创建附注标签", - CopyCommitMessageToClipboard: "将提交消息复制到剪贴板", - MoveCommitUp: "上移提交", - MoveCommitDown: "下移提交", - CustomCommand: "自定义命令", - DiscardAllChangesInDirectory: "丢弃目录中的所有更改", - DiscardUnstagedChangesInDirectory: "丢弃目录中未暂存的更改", - DiscardAllChangesInFile: "丢弃文件中的所有更改", - DiscardAllUnstagedChangesInFile: "丢弃文件中所有未暂存的更改", - StageFile: "暂存文件", - UnstageFile: "取消暂存文件", - UnstageAllFiles: "取消暂存所有文件", - StageAllFiles: "暂存所有文件", - IgnoreExcludeFile: "忽略文件", - Commit: "提交 (Commit)", - EditFile: "编辑文件", - Push: "推送 (Push)", - Pull: "拉取 (Pull)", - OpenFile: "打开文件", - StashAllChanges: "贮藏所有更改", - StashStagedChanges: "贮藏暂存的更改", - GitFlowFinish: "git flow 结果", - GitFlowStart: "git flow 开始", - CopyToClipboard: "复制到剪贴板", - CopySelectedTextToClipboard: "将选中文本复制到剪贴板", - RemovePatchFromCommit: "从提交中删除补丁", - MovePatchToSelectedCommit: "将补丁移动到选定的提交", - MovePatchIntoIndex: "将补丁移到索引", - MovePatchIntoNewCommit: "将补丁移到新提交中", - DeleteRemoteBranch: "删除远程分支", - SetBranchUpstream: "设置分支上游", - AddRemote: "添加远程", - RemoveRemote: "移除远程", - UpdateRemote: "更新远程", - ApplyPatch: "应用补丁", - Stash: "贮藏 (Stash)", - RenameStash: "Rename stash", - RemoveSubmodule: "删除子模块", - ResetSubmodule: "重置子模块", - AddSubmodule: "添加子模块", - UpdateSubmoduleUrl: "更新子模块 URL", - InitialiseSubmodule: "初始化子模块", - BulkInitialiseSubmodules: "批量初始化子模块", - BulkUpdateSubmodules: "批量更新子模块", - BulkDeinitialiseSubmodules: "批量取消初始化子模块", - UpdateSubmodule: "更新子模块", - PushTag: "推送标签", - NukeWorkingTree: "Nuke 工作树", - DiscardUnstagedFileChanges: "放弃未暂存的文件更改", - RemoveUntrackedFiles: "删除未跟踪的文件", - SoftReset: "软重置", - MixedReset: "混合重置", - HardReset: "硬重置", - FastForwardBranch: "快进分支", - Undo: "撤销", - Redo: "重做", - CopyPullRequestURL: "复制拉取请求 URL", - OpenMergeTool: "打开合并工具", - OpenCommitInBrowser: "在浏览器中打开提交", - OpenPullRequest: "在浏览器中打开拉取请求", - StartBisect: "开始二分查找 (Bisect)", - ResetBisect: "重置二分查找", - BisectSkip: "二分查找跳过", - BisectMark: "二分查找标记", - }, - Bisect: Bisect{ - Mark: "将 %s 标记为 %s", - MarkStart: "将 %s 标记为 %s (start bisect)", - SkipCurrent: "跳过 %s", - ResetTitle: "重置 'git bisect'", - ResetPrompt: "您确定要重置 'git bisect' 吗?", - ResetOption: "重置二分查找", - BisectMenuTitle: "二分查找", - CompleteTitle: "二分查找完成", - CompletePrompt: "二分查找完成!以下提交引入了此变更:\n\n%s\n\n您现在要重置 'git bisect' 吗?", - CompletePromptIndeterminate: "二分查找完成!一些提交被跳过了,所以下列提交中的任何一个都可能引入了此变更:\n\n%s\n\n您现在要重置 'git bisect' 吗?", - }, - } -} diff --git a/pkg/i18n/dutch.go b/pkg/i18n/dutch.go deleted file mode 100644 index 4db19c43128..00000000000 --- a/pkg/i18n/dutch.go +++ /dev/null @@ -1,335 +0,0 @@ -package i18n - -func dutchTranslationSet() TranslationSet { - return TranslationSet{ - NotEnoughSpace: "Niet genoeg ruimte om de panelen te renderen", - DiffTitle: "Diff", - FilesTitle: "Bestanden", - BranchesTitle: "Branches", - CommitsTitle: "Commits", - StashTitle: "Stash", - UnstagedChanges: "Unstaged wijzigingen", - StagedChanges: "Staged wijzigingen", - MainTitle: "Hoofd", - StagingTitle: "Staging", - NormalTitle: "Normaal", - CommitSummary: "Commitbericht", - CredentialsUsername: "Gebruikersnaam", - CredentialsPassword: "Wachtwoord", - CredentialsPassphrase: "Voer een wachtwoordzin in voor de SSH-sleutel", - PassUnameWrong: "Wachtwoord en/of gebruikersnaam verkeerd", - Commit: "Commit veranderingen", - AmendLastCommit: "Wijzig laatste commit", - AmendLastCommitTitle: "Wijzig laatste commit", - SureToAmend: "Weet je zeker dat je de laatste commit wilt wijzigen? U kunt het commit-bericht wijzigen vanuit het commits-paneel.", - NoCommitToAmend: "Er is geen commits om te wijzigen.", - CommitChangesWithEditor: "Commit veranderingen met de git editor", - StatusTitle: "Status", - Menu: "Menu", - Execute: "Uitvoeren", - Stage: "Toggle staged", - ToggleStagedAll: "Toggle staged alle", - Refresh: "Verversen", - Push: "Push", - Pull: "Pull", - Scroll: "Scroll", - FilterStagedFiles: "Show only staged files", - FilterUnstagedFiles: "Show only unstaged files", - ResetFilter: "Reset commit file state filter", - MergeConflictsTitle: "Merge conflicten", - Checkout: "Uitchecken", - SoftReset: "Zacht reset", - AlreadyCheckedOutBranch: "Je hebt deze branch al uitgecheckt", - SureForceCheckout: "Weet je zeker dat je het uitchecken wil forceren? Al je lokale verandering zullen worden verwijdert", - ForceCheckoutBranch: "Forceer uitchecken op deze branch", - BranchName: "Branch naam", - NewBranchNameBranchOff: "Nieuw branch naam (Branch is afgeleid van '{{.branchName}}')", - CantDeleteCheckOutBranch: "Je kan een uitgecheckte branch niet verwijderen!", - ForceDeleteBranchMessage: "Weet je zeker dat je branch '{{.selectedBranchName}}' geforceerd wil verwijderen?", - RebaseBranch: "Rebase branch", - CantRebaseOntoSelf: "Je kan niet een branch rebasen op zichzelf", - CantMergeBranchIntoItself: "Je kan niet een branch in zichzelf mergen", - ForceCheckout: "Forceer checkout", - CheckoutByName: "Uitchecken bij naam", - NewBranch: "Nieuwe branch", - NoBranchesThisRepo: "Geen branches voor deze repo", - CommitWithoutMessageErr: "Je kan geen commit maken zonder commit bericht", - CloseCancel: "Sluiten", - Confirm: "Bevestig", - Close: "Sluiten", - Quit: "Quit", - CannotSquashOrFixupFirstCommit: "There's no commit below to squash into", - Fixup: "Fixup", - SureFixupThisCommit: "Weet je zeker dat je fixup wil uitvoeren op deze commit? De commit hieronder zol worden squashed in deze", - SureSquashThisCommit: "Weet je zeker dat je deze commit wil samenvoegen met de commit hieronder?", - Squash: "Squash", - PickCommitTooltip: "Kies commit (wanneer midden in rebase)", - RevertCommit: "Commit ongedaan maken", - Reword: "Hernoem commit", - DropCommit: "Verwijder commit", - MoveDownCommit: "Verplaats commit 1 naar beneden", - MoveUpCommit: "Verplaats commit 1 naar boven", - EditCommitTooltip: "Wijzig commit", - AmendCommitTooltip: "Wijzig commit met staged veranderingen", - RewordCommitEditor: "Hernoem commit met editor", - NoCommitsThisBranch: "Geen commits in deze branch", - Error: "Foutmelding", - PickHunk: "Kies stuk", - PickAllHunks: "Kies beide stukken", - Undo: "Ongedaan maken", - UndoReflog: "Ongedaan maken (via reflog) (experimenteel)", - RedoReflog: "Redo (via reflog) (experimenteel)", - Pop: "Pop", - Drop: "Laten vallen", - Apply: "Toepassen", - NoStashEntries: "Geen stash items", - StashDrop: "Stash laten vallen", - SureDropStashEntry: "Weet je het zeker dat je deze stash entry wil laten vallen?", - StashPop: "Stash pop", - SurePopStashEntry: "Weet je zeker dat je deze stash entry wil poppen?", - StashApply: "Stash toepassen", - SureApplyStashEntry: "Weet je zeker dat je deze stash entry wil toepassen?", - NoTrackedStagedFilesStash: "Je hebt geen tracked/staged bestanden om te laten stashen", - StashChanges: "Stash veranderingen", - RenameStash: "Rename stash", - RenameStashPrompt: "Rename stash: {{.stashName}}", - NoChangedFiles: "Geen veranderde bestanden", - OpenConfig: "Open config bestand", - EditConfig: "Verander config bestand", - ForcePush: "Forceer push", - ForcePushPrompt: "Jouw branch is afgeweken van de remote branch. Druk 'esc' om te annuleren, of 'enter' om geforceert te pushen.", - ForcePushDisabled: "Your branch has diverged from the remote branch and you've disabled force pushing", - CheckForUpdate: "Check voor updates", - CheckingForUpdates: "Zoeken naar updates...", - OnLatestVersionErr: "Je hebt al de laatste versie", - MajorVersionErr: "Nieuwe versie ({{.newVersion}}) is niet backwards compatibele vergeleken met de huidige versie ({{.currentVersion}})", - CouldNotFindBinaryErr: "Kon geen binary vinden op {{.url}}", - IntroPopupMessage: "Bedankt voor het gebruik maken van lazygit! 2 dingen die je moet weten:\n\n1) Als je meer van lazygit zijn features wilt leren bekijk dan deze video:\n https://youtu.be/CPLdltN7wgE\n\n2) Als je git gebruikt, ben je een programmeur! Met jouw hulp kunnen we lazygit verbeteren, dus overweeg om een ​​donateur te worden en mee te doen aan het plezier op\n https://github.com/jesseduffield/lazygit", - GitconfigParseErr: `Gogit kon je gitconfig bestand niet goed parsen door de aanwezigheid van losstaande '\' tekens. Het weghalen van deze tekens zou het probleem moeten oplossen. `, - EditFile: `Verander bestand`, - OpenFile: `Open bestand`, - IgnoreFile: `Voeg toe aan .gitignore`, - RefreshFiles: `Refresh bestanden`, - Merge: `Merge in met huidige checked out branch`, - ConfirmQuit: `Weet je zeker dat je dit programma wil sluiten?`, - SwitchRepo: "Wissel naar een recente repo", - AllBranchesLogGraph: `Alle logs van de branch laten zien`, - UnsupportedGitService: `Niet-ondersteunde git-service`, - CreatePullRequest: `Maak een pull-request`, - CopyPullRequestURL: `Kopieer de URL van het pull-verzoek naar het klembord`, - NoBranchOnRemote: `Deze branch bestaat niet op de remote. U moet het eerst naar de remote pushen.`, - Fetch: `Fetch`, - NoAutomaticGitFetchTitle: `Geen automatische git fetch`, - NoAutomaticGitFetchBody: `Lazygit kan niet "git fetch" uitvoeren in een privé repository, gebruik f in het branches paneel om "git fetch" manueel uit te voeren`, - FileEnter: `Stage individuele hunks/lijnen`, - FileStagingRequirements: `Kan alleen individuele lijnen stagen van getrackte bestanden met onstaged veranderingen`, - StageSelectionTooltip: `Toggle lijnen staged / unstaged`, - DiscardSelection: `Verwijdert change (git reset)`, - ToggleRangeSelect: `Toggle drag selecteer`, - ToggleSelectHunk: `Toggle selecteer hunk`, - ToggleSelectionForPatch: `Voeg toe/verwijder lijn(en) in patch`, - ToggleStagingView: `Ga naar een ander paneel`, - ReturnToFilesPanel: `Ga terug naar het bestanden paneel`, - FastForward: `Fast-forward deze branch vanaf zijn upstream`, - FastForwarding: "Fast-forwarding", - FoundConflictsTitle: "Conflicten!", - ViewMergeRebaseOptions: "Bekijk merge/rebase opties", - NotMergingOrRebasing: "Je bent momenteel niet aan het rebasen of mergen", - RecentRepos: "Recente repositories", - MergeOptionsTitle: "Merge opties", - RebaseOptionsTitle: "Rebase opties", - CommitSummaryTitle: "Commit bericht", - LocalBranchesTitle: "Branches", - SearchTitle: "Zoek", - TagsTitle: "Tags", - MenuTitle: "Menu", - RemotesTitle: "Remotes", - RemoteBranchesTitle: "Remote branches", - PatchBuildingTitle: "Patch bouwen", - InformationTitle: "Informatie", - SecondaryTitle: "Secondary", - ReflogCommitsTitle: "Reflog", - GlobalTitle: "Globale sneltoetsen", - ConflictsResolved: "Alle merge conflicten zijn opgelost. Wilt je verder gaan?", - MergingTitle: "Mergen", - ConfirmMerge: "Weet je zeker dat je '{{.selectedBranch}}' in '{{.checkedOutBranch}}' wil mergen?", - FwdNoUpstream: "Kan niet de branch vooruitspoelen zonder upstream", - FwdCommitsToPush: "Je kan niet vooruitspoelen als de branch geen nieuwe commits heeft", - ErrorOccurred: "Er is iets fout gegaan! Zou je hier een issue aan willen maken", - NoRoom: "Niet genoeg ruimte", - YouAreHere: "JE BENT HIER", - RewordNotSupported: "Herformatteren van commits in interactief rebasen is nog niet ondersteund", - CherryPickCopy: "Kopieer commit (cherry-pick)", - PasteCommits: "Plak commits (cherry-pick)", - SureCherryPick: "Weet je zeker dat je de gekopieerde commits naar deze branch wil cherry-picken?", - CherryPick: "Cherry-Pick", - Donate: "Doneer", - PrevLine: "Selecteer de vorige lijn", - NextLine: "Selecteer de volgende lijn", - PrevHunk: "Selecteer de vorige hunk", - NextHunk: "Selecteer de volgende hunk", - PrevConflict: "Selecteer voorgaand conflict", - NextConflict: "Selecteer volgende conflict", - SelectPrevHunk: "Selecteer bovenste hunk", - SelectNextHunk: "Selecteer onderste hunk", - ScrollDown: "Scroll omlaag", - ScrollUp: "Scroll omhoog", - ScrollUpMainWindow: "Scroll naar beneden vanaf hoofdpaneel", - ScrollDownMainWindow: "Scroll naar beneden vanaf hoofdpaneel", - AmendCommitTitle: "Commit wijzigen", - AmendCommitPrompt: "Weet je zeker dat je deze commit wil wijzigen met de vorige staged bestanden?", - DropCommitTitle: "Verwijder commit", - DropCommitPrompt: "Weet je zeker dat je deze commit wil verwijderen?", - PullingStatus: "Pullen", - PushingStatus: "Pushen", - FetchingStatus: "Fetchen", - SquashingStatus: "Squashen", - FixingStatus: "Fixing up", - DeletingStatus: "Verwijderen", - MovingStatus: "Verplaatsen", - RebasingStatus: "Rebasen", - AmendingStatus: "Wijzigen", - CherryPickingStatus: "Cherry-picken", - UndoingStatus: "Ongedaan maken", - RedoingStatus: "Redoing", - CheckingOutStatus: "Uitchecken", - CommitFiles: "Commit bestanden", - ViewItemFiles: "Bekijk gecommite bestanden", - CommitFilesTitle: "Commit bestanden", - CheckoutCommitFileTooltip: "Bestand uitchecken", - DiscardOldFileChangeTooltip: "Uitsluit deze commit zijn veranderingen aan dit bestand", - DiscardFileChangesTitle: "Uitsluit bestand zijn veranderingen", - DiscardFileChangesPrompt: "Weet je zeker dat je de wijzigingen van deze commit in dit bestand wilt weggooien? Als dit bestand is gecreëerd in deze commit dan zal dit bestand worden verwijdert", - DisabledForGPG: "Onderdelen niet beschikbaar voor gebruikers die GPG gebruiken", - CreateRepo: "Niet in een git repository. Creëer een nieuwe git repository? (y/n): ", - AutoStashTitle: "Autostash?", - AutoStashPrompt: "Je moet je veranderingen stashen en poppen om ze over te brengen. Dit automatisch doen? (enter/esc)", - StashPrefix: "Auto-stashing veranderingen voor ", - Discard: "Bekijk 'veranderingen ongedaan maken' opties", - Cancel: "Annuleren", - DiscardAllChanges: "Negeer alle wijzigingen", - DiscardUnstagedChanges: "Negeer unstaged wijzigingen", - DiscardAllChangesToAllFiles: "Verwijder werkende tree", - DiscardAnyUnstagedChanges: "Gooi unstaged wijzigingen weg", - DiscardUntrackedFiles: "Negeer niet-gevonden bestanden", - ViewResetOptions: `Bekijk reset opties`, - HardReset: "Harde reset", - CreateFixupCommit: `Creëer fixup commit`, - SquashAboveCommitsTooltip: `Squash bovenstaande commits`, - CreateFixupCommitTooltip: `Creëer fixup commit`, - ExecuteCustomCommand: "Voer aangepaste commando uit", - CustomCommand: "Aangepaste commando:", - CommitChangesWithoutHook: "Commit veranderingen zonder pre-commit hook", - SkipHookPrefixNotConfigured: "Je hebt nog niet een commit bericht voorvoegsel ingesteld voor het overslaan van hooks. Set `git.skipHookPrefix = 'WIP'` in je config", - ResetTo: `Reset naar`, - PressEnterToReturn: "Press om terug te gaan naar lazygit", - ViewStashOptions: "Bekijk stash opties", - StashAllChanges: "Stash-bestanden", - StashAllChangesKeepIndex: "Stash staged wijzigingen", - StashOptions: "Stash opties", - NotARepository: "Fout: moet in een git repository uitgevoerd worden", - Jump: "Ga naar paneel", - DiscardPatch: "Patch weg gooien", - DiscardPatchConfirm: "Je kan alleen maar een patch bouwen van 1 commit. Huidige patch weggooien?", - CantPatchWhileRebasingError: "Je kan geen patch bouwen of patch commando uitvoeren wanneer je in een merging of rebasing state zit", - ToggleAddToPatch: "Toggle bestand inbegrepen in patch", - ViewPatchOptions: "Bekijk aangepaste patch opties", - PatchOptionsTitle: "Patch opties", - NoPatchError: "Nog geen patch gecreëerd. Om een patch te bouwen gebruik 'space' op een commit bestand of 'enter' om een spesiefieke lijnen toe te voegen", - EnterCommitFile: "Enter bestand om geselecteerde regels toe te voegen aan de patch", - ExitCustomPatchBuilder: `Sluit lijn-bij-lijn modus`, - EnterUpstream: `Enter upstream als ' '`, - ReturnToRemotesList: `Ga terug naar remotes lijst`, - NewRemote: `Voeg een nieuwe remote toe`, - NewRemoteName: `Nieuwe remote name:`, - NewRemoteUrl: `Nieuwe remote url:`, - EditRemoteName: `Enter updated remote naam voor {{.remoteName}}:`, - EditRemoteUrl: `Enter updated remote url voor {{.remoteName}}:`, - RemoveRemote: `Verwijder remote`, - RemoveRemotePrompt: "Weet je zeker dat je deze remote wilt verwijderen", - DeleteRemoteBranch: "Verwijder remote branch", - DeleteRemoteBranchMessage: "Weet je zeker dat je deze remote branch wilt verwijderen", - SetUpstream: "Stel in als upstream van uitgecheckte branch", - SetAsUpstreamTooltip: "Stel in als upstream van uitgecheckte branch", - SetUpstreamTitle: "Stel in als upstream branch", - SetUpstreamMessage: "Weet je zeker dat je de upstream branch van '{{.checkedOut}}' naar '{{.selected}}' wilt zetten", - EditRemoteTooltip: "Wijzig remote", - TagCommit: "Tag commit", - TagNameTitle: "Tag naam:", - PushTagTitle: "Remote om tag '{{.tagName}}' te pushen naar:", - PushTag: "Push tag", - NewTag: "Creëer tag", - FetchRemoteTooltip: "Fetch remote", - FetchingRemoteStatus: "Remote fetchen", - CheckoutCommit: "Checkout commit", - SureCheckoutThisCommit: "Weet je zeker dat je deze commit wil uitchecken?", - GitFlowOptions: "Laat git-flow opties zien", - NotAGitFlowBranch: "Dit lijkt geen git flow branch te zijn", - NewGitFlowBranchPrompt: "Nieuwe '{{.branchType}}' naam:", - IgnoreTracked: "Negeer tracked bestand", - IgnoreTrackedPrompt: "Weet je zeker dat je een getracked bestand wil negeren?", - ViewResetToUpstreamOptions: "Bekijk upstream reset opties", - NextScreenMode: "Volgende scherm modus (normaal/half/groot)", - PrevScreenMode: "Vorige scherm modus", - StartSearch: "Start met zoeken", - Panel: "Paneel", - Keybindings: "Sneltoetsen", - RenameBranch: "Hernoem branch", - NewBranchNamePrompt: "Noem een nieuwe branch naam", - RenameBranchWarning: "Deze branch volgt een remote. Deze actie zal alleen de locale branch name wijzigen niet de naam van de remote branch. Verder gaan?", - OpenKeybindingsMenu: "Open menu", - ResetCherryPick: "Reset cherry-picked (gekopieerde) commits selectie", - NextTab: "Volgende tabblad", - PrevTab: "Vorige tabblad", - CantUndoWhileRebasing: "Kan niet ongedaan maken terwijl je aan het rebasen bent", - CantRedoWhileRebasing: "Kan niet opnieuw doen (redo) terwijl je aan het rebasen bent", - MustStashWarning: "Een patch in de index stoppen vereist stashen en onstashen van je wijzigingen. Als er iets verkeert gaat kan je je bestanden terug vinden in de stash. Verder gaan?", - MustStashTitle: "Moet stashen", - ConfirmationTitle: "Bevestigingspaneel", - PrevPage: "Vorige pagina", - NextPage: "Volgende pagina", - GotoTop: "Scroll naar boven", - GotoBottom: "Scroll naar beneden", - FilteringBy: "Filteren bij", - ResetInParentheses: "(reset)", - OpenFilteringMenu: "Bekijk scoping opties", - FilterBy: "Filter bij", - ExitFilterMode: "Stop met filteren bij pad", - FilterPathOption: "Vulin pad om op te filteren", - EnterFileName: "Vulin path:", - FilteringMenuTitle: "Filteren", - MustExitFilterModeTitle: "Command niet beschikbaar", - MustExitFilterModePrompt: "Command niet beschikbaar in filter modus. Sluit filter modus?", - Diff: "Diff", - EnterRefToDiff: "Vul in ref naar diff", - EnterRefName: "Vul in ref:", - ExitDiffMode: "Sluit diff mode", - DiffingMenuTitle: "Diffen", - SwapDiff: "Keer diff richting om", - ViewDiffingOptions: "Open diff menu", - ShowingGitDiff: "Laat output zien voor:", - CopyCommitHashToClipboard: "Kopieer commit hash naar klembord", - CopyCommitMessageToClipboard: "Kopieer commit bericht naar klembord", - CopyBranchNameToClipboard: "Kopieer branch name naar klembord", - CopyPathToClipboard: "Kopieer de bestandsnaam naar het klembord", - CommitPrefixPatternError: "Fout in commitPrefix patroon", - NoFilesStagedTitle: "Geen bestanden gestaged", - NoFilesStagedPrompt: "Je hebt geen bestanden gestaged. Commit alle bestanden?", - BranchNotFoundTitle: "Branch niet gevonden", - BranchNotFoundPrompt: "Branch niet gevonden. Creëer een nieuwe branch genaamd", - PullRequestURLCopiedToClipboard: "Pull-aanvraag-URL gekopieerd naar klembord", - CommitMessageCopiedToClipboard: "Commit message gekopieerd naar klembord", - CopiedToClipboard: "gekopieerd naar klembord", - NavigationTitle: "Lijstpaneel navigatie", - ViewCommits: "Bekijk commits", - ToggleTreeView: "Toggle bestandsboom weergave", - CreateNewBranchFromCommit: "Creëer nieuwe branch van commit", - CopySubmoduleNameToClipboard: "Kopieer submodule naam naar klembord", - EnterSubmoduleTooltip: "Enter submodule", - NewSubmodule: "Voeg nieuwe submodule toe", - InitSubmoduleTooltip: "Initialiseer submodule", - ViewBulkSubmoduleOptions: "Bekijk bulk submodule opties", - CreatePullRequestOptions: "Bekijk opties voor pull-aanvraag", - ConfirmRevertCommit: "Weet u zeker dat u {{.selectedCommit}} ongedaan wilt maken?", - } -} diff --git a/pkg/i18n/english.go b/pkg/i18n/english.go index 09cab542dbf..0c8f0047903 100644 --- a/pkg/i18n/english.go +++ b/pkg/i18n/english.go @@ -978,8 +978,8 @@ for up-to-date information how to configure your editor. ` // exporting this so we can use it in tests -func EnglishTranslationSet() TranslationSet { - return TranslationSet{ +func EnglishTranslationSet() *TranslationSet { + return &TranslationSet{ NotEnoughSpace: "Not enough space to render panels", DiffTitle: "Diff", FilesTitle: "Files", diff --git a/pkg/i18n/i18n.go b/pkg/i18n/i18n.go index 646c5a2774b..ea5fcbb06e9 100644 --- a/pkg/i18n/i18n.go +++ b/pkg/i18n/i18n.go @@ -1,54 +1,120 @@ package i18n import ( + "embed" + "encoding/json" + "io/fs" + "path/filepath" "strings" "github.com/cloudfoundry/jibber_jabber" "github.com/go-errors/errors" "github.com/imdario/mergo" + "github.com/samber/lo" "github.com/sirupsen/logrus" ) func NewTranslationSetFromConfig(log *logrus.Entry, configLanguage string) (*TranslationSet, error) { + languageCodes, err := getSupportedLanguageCodes() + if err != nil { + return nil, err + } + if configLanguage == "auto" { language := detectLanguage(jibber_jabber.DetectIETF) - return NewTranslationSet(log, language), nil + for _, languageCode := range languageCodes { + if strings.HasPrefix(language, languageCode) { + return newTranslationSet(log, language) + } + } + + // Detecting a language that we don't have a translation for is not an + // error, we'll just use English. + return EnglishTranslationSet(), nil + } + + if configLanguage == "en" { + return EnglishTranslationSet(), nil } - for key := range GetTranslationSets() { + for _, key := range languageCodes { if key == configLanguage { - return NewTranslationSet(log, configLanguage), nil + return newTranslationSet(log, configLanguage) } } - return NewTranslationSet(log, "en"), errors.New("Language not found: " + configLanguage) + // Configuring a language that we don't have a translation for *is* an + // error, though. + return nil, errors.New("Language not found: " + configLanguage) } -func NewTranslationSet(log *logrus.Entry, language string) *TranslationSet { +func newTranslationSet(log *logrus.Entry, language string) (*TranslationSet, error) { log.Info("language: " + language) baseSet := EnglishTranslationSet() - for languageCode, translationSet := range GetTranslationSets() { - if strings.HasPrefix(language, languageCode) { - _ = mergo.Merge(&baseSet, translationSet, mergo.WithOverride) + if language != "en" { + translationSet, err := readLanguageFile(language) + if err != nil { + return nil, err + } + err = mergo.Merge(baseSet, *translationSet, mergo.WithOverride) + if err != nil { + return nil, err } } - return &baseSet + + return baseSet, nil +} + +//go:embed translations/*.json +var embedFS embed.FS + +// getSupportedLanguageCodes gets all the supported language codes. +// Note: this doesn't include "en" +func getSupportedLanguageCodes() ([]string, error) { + dirEntries, err := embedFS.ReadDir("translations") + if err != nil { + return nil, err + } + return lo.Map(dirEntries, func(entry fs.DirEntry, _ int) string { + return strings.TrimSuffix(entry.Name(), ".json") + }), nil +} + +func readLanguageFile(languageCode string) (*TranslationSet, error) { + jsonData, err := embedFS.ReadFile(filepath.Join("translations", languageCode+".json")) + if err != nil { + return nil, err + } + var translationSet TranslationSet + err = json.Unmarshal(jsonData, &translationSet) + if err != nil { + return nil, err + } + return &translationSet, nil } // GetTranslationSets gets all the translation sets, keyed by language code -func GetTranslationSets() map[string]TranslationSet { - return map[string]TranslationSet{ - "pl": polishTranslationSet(), - "nl": dutchTranslationSet(), - "en": EnglishTranslationSet(), - "zh-CN": chineseTranslationSet(), // Simplified Chinese - "zh-TW": traditionalChineseTranslationSet(), - "ja": japaneseTranslationSet(), - "ko": koreanTranslationSet(), - "ru": RussianTranslationSet(), +// This includes "en". +func GetTranslationSets() (map[string]*TranslationSet, error) { + languageCodes, err := getSupportedLanguageCodes() + if err != nil { + return nil, err } + + result := make(map[string]*TranslationSet) + result["en"] = EnglishTranslationSet() + + for _, languageCode := range languageCodes { + translationSet, err := readLanguageFile(languageCode) + if err != nil { + return nil, err + } + result[languageCode] = translationSet + } + + return result, nil } // detectLanguage extracts user language from environment diff --git a/pkg/i18n/japanese.go b/pkg/i18n/japanese.go deleted file mode 100644 index 869203addeb..00000000000 --- a/pkg/i18n/japanese.go +++ /dev/null @@ -1,580 +0,0 @@ -package i18n - -const japaneseIntroPopupMessage = ` -Thanks for using lazygit! Seriously you rock. Three things to share with you: - - 1) If you want to learn about lazygit's features, watch this vid: - https://youtu.be/CPLdltN7wgE - - 2) Be sure to read the latest release notes at: - https://github.com/jesseduffield/lazygit/releases - - 3) If you're using git, that makes you a programmer! With your help we can make - lazygit better, so consider becoming a contributor and joining the fun at - https://github.com/jesseduffield/lazygit - You can also sponsor me and tell me what to work on by clicking the donate - button at the bottom right. - Or even just star the repo to share the love! -` - -// exporting this so we can use it in tests -func japaneseTranslationSet() TranslationSet { - return TranslationSet{ - NotEnoughSpace: "パネルの描画に十分な空間がありません", - DiffTitle: "差分", - FilesTitle: "ファイル", - BranchesTitle: "ブランチ", - CommitsTitle: "コミット", - StashTitle: "Stash", - UnstagedChanges: `ステージされていない変更`, - StagedChanges: `ステージされた変更`, - MainTitle: "メイン", - MergeConfirmTitle: "マージ", - StagingTitle: "メインパネル (Staging)", - MergingTitle: "メインパネル (Merging)", - NormalTitle: "メインパネル (Normal)", - LogTitle: "ログ", - CommitSummary: "コミットメッセージ", - CredentialsUsername: "ユーザ名", - CredentialsPassword: "パスワード", - CredentialsPassphrase: "SSH鍵のパスフレーズを入力", - PassUnameWrong: "パスワード, パスフレーズまたはユーザ名が間違っています。", - Commit: "変更をコミット", - AmendLastCommit: "最新のコミットにamend", - AmendLastCommitTitle: "最新のコミットにamend", - SureToAmend: "最新のコミットに変更をamendします。よろしいですか? コミットメッセージはコミットパネルから変更できます。", - NoCommitToAmend: "Amend可能なコミットが存在しません。", - CommitChangesWithEditor: "gitエディタを使用して変更をコミット", - StatusTitle: "ステータス", - Menu: "メニュー", - Execute: "実行", - Stage: "ステージ/アンステージ", - ToggleStagedAll: "すべての変更をステージ/アンステージ", - ToggleTreeView: "ファイルツリーの表示を切り替え", - OpenMergeTool: "Git mergetoolを開く", - Refresh: "リフレッシュ", - Push: "Push", - Pull: "Pull", - Scroll: "スクロール", - MergeConflictsTitle: "マージコンフリクト", - Checkout: "チェックアウト", - FileFilter: "ファイルをフィルタ (ステージ/アンステージ)", - FilterStagedFiles: "ステージされたファイルのみを表示", - FilterUnstagedFiles: "ステージされていないファイルのみを表示", - ResetFilter: "フィルタをリセット", - // NoChangedFiles: "No changed files", - SoftReset: "Softリセット", - AlreadyCheckedOutBranch: "ブランチはすでにチェックアウトされています。", - // SureForceCheckout: "Are you sure you want force checkout? You will lose all local changes", - // ForceCheckoutBranch: "Force Checkout Branch", - BranchName: "ブランチ名", - NewBranchNameBranchOff: "新規ブランチ名 ('{{.branchName}}' に作成)", - CantDeleteCheckOutBranch: "チェックアウト中のブランチは削除できません!", - // LcRebaseBranch: "Rebase checked-out branch onto this branch", - CantRebaseOntoSelf: "ブランチを自分自身にリベースすることはできません。", - CantMergeBranchIntoItself: "ブランチを自分自身にマージすることはできません。", - // LcForceCheckout: "Force checkout", - // LcCheckoutByName: "Checkout by name", - NewBranch: "新しいブランチを作成", - NoBranchesThisRepo: "リポジトリにブランチが存在しません", - CommitWithoutMessageErr: "コミットメッセージを入力してください", - CloseCancel: "閉じる/キャンセル", - Confirm: "確認", - Close: "閉じる", - Quit: "終了", - // LcFixupCommit: "Fixup commit", - // NoCommitsThisBranch: "No commits for this branch", - // CannotSquashOrFixupFirstCommit: "There's no commit below to squash into", - // Fixup: "Fixup", - // SureFixupThisCommit: "Are you sure you want to 'fixup' this commit? It will be merged into the commit below", - // SureSquashThisCommit: "Are you sure you want to squash this commit into the commit below?", - // Squash: "Squash", - // LcPickCommit: "Pick commit (when mid-rebase)", - RevertCommit: "コミットをrevert", - Reword: "コミットメッセージを変更", - DropCommit: "コミットを削除", - MoveDownCommit: "コミットを1つ下に移動", - MoveUpCommit: "コミットを1つ上に移動", - EditCommitTooltip: "コミットを編集", - AmendCommitTooltip: "ステージされた変更でamendコミット", - RewordCommitEditor: "エディタでコミットメッセージを編集", - Error: "エラー", - // LcPickHunk: "Pick hunk", - // LcPickAllHunks: "Pick all hunks", - Undo: "アンドゥ", - UndoReflog: "アンドゥ (via reflog) (experimental)", - RedoReflog: "リドゥ (via reflog) (experimental)", - Pop: "Pop", - Drop: "Drop", - Apply: "適用", - NoStashEntries: "Stashが存在しません", - StashDrop: "Stashを削除", - SureDropStashEntry: "Stashを削除します。よろしいですか?", - StashPop: "Stashをpop", - SurePopStashEntry: "Stashをpopします。よろしいですか?", - StashApply: "Stashを適用", - SureApplyStashEntry: "Stashを適用します。よろしいですか?", - // NoTrackedStagedFilesStash: "You have no tracked/staged files to stash", - StashChanges: "変更をStash", - RenameStash: "Stashを変更", - RenameStashPrompt: "Stash名を変更: {{.stashName}}", - OpenConfig: "設定ファイルを開く", - EditConfig: "設定ファイルを編集", - ForcePush: "Force push", - ForcePushPrompt: "ブランチがリモートブランチから分岐しています。'esc'でキャンセル, または'enter'でforce pushします。", - ForcePushDisabled: "ブランチがリモートブランチから分岐しています。force pushは無効化されています。", - // UpdatesRejectedAndForcePushDisabled: "Updates were rejected and you have disabled force pushing", - CheckForUpdate: "更新を確認", - CheckingForUpdates: "更新を確認中...", - UpdateAvailableTitle: "最新リリース!", - UpdateAvailable: "バージョン {{.newVersion}} をインストールしますか?", - UpdateInProgressWaitingStatus: "更新中", - UpdateCompletedTitle: "更新完了!", - UpdateCompleted: "更新のインストールに成功しました。lazygitを再起動してください。", - FailedToRetrieveLatestVersionErr: "バージョン情報の取得に失敗しました", - OnLatestVersionErr: "使用中のバージョンは最新です", - MajorVersionErr: "新バージョン ({{.newVersion}}) は現在のバージョン ({{.currentVersion}}) と後方互換性がありません。", - CouldNotFindBinaryErr: "{{.url}} にバイナリが存在しませんでした。", - UpdateFailedErr: "更新失敗: {{.errMessage}}", - ConfirmQuitDuringUpdateTitle: "現在更新中", - ConfirmQuitDuringUpdate: "現在更新を実行中です。終了しますか?", - MergeToolTitle: "マージツール", - MergeToolPrompt: "`git mergetool`を開きます。よろしいですか?", - IntroPopupMessage: japaneseIntroPopupMessage, - // GitconfigParseErr: `Gogit failed to parse your gitconfig file due to the presence of unquoted '\' characters. Removing these should fix the issue.`, - EditFile: `ファイルを編集`, - OpenFile: `ファイルを開く`, - IgnoreFile: `.gitignoreに追加`, - RefreshFiles: `ファイルをリフレッシュ`, - Merge: `現在のブランチにマージ`, - ConfirmQuit: `終了します。よろしいですか?`, - SwitchRepo: `最近使用したリポジトリに切り替え`, - AllBranchesLogGraph: `すべてのブランチログを表示`, - UnsupportedGitService: `サポートされていないGitサービスです。`, - CreatePullRequest: `Pull Requestを作成`, - CopyPullRequestURL: `Pull RequestのURLをクリップボードにコピー`, - NoBranchOnRemote: `ブランチがリモートに存在しません。リモートにpushしてください。`, - Fetch: `Fetch`, - // NoAutomaticGitFetchTitle: `No automatic git fetch`, - // NoAutomaticGitFetchBody: `Lazygit can't use "git fetch" in a private repo; use 'f' in the files panel to run "git fetch" manually`, - // FileEnter: `stage individual hunks/lines for file, or collapse/expand for directory`, - // FileStagingRequirements: `Can only stage individual lines for tracked files`, - StageSelectionTooltip: `選択行をステージ/アンステージ`, - DiscardSelection: `変更を削除 (git reset)`, - ToggleRangeSelect: `範囲選択を切り替え`, - ToggleSelectHunk: `Hunk選択を切り替え`, - ToggleSelectionForPatch: `行をパッチに追加/削除`, - ToggleStagingView: `パネルを切り替え`, - ReturnToFilesPanel: `ファイル一覧に戻る`, - // FastForward: `fast-forward this branch from its upstream`, - // Fetching: "Fetching and fast-forwarding {{.from}} -> {{.to}} ...", - // FoundConflicts: "Conflicts! To abort press 'esc', otherwise press 'enter'", - // FoundConflictsTitle: "Auto-merge failed", - // PickHunk: "Pick hunk", - // PickAllHunks: "Pick all hunks", - // ViewMergeRebaseOptions: "View merge/rebase options", - // NotMergingOrRebasing: "You are currently neither rebasing nor merging", - RecentRepos: "最近使用したリポジトリ", - // MergeOptionsTitle: "Merge Options", - // RebaseOptionsTitle: "Rebase Options", - CommitSummaryTitle: "コミットメッセージ", - LocalBranchesTitle: "ブランチ", - SearchTitle: "検索", - TagsTitle: "タグ", - MenuTitle: "メニュー", - RemotesTitle: "リモート", - RemoteBranchesTitle: "リモートブランチ", - PatchBuildingTitle: "メインパネル (Patch Building)", - InformationTitle: "Information", - SecondaryTitle: "Secondary", - ReflogCommitsTitle: "参照ログ", - GlobalTitle: "グローバルキーバインド", - // ConflictsResolved: "All merge conflicts resolved. Continue?", - // RebasingTitle: "Rebasing", - // ConfirmRebase: "Are you sure you want to rebase '{{.checkedOutBranch}}' onto '{{.selectedBranch}}'?", - // ConfirmMerge: "Are you sure you want to merge '{{.selectedBranch}}' into '{{.checkedOutBranch}}'?", - // FwdNoUpstream: "Cannot fast-forward a branch with no upstream", - // FwdNoLocalUpstream: "Cannot fast-forward a branch whose remote is not registered locally", - // FwdCommitsToPush: "Cannot fast-forward a branch with commits to push", - ErrorOccurred: "エラーが発生しました! issueを作成してください: ", - // NoRoom: "Not enough room", - YouAreHere: "現在位置", - // LcRewordNotSupported: "Rewording commits while interactively rebasing is not currently supported", - CherryPickCopy: "コミットをコピー (cherry-pick)", - PasteCommits: "コミットを貼り付け (cherry-pick)", - // SureCherryPick: "Are you sure you want to cherry-pick the copied commits onto this branch?", - CherryPick: "Cherry-Pick", - Donate: "支援", - AskQuestion: "質問", - PrevLine: "前の行を選択", - NextLine: "次の行を選択", - PrevHunk: "前のhunkを選択", - NextHunk: "次のhunkを選択", - PrevConflict: "前のコンフリクトを選択", - NextConflict: "次のコンフリクトを選択", - SelectPrevHunk: "前のhunkを選択", - SelectNextHunk: "次のhunkを選択", - ScrollDown: "下にスクロール", - ScrollUp: "上にスクロール", - ScrollUpMainWindow: "メインパネルを上にスクロール", - ScrollDownMainWindow: "メインパネルを下にスクロール", - AmendCommitTitle: "Amendコミット", - AmendCommitPrompt: "ステージされたファイルで現在のコミットをamendします。よろしいですか?", - DropCommitTitle: "コミットを削除", - DropCommitPrompt: "選択されたコミットを削除します。よろしいですか?", - PullingStatus: "Pull中", - PushingStatus: "Push中", - FetchingStatus: "Fetch中", - // SquashingStatus: "Squashing", - // FixingStatus: "Fixing up", - // DeletingStatus: "Deleting", - // MovingStatus: "Moving", - // RebasingStatus: "Rebasing", - // AmendingStatus: "Amending", - // CherryPickingStatus: "Cherry-picking", - // UndoingStatus: "Undoing", - // RedoingStatus: "Redoing", - // CheckingOutStatus: "Checking out", - // CommittingStatus: "Committing", - CommitFiles: "Commit files", - SubCommitsDynamicTitle: "コミット (%s)", - CommitFilesDynamicTitle: "Diff files (%s)", - RemoteBranchesDynamicTitle: "リモートブランチ (%s)", - // LcViewItemFiles: "View selected item's files", - CommitFilesTitle: "コミットファイル", - // LcCheckoutCommitFile: "Checkout file", - // LcDiscardOldFileChange: "Discard this commit's changes to this file", - DiscardFileChangesTitle: "ファイルの変更を破棄", - // DiscardFileChangesPrompt: "Are you sure you want to discard this commit's changes to this file? If this file was created in this commit, it will be deleted", - // DisabledForGPG: "Feature not available for users using GPG", - CreateRepo: "Gitリポジトリではありません。リポジトリを作成しますか? (y/n): ", - // AutoStashTitle: "Autostash?", - // AutoStashPrompt: "You must stash and pop your changes to bring them across. Do this automatically? (enter/esc)", - // StashPrefix: "Auto-stashing changes for ", - // LcViewDiscardOptions: "View 'discard changes' options", - Cancel: "キャンセル", - DiscardAllChanges: "すべての変更を破棄", - // LcDiscardUnstagedChanges: "Discard unstaged changes", - // LcDiscardAllChangesToAllFiles: "Nuke working tree", - // LcDiscardAnyUnstagedChanges: "Discard unstaged changes", - // LcDiscardUntrackedFiles: "Discard untracked files", - HardReset: "hardリセット", - // LcViewResetOptions: `view reset options`, - CreateFixupCommitTooltip: `このコミットに対するfixupコミットを作成`, - // LcSquashAboveCommits: `squash all 'fixup!' commits above selected commit (autosquash)`, - // SquashAboveCommits: `Squash all 'fixup!' commits above selected commit (autosquash)`, - CreateFixupCommit: `Fixupコミットを作成`, - ExecuteCustomCommand: "カスタムコマンドを実行", - CustomCommand: "カスタムコマンド:", - CommitChangesWithoutHook: "pre-commitフックを実行せずに変更をコミット", - // SkipHookPrefixNotConfigured: "You have not configured a commit message prefix for skipping hooks. Set `git.skipHookPrefix = 'WIP'` in your config", - // LcResetTo: `reset to`, - PressEnterToReturn: "Enterを入力してください", - // LcViewStashOptions: "View stash options", - StashAllChanges: "変更をstash", - // LcStashStagedChanges: "Stash staged changes", - // LcStashOptions: "Stash options", - // NotARepository: "Error: must be run inside a git repository", - Jump: "パネルに移動", - ScrollLeftRight: "左右にスクロール", - ScrollLeft: "左スクロール", - ScrollRight: "右スクロール", - DiscardPatch: "パッチを破棄", - // DiscardPatchConfirm: "You can only build a patch from one commit/stash-entry at a time. Discard current patch?", - // CantPatchWhileRebasingError: "You cannot build a patch or run patch commands while in a merging or rebasing state", - // LcToggleAddToPatch: "Toggle file included in patch", - // LcToggleAllInPatch: "Toggle all files included in patch", - // LcUpdatingPatch: "Updating patch", - // ViewPatchOptions: "View custom patch options", - // PatchOptionsTitle: "Patch Options", - // NoPatchError: "No patch created yet. To start building a patch, use 'space' on a commit file or enter to add specific lines", - // LcEnterFile: "Enter file to add selected lines to the patch (or toggle directory collapsed)", - // ExitCustomPatchBuilder: ``, - EnterUpstream: `' ' の形式でupstreamを入力`, - InvalidUpstream: "Upstreamの形式が正しくありません。' ' の形式で入力してください。", - ReturnToRemotesList: `リモート一覧に戻る`, - NewRemote: `リモートを新規追加`, - NewRemoteName: `新規リモート名:`, - NewRemoteUrl: `新規リモートURL:`, - EditRemoteName: `{{.remoteName}} の新しいリモート名を入力:`, - EditRemoteUrl: `{{.remoteName}} の新しいリモートURLを入力:`, - RemoveRemote: `リモートを削除`, - RemoveRemotePrompt: "リモートを削除します。よろしいですか?", - DeleteRemoteBranch: "リモートブランチを削除", - DeleteRemoteBranchMessage: "リモートブランチを削除します。よろしいですか", - // LcSetUpstream: "Set as upstream of checked-out branch", - // SetUpstreamTitle: "Set upstream branch", - // SetUpstreamMessage: "Are you sure you want to set the upstream branch of '{{.checkedOut}}' to '{{.selected}}'", - EditRemoteTooltip: "リモートを編集", - TagCommit: "タグを作成", - TagMenuTitle: "タグを作成", - TagNameTitle: "タグ名", - TagMessageTitle: "タグメッセージ", - AnnotatedTag: "注釈付きタグ", - LightweightTag: "軽量タグ", - PushTagTitle: "リモートにタグ '{{.tagName}}' をpush", - PushTag: "タグをpush", - NewTag: "タグを作成", - FetchRemoteTooltip: "リモートをfetch", - FetchingRemoteStatus: "リモートをfetch", - CheckoutCommit: "コミットをチェックアウト", - SureCheckoutThisCommit: "選択されたコミットをチェックアウトします。よろしいですか?", - // LcGitFlowOptions: "Show git-flow options", - // NotAGitFlowBranch: "This does not seem to be a git flow branch", - // NewGitFlowBranchPrompt: "New {{.branchType}} name:", - // IgnoreTracked: "Ignore tracked file", - // IgnoreTrackedPrompt: "Are you sure you want to ignore a tracked file?", - // LcViewResetToUpstreamOptions: "View upstream reset options", - NextScreenMode: "次のスクリーンモード (normal/half/fullscreen)", - PrevScreenMode: "前のスクリーンモード", - StartSearch: "検索を開始", - Panel: "パネル", - Keybindings: "キーバインド", - RenameBranch: "ブランチ名を変更", - NewBranchNamePrompt: "新しいブランチ名を入力", - // RenameBranchWarning: "This branch is tracking a remote. This action will only rename the local branch name, not the name of the remote branch. Continue?", - OpenKeybindingsMenu: "メニューを開く", - // LcResetCherryPick: "Reset cherry-picked (copied) commits selection", - NextTab: "次のタブ", - PrevTab: "前のタブ", - CantUndoWhileRebasing: "リベース中はアンドゥできません。", - CantRedoWhileRebasing: "リベース中はリドゥできません。", - // MustStashWarning: "Pulling a patch out into the index requires stashing and unstashing your changes. If something goes wrong, you'll be able to access your files from the stash. Continue?", - // MustStashTitle: "Must stash", - ConfirmationTitle: "確認パネル", - PrevPage: "前のページ", - NextPage: "次のページ", - GotoTop: "最上部までスクロール", - GotoBottom: "最下部までスクロール", - // LcFilteringBy: "Filtering by", - // ResetInParentheses: "(reset)", - // LcOpenFilteringMenu: "View filter-by-path options", - // LcFilterBy: "Filter by", - // LcExitFilterMode: "Stop filtering by path", - // LcFilterPathOption: "Enter path to filter by", - // EnterFileName: "Enter path:", - // FilteringMenuTitle: "Filtering", - // MustExitFilterModeTitle: "Command not available", - // MustExitFilterModePrompt: "Command not available in filtered mode. Exit filtered mode?", - Diff: "差分", - // LcEnterRefToDiff: "Enter ref to diff", - EnterRefName: "参照を入力:", - ExitDiffMode: "差分モードを終了", - DiffingMenuTitle: "差分", - // LcSwapDiff: "Reverse diff direction", - ViewDiffingOptions: "差分メニューを開く", - // // the actual view is the extras view which I intend to give more tabs in future but for now we'll only mention the command log part - OpenCommandLogMenu: "コマンドログメニューを開く", - // LcShowingGitDiff: "Showing output for:", - CommitDiff: "コミットの差分", - CopyCommitHashToClipboard: "コミットのhashをクリップボードにコピー", - CommitHash: "コミットのhash", - CommitURL: "コミットのURL", - CopyCommitMessageToClipboard: "コミットメッセージをクリップボードにコピー", - CommitMessage: "コミットメッセージ", - CommitAuthor: "コミットの作成者名", - CopyCommitAttributeToClipboard: "コミットの情報をコピー", - CopyBranchNameToClipboard: "ブランチ名をクリップボードにコピー", - CopyPathToClipboard: "ファイル名をクリップボードにコピー", - CopySelectedTextToClipboard: "選択されたテキストをクリップボードにコピー", - // LcCommitPrefixPatternError: "Error in commitPrefix pattern", - NoFilesStagedTitle: "ファイルがステージされていません", - NoFilesStagedPrompt: "ファイルがステージされていません。すべての変更をコミットしますか?", - BranchNotFoundTitle: "ブランチが見つかりませんでした。", - BranchNotFoundPrompt: "ブランチが見つかりませんでした。新しくブランチを作成します ", - DiscardChangeTitle: "選択行をアンステージ", - DiscardChangePrompt: "選択された行を削除 (git reset) します。よろしいですか? この操作は取り消せません。\nこの警告を無効化するには設定ファイルの 'gui.skipDiscardChangeWarning' を true に設定してください。", - CreateNewBranchFromCommit: "コミットにブランチを作成", - BuildingPatch: "パッチを構築", - ViewCommits: "コミットを閲覧", - MinGitVersionError: "Lazygitの実行にはGit 2.20以降のバージョンが必要です。Gitを更新してください。もしくは、lazygitの後方互換性を改善するために https://github.com/jesseduffield/lazygit/issues にissueを作成してください。", - RunningCustomCommandStatus: "カスタムコマンドを実行", - // LcSubmoduleStashAndReset: "Stash uncommitted submodule changes and update", - // LcAndResetSubmodules: "And reset submodules", - EnterSubmoduleTooltip: "サブモジュールを開く", - CopySubmoduleNameToClipboard: "サブモジュール名をクリップボードにコピー", - RemoveSubmodule: "サブモジュールを削除", - RemoveSubmodulePrompt: "サブモジュール '%s' とそのディレクトリを削除します。よろしいですか? この操作は取り消せません。", - ResettingSubmoduleStatus: "サブモジュールをリセット", - NewSubmoduleName: "新規サブモジュール名:", - NewSubmoduleUrl: "新規サブモジュールのURL:", - NewSubmodulePath: "新規サブモジュールのパス:", - NewSubmodule: "サブモジュールを新規追加", - AddingSubmoduleStatus: "サブモジュールを新規追加", - UpdateSubmoduleUrl: "サブモジュール '%s' のURLを更新", - UpdatingSubmoduleUrlStatus: "URLを更新", - EditSubmoduleUrl: "サブモジュールのURLを更新", - InitializingSubmoduleStatus: "サブモジュールを初期化", - InitSubmoduleTooltip: "サブモジュールを初期化", - SubmoduleUpdateTooltip: "サブモジュールを更新", - UpdatingSubmoduleStatus: "サブモジュールを更新", - BulkInitSubmodules: "サブモジュールを一括初期化", - BulkUpdateSubmodules: "サブモジュールを一括更新", - // LcBulkDeinitSubmodules: "Bulk deinit submodules", - // LcViewBulkSubmoduleOptions: "View bulk submodule options", - // LcBulkSubmoduleOptions: "Bulk submodule options", - // LcRunningCommand: "Running command", - // SubCommitsTitle: "Sub-commits", - SubmodulesTitle: "サブモジュール", - NavigationTitle: "一覧パネルの操作", - // SuggestionsCheatsheetTitle: "Suggestions", - // SuggestionsTitle: "Suggestions (press %s to focus)", - ExtrasTitle: "コマンドログ", - // PushingTagStatus: "Pushing tag", - PullRequestURLCopiedToClipboard: "Pull requestのURLがクリップボードにコピーされました", - CommitDiffCopiedToClipboard: "コミットの差分がクリップボードにコピーされました", - CommitURLCopiedToClipboard: "コミットのURLがクリップボードにコピーされました", - CommitMessageCopiedToClipboard: "コミットメッセージがクリップボードにコピーされました", - CommitAuthorCopiedToClipboard: "コミットの作成者名がクリップボードにコピーされました", - CopiedToClipboard: "クリップボードにコピーされました", - ErrCannotEditDirectory: "ディレクトリは編集できません。", - ErrStageDirWithInlineMergeConflicts: "マージコンフリクトの発生したファイルを含むディレクトリはステージ/アンステージできません。マージコンフリクトを解決してください。", - ErrRepositoryMovedOrDeleted: "リポジトリが見つかりません。すでに削除されたか、移動された可能性があります ¯\\_(ツ)_/¯", - CommandLog: "コマンドログ", - ToggleShowCommandLog: "コマンドログの表示/非表示を切り替え", - FocusCommandLog: "コマンドログにフォーカス", - CommandLogHeader: "コマンドログの表示/非表示は '%s' で切り替えられます。\n", - RandomTip: "ランダムTips", - // SelectParentCommitForMerge: "Select parent commit for merge", - ToggleWhitespaceInDiffView: "空白文字の差分の表示有無を切り替え", - // IncreaseContextInDiffView: "Increase the size of the context shown around changes in the diff view", - // DecreaseContextInDiffView: "Decrease the size of the context shown around changes in the diff view", - // CreatePullRequestOptions: "Create pull request options", - // LcCreatePullRequestOptions: "Create pull request options", - DefaultBranch: "デフォルトブランチ", - SelectBranch: "ブランチを選択", - SelectConfigFile: "設定ファイルを選択", - NoConfigFileFoundErr: "設定ファイルが見つかりませんでした。", - // LcLoadingFileSuggestions: "Loading file suggestions", - // LcLoadingCommits: "Loading commits", - // MustSpecifyOriginError: "Must specify a remote if specifying a branch", - // GitOutput: "Git output:", - // GitCommandFailed: "Git command failed. Check command log for details (open with %s)", - AbortTitle: "%sを中止", - AbortPrompt: "実施中の%sを中止します。よろしいですか?", - OpenLogMenu: "ログメニューを開く", - LogMenuTitle: "コミットログオプション", - // ToggleShowGitGraphAll: "Toggle show whole git graph (pass the `--all` flag to `git log`)", - ShowGitGraph: "コミットグラフの表示", - SortOrder: "並び替え", - SortAlphabetical: "アルファベット順", - SortByDate: "日付順", - SortCommits: "コミットの表示順", - // CantChangeContextSizeError: "Cannot change context while in patch building mode because we were too lazy to support it when releasing the feature. If you really want it, please let us know!", - OpenCommitInBrowser: "ブラウザでコミットを開く", - // LcViewBisectOptions: "View bisect options", - // ConfirmRevertCommit: "Are you sure you want to revert {{.selectedCommit}}?", - RewordInEditorTitle: "コミットメッセージをエディタで編集", - // RewordInEditorPrompt: "Are you sure you want to reword this commit in your editor?", - // HardResetAutostashPrompt: "Are you sure you want to hard reset to '%s'? An auto-stash will be performed if necessary.", - // CheckoutPrompt: "Are you sure you want to checkout '%s'?", - // UpstreamGone: "(upstream gone)", - Actions: Actions{ - // TODO: combine this with the original keybinding descriptions (those are all in lowercase atm) - CheckoutCommit: "コミットをチェックアウト", - CheckoutTag: "タグをチェックアウト", - CheckoutBranch: "ブランチをチェックアウト", - ForceCheckoutBranch: "ブランチを強制的にチェックアウト", - DeleteBranch: "ブランチを削除", - Merge: "マージ", - // RebaseBranch: "Rebase branch", - RenameBranch: "ブランチ名を変更", - CreateBranch: "ブランチを作成", - // CherryPick: "(Cherry-pick) Paste commits", - CheckoutFile: "ファイルをチェックアウトs", - // DiscardOldFileChange: "Discard old file change", - // SquashCommitDown: "Squash commit down", - FixupCommit: "Fixupコミット", - RewordCommit: "コミットメッセージを変更", - DropCommit: "コミットを削除", - EditCommit: "コミットを編集", - AmendCommit: "Amendコミット", - RevertCommit: "コミットをrevert", - CreateFixupCommit: "fixupコミットを作成", - // SquashAllAboveFixupCommits: "Squash all above fixup commits", - CreateLightweightTag: "軽量タグを作成", - CreateAnnotatedTag: "注釈付きタグを作成", - CopyCommitMessageToClipboard: "コミットメッセージをクリップボードにコピー", - CopyCommitDiffToClipboard: "コミットの差分をクリップボードにコピー", - CopyCommitHashToClipboard: "コミットhashをクリップボードにコピー", - CopyCommitURLToClipboard: "コミットのURLをクリップボードにコピー", - CopyCommitAuthorToClipboard: "コミットの作成者名をクリップボードにコピー", - CopyCommitAttributeToClipboard: "クリップボードにコピー", - MoveCommitUp: "コミットを上に移動", - MoveCommitDown: "コミットを下に移動", - CustomCommand: "カスタムコマンド", - DiscardAllChangesInDirectory: "ディレクトリ内のすべての変更を破棄", - DiscardUnstagedChangesInDirectory: "ディレクトリ内のすべてのステージされていない変更を破棄", - DiscardAllChangesInFile: "ファイル内のすべての変更を破棄", - DiscardAllUnstagedChangesInFile: "ファイル内のすべてのステージされていない変更を破棄", - StageFile: "ファイルをステージ", - StageResolvedFiles: "マージコンフリクトが解決されたすべてのファイルをステージ", - UnstageFile: "ファイルをアンステージ", - UnstageAllFiles: "すべてのファイルをアンステージ", - StageAllFiles: "すべてのファイルをステージ", - IgnoreExcludeFile: "ファイルをignore", - Commit: "コミット", - EditFile: "ファイルを編集", - Push: "Push", - Pull: "Pull", - OpenFile: "ファイルを開く", - StashAllChanges: "すべての変更をStash", - StashStagedChanges: "ステージされた変更をStash", - GitFlowFinish: "Git flow finish", - GitFlowStart: "Git Flow start", - CopyToClipboard: "クリップボードにコピー", - CopySelectedTextToClipboard: "選択されたテキストをクリップボードにコピー", - RemovePatchFromCommit: "パッチをコミットから削除", - MovePatchToSelectedCommit: "パッチを選択したコミットに移動", - MovePatchIntoIndex: "パッチをindexに移動", - MovePatchIntoNewCommit: "パッチを次のコミットに移動", - DeleteRemoteBranch: "リモートブランチを削除", - SetBranchUpstream: "Upstreamブランチを設定", - AddRemote: "リモートを追加", - RemoveRemote: "リモートを削除", - UpdateRemote: "リモートを更新", - ApplyPatch: "パッチを適用", - Stash: "Stash", - RenameStash: "Stash名を変更", - RemoveSubmodule: "サブモジュールを削除", - ResetSubmodule: "サブモジュールをリセット", - AddSubmodule: "サブモジュールを追加", - UpdateSubmoduleUrl: "サブモジュールのURLを更新", - InitialiseSubmodule: "サブモジュールを初期化", - BulkInitialiseSubmodules: "サブモジュールを一括初期化", - BulkUpdateSubmodules: "サブモジュールを一括更新", - // BulkDeinitialiseSubmodules: "Bulk deinitialise submodules", - UpdateSubmodule: "サブモジュールを更新", - PushTag: "タグをpush", - // NukeWorkingTree: "Nuke working tree", - // DiscardUnstagedFileChanges: "Discard unstaged file changes", - // RemoveUntrackedFiles: "Remove untracked files", - SoftReset: "Softリセット", - MixedReset: "Mixedリセット", - HardReset: "Hardリセット", - FastForwardBranch: "ブランチをfast forward", - Undo: "アンドゥ", - Redo: "リドゥ", - CopyPullRequestURL: "Pull requestのURLをコピー", - OpenMergeTool: "マージツールを開く", - OpenCommitInBrowser: "コミットをブラウザで開く", - OpenPullRequest: "Pull requestをブラウザで開く", - StartBisect: "Bisectを開始", - ResetBisect: "Bisectをリセット", - BisectSkip: "Bisectをスキップ", - BisectMark: "Bisectをマーク", - }, - Bisect: Bisect{ - // Mark: "Mark %s as %s", - // MarkStart: "Mark %s as %s (start bisect)", - SkipCurrent: "%s をスキップする", - ResetTitle: "'git bisect' をリセット", - ResetPrompt: "'git bisect' をリセットします。よろしいですか?", - ResetOption: "Bisectをリセット", - BisectMenuTitle: "bisect", - CompleteTitle: "Bisect完了", - // CompletePrompt: "Bisect complete! The following commit introduced the change:\n\n%s\n\nDo you want to reset 'git bisect' now?", - // CompletePromptIndeterminate: "Bisect complete! Some commits were skipped, so any of the following commits may have introduced the change:\n\n%s\n\nDo you want to reset 'git bisect' now?", - }, - } -} diff --git a/pkg/i18n/korean.go b/pkg/i18n/korean.go deleted file mode 100644 index 83a583faf62..00000000000 --- a/pkg/i18n/korean.go +++ /dev/null @@ -1,574 +0,0 @@ -package i18n - -const koreanIntroPopupMessage = ` -lazygit!를 이용해주셔서 감사합니다. Seriously you rock. Three things to share with you: - - 1) lazygit의 기능에 대해 알아보려면 다음 비디오를 참조하세요. - https://youtu.be/CPLdltN7wgE - - 2) 다음 사이트에서 최신 릴리스 노트를 읽어보세요.: - https://github.com/jesseduffield/lazygit/releases - - 3) 만약 당신이 Git을 사용한다면, 그것은 당신을 프로그래머로 만들 것입니다! - 당신의 도움으로 우리는 lazygit을 더 좋게 만들 수 있습니다, 그러니 기여자가 되는 것을 고려해보세요. 그리고 재미에 참여하세요: - https://github.com/jesseduffield/lazygit - 또한 오른쪽 하단의 기부 버튼을 클릭하여 저를 후원하고 작업할 내용을 알려주실 수 있습니다. - 또는 저장소에 스타를 눌러 사랑을 공유할 수도 있습니다! -` - -// exporting this so we can use it in tests -func koreanTranslationSet() TranslationSet { - return TranslationSet{ - NotEnoughSpace: "패널을 렌더링 할 공간이 부족합니다.", - DiffTitle: "Diff", - FilesTitle: "파일", - BranchesTitle: "브랜치", - CommitsTitle: "커밋", - StashTitle: "Stash", - UnstagedChanges: `Staged되지 않은 변경 내용`, - StagedChanges: `Staged된 변경 내용`, - MainTitle: "메인", - MergeConfirmTitle: "병합", - StagingTitle: "메인 패널 (Staging)", - MergingTitle: "메인 패널 (Merging)", - NormalTitle: "메인 패널 (Normal)", - LogTitle: "로그", - CommitSummary: "커밋 메시지", - CredentialsUsername: "사용자 이름", - CredentialsPassword: "패스워드", - CredentialsPassphrase: "SSH키의 passphrase 입력", - PassUnameWrong: "패스워드, passphrase 또는 사용자 이름이 잘못되었습니다.", - Commit: "커밋 변경내용", - AmendLastCommit: "마지맛 커밋 수정", - AmendLastCommitTitle: "마지막 커밋 수정", - SureToAmend: "마지막 커밋을 수정하시겠습니까? 그런 다음 커밋 패널에서 커밋 메시지를 변경할 수 있습니다.", - NoCommitToAmend: "Amend 가능한 커밋이 없습니다.", - CommitChangesWithEditor: "Git 편집기를 사용하여 변경 내용을 커밋합니다.", - StatusTitle: "상태", - Menu: "메뉴", - Execute: "실행", - Stage: "Staged 전환", - ToggleStagedAll: "모든 변경을 Staged/unstaged으로 전환", - ToggleTreeView: "파일 트리뷰로 전환", - OpenMergeTool: "Git mergetool를 열기", - Refresh: "새로고침", - Push: "푸시", - Pull: "업데이트", - Scroll: "스크롤", - MergeConflictsTitle: "병합 충돌 내용", - Checkout: "체크아웃", - FileFilter: "파일을 필터하기 (Staged/unstaged)", - FilterStagedFiles: "Staged된 파일만 표시", - FilterUnstagedFiles: "Stage되지 않은 파일만 표시", - ResetFilter: "필터 리셋", - NoChangedFiles: "변경된 파일이 없습니다.", - SoftReset: "소프트 리셋", - AlreadyCheckedOutBranch: "브랜치가 이미 체크아웃 되었습니다", - SureForceCheckout: "강제로 체크아웃하시겠습니까? 모든 로컬 변경 사항을 잃게 됩니다.", - ForceCheckoutBranch: "브랜치 강제 체크아웃", - BranchName: "브랜치 이름", - NewBranchNameBranchOff: "새 브랜치 이름 (branch is off of '{{.branchName}}')", - CantDeleteCheckOutBranch: "체크아웃하는 브랜치는 삭제할 수 없습니다!", - ForceDeleteBranchMessage: "'{{.selectedBranchName}}'는 완전히 병합되지 않았습니다. 정말 삭제하시겠습니까?", - RebaseBranch: "체크아웃된 브랜치를 이 브랜치에 리베이스", - CantRebaseOntoSelf: "브랜치를 자기 자신에게 리베이스할 수는 없습니다.", - CantMergeBranchIntoItself: "브랜치를 자기 자신에게 병합할 수는 없습니다.", - ForceCheckout: "강제 체크아웃", - CheckoutByName: "이름으로 체크아웃", - NewBranch: "새 브랜치 생성", - NoBranchesThisRepo: "저장소에 브랜치가 존재하지 않습니다.", - CommitWithoutMessageErr: "커밋 메시지를 입력하세요.", - CloseCancel: "닫기/취소", - Confirm: "확인", - Close: "닫기", - Quit: "종료", - NoCommitsThisBranch: "이 브랜치에 커밋이 없습니다.", - CannotSquashOrFixupFirstCommit: "There's no commit below to squash into", - Fixup: "Fixup", - SureFixupThisCommit: "Are you sure you want to 'fixup' this commit? It will be merged into the commit below", - SureSquashThisCommit: "Are you sure you want to squash this commit into the commit below?", - Squash: "Squash", - PickCommitTooltip: "Pick commit (when mid-rebase)", - RevertCommit: "커밋 되돌리기", - Reword: "커밋메시지 변경", - DropCommit: "커밋 삭제", - MoveDownCommit: "커밋을 1개 아래로 이동", - MoveUpCommit: "커밋을 1개 위로 이동", - EditCommitTooltip: "커밋을 편집", - AmendCommitTooltip: "Amend commit with staged changes", - ResetAuthor: "Reset commit author", - SureResetCommitAuthor: "The author field of this commit will be updated to match the configured user. This also renews the author timestamp. Continue?", - RewordCommitEditor: "에디터에서 커밋메시지 수정", - Error: "오류", - PickHunk: "Pick hunk", - PickAllHunks: "Pick all hunks", - Undo: "되돌리기", - UndoReflog: "되돌리기 (reflog) (실험적)", - RedoReflog: "다시 실행 (reflog) (실험적)", - Pop: "Pop", - Drop: "Drop", - Apply: "적용", - NoStashEntries: "Stash가 존재하지 않습니다.", - StashDrop: "Stash를 삭제", - SureDropStashEntry: "정말로 Stash를 삭제하시겠습니까?", - StashPop: "Stash를 pop", - SurePopStashEntry: "정말로 Stash를 pop하시겠습니까?", - StashApply: "Stash 적용", - SureApplyStashEntry: "정말로 Stash를 적용하시겠습니까?", - NoTrackedStagedFilesStash: "You have no tracked/staged files to stash", - StashChanges: "변경을 Stash", - RenameStash: "Rename stash", - RenameStashPrompt: "Rename stash: {{.stashName}}", - OpenConfig: "설정 파일 열기", - EditConfig: "설정 파일 수정", - ForcePush: "강제 푸시", - ForcePushPrompt: "브랜치가 원격 브랜치에서 분기하고 있습니다. 'esc'를 눌러 취소하거나, 'enter'를 눌러 강제로 푸시하세요.", - ForcePushDisabled: "브랜치가 원격 브랜치에서 분기하고 있습니다. force push가 비활성화 되었습니다.", - UpdatesRejectedAndForcePushDisabled: "업데이트가 거부되었으며 강제 푸시를 비활성화했습니다.", - CheckForUpdate: "업데이트 확인", - CheckingForUpdates: "업데이트 확인 중...", - UpdateAvailableTitle: "새로운 업데이트 사용가능!", - UpdateAvailable: "버전 {{.newVersion}} 을(를) 설치하시겠습니까?", - UpdateInProgressWaitingStatus: "업데이트 중", - UpdateCompletedTitle: "업데이트 완료!", - UpdateCompleted: "업데이트 설치에 성공했습니다. lazygit를 재시작해주세요.", - FailedToRetrieveLatestVersionErr: "버전 정보를 받아오는데 실패했습니다.", - OnLatestVersionErr: "이미 최신 버전을 사용하고 있습니다.", - MajorVersionErr: "새 버전 ({{.newVersion}}) 에 현재 버전({{.currentVersion}}) 과 비교할 때 호환되지 않는 변경 사항이 있습니다.", - CouldNotFindBinaryErr: "{{.url}} 에서 바이너리를 찾을 수 없습니다.", - UpdateFailedErr: "업데이트 실패: {{.errMessage}}", - ConfirmQuitDuringUpdateTitle: "현재 업데이트 중입니다.", - ConfirmQuitDuringUpdate: "현재 업데이트를 진행 중입니다.종료하시겠습니까?", - MergeToolTitle: "병합 도구", - MergeToolPrompt: "정말로 `git mergetool`을 여시겠습니까?", - IntroPopupMessage: koreanIntroPopupMessage, - GitconfigParseErr: `따옴표로 묶이지 않은 '\' 문자가 있어서 Gogit이 gitconfig 파일을 분석하지 못했습니다. 이를 제거하면 문제가 해결됩니다.`, - EditFile: `파일 편집`, - OpenFile: `파일 닫기`, - IgnoreFile: `.gitignore에 추가`, - RefreshFiles: `파일 새로고침`, - Merge: `현재 브랜치에 병합`, - ConfirmQuit: `정말로 종료하시겠습니까?`, - SwitchRepo: `최근에 사용한 저장소로 전환`, - AllBranchesLogGraph: `모든 브랜치 로그 표시`, - UnsupportedGitService: `지원되지 않는 Git 서비스입니다.`, - CreatePullRequest: `풀 리퀘스트 생성`, - CopyPullRequestURL: `풀 리퀘스트 URL을 클립보드에 복사`, - NoBranchOnRemote: `브랜치가 원격에 없습니다. 원격에 먼저 푸시해야합니다.`, - Fetch: `Fetch`, - NoAutomaticGitFetchTitle: `자동 git 업데이트) 없음`, - NoAutomaticGitFetchBody: `Lazygit은 private 저장소에서 "git fetch"를 사용할 수 없습니다. 파일 패널에서 'f'를 사용하여 "git fetch"를 수동으로 실행하세요.`, - FileEnter: `Stage individual hunks/lines for file, or collapse/expand for directory`, - FileStagingRequirements: `추적된 파일에 대해 개별 라인만 stage할 수 있습니다.`, - StageSelectionTooltip: `선택한 행을 staged / unstaged`, - DiscardSelection: `변경을 삭제 (git reset)`, - ToggleRangeSelect: `드래그 선택 전환`, - ToggleSelectHunk: `Toggle select hunk`, - ToggleSelectionForPatch: `Line(s)을 패치에 추가/삭제`, - ToggleStagingView: `패널 전환`, - ReturnToFilesPanel: `파일 목록으로 돌아가기`, - FastForward: `Fast-forward this branch from its upstream`, - FastForwarding: "Fast-forwarding", - FoundConflictsTitle: "Auto-merge failed", - ViewMergeRebaseOptions: "View merge/rebase options", - NotMergingOrRebasing: "You are currently neither rebasing nor merging", - RecentRepos: "최근에 사용한 저장소", - MergeOptionsTitle: "Merge options", - RebaseOptionsTitle: "Rebase options", - CommitSummaryTitle: "커밋메시지", - LocalBranchesTitle: "브랜치", - SearchTitle: "검색", - TagsTitle: "태그", - MenuTitle: "메뉴", - RemotesTitle: "원격", - RemoteBranchesTitle: "원격 브랜치", - PatchBuildingTitle: "메인 패널 (Patch Building)", - InformationTitle: "정보", - SecondaryTitle: "Secondary", - ReflogCommitsTitle: "Reflog", - GlobalTitle: "글로벌 키 바인딩", - ConflictsResolved: "모든 병합 충돌이 해결되었습니다. 계속 할까요?", - ConfirmMerge: "정말로 '{{.selectedBranch}}' 을(를) '{{.checkedOutBranch}}'에 병합하시겠습니까?", - FwdNoUpstream: "Cannot fast-forward a branch with no upstream", - FwdNoLocalUpstream: "Cannot fast-forward a branch whose remote is not registered locally", - FwdCommitsToPush: "Cannot fast-forward a branch with commits to push", - ErrorOccurred: "오류가 발생했습니다! issue를 작성해 주세요: ", - NoRoom: "Not enough room", - YouAreHere: "현재 위치", - RewordNotSupported: "Rewording commits while interactively rebasing is not currently supported", - CherryPickCopy: "커밋을 복사 (cherry-pick)", - PasteCommits: "커밋을 붙여넣기 (cherry-pick)", - SureCherryPick: "정말로 복사한 커밋을 이 브랜치에 체리픽하시겠습니까?", - CherryPick: "체리픽", - Donate: "후원", - AskQuestion: "질문하기", - PrevLine: "이전 줄 선택", - NextLine: "다음 줄 선택", - PrevHunk: "이전 hunk를 선택", - NextHunk: "다음 hunk를 선택", - PrevConflict: "이전 충돌을 선택", - NextConflict: "다음 충돌을 선택", - SelectPrevHunk: "이전 hunk를 선택", - SelectNextHunk: "다음 hunk를 선택", - ScrollDown: "아래로 스크롤", - ScrollUp: "위로 스크롤", - ScrollUpMainWindow: "메인 패널을 위로 스크롤", - ScrollDownMainWindow: "메인 패널을 아래로로 스크롤", - AmendCommitTitle: "Amend commit", - AmendCommitPrompt: "Are you sure you want to amend this commit with your staged files?", - DropCommitTitle: "커밋 삭제", - DropCommitPrompt: "정말로 선택한 커밋을 삭제하시겠습니까?", - PullingStatus: "업데이트 중", - PushingStatus: "푸시 중", - FetchingStatus: "패치 중", - SquashingStatus: "Squashing", - FixingStatus: "Fixing up", - DeletingStatus: "Deleting", - MovingStatus: "Moving", - RebasingStatus: "Rebasing", - AmendingStatus: "Amending", - CherryPickingStatus: "Cherry-picking", - UndoingStatus: "Undoing", - RedoingStatus: "Redoing", - CheckingOutStatus: "Checking out", - CommittingStatus: "Committing", - CommitFiles: "Commit files", - SubCommitsDynamicTitle: "커밋 (%s)", - CommitFilesDynamicTitle: "Diff files (%s)", - RemoteBranchesDynamicTitle: "원격브랜치 (%s)", - ViewItemFiles: "View selected item's files", - CommitFilesTitle: "커밋 파일", - CheckoutCommitFileTooltip: "Checkout file", - DiscardOldFileChangeTooltip: "Discard this commit's changes to this file", - DiscardFileChangesTitle: "파일 변경 사항 버리기", - DiscardFileChangesPrompt: "Are you sure you want to discard this commit's changes to this file? If this file was created in this commit, it will be deleted", - DisabledForGPG: "Feature not available for users using GPG", - CreateRepo: "Git 저장소가 아닙니다. 저장소를 생성하시겠습니까? (y/n): ", - AutoStashTitle: "Autostash?", - AutoStashPrompt: "You must stash and pop your changes to bring them across. Do this automatically? (enter/esc)", - StashPrefix: "Auto-stashing changes for ", - Discard: "View 'discard changes' options", - Cancel: "취소", - DiscardAllChanges: "모든 변경사항 버리기", - DiscardUnstagedChanges: "Discard unstaged changes", - DiscardAllChangesToAllFiles: "Nuke working tree", - DiscardAnyUnstagedChanges: "Discard unstaged changes", - DiscardUntrackedFiles: "Discard untracked files", - HardReset: "Hard reset", - ViewResetOptions: `View reset options`, - CreateFixupCommitTooltip: `Create fixup commit for this commit`, - SquashAboveCommitsTooltip: `Squash all 'fixup!' commits above selected commit (autosquash)`, - CreateFixupCommit: `Create fixup commit`, - ExecuteCustomCommand: "Execute custom command", - CustomCommand: "Custom command:", - CommitChangesWithoutHook: "Commit changes without pre-commit hook", - SkipHookPrefixNotConfigured: "You have not configured a commit message prefix for skipping hooks. Set `git.skipHookPrefix = 'WIP'` in your config", - ResetTo: `Reset to`, - PressEnterToReturn: "엔터를 눌러 lazygit으로 돌아갑니다.", - ViewStashOptions: "Stash 옵션 보기", - StashAllChanges: "변경사항을 Stash", - StashStagedChanges: "Stash staged changes", - StashOptions: "Stash 옵션", - NotARepository: "Error: must be run inside a git repository", - Jump: "패널로 이동", - ScrollLeftRight: "좌우로 스크롤", - ScrollLeft: "우 스크롤", - ScrollRight: "좌 스크롤", - DiscardPatch: "Patch 버리기", - DiscardPatchConfirm: "You can only build a patch from one commit/stash-entry at a time. Discard current patch?", - CantPatchWhileRebasingError: "You cannot build a patch or run patch commands while in a merging or rebasing state", - ToggleAddToPatch: "Toggle file included in patch", - ToggleAllInPatch: "Toggle all files included in patch", - UpdatingPatch: "Updating patch", - ViewPatchOptions: "커스텀 Patch 옵션 보기", - PatchOptionsTitle: "Patch 옵션", - NoPatchError: "No patch created yet. To start building a patch, use 'space' on a commit file or enter to add specific lines", - EnterCommitFile: "Enter file to add selected lines to the patch (or toggle directory collapsed)", - // ExitCustomPatchBuilder: ``, - EnterUpstream: `' '와 같은 형식으로 입력하세요.`, - InvalidUpstream: "Upstream의 형식이 잘못되었습니다.' ' 와 같은 형식으로 입력하세요.", - ReturnToRemotesList: `원격목록으로 돌아가기`, - NewRemote: `새로운 Remote 추가`, - NewRemoteName: `새로운 Remote 이름:`, - NewRemoteUrl: `새로운 Remote URL:`, - EditRemoteName: `{{.remoteName}} 의 새로운 Remote 이름 입력:`, - EditRemoteUrl: `{{.remoteName}} 의 새로운 Remote URL 입력:`, - RemoveRemote: `Remote를 삭제`, - RemoveRemotePrompt: "정말로 Remote를 삭제하시겠습니까?", - DeleteRemoteBranch: "원격 브랜치를 삭제", - DeleteRemoteBranchMessage: "정말로 원격 브랜치를 삭제하시겠습니까?", - SetUpstream: "Set as upstream of checked-out branch", - SetUpstreamTitle: "Set upstream branch", - SetUpstreamMessage: "Are you sure you want to set the upstream branch of '{{.checkedOut}}' to '{{.selected}}'", - EditRemoteTooltip: "Remote를 수정", - TagCommit: "Tag commit", - TagMenuTitle: "태그 작성", - TagNameTitle: "태그 이름", - TagMessageTitle: "태그 메시지", - AnnotatedTag: "Annotated tag", - LightweightTag: "Lightweight tag", - PushTagTitle: "원격에 태그 '{{.tagName}}' 를 푸시", - PushTag: "태그를 push", - NewTag: "태그를 생성", - FetchRemoteTooltip: "원격을 업데이트", - FetchingRemoteStatus: "원격을 업데이트 중", - CheckoutCommit: "커밋을 체크아웃", - SureCheckoutThisCommit: "정말로 선택한 커밋을 체크아웃 하시겠습니까?", - GitFlowOptions: "Git-flow 옵션 보기", - NotAGitFlowBranch: "This does not seem to be a git flow branch", - NewGitFlowBranchPrompt: "New {{.branchType}} name:", - IgnoreTracked: "Ignore tracked file", - IgnoreTrackedPrompt: "Are you sure you want to ignore a tracked file?", - ViewResetToUpstreamOptions: "View upstream reset options", - NextScreenMode: "다음 스크린 모드 (normal/half/fullscreen)", - PrevScreenMode: "이전 스크린 모드", - StartSearch: "검색 시작", - Panel: "패널", - Keybindings: "키 바인딩", - RenameBranch: "브랜치 이름 변경", - NewBranchNamePrompt: "새로운 브랜치 이름 입력", - RenameBranchWarning: "This branch is tracking a remote. This action will only rename the local branch name, not the name of the remote branch. Continue?", - OpenKeybindingsMenu: "매뉴 열기", - ResetCherryPick: "Reset cherry-picked (copied) commits selection", - NextTab: "이전 탭", - PrevTab: "다음 탭", - CantUndoWhileRebasing: "리베이스중에는 되돌릴 수 없습니다.", - CantRedoWhileRebasing: "리베이스중에는 다시 실행할 수 없습니다.", - MustStashWarning: "Pulling a patch out into the index requires stashing and unstashing your changes. If something goes wrong, you'll be able to access your files from the stash. Continue?", - MustStashTitle: "Must stash", - ConfirmationTitle: "확인 패널", - PrevPage: "이전 페이지", - NextPage: "다음 페이지", - GotoTop: "맨 위로 스크롤 ", - GotoBottom: "맨 아래로 스크롤 ", - FilteringBy: "Filtering by", - ResetInParentheses: "(reset)", - OpenFilteringMenu: "View filter-by-path options", - FilterBy: "Filter by", - ExitFilterMode: "Stop filtering by path", - FilterPathOption: "Enter path to filter by", - EnterFileName: "Enter path:", - FilteringMenuTitle: "Filtering", - MustExitFilterModeTitle: "Command not available", - MustExitFilterModePrompt: "Command not available in filtered mode. Exit filtered mode?", - Diff: "Diff", - EnterRefToDiff: "Enter ref to diff", - EnterRefName: "Ref 입력:", - ExitDiffMode: "Diff 모드 종료", - DiffingMenuTitle: "Diff", - SwapDiff: "Reverse diff direction", - ViewDiffingOptions: "Diff 메뉴 열기", - // the actual view is the extras view which I intend to give more tabs in future but for now we'll only mention the command log part - OpenCommandLogMenu: "명령어 로그 메뉴 열기", - ShowingGitDiff: "Showing output for:", - CommitDiff: "커밋의 iff", - CopyCommitHashToClipboard: "커밋 해시를 클립보드에 복사", - CommitHash: "커밋 해시", - CommitURL: "커밋 URL", - CopyCommitMessageToClipboard: "커밋 메시지를 클립보드에 복사", - CommitMessage: "커밋 메시지", - CommitAuthor: "커밋 작성자", - CopyCommitAttributeToClipboard: "커밋 attribute 복사", - CopyBranchNameToClipboard: "브랜치명을 클립보드에 복사", - CopyPathToClipboard: "파일명을 클립보드에 복사", - CopySelectedTextToClipboard: "선택한 텍스트를 클립보드에 복사", - CommitPrefixPatternError: "Error in commitPrefix pattern", - NoFilesStagedTitle: "파일이 Staged 되지 않았습니다.", - NoFilesStagedPrompt: "파일이 Staged 되지 않았습니다. 모든 파일을 커밋하시겠습니까?", - BranchNotFoundTitle: "브랜치를 찾을 수 없습니다.", - BranchNotFoundPrompt: "브랜치를 찾을 수 없습니다. 새로운 브랜치를 생성합니다.", - DiscardChangeTitle: "선택한 라인을 unstaged", - DiscardChangePrompt: "정말로 선택한 라인을 삭제 (git reset) 하시겠습니까? 이 조작은 취소할 수 없습니다.\n이 경고를 비활성화 하려면 설정 파일의 'gui.skipDiscardChangeWarning' 를 true로 설정하세요.", - CreateNewBranchFromCommit: "커밋에서 새 브랜치를 만듭니다.", - BuildingPatch: "Building patch", - ViewCommits: "커밋 보기", - MinGitVersionError: "Lazygit 실행을 위해서는 Git 2.20 이후의 버전(2018년 이후의)이 필요합니다. Git를 업데이트 해주세요. 아니면 lazygit이 이전 버전과 더 잘 호환되도록 https://github.com/jesseduffield/lazygit/issues 에 issue를 작성해 주세요.", - RunningCustomCommandStatus: "커스텀 명령어 실행", - SubmoduleStashAndReset: "Stash uncommitted submodule changes and update", - AndResetSubmodules: "And reset submodules", - EnterSubmoduleTooltip: "서브모듈 열기", - CopySubmoduleNameToClipboard: "서브모듈 이름을 클립보드에 복사", - RemoveSubmodule: "서브모듈 삭제", - RemoveSubmodulePrompt: "정말로 서브모듈 '%s'및 해당 디렉토리를 제거하시겠습니까? 이것은 되돌릴 수 없습니다.", - ResettingSubmoduleStatus: "서브모듈를 리셋", - NewSubmoduleName: "새로운 서브모듈이름 :", - NewSubmoduleUrl: "새로운 서브모듈의 URL:", - NewSubmodulePath: "새로운 서브모듈의 경로", - NewSubmodule: "새로운 서브모듈 추가", - AddingSubmoduleStatus: "새로운 서브모듈 추가", - UpdateSubmoduleUrl: "서브모듈 '%s' 의 URL을 업데이트", - UpdatingSubmoduleUrlStatus: "Updating URL", - EditSubmoduleUrl: "서브모듈의 URL을 수정", - InitializingSubmoduleStatus: "서브모듈 초기화", - InitSubmoduleTooltip: "서브모듈 초기화", - SubmoduleUpdateTooltip: "서브모듈 업데이트", - UpdatingSubmoduleStatus: "서브모듈 업데이트", - BulkInitSubmodules: "서브모듈 일괄 초기화", - BulkUpdateSubmodules: "서브모듈 일괄 업데이트", - BulkDeinitSubmodules: "Bulk deinit submodules", - ViewBulkSubmoduleOptions: "View bulk submodule options", - BulkSubmoduleOptions: "Bulk submodule options", - RunningCommand: "Running command", - SubCommitsTitle: "Sub-commits", - SubmodulesTitle: "서브모듈", - NavigationTitle: "List panel navigation", - SuggestionsCheatsheetTitle: "추천", - SuggestionsTitle: "추천 (press %s to focus)", - ExtrasTitle: "명령어 로그", - PushingTagStatus: "Pushing tag", - PullRequestURLCopiedToClipboard: "풀 리퀘스트의 URL을 클립보드에 복사했습니다.", - CommitDiffCopiedToClipboard: "커밋의 Diff를 클립보드에 복사했습니다.", - CommitURLCopiedToClipboard: "커밋의 URL를 클립보드에 복사했습니다.", - CommitMessageCopiedToClipboard: "커밋 메시지를 클립보드에 복사했습니다.", - CommitAuthorCopiedToClipboard: "커밋 작성자를 클립보드에 복사했습니다.", - CopiedToClipboard: "클립보드에 복사했습니다.", - ErrCannotEditDirectory: "디렉토리는 편집할 수 없습니다.", - ErrStageDirWithInlineMergeConflicts: "병합 충돌이 발생한 파일을 포함하는 디렉토리는 Staged/untaged할 수 없습니다. 병합 충돌을 먼저 해결하세요.", - ErrRepositoryMovedOrDeleted: "저장소를 찾을 수 없습니다. 이미 삭제되었거나 이동되었을 가능성이 있습니다. ¯\\_(ツ)_/¯", - CommandLog: "명령어 로그", - ToggleShowCommandLog: "명령어 로그 표시 여부 전환", - FocusCommandLog: "명령어 로그에 포커스", - CommandLogHeader: "명령어 로그표시 여부는 '%s' 으로 전환할 수 있습니다.\n", - RandomTip: "랜덤 Tip", - SelectParentCommitForMerge: "병합을 위한 상위 커밋 선택", - ToggleWhitespaceInDiffView: "공백문자를 Diff 뷰에서 표시 여부 전환", - IncreaseContextInDiffView: "Diff 보기의 변경 사항 주위에 표시되는 컨텍스트의 크기를 늘리기", - DecreaseContextInDiffView: "Diff 보기의 변경 사항 주위에 표시되는 컨텍스트 크기 줄이기", - CreatePullRequestOptions: "풀 리퀘스트 생성 옵션", - DefaultBranch: "기본 브랜치", - SelectBranch: "브랜치를 선택", - SelectConfigFile: "설정파일 선택", - NoConfigFileFoundErr: "설정 파일을 찾지 못했습니다.", - LoadingFileSuggestions: "파일 제안 로딩 중", - LoadingCommits: "커밋 로딩", - MustSpecifyOriginError: "Must specify a remote if specifying a branch", - GitOutput: "Git output:", - GitCommandFailed: "Git command failed. Check command log for details (open with %s)", - AbortTitle: "%s 중지", - AbortPrompt: "정말로 실행중인 %s 를 중지할까요?", - OpenLogMenu: "로그 메뉴 열기", - LogMenuTitle: "커밋 로그 옵션", - ToggleShowGitGraphAll: "Toggle show whole git graph (pass the `--all` flag to `git log`)", - ShowGitGraph: "커밋 그래프 표시", - SortCommits: "커밋 정렬", - CantChangeContextSizeError: "Cannot change context while in patch building mode because we were too lazy to support it when releasing the feature. If you really want it, please let us know!", - OpenCommitInBrowser: "브라우저에서 커밋 열기", - ViewBisectOptions: "Bisect 옵션 보기", - ConfirmRevertCommit: "Are you sure you want to revert {{.selectedCommit}}?", - RewordInEditorTitle: "커밋 메시지를 에디터에서 수정", - RewordInEditorPrompt: "Are you sure you want to reword this commit in your editor?", - HardResetAutostashPrompt: "Are you sure you want to hard reset to '%s'? An auto-stash will be performed if necessary.", - CheckoutPrompt: "Are you sure you want to checkout '%s'?", - UpstreamGone: "(upstream gone)", - Actions: Actions{ - // TODO: combine this with the original keybinding descriptions (those are all in lowercase atm) - CheckoutCommit: "커밋 체크아웃", - CheckoutTag: "태그 체크아웃", - CheckoutBranch: "브랜치 체크아웃", - ForceCheckoutBranch: "브랜치 Force 체크아웃", - Merge: "병합", - RebaseBranch: "브랜치 리베이스", - RenameBranch: "브랜치 이름 변경", - CreateBranch: "브랜치 생성", - CherryPick: "(Cherry-pick) 커밋 붙여넣기", - CheckoutFile: "체크아웃 파일", - DiscardOldFileChange: "Discard old file change", - SquashCommitDown: "Squash commit down", - FixupCommit: "커밋 Fixup", - RewordCommit: "커밋 Reword", - DropCommit: "커밋 Drop", - EditCommit: "커밋 수정", - AmendCommit: "커밋 Amend", - ResetCommitAuthor: "커밋 작성자 Reset", - RevertCommit: "커밋 Revert", - CreateFixupCommit: "Fixup 커밋 생성", - SquashAllAboveFixupCommits: "Squash all above fixup commits", - CreateLightweightTag: "Create lightweight tag", - CreateAnnotatedTag: "Create annotated tag", - CopyCommitMessageToClipboard: "커밋 메시지를 클립보드에 복사", - CopyCommitDiffToClipboard: "커밋 diff를 클립보드에 복사", - CopyCommitHashToClipboard: "커밋 해시를 클립보드에 복사", - CopyCommitURLToClipboard: "커밋 URL를 클립보드에 복사", - CopyCommitAuthorToClipboard: "커밋 작성자를 클립보드에 복사", - CopyCommitAttributeToClipboard: "클립보드에 복사", - MoveCommitUp: "Move commit up", - MoveCommitDown: "Move commit down", - CustomCommand: "Custom command", - DiscardAllChangesInDirectory: "Discard all changes in directory", - DiscardUnstagedChangesInDirectory: "Discard unstaged changes in directory", - DiscardAllChangesInFile: "Discard all changes in file", - DiscardAllUnstagedChangesInFile: "Discard all unstaged changes in file", - StageFile: "Stage file", - StageResolvedFiles: "Stage files whose merge conflicts were resolved", - UnstageFile: "Unstage file", - UnstageAllFiles: "Unstage all files", - StageAllFiles: "Stage all files", - IgnoreExcludeFile: "Ignore file", - Commit: "커밋", - EditFile: "파일 수정", - Push: "푸시", - Pull: "업데이트(Pull)", - OpenFile: "파일 열기", - StashAllChanges: "Stash all changes", - StashAllChangesKeepIndex: "Stash all changes and keep index", - StashStagedChanges: "Stash staged changes", - StashUnstagedChanges: "Stash unstaged changes", - GitFlowFinish: "git flow finish", - GitFlowStart: "git flow start", - CopyToClipboard: "Copy to clipboard", - CopySelectedTextToClipboard: "Copy selected text to clipboard", - RemovePatchFromCommit: "Remove patch from commit", - MovePatchToSelectedCommit: "Move patch to selected commit", - MovePatchIntoIndex: "Move patch into index", - MovePatchIntoNewCommit: "Move patch into new commit", - DeleteRemoteBranch: "Delete remote branch", - SetBranchUpstream: "Set branch upstream", - AddRemote: "Add remote", - RemoveRemote: "Remove remote", - UpdateRemote: "Update remote", - ApplyPatch: "Apply patch", - Stash: "Stash", - RenameStash: "Rename stash", - RemoveSubmodule: "서브모듈 삭제", - ResetSubmodule: "서브모듈 Reset", - AddSubmodule: "서브모듈 추가", - UpdateSubmoduleUrl: "서브모듈 URL 업데이트", - InitialiseSubmodule: "서브모듈 초기화", - BulkInitialiseSubmodules: "Bulk initialise submodules", - BulkUpdateSubmodules: "Bulk update submodules", - BulkDeinitialiseSubmodules: "Bulk deinitialise submodules", - UpdateSubmodule: "서브모듈 업데이트", - PushTag: "태그 푸시g", - NukeWorkingTree: "Nuke working tree", - DiscardUnstagedFileChanges: "Unstaged 파일 변경사항 버리기", - RemoveUntrackedFiles: "Untracked 파일 삭제", - RemoveStagedFiles: "Staged 파일 삭제", - SoftReset: "Soft reset", - MixedReset: "Mixed reset", - HardReset: "Hard reset", - FastForwardBranch: "Fast forward branch", - Undo: "되돌리기", - Redo: "다시 실행", - CopyPullRequestURL: "풀 리퀘스트 URL 복사", - OpenMergeTool: "병합 도구 열기", - OpenCommitInBrowser: "브라우저에서 커밋 열기", - OpenPullRequest: "브라우저에서 풀 리퀘스트 열기", - StartBisect: "Start bisect", - ResetBisect: "Reset bisect", - BisectSkip: "Bisect skip", - BisectMark: "Bisect mark", - }, - Bisect: Bisect{ - Mark: "Mark %s as %s", - MarkStart: "Mark %s as %s (start bisect)", - SkipCurrent: "%s 를 스킵", - ResetTitle: "'git bisect' 를 리셋", - ResetPrompt: "정말로 'git bisect' 를 리셋하시겠습니까?", - ResetOption: "Bisect를 리셋", - BisectMenuTitle: "Bisect", - CompleteTitle: "Bisect 완료", - CompletePrompt: "Bisect complete! The following commit introduced the change:\n\n%s\n\nDo you want to reset 'git bisect' now?", - CompletePromptIndeterminate: "Bisect complete! Some commits were skipped, so any of the following commits may have introduced the change:\n\n%s\n\nDo you want to reset 'git bisect' now?", - }, - } -} diff --git a/pkg/i18n/polish.go b/pkg/i18n/polish.go deleted file mode 100644 index 5ca7d7ca69c..00000000000 --- a/pkg/i18n/polish.go +++ /dev/null @@ -1,929 +0,0 @@ -package i18n - -func polishTranslationSet() TranslationSet { - return TranslationSet{ - NotEnoughSpace: "Za mało miejsca na wyświetlenie paneli", - DiffTitle: "Różnice", - FilesTitle: "Pliki", - BranchesTitle: "Gałęzie", - CommitsTitle: "Commity", - StashTitle: "Schowek", - SnakeTitle: "Snake", - EasterEgg: "Jajko wielkanocne", - UnstagedChanges: "Zmiany niezatwierdzone", - StagedChanges: "Zmiany zatwierdzone", - MainTitle: "Główny", - MergeConfirmTitle: "Scalanie", - StagingTitle: "Panel główny (zatwierdzanie)", - MergingTitle: "Panel główny (scalanie)", - NormalTitle: "Panel główny (normalny)", - LogTitle: "Dziennik", - CommitSummary: "Podsumowanie commita", - CredentialsUsername: "Nazwa użytkownika", - CredentialsPassword: "Hasło", - CredentialsPassphrase: "Wprowadź hasło do klucza SSH", - CredentialsPIN: "Wprowadź PIN do klucza SSH", - PassUnameWrong: "Niewłaściwe hasło, fraza lub nazwa użytkownika", - Commit: "Commit", - CommitTooltip: "Zatwierdź zmiany zatwierdzone.", - AmendLastCommit: "Popraw ostatni commit", - AmendLastCommitTitle: "Popraw ostatni commit", - SureToAmend: "Czy na pewno chcesz poprawić ostatni commit? Następnie możesz zmienić wiadomość commita z panelu commitów.", - NoCommitToAmend: "Brak commita do poprawienia.", - CommitChangesWithEditor: "Zatwierdź zmiany używając edytora git", - FindBaseCommitForFixup: "Znajdź bazowy commit do poprawki", - FindBaseCommitForFixupTooltip: "Znajdź commit, na którym opierają się Twoje obecne zmiany, w celu poprawienia/zmiany commita. To pozwala Ci uniknąć przeglądania commitów w Twojej gałęzi jeden po drugim, aby zobaczyć, który commit powinien być poprawiony/zmieniony. Zobacz dokumentację: ", - NoBaseCommitsFound: "Nie znaleziono bazowych commitów", - MultipleBaseCommitsFoundStaged: "Znaleziono wiele bazowych commitów. (Spróbuj zatwierdzić mniej zmian naraz)", - MultipleBaseCommitsFoundUnstaged: "Znaleziono wiele bazowych commitów. (Spróbuj zatwierdzić część zmian)", - BaseCommitIsAlreadyOnMainBranch: "Bazowy commit dla tej zmiany jest już na gałęzi głównej", - BaseCommitIsNotInCurrentView: "Bazowy commit nie jest w bieżącym widoku", - HunksWithOnlyAddedLinesWarning: "Istnieją zakresy tylko z dodanymi liniami w różnicach; uważaj, aby sprawdzić, czy te należą do znalezionego bazowego commita.\n\nKontynuować?", - StatusTitle: "Status", - Menu: "Menu", - Execute: "Wykonaj", - Stage: "Zatwierdź", - StageTooltip: "Przełącz zatwierdzenie dla wybranego pliku.", - ToggleStagedAll: "Zatwierdź wszystko", - ToggleStagedAllTooltip: "Przełącz zatwierdzenie/odznaczenie dla wszystkich plików w drzewie roboczym.", - ToggleTreeView: "Przełącz widok drzewa plików", - ToggleTreeViewTooltip: "Przełącz widok plików między płaskim a drzewem. Płaski układ pokazuje wszystkie ścieżki plików na jednej liście, układ drzewa grupuje pliki według katalogów.", - OpenDiffTool: "Otwórz zewnętrzne narzędzie różnic (git difftool)", - OpenMergeTool: "Otwórz zewnętrzne narzędzie scalania", - OpenMergeToolTooltip: "Uruchom `git mergetool`.", - Refresh: "Odśwież", - RefreshTooltip: "Odśwież stan git (tj. uruchom `git status`, `git branch`, itp. w tle, aby zaktualizować zawartość paneli). To nie uruchamia `git fetch`.", - Push: "Wypchnij", - PushTooltip: "Wypchnij bieżącą gałąź do jej gałęzi nadrzędnej. Jeśli nie skonfigurowano gałęzi nadrzędnej, zostaniesz poproszony o skonfigurowanie gałęzi nadrzędnej.", - Pull: "Pociągnij", - PullTooltip: "Pociągnij zmiany z zdalnego dla bieżącej gałęzi. Jeśli nie skonfigurowano gałęzi nadrzędnej, zostaniesz poproszony o skonfigurowanie gałęzi nadrzędnej.", - Scroll: "Przewiń", - MergeConflictsTitle: "Konflikty scalania", - Checkout: "Przełącz", - CheckoutTooltip: "Przełącz wybrany element.", - CantCheckoutBranchWhilePulling: "Nie możesz przełączyć na inną gałąź podczas pobierania bieżącej gałęzi", - TagCheckoutTooltip: "Przełącz wybrany tag jako odłączoną głowę (detached HEAD).", - RemoteBranchCheckoutTooltip: "Przełącz na nową lokalną gałąź na podstawie wybranej gałęzi zdalnej. Nowa gałąź będzie śledzić gałąź zdalną.", - CantPullOrPushSameBranchTwice: "Nie możesz wypchnąć lub pociągnąć gałęzi, podczas gdy jest już wypychana lub pociągana", - FileFilter: "Filtruj pliki według statusu", - CopyToClipboardMenu: "Kopiuj do schowka", - CopyFileName: "Nazwa pliku", - CopyFilePath: "Ścieżka", - CopyFileDiffTooltip: "Jeśli istnieją zatwierdzone elementy, ta komenda bierze pod uwagę tylko je. W przeciwnym razie bierze pod uwagę wszystkie niezatwierdzone.", - CopySelectedDiff: "Różnice wybranego pliku", - CopyAllFilesDiff: "Różnice wszystkich plików", - NoContentToCopyError: "Nic do skopiowania", - FileNameCopiedToast: "Nazwa pliku skopiowana do schowka", - FilePathCopiedToast: "Ścieżka pliku skopiowana do schowka", - FileDiffCopiedToast: "Różnice pliku skopiowane do schowka", - AllFilesDiffCopiedToast: "Różnice wszystkich plików skopiowane do schowka", - FilterStagedFiles: "Pokaż tylko zatwierdzone pliki", - FilterUnstagedFiles: "Pokaż tylko niezatwierdzone pliki", - ResetFilter: "Resetuj filtr", - NoChangedFiles: "Brak zmienionych plików", - SoftReset: "Miękki reset", - AlreadyCheckedOutBranch: "Już przełączono na tę gałąź", - SureForceCheckout: "Czy na pewno chcesz wymusić przełączenie? Stracisz wszystkie lokalne zmiany", - ForceCheckoutBranch: "Wymuś przełączenie gałęzi", - BranchName: "Nazwa gałęzi", - NewBranchNameBranchOff: "Nowa nazwa gałęzi (gałąź oparta na '{{.branchName}}')", - CantDeleteCheckOutBranch: "Nie możesz usunąć przełączonej gałęzi!", - DeleteBranchTitle: "Usuń gałąź '{{.selectedBranchName}}'?", - DeleteLocalBranch: "Usuń lokalną gałąź", - DeleteRemoteBranchOption: "Usuń gałąź zdalną", - DeleteRemoteBranchPrompt: "Czy na pewno chcesz usunąć gałąź zdalną '{{.selectedBranchName}}' z '{{.upstream}}'?", - ForceDeleteBranchTitle: "Wymuś usunięcie gałęzi", - ForceDeleteBranchMessage: "'{{.selectedBranchName}}' nie jest w pełni scalona. Czy na pewno chcesz ją usunąć?", - RebaseBranch: "Przebazuj", - RebaseBranchTooltip: "Przebazuj przełączoną gałąź na wybraną gałąź.", - CantRebaseOntoSelf: "Nie możesz przebazować gałęzi na siebie", - CantMergeBranchIntoItself: "Nie możesz scalić gałęzi do siebie", - ForceCheckout: "Wymuś przełączenie", - ForceCheckoutTooltip: "Wymuś przełączenie wybranej gałęzi. To spowoduje odrzucenie wszystkich lokalnych zmian w drzewie roboczym przed przełączeniem na wybraną gałąź.", - CheckoutByName: "Przełącz według nazwy", - CheckoutByNameTooltip: "Przełącz według nazwy. W polu wprowadzania możesz wpisać '-' aby przełączyć się na ostatnią gałąź.", - NewBranch: "Nowa gałąź", - NewBranchFromStashTooltip: "Utwórz nową gałąź z wybranego wpisu schowka. Działa poprzez przełączenie git na commit, na którym wpis schowka został utworzony, tworzenie nowej gałęzi z tego commita, a następnie zastosowanie wpisu schowka do nowej gałęzi jako dodatkowego commita.", - NoBranchesThisRepo: "Brak gałęzi dla tego repozytorium", - CommitWithoutMessageErr: "Nie możesz commitować bez wiadomości commita", - Close: "Zamknij", - CloseCancel: "Zamknij/Anuluj", - Confirm: "Potwierdź", - Quit: "Wyjdź", - SquashTooltip: "Scal wybrany commit z commitami poniżej. Wiadomość wybranego commita zostanie dołączona do commita poniżej.", - NoCommitsThisBranch: "Brak commitów dla tej gałęzi", - UpdateRefHere: "Zaktualizuj gałąź '{{.ref}}' tutaj", - CannotSquashOrFixupFirstCommit: "Nie ma commita poniżej do scalenia", - Fixup: "Poprawka", - SureFixupThisCommit: "Czy na pewno chcesz 'poprawić' wybrane commit(y) do commita poniżej?", - SureSquashThisCommit: "Czy na pewno chcesz scalić wybrane commit(y) do commita poniżej?", - Squash: "Scal", - PickCommitTooltip: "Oznacz wybrany commit do wybrania (podczas rebazowania). Oznacza to, że commit zostanie zachowany po kontynuacji rebazowania.", - Pick: "Wybierz", - CantPickDisabledReason: "Nie możesz wybrać commita podczas rebazowania", - Edit: "Edytuj", - RevertCommit: "Cofnij commit", - Revert: "Cofnij", - RevertCommitTooltip: "Utwórz commit cofający dla wybranego commita, który stosuje zmiany wybranego commita w odwrotnej kolejności.", - Reword: "Przeformułuj", - CommitRewordTooltip: "Przeformułuj wiadomość wybranego commita.", - DropCommit: "Usuń", - DropCommitTooltip: "Usuń wybrany commit. To usunie commit z gałęzi za pomocą rebazowania. Jeśli commit wprowadza zmiany, od których zależą późniejsze commity, być może będziesz musiał rozwiązać konflikty scalania.", - MoveDownCommit: "Przesuń commit w dół", - MoveUpCommit: "Przesuń commit w górę", - CannotMoveAnyFurther: "Nie można przesunąć dalej", - EditCommit: "Edytuj (rozpocznij interaktywne rebazowanie)", - EditCommitTooltip: "Edytuj wybrany commit. Użyj tego, aby rozpocząć interaktywne rebazowanie od wybranego commita. Podczas trwania rebazowania, to oznaczy wybrany commit do edycji, co oznacza, że po kontynuacji rebazowania, rebazowanie zostanie wstrzymane na wybranym commicie, aby umożliwić wprowadzenie zmian.", - AmendCommitTooltip: "Popraw commit ze zmianami zatwierdzonymi. Jeśli wybrany commit jest commit HEAD, to wykona `git commit --amend`. W przeciwnym razie commit zostanie poprawiony za pomocą rebazowania.", - Amend: "Popraw", - ResetAuthor: "Resetuj autora", - ResetAuthorTooltip: "Resetuj autora commita do aktualnie skonfigurowanego użytkownika. To również odświeży znacznik czasu autora", - SetAuthor: "Ustaw autora", - SetAuthorTooltip: "Ustaw autora na podstawie monitu", - AddCoAuthor: "Dodaj współautora", - AmendCommitAttribute: "Popraw atrybut commita", - AmendCommitAttributeTooltip: "Ustaw/Resetuj autora commita lub ustaw współautora.", - SetAuthorPromptTitle: "Ustaw autora (musi wyglądać jak 'Imię ')", - AddCoAuthorPromptTitle: "Dodaj współautora (musi wyglądać jak 'Imię ')", - AddCoAuthorTooltip: "Dodaj współautora używając metadanych Github/Gitlab Co-authored-by.", - SureResetCommitAuthor: "Pole autora tego commita zostanie zaktualizowane, aby pasowało do skonfigurowanego użytkownika. To również odświeży znacznik czasu autora. Kontynuować?", - RewordCommitEditor: "Przeformułuj za pomocą edytora", - Error: "Błąd", - PickHunk: "Wybierz fragment", - PickAllHunks: "Wybierz wszystkie fragmenty", - Undo: "Cofnij", - UndoReflog: "Cofnij", - RedoReflog: "Ponów", - UndoTooltip: "Dziennik reflog zostanie użyty do określenia, jakie polecenie git należy uruchomić, aby cofnąć ostatnie polecenie git. Nie obejmuje to zmian w drzewie roboczym; brane są pod uwagę tylko commity.", - RedoTooltip: "Dziennik reflog zostanie użyty do określenia, jakie polecenie git należy uruchomić, aby ponowić ostatnie polecenie git. Nie obejmuje to zmian w drzewie roboczym; brane są pod uwagę tylko commity.", - UndoMergeResolveTooltip: "Cofnij ostatnie rozwiązanie konfliktu scalania.", - DiscardAllTooltip: "Odrzuć wszystkie zmiany (zarówno zatwierdzone jak i niezatwierdzone) w '{{.path}}'.", - DiscardUnstagedTooltip: "Odrzuć niezatwierdzone zmiany w '{{.path}}'.", - Pop: "Wyciągnij", - StashPopTooltip: "Zastosuj wpis schowka do katalogu roboczego i usuń wpis schowka.", - Drop: "Usuń", - StashDropTooltip: "Usuń wpis schowka z listy schowka.", - Apply: "Zastosuj", - StashApplyTooltip: "Zastosuj wpis schowka do katalogu roboczego.", - NoStashEntries: "Brak wpisów schowka", - StashDrop: "Usuń schowek", - SureDropStashEntry: "Czy na pewno chcesz usunąć ten wpis schowka?", - StashPop: "Wyciągnij schowek", - SurePopStashEntry: "Czy na pewno chcesz wyciągnąć ten wpis schowka?", - StashApply: "Zastosuj schowek", - SureApplyStashEntry: "Czy na pewno chcesz zastosować ten wpis schowka?", - NoTrackedStagedFilesStash: "Nie masz śledzonych/zatwierdzonych plików do schowania", - NoFilesToStash: "Nie masz plików do schowania", - StashChanges: "Schowaj zmiany", - RenameStash: "Zmień nazwę schowka", - RenameStashPrompt: "Zmień nazwę schowka: {{.stashName}}", - OpenConfig: "Otwórz plik konfiguracyjny", - EditConfig: "Edytuj plik konfiguracyjny", - ForcePush: "Wymuś wysłanie", - ForcePushPrompt: "Twoja gałąź rozbiegła się z gałęzią zdalną. Naciśnij {{.cancelKey}}, aby anulować, lub {{.confirmKey}}, aby wymusić wysłanie.", - ForcePushDisabled: "Twoja gałąź rozbiegła się z gałęzią zdalną i masz wyłączone wymuszanie wysyłania", - UpdatesRejectedAndForcePushDisabled: "Aktualizacje zostały odrzucone i wyłączyłeś wymuszenie wysłania", - CheckForUpdate: "Sprawdź aktualizacje", - CheckingForUpdates: "Sprawdzanie aktualizacji...", - UpdateAvailableTitle: "Dostępna aktualizacja!", - UpdateAvailable: "Pobrać i zainstalować wersję {{.newVersion}}?", - UpdateInProgressWaitingStatus: "Aktualizacja", - UpdateCompletedTitle: "Aktualizacja zakończona!", - UpdateCompleted: "Aktualizacja została pomyślnie zainstalowana. Uruchom ponownie lazygit, aby zaczęła działać.", - FailedToRetrieveLatestVersionErr: "Nie udało się pobrać informacji o wersji", - OnLatestVersionErr: "Masz już najnowszą wersję", - MajorVersionErr: "Nowa wersja ({{.newVersion}}) zawiera zmiany niekompatybilne wstecznie w porównaniu z bieżącą wersją ({{.currentVersion}})", - CouldNotFindBinaryErr: "Nie można znaleźć żadnego pliku binarnego pod adresem {{.url}}", - UpdateFailedErr: "Aktualizacja nie powiodła się: {{.errMessage}}", - ConfirmQuitDuringUpdateTitle: "Aktualizacja w toku", - ConfirmQuitDuringUpdate: "Aktualizacja jest w toku. Czy na pewno chcesz wyjść?", - MergeToolTitle: "Narzędzie scalania", - MergeToolPrompt: "Czy na pewno chcesz otworzyć `git mergetool`?", - IntroPopupMessage: englishIntroPopupMessage, - DeprecatedEditConfigWarning: englishDeprecatedEditConfigWarning, - GitconfigParseErr: `Gogit nie mógł przetworzyć pliku gitconfig z powodu obecności niezacytowanych znaków '\'. Usunięcie ich powinno rozwiązać problem.`, - EditFile: `Edytuj plik`, - EditFileTooltip: "Otwórz plik w zewnętrznym edytorze.", - OpenFile: `Otwórz plik`, - OpenFileTooltip: "Otwórz plik w domyślnej aplikacji.", - OpenInEditor: "Otwórz w edytorze", - IgnoreFile: `Dodaj do .gitignore`, - ExcludeFile: `Dodaj do .git/info/exclude`, - RefreshFiles: `Odśwież pliki`, - Merge: `Scal`, - MergeBranchTooltip: "Scal wybraną gałąź z aktualnie sprawdzoną gałęzią.", - ConfirmQuit: `Czy na pewno chcesz wyjść?`, - SwitchRepo: `Przełącz na ostatnie repozytorium`, - AllBranchesLogGraph: `Pokaż wszystkie gałęzie w logach`, - UnsupportedGitService: `Nieobsługiwana usługa git`, - CreatePullRequest: `Utwórz żądanie ściągnięcia`, - CopyPullRequestURL: `Kopiuj adres URL żądania ściągnięcia do schowka`, - NoBranchOnRemote: `Ta gałąź nie istnieje na zdalnym serwerze. Musisz ją najpierw wysłać na zdalny serwer.`, - Fetch: `Pobierz`, - FetchTooltip: "Pobierz zmiany ze zdalnego serwera.", - NoAutomaticGitFetchTitle: `Brak automatycznego pobierania git`, - NoAutomaticGitFetchBody: `Lazygit nie może używać "git fetch" w prywatnym repozytorium; użyj 'f' w panelu plików, aby ręcznie uruchomić "git fetch"`, - FileEnter: `Zatwierdź linie / Zwiń katalog`, - FileEnterTooltip: "Jeśli wybrany element jest plikiem, skup się na widoku zatwierdzania, aby móc zatwierdzać poszczególne fragmenty/linie. Jeśli wybrany element jest katalogiem, zwiń/rozwiń go.", - FileStagingRequirements: `Można zatwierdzać poszczególne linie tylko dla śledzonych plików`, - StageSelectionTooltip: `Przełącz zaznaczenie zatwierdzone/niezatwierdzone.`, - DiscardSelection: `Odrzuć`, - DiscardSelectionTooltip: "Gdy zaznaczona jest niezatwierdzona zmiana, odrzuć ją używając `git reset`. Gdy zaznaczona jest zatwierdzona zmiana, cofnij zatwierdzenie.", - ToggleRangeSelect: "Przełącz zaznaczenie zakresu", - ToggleSelectHunk: "Zaznacz fragment", - ToggleSelectHunkTooltip: "Przełącz tryb zaznaczania fragmentu.", - ToggleSelectionForPatch: `Przełącz linie w łatce`, - EditHunk: `Edytuj fragment`, - EditHunkTooltip: "Edytuj wybrany fragment w zewnętrznym edytorze.", - ToggleStagingView: "Przełącz widok", - ToggleStagingViewTooltip: "Przełącz na inny widok (zatwierdzone/niezatwierdzone zmiany).", - ReturnToFilesPanel: `Wróć do panelu plików`, - FastForward: `Szybkie przewijanie`, - FastForwardTooltip: "Szybkie przewijanie wybranej gałęzi z jej źródła.", - FastForwarding: "Szybkie przewijanie", - FoundConflictsTitle: "Konflikty!", - ViewConflictsMenuItem: "Pokaż konflikty", - AbortMenuItem: "Przerwij %s", - ViewMergeRebaseOptions: "Pokaż opcje scalania/rebase", - ViewMergeRebaseOptionsTooltip: "Pokaż opcje do przerwania/kontynuowania/pominięcia bieżącego scalania/rebase.", - ViewMergeOptions: "Pokaż opcje scalania", - ViewRebaseOptions: "Pokaż opcje rebase", - NotMergingOrRebasing: "Aktualnie nie wykonujesz ani scalania, ani rebase", - AlreadyRebasing: "Nie można wykonać tej akcji podczas rebase", - RecentRepos: "Ostatnie repozytoria", - MergeOptionsTitle: "Opcje scalania", - RebaseOptionsTitle: "Opcje rebase", - CommitSummaryTitle: "Podsumowanie commita", - CommitDescriptionTitle: "Opis commita", - CommitDescriptionSubTitle: "Naciśnij {{.togglePanelKeyBinding}}, aby przełączyć fokus, {{.commitMenuKeybinding}}, aby otworzyć menu", - LocalBranchesTitle: "Lokalne gałęzie", - SearchTitle: "Szukaj", - TagsTitle: "Tagi", - MenuTitle: "Menu", - CommitMenuTitle: "Menu commita", - RemotesTitle: "Zdalne", - RemoteBranchesTitle: "Zdalne gałęzie", - PatchBuildingTitle: "Główny panel (budowanie łatki)", - InformationTitle: "Informacje", - SecondaryTitle: "Dodatkowy", - ReflogCommitsTitle: "Reflog", - GlobalTitle: "Globalne skróty klawiszowe", - ConflictsResolved: "Wszystkie konflikty scalania rozwiązane. Kontynuować?", - Continue: "Kontynuuj", - Keybindings: "Skróty klawiszowe", - KeybindingsMenuSectionLocal: "Lokalne", - KeybindingsMenuSectionGlobal: "Globalne", - KeybindingsMenuSectionNavigation: "Nawigacja", - RebasingTitle: "Rebase '{{.checkedOutBranch}}'", - RebasingFromBaseCommitTitle: "Rebase '{{.checkedOutBranch}}' od oznaczonego commita bazowego", - SimpleRebase: "Prosty rebase na '{{.ref}}'", - InteractiveRebase: "Interaktywny rebase na '{{.ref}}'", - InteractiveRebaseTooltip: "Rozpocznij interaktywny rebase z przerwaniem na początku, abyś mógł zaktualizować commity TODO przed kontynuacją.", - MustSelectTodoCommits: "Podczas rebase ta akcja działa tylko na zaznaczonych commitach TODO.", - ConfirmMerge: "Czy na pewno chcesz scalić '{{.selectedBranch}}' z '{{.checkedOutBranch}}'?", - FwdNoUpstream: "Nie można szybko przewinąć gałęzi bez źródła", - FwdNoLocalUpstream: "Nie można szybko przewinąć gałęzi, której zdalne źródło nie jest zarejestrowane lokalnie", - FwdCommitsToPush: "Nie można szybko przewinąć gałęzi z commitami do wysłania", - PullRequestNoUpstream: "Nie można otworzyć żądania ściągnięcia dla gałęzi bez źródła", - ErrorOccurred: "Wystąpił błąd! Proszę utworzyć zgłoszenie na", - NoRoom: "Za mało miejsca", - YouAreHere: "JESTEŚ TUTAJ", - YouDied: "ZGINĄŁEŚ!", - RewordNotSupported: "Zmiana słów commitów podczas interaktywnego rebase nie jest obecnie obsługiwana", - ChangingThisActionIsNotAllowed: "Zmiana tego rodzaju wpisu rebase TODO nie jest dozwolona", - CherryPickCopy: "Kopiuj (cherry-pick)", - CherryPickCopyTooltip: "Oznacz commit jako skopiowany. Następnie, w widoku lokalnych commitów, możesz nacisnąć `{{.paste}}`, aby wkleić (cherry-pick) skopiowane commity do sprawdzonej gałęzi. W dowolnym momencie możesz nacisnąć `{{.escape}}`, aby anulować zaznaczenie.", - CherryPickCopyRangeTooltip: "Oznacz commity jako skopiowane od ostatniego skopiowanego commita do wybranego commita.", - PasteCommits: "Wklej (cherry-pick)", - SureCherryPick: "Czy na pewno chcesz cherry-pick skopiowane commity na tę gałąź?", - CherryPick: "Cherry-pick", - CannotCherryPickNonCommit: "Nie można cherry-pick tego rodzaju wpisu TODO", - CannotCherryPickMergeCommit: "Cherry-pick commitów scalających nie jest obsługiwane", - Donate: "Wesprzyj", - AskQuestion: "Zadaj pytanie", - PrevLine: "Wybierz poprzednią linię", - NextLine: "Wybierz następną linię", - PrevHunk: "Idź do poprzedniego fragmentu", - NextHunk: "Idź do następnego fragmentu", - PrevConflict: "Poprzedni konflikt", - NextConflict: "Następny konflikt", - SelectPrevHunk: "Poprzedni fragment", - SelectNextHunk: "Następny fragment", - ScrollDown: "Przewiń w dół", - ScrollUp: "Przewiń w górę", - ScrollUpMainWindow: "Przewiń główne okno w górę", - ScrollDownMainWindow: "Przewiń główne okno w dół", - AmendCommitTitle: "Popraw commit", - AmendCommitPrompt: "Czy na pewno chcesz poprawić ten commit swoimi zatwierdzonymi plikami?", - DropCommitTitle: "Usuń commit", - DropCommitPrompt: "Czy na pewno chcesz usunąć wybrane commity?", - PullingStatus: "Ściąganie", - PushingStatus: "Wysyłanie", - FetchingStatus: "Pobieranie", - SquashingStatus: "Sciskanie", - FixingStatus: "Naprawianie", - DeletingStatus: "Usuwanie", - DroppingStatus: "Upuszczanie", - MovingStatus: "Przesuwanie", - RebasingStatus: "Rebase", - MergingStatus: "Scalanie", - LowercaseRebasingStatus: "rebase", // małe litery, ponieważ pojawia się w nawiasach - LowercaseMergingStatus: "scalanie", // małe litery, ponieważ pojawia się w nawiasach - AmendingStatus: "Poprawianie", - CherryPickingStatus: "Cherry-picking", - UndoingStatus: "Cofanie", - RedoingStatus: "Ponawianie", - CheckingOutStatus: "Sprawdzanie", - CommittingStatus: "Commitowanie", - RevertingStatus: "Przywracanie", - CreatingFixupCommitStatus: "Tworzenie commita poprawiającego", - CommitFiles: "Zatwierdź pliki", - SubCommitsDynamicTitle: "Commity (%s)", - CommitFilesDynamicTitle: "Pliki różnic (%s)", - RemoteBranchesDynamicTitle: "Zdalne gałęzie (%s)", - ViewItemFiles: "Wyświetl pliki", - ViewItemFilesTooltip: "Wyświetl pliki zmodyfikowane przez wybrany element.", - CommitFilesTitle: "Pliki commita", - CheckoutCommitFileTooltip: "Przełącz plik. Zastępuje plik w twoim drzewie roboczym wersją z wybranego commita.", - CanOnlyDiscardFromLocalCommits: "Można odrzucić tylko zmiany z lokalnych commitów", - Remove: "Usuń", - DiscardOldFileChangeTooltip: "Odrzuć zmiany w tym pliku z tego commita. Uruchamia interaktywny rebase w tle, więc możesz otrzymać konflikt scalania, jeśli późniejszy commit również zmienia ten plik.", - DiscardFileChangesTitle: "Odrzuć zmiany w pliku", - DiscardFileChangesPrompt: "Czy na pewno chcesz usunąć zmiany w wybranym pliku/ach z tego commita?\n\nTa akcja uruchomi rebase, cofając te zmiany w pliku. Pamiętaj, że jeśli późniejsze commity zależą od tych zmian, możesz potrzebować rozwiązać konflikty.\nUwaga: Spowoduje to również zresetowanie wszelkich aktywnych niestandardowych łatek.", - DisabledForGPG: "Funkcja niedostępna dla użytkowników używających GPG", - CreateRepo: "Nie w repozytorium git. Utworzyć nowe repozytorium git? (t/n): ", - BareRepo: "Próbujesz otworzyć Lazygit w gołym repozytorium, ale Lazygit jeszcze nie obsługuje gołych repozytoriów. Otworzyć najnowsze repozytorium? (t/n) ", - InitialBranch: "Nazwa gałęzi? (pozostaw puste dla domyślnej gita): ", - NoRecentRepositories: "Musisz otworzyć lazygit w repozytorium git. Brak ważnych ostatnich repozytoriów. Wyjście.", - IncorrectNotARepository: "Wartość 'notARepository' jest nieprawidłowa. Powinna być jedną z 'prompt', 'create', 'skip', lub 'quit'.", - AutoStashTitle: "Autostash?", - AutoStashPrompt: "Musisz schować i wyciągnąć swoje zmiany, aby je przenieść. Zrobić to automatycznie? (enter/esc)", - StashPrefix: "Automatyczne chowanie zmian dla ", - Discard: "Odrzuć", - DiscardFileChangesTooltip: "Wyświetl opcje odrzucania zmian w wybranym pliku.", - DiscardChangesTitle: "Odrzuć zmiany", - Cancel: "Anuluj", - DiscardAllChanges: "Odrzuć wszystkie zmiany", - DiscardUnstagedChanges: "Odrzuć niezatwierdzone zmiany", - DiscardAllChangesToAllFiles: "Zniszcz drzewo robocze", - DiscardAnyUnstagedChanges: "Odrzuć niezatwierdzone zmiany", - DiscardUntrackedFiles: "Odrzuć nieśledzone pliki", - DiscardStagedChanges: "Odrzuć zatwierdzone zmiany", - HardReset: "Twardy reset", - BranchDeleteTooltip: "Wyświetl opcje usuwania lokalnej/odległej gałęzi.", - TagDeleteTooltip: "Wyświetl opcje usuwania lokalnego/odległego tagu.", - Delete: "Usuń", - Reset: "Reset", - ResetTooltip: "Wyświetl opcje resetu (miękki/mieszany/twardy) do wybranego elementu.", - ResetSoftTooltip: "Resetuj HEAD do wybranego commita, zachowując zmiany między bieżącym a wybranym commit jako zmiany zatwierdzone.", - ResetMixedTooltip: "Resetuj HEAD do wybranego commita, zachowując zmiany między bieżącym a wybranym commit jako zmiany niezatwierdzone.", - ResetHardTooltip: "Resetuj HEAD do wybranego commita, odrzucając wszystkie zmiany między bieżącym a wybranym commit, jak również wszystkie bieżące modyfikacje w drzewie roboczym.", - ViewResetOptions: `Reset`, - FileResetOptionsTooltip: "Wyświetl opcje resetu dla drzewa roboczego (np. zniszczenie drzewa roboczego).", - FixupTooltip: "Włącz wybrany commit do commita poniżej. Podobnie do fixup, ale wiadomość wybranego commita zostanie odrzucona.", - CreateFixupCommitTooltip: "Utwórz commit 'fixup!' dla wybranego commita. Później możesz nacisnąć `{{.squashAbove}}` na tym samym commicie, aby zastosować wszystkie powyższe commity fixup.", - SquashAboveCommits: "Zastosuj commity fixup", - SquashAboveCommitsTooltip: `Scal wszystkie commity 'fixup!', albo powyżej wybranego commita, albo wszystkie w bieżącej gałęzi (autosquash).`, - SquashCommitsAboveSelectedTooltip: `Scal wszystkie commity 'fixup!' powyżej wybranego commita (autosquash).`, - SquashCommitsInCurrentBranchTooltip: `Scal wszystkie commity 'fixup!' w bieżącej gałęzi (autosquash).`, - SquashCommitsInCurrentBranch: "W bieżącej gałęzi", - SquashCommitsAboveSelectedCommit: "Powyżej wybranego commita", - CannotSquashCommitsInCurrentBranch: "Nie można scalić commitów w bieżącej gałęzi: commit HEAD jest commit merge lub jest obecny na głównej gałęzi.", - CreateFixupCommit: `Utwórz commit fixup`, - ExecuteCustomCommand: "Wykonaj polecenie niestandardowe", - ExecuteCustomCommandTooltip: "Wyświetl monit, w którym możesz wprowadzić polecenie powłoki do wykonania. Nie należy mylić z wcześniej skonfigurowanymi poleceniami niestandardowymi.", - CustomCommand: "Polecenie niestandardowe:", - CommitChangesWithoutHook: "Zatwierdź zmiany bez hooka pre-commit", - SkipHookPrefixNotConfigured: "Nie skonfigurowano prefiksu wiadomości commita do pomijania hooków. Ustaw `git.skipHookPrefix = 'WIP'` w swojej konfiguracji", - ResetTo: `Resetuj do`, - PressEnterToReturn: "Naciśnij enter, aby wrócić do lazygit", - ViewStashOptions: "Wyświetl opcje schowka", - ViewStashOptionsTooltip: "Wyświetl opcje schowka (np. schowaj wszystko, schowaj zatwierdzone, schowaj niezatwierdzone).", - Stash: "Schowaj", - StashTooltip: "Schowaj wszystkie zmiany. Dla innych wariantów schowania, użyj klawisza wyświetlania opcji schowka.", - StashAllChanges: "Schowaj wszystkie zmiany", - StashStagedChanges: "Schowaj zatwierdzone zmiany", - StashAllChangesKeepIndex: "Schowaj wszystkie zmiany i zachowaj indeks", - StashUnstagedChanges: "Schowaj niezatwierdzone zmiany", - StashIncludeUntrackedChanges: "Schowaj wszystkie zmiany włącznie z nieśledzonymi plikami", - StashOptions: "Opcje schowka", - NotARepository: "Błąd: musi być uruchomione wewnątrz repozytorium git", - WorkingDirectoryDoesNotExist: "Błąd: bieżący katalog roboczy nie istnieje", - Jump: "Skocz do panelu", - ScrollLeftRight: "Przewiń w lewo/prawo", - ScrollLeft: "Przewiń w lewo", - ScrollRight: "Przewiń w prawo", - DiscardPatch: "Odrzuć łatkę", - DiscardPatchConfirm: "Możesz zbudować łatkę tylko z jednego commita/stanu schowka na raz. Odrzucić bieżącą łatkę?", - DiscardPatchSameCommitConfirm: "Masz obecnie zmiany dodane do łatki dla tego commita. Odrzucić bieżącą łatkę?", - CantPatchWhileRebasingError: "Nie można budować łatki ani uruchamiać poleceń łatki podczas scalania lub rebasowania", - ToggleAddToPatch: "Przełącz plik włączony w łatkę", - ToggleAddToPatchTooltip: "Przełącz, czy plik jest włączony w niestandardową łatkę. Zobacz {{.doc}}.", - ToggleAllInPatch: "Przełącz wszystkie pliki", - ToggleAllInPatchTooltip: "Dodaj/usuń wszystkie pliki commita do niestandardowej łatki. Zobacz {{.doc}}.", - UpdatingPatch: "Aktualizowanie łatki", - ViewPatchOptions: "Wyświetl opcje niestandardowej łatki", - PatchOptionsTitle: "Opcje łatki", - NoPatchError: "Brak utworzonej łatki. Aby zacząć budować łatkę, użyj 'spacji' na pliku commita lub enter, aby dodać określone linie", - EmptyPatchError: "Łatka jest nadal pusta. Najpierw dodaj kilka plików lub linii do łatki.", - EnterCommitFile: "Wejdź do pliku / Przełącz zwiń katalog", - EnterCommitFileTooltip: "Jeśli plik jest wybrany, wejdź do pliku, aby móc dodawać/usuwać poszczególne linie do niestandardowej łatki. Jeśli wybrany jest katalog, przełącz katalog.", - ExitCustomPatchBuilder: `Wyjdź z budowniczego niestandardowej łatki`, - EnterUpstream: `Wprowadź upstream jako ' '`, - InvalidUpstream: "Nieprawidłowy upstream. Musi być w formacie ' '", - ReturnToRemotesList: `Wróć do listy zdalnych`, - NewRemote: `Nowy zdalny`, - NewRemoteName: `Nowa nazwa zdalnego:`, - NewRemoteUrl: `Nowy URL zdalnego:`, - ViewBranches: "Wyświetl gałęzie", - EditRemoteName: `Wprowadź zaktualizowaną nazwę zdalnego dla {{.remoteName}}:`, - EditRemoteUrl: `Wprowadź zaktualizowany URL zdalnego dla {{.remoteName}}:`, - RemoveRemote: `Usuń zdalny`, - RemoveRemoteTooltip: `Usuń wybrany zdalny. Wszelkie lokalne gałęzie śledzące gałąź zdalną z tego zdalnego nie zostaną dotknięte.`, - RemoveRemotePrompt: "Czy na pewno chcesz usunąć zdalny", - DeleteRemoteBranch: "Usuń gałąź zdalną", - DeleteRemoteBranchMessage: "Czy na pewno chcesz usunąć gałąź zdalną", - DeleteRemoteBranchTooltip: "Usuń gałąź zdalną ze zdalnego.", - SetAsUpstream: "Ustaw jako upstream", - SetAsUpstreamTooltip: "Ustaw wybraną gałąź zdalną jako upstream sprawdzonej gałęzi.", - SetUpstream: "Ustaw upstream wybranej gałęzi", - UnsetUpstream: "Usuń upstream wybranej gałęzi", - ViewDivergenceFromUpstream: "Wyświetl rozbieżność od upstream", - DivergenceSectionHeaderLocal: "Lokalne", - DivergenceSectionHeaderRemote: "Zdalne", - ViewUpstreamResetOptions: "Resetuj sprawdzoną gałąź na {{.upstream}}", - ViewUpstreamResetOptionsTooltip: "Wyświetl opcje resetowania sprawdzonej gałęzi na {{upstream}}. Uwaga: to nie zresetuje wybranej gałęzi na upstream, zresetuje sprawdzoną gałąź na upstream.", - ViewUpstreamRebaseOptions: "Rebase sprawdzonej gałęzi na {{.upstream}}", - ViewUpstreamRebaseOptionsTooltip: "Wyświetl opcje rebasowania sprawdzonej gałęzi na {{upstream}}. Uwaga: to nie zrebase'uje wybranej gałęzi na upstream, zrebase'uje sprawdzoną gałąź na upstream.", - UpstreamGenericName: "upstream wybranej gałęzi", - SetUpstreamTitle: "Ustaw gałąź upstream", - SetUpstreamMessage: "Czy na pewno chcesz ustawić gałąź upstream '{{.checkedOut}}' na '{{.selected}}'", - EditRemoteTooltip: "Edytuj nazwę lub URL wybranego zdalnego.", - TagCommit: "Otaguj commit", - TagCommitTooltip: "Utwórz nowy tag wskazujący na wybrany commit. Zostaniesz poproszony o wprowadzenie nazwy tagu i opcjonalnego opisu.", - TagMenuTitle: "Utwórz tag", - TagNameTitle: "Nazwa tagu", - TagMessageTitle: "Opis tagu", - AnnotatedTag: "Tag z adnotacją", - LightweightTag: "Lekki tag", - DeleteTagTitle: "Usuń tag '{{.tagName}}'?", - DeleteLocalTag: "Usuń lokalny tag", - DeleteRemoteTag: "Usuń zdalny tag", - RemoteTagDeletedMessage: "Zdalny tag usunięty", - SelectRemoteTagUpstream: "Zdalny, z którego usunąć tag '{{.tagName}}':", - DeleteRemoteTagPrompt: "Czy na pewno chcesz usunąć zdalny tag '{{.tagName}}' z '{{.upstream}}'?", - PushTagTitle: "Zdalny, do którego wysłać tag '{{.tagName}}':", - PushTag: "Wyślij tag", - PushTagTooltip: "Wyślij wybrany tag do zdalnego. Zostaniesz poproszony o wybranie zdalnego.", - NewTag: "Nowy tag", - NewTagTooltip: "Utwórz nowy tag z bieżącego commita. Zostaniesz poproszony o wprowadzenie nazwy tagu i opcjonalnego opisu.", - CreatingTag: "Tworzenie tagu", - ForceTag: "Wymuś Tag", - ForceTagPrompt: "Tag '{{.tagName}}' już istnieje. Naciśnij {{.cancelKey}}, aby anulować, lub {{.confirmKey}}, aby nadpisać.", - FetchRemoteTooltip: "Pobierz aktualizacje z zdalnego repozytorium. Pobiera nowe commity i gałęzie bez scalania ich z lokalnymi gałęziami.", - FetchingRemoteStatus: "Pobieranie zdalnego", - CheckoutCommit: "Przełącz commit", - CheckoutCommitTooltip: "Przełącz wybrany commit jako odłączoną HEAD.", - SureCheckoutThisCommit: "Czy na pewno chcesz przełączyć ten commit?", - GitFlowOptions: "Pokaż opcje git-flow", - NotAGitFlowBranch: "To nie wygląda na gałąź git flow", - NewGitFlowBranchPrompt: "Nowa nazwa {{.branchType}}:", - - IgnoreTracked: "Ignoruj śledzony plik", - IgnoreTrackedPrompt: "Czy na pewno chcesz zignorować śledzony plik?", - ExcludeTracked: "Wyklucz śledzony plik", - ExcludeTrackedPrompt: "Czy na pewno chcesz wykluczyć śledzony plik?", - ViewResetToUpstreamOptions: "Pokaż opcje resetowania do upstream", - NextScreenMode: "Następny tryb ekranu (normalny/półpełny/pełnoekranowy)", - PrevScreenMode: "Poprzedni tryb ekranu", - StartSearch: "Szukaj w bieżącym widoku po tekście", - StartFilter: "Filtruj bieżący widok po tekście", - Panel: "Panel", - KeybindingsLegend: "Legenda: `` oznacza ctrl+b, `` oznacza alt+b, `B` oznacza shift+b", - RenameBranch: "Zmień nazwę gałęzi", - BranchUpstreamOptionsTitle: "Opcje upstream", - ViewBranchUpstreamOptions: "Pokaż opcje upstream", - ViewBranchUpstreamOptionsTooltip: "Pokaż opcje dotyczące upstream gałęzi, np. ustawianie/usuwanie upstream i resetowanie do upstream.", - UpstreamNotSetError: "Wybrana gałąź nie ma upstream (lub upstream nie jest przechowywany lokalnie)", - Upstream: "Upstream", - UpstreamTooltip: "Pokaż opcje upstream dla wybranej gałęzi, np. ustawianie/usuwanie upstream i resetowanie do upstream.", - NewBranchNamePrompt: "Wprowadź nową nazwę gałęzi dla gałęzi", - RenameBranchWarning: "Ta gałąź śledzi zdalną. Ta akcja zmieni tylko lokalną nazwę gałęzi, nie nazwę zdalnej gałęzi. Kontynuować?", - OpenKeybindingsMenu: "Otwórz menu przypisań klawiszy", - ResetCherryPick: "Resetuj wybrane (cherry-picked) commity", - NextTab: "Następna zakładka", - PrevTab: "Poprzednia zakładka", - CantUndoWhileRebasing: "Nie można cofnąć podczas rebasingu", - CantRedoWhileRebasing: "Nie można ponowić podczas rebasingu", - MustStashWarning: "Wyjęcie łatki do indeksu wymaga schowania i odschowania zmian. Jeśli coś pójdzie nie tak, będziesz mógł uzyskać dostęp do plików ze schowka. Kontynuować?", - MustStashTitle: "Musisz schować", - ConfirmationTitle: "Panel potwierdzenia", - PrevPage: "Poprzednia strona", - NextPage: "Następna strona", - GotoTop: "Przewiń do góry", - GotoBottom: "Przewiń do dołu", - FilteringBy: "Filtrowanie przez", - ResetInParentheses: "(Resetuj)", - OpenFilteringMenu: "Pokaż opcje filtrowania", - OpenFilteringMenuTooltip: "Pokaż opcje filtrowania dziennika commitów, tak aby pokazywane były tylko commity pasujące do filtra.", - FilterBy: "Filtruj przez", - ExitFilterMode: "Zatrzymaj filtrowanie", - FilterPathOption: "Wprowadź ścieżkę do filtrowania", - FilterAuthorOption: "Wprowadź autora do filtrowania", - EnterFileName: "Wprowadź ścieżkę:", - EnterAuthor: "Wprowadź autora:", - FilteringMenuTitle: "Filtrowanie", - WillCancelExistingFilterTooltip: "Uwaga: to anuluje istniejący filtr", - MustExitFilterModeTitle: "Polecenie niedostępne", - MustExitFilterModePrompt: "Polecenie niedostępne w trybie filtrowania po ścieżce. Wyjść z trybu filtrowania po ścieżce?", - Diff: "Różnice", - EnterRefToDiff: "Wprowadź ref do różnic", - EnterRefName: "Wprowadź ref:", - ExitDiffMode: "Wyjdź z trybu różnic", - DiffingMenuTitle: "Różnicowanie", - SwapDiff: "Odwróć kierunek różnic", - ViewDiffingOptions: "Pokaż opcje różnicowania", - ViewDiffingOptionsTooltip: "Pokaż opcje dotyczące różnicowania dwóch refów, np. różnicowanie względem wybranego refa, wprowadzanie refa do różnicowania i odwracanie kierunku różnic.", - OpenCommandLogMenu: "Pokaż opcje dziennika poleceń", - OpenCommandLogMenuTooltip: "Pokaż opcje dla dziennika poleceń, np. pokazywanie/ukrywanie dziennika poleceń i skupienie na dzienniku poleceń.", - ShowingGitDiff: "Pokazuje wynik dla:", - CommitDiff: "Różnice commita", - CopyCommitHashToClipboard: "Kopiuj hash commita do schowka", - CommitHash: "hash commita", - CommitURL: "URL commita", - CopyCommitMessageToClipboard: "Kopiuj wiadomość commita do schowka", - CommitMessage: "Wiadomość commita", - CommitSubject: "Temat commita", - CommitAuthor: "Autor commita", - CopyCommitAttributeToClipboard: "Kopiuj atrybut commita do schowka", - CopyCommitAttributeToClipboardTooltip: "Kopiuj atrybut commita do schowka (np. hash, URL, różnice, wiadomość, autor).", - CopyBranchNameToClipboard: "Kopiuj nazwę gałęzi do schowka", - CopyPathToClipboard: "Kopiuj ścieżkę do schowka", - CopySelectedTextToClipboard: "Kopiuj zaznaczony tekst do schowka", - CommitPrefixPatternError: "Błąd w wzorcu commitPrefix", - NoFilesStagedTitle: "Brak plików przygotowanych", - NoFilesStagedPrompt: "Nie przygotowałeś żadnych plików. Zatwierdzić wszystkie pliki?", - BranchNotFoundTitle: "Gałąź nie znaleziona", - BranchNotFoundPrompt: "Gałąź nie znaleziona. Utwórz nową gałąź o nazwie", - BranchUnknown: "Gałąź nieznana", - DiscardChangeTitle: "Odrzuć zmianę", - DiscardChangePrompt: "Czy na pewno chcesz odrzucić tę zmianę (git reset)? Jest to nieodwracalne.\nAby wyłączyć to okno dialogowe, ustaw klucz konfiguracyjny 'gui.skipDiscardChangeWarning' na true", - CreateNewBranchFromCommit: "Utwórz nową gałąź z commita", - BuildingPatch: "Tworzenie łatki", - ViewCommits: "Pokaż commity", - MinGitVersionError: "Wersja Gita musi być co najmniej 2.20 (tj. od 2018 roku). Proszę zaktualizować wersję Gita. Alternatywnie zgłoś problem na https://github.com/jesseduffield/lazygit/issues, aby lazygit był bardziej kompatybilny wstecz.", - RunningCustomCommandStatus: "Uruchamianie niestandardowego polecenia", - SubmoduleStashAndReset: "Schowaj niezatwierdzone zmiany submodułu i zaktualizuj", - AndResetSubmodules: "I zresetuj submoduły", - Enter: "Wejdź", - EnterSubmoduleTooltip: "Wejdź do submodułu. Po wejściu do submodułu możesz nacisnąć `{{.escape}}`, aby wrócić do repozytorium nadrzędnego.", - CopySubmoduleNameToClipboard: "Kopiuj nazwę submodułu do schowka", - RemoveSubmodule: "Usuń submoduł", - RemoveSubmodulePrompt: "Czy na pewno chcesz usunąć submoduł '%s' i odpowiadający mu katalog? Jest to nieodwracalne.", - RemoveSubmoduleTooltip: "Usuń wybrany submoduł i odpowiadający mu katalog.", - ResettingSubmoduleStatus: "Resetowanie submodułu", - NewSubmoduleName: "Nowa nazwa submodułu:", - NewSubmoduleUrl: "Nowy URL submodułu:", - NewSubmodulePath: "Nowa ścieżka submodułu:", - NewSubmodule: "Nowy submoduł", - AddingSubmoduleStatus: "Dodawanie submodułu", - UpdateSubmoduleUrl: "Zaktualizuj URL dla submodułu '%s'", - UpdatingSubmoduleUrlStatus: "Aktualizowanie URL", - EditSubmoduleUrl: "Zaktualizuj URL submodułu", - InitializingSubmoduleStatus: "Inicjalizowanie submodułu", - InitSubmoduleTooltip: "Zainicjuj wybrany submoduł, aby przygotować do pobrania. Prawdopodobnie chcesz to kontynuować, wywołując akcję 'update', aby pobrać submoduł.", - Update: "Aktualizuj", - Initialize: "Zainicjuj", - SubmoduleUpdateTooltip: "Aktualizuj wybrany submoduł.", - UpdatingSubmoduleStatus: "Aktualizowanie submodułu", - BulkInitSubmodules: "Masowe inicjowanie submodułów", - BulkUpdateSubmodules: "Masowa aktualizacja submodułów", - BulkDeinitSubmodules: "Masowe wyłączanie submodułów", - ViewBulkSubmoduleOptions: "Pokaż opcje masowych operacji na submodułach", - BulkSubmoduleOptions: "Opcje masowych operacji na submodułach", - RunningCommand: "Uruchamianie polecenia", - SubCommitsTitle: "Sub-commity", - SubmodulesTitle: "Submoduły", - NavigationTitle: "Nawigacja panelu listy", - SuggestionsCheatsheetTitle: "Podpowiedzi", - SuggestionsTitle: "Podpowiedzi (naciśnij %s, aby skupić)", - ExtrasTitle: "Dziennik poleceń", - PushingTagStatus: "Wysyłanie tagu", - PullRequestURLCopiedToClipboard: "URL żądania ściągnięcia skopiowany do schowka", - CommitDiffCopiedToClipboard: "Różnice commita skopiowane do schowka", - CommitURLCopiedToClipboard: "URL commita skopiowany do schowka", - CommitMessageCopiedToClipboard: "Wiadomość commita skopiowana do schowka", - CommitSubjectCopiedToClipboard: "Temat commita skopiowany do schowka", - CommitAuthorCopiedToClipboard: "Autor commita skopiowany do schowka", - PatchCopiedToClipboard: "Łatka skopiowana do schowka", - CopiedToClipboard: "skopiowane do schowka", - ErrCannotEditDirectory: "Nie można edytować katalogu: można edytować tylko pojedyncze pliki", - ErrStageDirWithInlineMergeConflicts: "Nie można przygotować/odprzygotować katalogu zawierającego pliki z konfliktami scalania w linii. Proszę najpierw rozwiązać konflikty scalania", - ErrRepositoryMovedOrDeleted: "Nie można znaleźć repozytorium. Mogło zostać przeniesione lub usunięte ¯\\_(ツ)_/¯", - CommandLog: "Dziennik poleceń", - ErrWorktreeMovedOrRemoved: "Nie można znaleźć drzewa roboczego. Mogło zostać przeniesione lub usunięte ¯\\_(ツ)_/¯", - ToggleShowCommandLog: "Przełącz pokazywanie/ukrywanie dziennika poleceń", - FocusCommandLog: "Skup na dzienniku poleceń", - CommandLogHeader: "Możesz ukryć/skupić się na tym panelu naciskając '%s'\n", - RandomTip: "Losowa porada", - SelectParentCommitForMerge: "Wybierz nadrzędny commit do scalenia", - ToggleWhitespaceInDiffView: "Przełącz białe znaki", - ToggleWhitespaceInDiffViewTooltip: "Przełącz czy zmiany białych znaków są pokazywane w widoku różnic.", - IgnoreWhitespaceDiffViewSubTitle: "(ignorując białe znaki)", - IgnoreWhitespaceNotSupportedHere: "Ignorowanie białych znaków nie jest wspierane w tym widoku", - IncreaseContextInDiffView: "Zwiększ rozmiar kontekstu w widoku różnic", - IncreaseContextInDiffViewTooltip: "Zwiększ ilość kontekstu pokazywanego wokół zmian w widoku różnic.", - DecreaseContextInDiffView: "Zmniejsz rozmiar kontekstu w widoku różnic", - DecreaseContextInDiffViewTooltip: "Zmniejsz ilość kontekstu pokazywanego wokół zmian w widoku różnic.", - DiffContextSizeChanged: "Zmieniono rozmiar kontekstu różnic na %d", - CreatePullRequestOptions: "Zobacz opcje tworzenia pull requesta", - DefaultBranch: "Domyślny branch", - SelectBranch: "Wybierz branch", - SelectConfigFile: "Wybierz plik konfiguracyjny", - NoConfigFileFoundErr: "Nie znaleziono pliku konfiguracyjnego", - LoadingFileSuggestions: "Ładowanie sugestii plików", - LoadingCommits: "Ładowanie commitów", - MustSpecifyOriginError: "Musisz określić zdalne repozytorium jeśli określasz branch", - GitOutput: "Wyjście Gita:", - GitCommandFailed: "Polecenie Gita nie powiodło się. Sprawdź logi poleceń po szczegóły (otwórz za pomocą %s)", - AbortTitle: "Przerwij %s", - AbortPrompt: "Czy na pewno chcesz przerwać bieżące %s?", - OpenLogMenu: "Zobacz opcje logów", - OpenLogMenuTooltip: "Zobacz opcje dla logów commitów, np. zmiana kolejności sortowania, ukrywanie grafu gita, pokazywanie całego grafu gita.", - LogMenuTitle: "Opcje logów commitów", - ToggleShowGitGraphAll: "Przełącz pokazanie całego grafu gita (dodaj flagę `--all` do `git log`)", - ShowGitGraph: "Pokaż graf gita", - SortOrder: "Kolejność sortowania", - SortAlphabetical: "Alfabetycznie", - SortByDate: "Data", - SortByRecency: "Najnowsze", - SortBasedOnReflog: "(na podstawie reflog)", - SortCommits: "Kolejność sortowania commitów", - CantChangeContextSizeError: "Nie można zmienić rozmiaru kontekstu będąc w trybie budowania patcha, ponieważ byliśmy zbyt leniwi, aby to wspierać przy wydaniu funkcji. Jeśli naprawdę tego chcesz, daj nam znać!", - OpenCommitInBrowser: "Otwórz commit w przeglądarce", - ViewBisectOptions: "Zobacz opcje bisect", - ConfirmRevertCommit: "Czy na pewno chcesz cofnąć {{.selectedCommit}}?", - RewordInEditorTitle: "Przeformułuj w edytorze", - RewordInEditorPrompt: "Czy na pewno chcesz przeformułować ten commit w swoim edytorze?", - HardResetAutostashPrompt: "Czy na pewno chcesz zrobić twardy reset do '%s'? Auto-stash zostanie wykonany jeśli będzie potrzebny.", - CheckoutPrompt: "Czy na pewno chcesz przełączyć się na '%s'?", - UpstreamGone: "(upstream zniknął)", - NukeDescription: "Jeśli chcesz, aby wszystkie zmiany w drzewie pracy zniknęły, to jest sposób na to. Jeśli są brudne zmiany w submodule, to zostaną one zapisane w submodule(s).", - DiscardStagedChangesDescription: "To stworzy nowy wpis stash zawierający tylko pliki w stanie staged, a następnie go usunie, tak że drzewo pracy zostanie tylko ze zmianami niezatwierdzonymi", - EmptyOutput: "", - Patch: "Patch", - CustomPatch: "Niestandardowy patch", - CommitsCopied: "commitów skopiowanych", // lowercase because it's used in a sentence - CommitCopied: "commit skopiowany", // lowercase because it's used in a sentence - ResetPatch: "Resetuj patch", - ResetPatchTooltip: "Wyczyść bieżący patch.", - ApplyPatch: "Zastosuj patch", - ApplyPatchTooltip: "Zastosuj bieżący patch do drzewa pracy.", - ApplyPatchInReverse: "Zastosuj patch w odwrotności", - ApplyPatchInReverseTooltip: "Zastosuj bieżący patch w odwrotności do drzewa pracy.", - RemovePatchFromOriginalCommit: "Usuń patch z oryginalnego commita (%s)", - RemovePatchFromOriginalCommitTooltip: "Usuń bieżący patch z jego commita. Jest to osiągane przez rozpoczęcie interaktywnego rebase na commicie, zastosowanie patcha w odwrotności, a następnie kontynuowanie rebase. Jeśli późniejsze commity zależą od patcha, możesz musieć rozwiązać konflikty.", - MovePatchOutIntoIndex: "Przenieś patch do indeksu", - MovePatchOutIntoIndexTooltip: "Przenieś patch z jego commita do indeksu. Jest to osiągane przez rozpoczęcie interaktywnego rebase na commicie, zastosowanie patcha w odwrotności, kontynuowanie rebase do zakończenia, a następnie zastosowanie patcha do indeksu. Jeśli późniejsze commity zależą od patcha, możesz musieć rozwiązać konflikty.", - MovePatchIntoNewCommit: "Przenieś patch do nowego commita", - MovePatchIntoNewCommitTooltip: "Przenieś patch z jego commita do nowego commita na górze oryginalnego commita. Jest to osiągane przez rozpoczęcie interaktywnego rebase na oryginalnym commicie, zastosowanie patcha w odwrotności, następnie zastosowanie patcha do indeksu i zatwierdzenie go jako nowy commit, przed kontynuowaniem rebase do zakończenia. Jeśli późniejsze commity zależą od patcha, możesz musieć rozwiązać konflikty.", - MovePatchToSelectedCommit: "Przenieś patch do wybranego commita (%s)", - MovePatchToSelectedCommitTooltip: "Przenieś patch z jego oryginalnego commita do wybranego commita. Jest to osiągane przez rozpoczęcie interaktywnego rebase na oryginalnym commicie, zastosowanie patcha w odwrotności, następnie kontynuowanie rebase do wybranego commita, przed zastosowaniem patcha do przodu i zmodyfikowaniem wybranego commita. Rebase jest następnie kontynuowany do zakończenia. Jeśli commity między źródłem a miejscem docelowym zależą od patcha, możesz musieć rozwiązać konflikty.", - CopyPatchToClipboard: "Kopiuj patch do schowka", - NoMatchesFor: "Brak dopasowań dla '%s' %s", - ExitSearchMode: "%s: Wyjdź z trybu wyszukiwania", - ExitTextFilterMode: "%s: Wyjdź z trybu filtrowania", - MatchesFor: "dopasowania dla '%s' (%d z %d) %s", // lowercase because it's after other text - SearchKeybindings: "%s: Następne dopasowanie, %s: Poprzednie dopasowanie, %s: Wyjdź z trybu wyszukiwania", - SearchPrefix: "Szukaj: ", - FilterPrefix: "Filtruj: ", - WorktreesTitle: "Drzewa pracy", - WorktreeTitle: "Drzewo pracy", - Switch: "Przełącz", - SwitchToWorktree: "Przełącz do drzewa pracy", - SwitchToWorktreeTooltip: "Przełącz do wybranego drzewa pracy.", - AlreadyCheckedOutByWorktree: "Ten branch jest już używany przez drzewo pracy {{.worktreeName}}. Czy chcesz przełączyć się do tego drzewa pracy?", - BranchCheckedOutByWorktree: "Branch {{.branchName}} jest używany przez drzewo pracy {{.worktreeName}}", - DetachWorktreeTooltip: "To uruchomi `git checkout --detach` na drzewie pracy, tak że przestanie ono używać brancha, ale drzewo pracy drzewa pracy zostanie nietknięte.", - Switching: "Przełączanie", - RemoveWorktree: "Usuń drzewo pracy", - RemoveWorktreeTitle: "Usuń drzewo pracy", - RemoveWorktreePrompt: "Czy na pewno chcesz usunąć drzewo pracy '{{.worktreeName}}'?", - ForceRemoveWorktreePrompt: "'{{.worktreeName}}' zawiera zmodyfikowane lub nieśledzone pliki (szczerze mówiąc, może zawierać oba). Czy na pewno chcesz to usunąć?", - RemovingWorktree: "Usuwanie drzewa pracy", - DetachWorktree: "Odłącz drzewo pracy", - DetachingWorktree: "Odłączanie drzewa pracy", - AddingWorktree: "Dodawanie drzewa pracy", - CantDeleteCurrentWorktree: "Nie możesz usunąć bieżącego drzewa pracy!", - AlreadyInWorktree: "Jesteś już w wybranym drzewie pracy", - CantDeleteMainWorktree: "Nie możesz usunąć głównego drzewa pracy!", - NoWorktreesThisRepo: "Brak drzew pracy", - MissingWorktree: "(brakujące)", - MainWorktree: "(główne)", - NewWorktree: "Nowe drzewo pracy", - NewWorktreePath: "Nowa ścieżka drzewa pracy", - NewWorktreeBase: "Nowa bazowa ref drzewa pracy", - RemoveWorktreeTooltip: "Usuń wybrane drzewo pracy. To usunie zarówno katalog drzewa pracy, jak i metadane o drzewie pracy w katalogu .git.", - BranchNameCannotBeBlank: "Nazwa brancha nie może być pusta", - NewBranchName: "Nowa nazwa brancha", - NewBranchNameLeaveBlank: "Nowa nazwa brancha (pozostaw puste, aby przełączyć {{.default}})", - ViewWorktreeOptions: "Zobacz opcje drzewa pracy", - CreateWorktreeFrom: "Utwórz drzewo pracy z {{.ref}}", - CreateWorktreeFromDetached: "Utwórz drzewo pracy z {{.ref}} (odłączone)", - LcWorktree: "drzewo pracy", - ChangingDirectoryTo: "Zmiana katalogu na {{.path}}", - Name: "Nazwa", - Branch: "Branch", - Path: "Ścieżka", - MarkedBaseCommitStatus: "Oznaczono bazowy commit dla rebase", - MarkAsBaseCommit: "Oznacz jako bazowy commit dla rebase", - MarkAsBaseCommitTooltip: "Wybierz bazowy commit dla następnego rebase. Kiedy robisz rebase na branch, tylko commity powyżej bazowego commita zostaną przeniesione. Używa to polecenia `git rebase --onto`.", - MarkedCommitMarker: "↑↑↑ Rebase rozpocznie się stąd ↑↑↑", - PleaseGoToURL: "Proszę przejdź do {{.url}}", - DisabledMenuItemPrefix: "Wyłączone: ", - NoCopiedCommits: "Brak skopiowanych commitów", - QuickStartInteractiveRebase: "Rozpocznij interaktywny rebase", - QuickStartInteractiveRebaseTooltip: "Rozpocznij interaktywny rebase dla commitów na twoim branchu. To będzie zawierać wszystkie commity od HEAD do pierwszego commita scalenia lub commita głównego brancha.\nJeśli chcesz zamiast tego rozpocząć interaktywny rebase od wybranego commita, naciśnij `{{.editKey}}`.", - CannotQuickStartInteractiveRebase: "Nie można rozpocząć interaktywnego rebase: commit HEAD jest commit'em scalenia lub jest obecny na głównym branchu, więc nie ma odpowiedniego bazowego commita, od którego można by zacząć rebase. Możesz rozpocząć interaktywny rebase z konkretnego commita, wybierając commit i naciskając `{{.editKey}}`.", - RangeSelectUp: "Zaznacz zakres w górę", - RangeSelectDown: "Zaznacz zakres w dół", - RangeSelectNotSupported: "Akcja nie wspiera zaznaczania zakresu, proszę wybrać pojedynczy element", - NoItemSelected: "Nie wybrano elementu", - SelectedItemIsNotABranch: "Wybrany element nie jest branch'em", - SelectedItemDoesNotHaveFiles: "Wybrany element nie ma plików do wyświetlenia", - RangeSelectNotSupportedForSubmodules: "Zaznaczanie zakresu nie jest wspierane dla submodułów", - OldCherryPickKeyWarning: "Klawisz 'c' nie jest już domyślnym klawiszem do kopiowania commitów do cherry pick. Proszę użyj `{{.copy}}` zamiast tego (i `{{.paste}}` aby wkleić). Powodem tej zmiany jest to, że klawisz 'v' do wybierania zakresu linii podczas stagingu jest teraz używany również do wybierania zakresu linii w każdym widoku listy, co oznacza, że musieliśmy znaleźć nowy klawisz do wklejania commitów, i jeśli zamierzamy teraz używać `{{.paste}}` do wklejania commitów, możemy równie dobrze użyć `{{.copy}}` do ich kopiowania. Jeśli chcesz skonfigurować klawisze, aby uzyskać stare zachowanie, ustaw następujące w swojej konfiguracji:\n\nkeybinding:\n universal:\n toggleRangeSelect: \n commits:\n cherryPickCopy: 'c'\n pasteCommits: 'v'", - - Actions: Actions{ - CheckoutCommit: "Przełącz commit", - CheckoutTag: "Przełącz tag", - CheckoutBranch: "Przełącz gałąź", - ForceCheckoutBranch: "Wymuś przełączenie gałęzi", - DeleteLocalBranch: "Usuń lokalną gałąź", - DeleteBranch: "Usuń gałąź", - Merge: "Scal", - RebaseBranch: "Rebazuj gałąź", - RenameBranch: "Zmień nazwę gałęzi", - CreateBranch: "Utwórz gałąź", - CherryPick: "(Cherry-pick) wklej commity", - CheckoutFile: "Przełącz plik", - DiscardOldFileChange: "Odrzuć starą zmianę w pliku", - SquashCommitDown: "Scal commit w dół", - FixupCommit: "Popraw commit", - RewordCommit: "Zmień treść commita", - DropCommit: "Odrzuć commit", - EditCommit: "Edytuj commit", - AmendCommit: "Popraw commit", - ResetCommitAuthor: "Zresetuj autora commita", - SetCommitAuthor: "Ustaw autora commita", - RevertCommit: "Cofnij commit", - CreateFixupCommit: "Utwórz commit poprawkowy", - SquashAllAboveFixupCommits: "Scal wszystkie powyższe commity poprawkowe", - CreateLightweightTag: "Utwórz lekki tag", - CreateAnnotatedTag: "Utwórz opisowy tag", - CopyCommitMessageToClipboard: "Kopiuj wiadomość commita do schowka", - CopyCommitSubjectToClipboard: "Kopiuj temat commita do schowka", - CopyCommitDiffToClipboard: "Kopiuj różnice commita do schowka", - CopyCommitHashToClipboard: "Kopiuj hash commita do schowka", - CopyCommitURLToClipboard: "Kopiuj URL commita do schowka", - CopyCommitAuthorToClipboard: "Kopiuj autora commita do schowka", - CopyCommitAttributeToClipboard: "Kopiuj do schowka", - CopyPatchToClipboard: "Kopiuj łatkę do schowka", - MoveCommitUp: "Przenieś commit w górę", - MoveCommitDown: "Przenieś commit w dół", - CustomCommand: "Polecenie niestandardowe", - - // TODO: remove - DiscardAllChangesInDirectory: "Odrzuć wszystkie zmiany w katalogu", - DiscardUnstagedChangesInDirectory: "Odrzuć niezatwierdzone zmiany w katalogu", - - DiscardAllChangesInFile: "Odrzuć wszystkie zmiany w wybranych plikach", - DiscardAllUnstagedChangesInFile: "Odrzuć wszystkie niezatwierdzone zmiany w wybranych plikach", - StageFile: "Dodaj plik do indeksu", - StageResolvedFiles: "Dodaj pliki, których konflikty scalania zostały rozwiązane", - UnstageFile: "Usuń plik z indeksu", - UnstageAllFiles: "Usuń wszystkie pliki z indeksu", - StageAllFiles: "Dodaj wszystkie pliki do indeksu", - IgnoreExcludeFile: "Ignoruj lub wyklucz plik", - IgnoreFileErr: "Nie można zignorować .gitignore", - ExcludeFile: "Wyklucz plik", - ExcludeGitIgnoreErr: "Nie można wykluczyć .gitignore", - Commit: "Commituj", - EditFile: "Edytuj plik", - Push: "Wypchnij", - Pull: "Pociągnij", - OpenFile: "Otwórz plik", - StashAllChanges: "Schowaj wszystkie zmiany", - StashAllChangesKeepIndex: "Schowaj wszystkie zmiany i zachowaj indeks", - StashStagedChanges: "Schowaj zatwierdzone zmiany", - StashUnstagedChanges: "Schowaj niezatwierdzone zmiany", - StashIncludeUntrackedChanges: "Schowaj wszystkie zmiany włącznie z nieśledzonymi plikami", - GitFlowFinish: "git flow zakończ", - GitFlowStart: "git flow rozpocznij", - CopyToClipboard: "Kopiuj do schowka", - CopySelectedTextToClipboard: "Kopiuj zaznaczony tekst do schowka", - RemovePatchFromCommit: "Usuń łatkę z commita", - MovePatchToSelectedCommit: "Przenieś łatkę do wybranego commita", - MovePatchIntoIndex: "Przenieś łatkę do indeksu", - MovePatchIntoNewCommit: "Przenieś łatkę do nowego commita", - DeleteRemoteBranch: "Usuń zdalną gałąź", - SetBranchUpstream: "Ustaw gałąź nadrzędną", - AddRemote: "Dodaj zdalne", - RemoveRemote: "Usuń zdalne", - UpdateRemote: "Aktualizuj zdalne", - ApplyPatch: "Zastosuj łatkę", - Stash: "Schowaj", - RenameStash: "Zmień nazwę schowka", - RemoveSubmodule: "Usuń podmoduł", - ResetSubmodule: "Resetuj podmoduł", - AddSubmodule: "Dodaj podmoduł", - UpdateSubmoduleUrl: "Aktualizuj URL podmodułu", - InitialiseSubmodule: "Zainicjuj podmoduł", - BulkInitialiseSubmodules: "Masowo zainicjuj podmoduły", - BulkUpdateSubmodules: "Masowo aktualizuj podmoduły", - BulkDeinitialiseSubmodules: "Masowo deinicjuj podmoduły", - UpdateSubmodule: "Aktualizuj podmoduł", - DeleteLocalTag: "Usuń lokalny tag", - DeleteRemoteTag: "Usuń zdalny tag", - PushTag: "Wypchnij tag", - NukeWorkingTree: "Zniszcz drzewo robocze", - DiscardUnstagedFileChanges: "Odrzuć niezatwierdzone zmiany w pliku", - RemoveUntrackedFiles: "Usuń nieśledzone pliki", - RemoveStagedFiles: "Usuń zatwierdzone pliki", - SoftReset: "Miękki reset", - MixedReset: "Mieszany reset", - HardReset: "Twardy reset", - FastForwardBranch: "Szybkie przewijanie gałęzi", - Undo: "Cofnij", - Redo: "Ponów", - CopyPullRequestURL: "Kopiuj URL żądania ściągnięcia", - OpenDiffTool: "Otwórz narzędzie różnic", - OpenMergeTool: "Otwórz narzędzie scalania", - OpenCommitInBrowser: "Otwórz commit w przeglądarce", - OpenPullRequest: "Otwórz żądanie ściągnięcia w przeglądarce", - StartBisect: "Rozpocznij bisect", - ResetBisect: "Resetuj bisect", - BisectSkip: "Pomiń bisect", - BisectMark: "Oznacz bisect", - RemoveWorktree: "Usuń drzewo robocze", - AddWorktree: "Dodaj drzewo robocze", - }, - Bisect: Bisect{ - Mark: "Oznacz bieżący commit (%s) jako %s", - MarkStart: "Oznacz %s jako %s (rozpocznij bisect)", - SkipCurrent: "Pomiń bieżący commit (%s)", - SkipSelected: "Pomiń wybrany commit (%s)", - ResetTitle: "Resetuj 'git bisect'", - ResetPrompt: "Czy na pewno chcesz zresetować 'git bisect'?", - ResetOption: "Resetuj bisect", - ChooseTerms: "Wybierz terminy bisect", - OldTermPrompt: "Termin dla starego/dobrego commita:", - NewTermPrompt: "Termin dla nowego/złego commita:", - BisectMenuTitle: "Bisect", - CompleteTitle: "Bisect zakończony", - CompletePrompt: "Bisect zakończony! Następujący commit wprowadził zmianę:\n\n%s\n\nCzy chcesz teraz zresetować 'git bisect'?", - CompletePromptIndeterminate: "Bisect zakończony! Niektóre commity zostały pominięte, więc którykolwiek z następujących commitów mógł wprowadzić zmianę:\n\n%s\n\nCzy chcesz teraz zresetować 'git bisect'?", - Bisecting: "Bisectowanie", - }, - Log: Log{ - EditRebase: "Rozpoczynanie interaktywnego rebazowania od '{{.ref}}'", - MoveCommitUp: "Przenoszenie TODO w dół: '{{.shortHash}}'", - MoveCommitDown: "Przenoszenie TODO w dół: '{{.shortHash}}'", - CherryPickCommits: "Cherry-picking commitów:\n'{{.commitLines}}'", - HandleUndo: "Cofanie ostatniego rozwiązania konfliktu", - HandleMidRebaseCommand: "Aktualizacja akcji rebazowania commita {{.shortHash}} na '{{.action}}'", - RemoveFile: "Usuwanie ścieżki '{{.path}}'", - CopyToClipboard: "Kopiowanie '{{.str}}' do schowka", - Remove: "Usuwanie '{{.filename}}'", - CreateFileWithContent: "Tworzenie pliku '{{.path}}'", - AppendingLineToFile: "Dodawanie '{{.line}}' do pliku '{{.filename}}'", - EditRebaseFromBaseCommit: "Rozpoczynanie interaktywnego rebazowania od '{{.baseCommit}}' na '{{.targetBranchName}}", - }, - BreakingChangesTitle: "Zmiany przełomowe", - BreakingChangesMessage: `Aktualizujesz do nowej wersji lazygit, która zawiera zmiany przełomowe. Proszę przejrzeć poniższe notatki i zaktualizować swoją konfigurację, jeśli jest to konieczne. -Aby uzyskać więcej informacji, zobacz pełne notatki do wydania na .`, - BreakingChangesByVersion: map[string]string{ - "0.41.0": `- Gdy naciśniesz 'g', aby wywołać menu resetu git, opcja 'mixed' jest teraz pierwsza i domyślna, a nie 'soft'. Jest to dlatego, że 'mixed' jest najczęściej używaną opcją. -- Panel wiadomości commita teraz domyślnie zawija tekst (tj. dodaje znaki nowej linii, gdy osiągniesz margines). Możesz dostosować konfigurację w następujący sposób: - -git: - commit: - autoWrapCommitMessage: true - autoWrapWidth: 72 - -- Klawisz 'v' był już używany w widoku staging do rozpoczęcia zaznaczania zakresu, ale teraz możesz go użyć do rozpoczęcia zaznaczania zakresu w dowolnym widoku. Niestety koliduje to z klawiszem 'v' dla wklejania commitów (cherry-pick), więc teraz wklejanie commitów odbywa się za pomocą 'shift+V', a dla spójności kopiowanie commitów odbywa się teraz za pomocą 'shift+C' zamiast 'c'. Zauważ, że klawisz 'v' to tylko jeden ze sposobów na rozpoczęcie zaznaczania zakresu: możesz zamiast tego użyć shift+góra/dół. Więc jeśli chcesz skonfigurować klawisze cherry-pick, aby uzyskać stare zachowanie, ustaw następujące w swojej konfiguracji: - -keybinding: - universal: - toggleRangeSelect: - commits: - cherryPickCopy: 'c' - pasteCommits: 'v' - -- Sciskanie fixupów za pomocą 'shift-S' teraz wywołuje menu, z domyślną opcją sciskania wszystkich commitów fixup w gałęzi. Oryginalne zachowanie sciskania tylko commitów fixup powyżej wybranego commita jest nadal dostępne jako druga opcja w tym menu. -- Statusy ładowania push/pull/fetch są teraz wyświetlane przy gałęzi, a nie w popupie. Pozwala to np. na równoczesne fetchowanie wielu gałęzi i widzenie statusu dla każdej gałęzi. -- Graf logu git w widoku commitów jest teraz zawsze wyświetlany domyślnie (wcześniej był wyświetlany tylko, gdy widok był maksymalizowany). Jeśli uznasz to za zbyt hałaśliwe, możesz to zmienić za pomocą ctrl+L -> 'Pokaż graf git' -> 'gdy maksymalizowany' - `, - }, - } -} diff --git a/pkg/i18n/russian.go b/pkg/i18n/russian.go deleted file mode 100644 index d7b7a61d4ef..00000000000 --- a/pkg/i18n/russian.go +++ /dev/null @@ -1,673 +0,0 @@ -package i18n - -const russianIntroPopupMessage = ` -Благодарю за использование lazygit! Серьёзно, вы просто супер. Три вещи, которыми я хочу поделиться: - - 1) Чтобы узнать о возможностях lazygit, посмотрите это видео: - https://youtu.be/CPLdltN7wgE - - 2) Обязательно ознакомьтесь с последними примечаниями к выпуску перейдя по ссылке: - https://github.com/jesseduffield/lazygit/releases - - 3) Используете git? Значит Вы программист! С Вашей помощью мы можем сделать lazygit лучше, - станьте участником и присоединиться к веселью в - https://github.com/jesseduffield/lazygit - Вы также можете поддержать меня и рассказать, над чем мне ещё стоит поработать, - нажав на кнопку "Поддержать" в правом нижнем углу. - Или поделиться любовь просто добавив репозиторий в избранные. -` - -const russianDeprecatedEditConfigWarning = ` -### Предупреждение об устаревшей конфигурации ### - -Следующие параметры конфигурации устарели и будут удалены в будущей -версии: -{{configs}} - -Пожалуйста, ознакомьтесь с - - https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#configuring-file-editing - -для получения актуальной информации о том, как настроить ваш редактор. - -` - -// exporting this so we can use it in tests -func RussianTranslationSet() TranslationSet { - return TranslationSet{ - NotEnoughSpace: "Недостаточно места для отрисовки панелей", - DiffTitle: "Сравнения", - FilesTitle: "Файлы", - BranchesTitle: "Ветки", - CommitsTitle: "Коммиты", - StashTitle: "Хранилище", - SnakeTitle: "Змейка", - EasterEgg: "Пасхалка", - UnstagedChanges: `Непроиндексированные Изменения`, - StagedChanges: `Проиндексированные Изменения`, - MainTitle: "Главная", - MergeConfirmTitle: "Слияние", - StagingTitle: "Главная панель (Индексирование)", - MergingTitle: "Главная панель (Слияние)", - NormalTitle: "Главная панель (Обычный)", - LogTitle: "Журнал", - CommitSummary: "Сводка коммита", - CredentialsUsername: "Имя пользователя", - CredentialsPassword: "Пароль", - CredentialsPassphrase: "Введите пароль для SSH ключа", - CredentialsPIN: "Введите PIN-код для SSH ключа", - PassUnameWrong: "Неверный пароль, кодовая фраза и/или имя пользователя", - Commit: "Сохранить изменения", - AmendLastCommit: "Правка последнего коммита", - AmendLastCommitTitle: "Правка Последнего Коммита", - SureToAmend: "Вы уверены, что хотите править последний коммит? Впоследствии можно изменить сообщение коммита на панели коммитов.", - NoCommitToAmend: "Не найден коммит для внесения поправок.", - CommitChangesWithEditor: "Сохранить изменения с помощью редактора git", - StatusTitle: "Статус", - Menu: "Меню", - Execute: "Выполнить", - Stage: "Переключить индекс", - ToggleStagedAll: "Все проиндексированные/непроиндексированные", - ToggleTreeView: "Переключить вид дерева файлов", - OpenMergeTool: "Открыть внешний инструмент слияния (git mergetool)", - Refresh: "Обновить", - Push: "Отправить изменения", - Pull: "Получить и слить изменения", - Scroll: "Прокрутить", - MergeConflictsTitle: "Конфликты Слияния", - Checkout: "Переключить", - FileFilter: "Фильтровать файлы (проиндексированные/непроиндексированные)", - FilterStagedFiles: "Показывать только проиндексированные файлы", - FilterUnstagedFiles: "Показывать только непроиндексированные файлы", - ResetFilter: "Сбросить фильтр", - NoChangedFiles: "Нет изменённых файлов", - SoftReset: "Мягкий сброс", - AlreadyCheckedOutBranch: "Вы уже переключились в эту ветку", - SureForceCheckout: "Вы уверены, что хотите принудительная переключить? Вы потеряете все локальные изменения", - ForceCheckoutBranch: "Принудительное Переключение Ветки", - BranchName: "Название ветки", - NewBranchNameBranchOff: "Название новой ветки (Ветка с '{{.branchName}}')", - CantDeleteCheckOutBranch: "Невозможно удалить переключённую ветку!", - ForceDeleteBranchMessage: "'{{.selectedBranchName}}' не полностью слилась. Вы уверены, что хотите удалить его?", - RebaseBranch: "Перебазировать переключённую ветку на эту ветку", - CantRebaseOntoSelf: "Невозможно перебазировать ветку на себя", - CantMergeBranchIntoItself: "Невозможно объединить ветку в себя", - ForceCheckout: "Принудительное переключение", - CheckoutByName: "Переключить по названию", - NewBranch: "Новая ветка", - NoBranchesThisRepo: "Нет веток для этого репозитория", - CommitWithoutMessageErr: "Вы не можете сохранить изменения без сообщения коммита", - Close: "Закрыть", - CloseCancel: "Закрыть/отменить", - Confirm: "Подтвердить", - Quit: "Выйти", - NoCommitsThisBranch: "Нет коммитов для этой ветки", - UpdateRefHere: "Обновить ветку '{{.ref}}' здесь", - CannotSquashOrFixupFirstCommit: "Ниже нет коммита, который можно было бы объединить", - Fixup: "Объединить несколько коммитов в один отбросив сообщение коммита (Fixup) ", - SureFixupThisCommit: "Вы уверены, что хотите объединить несколько коммитов, отбросив сообщение коммита? Он будет объединён с коммитом ниже", - SureSquashThisCommit: "Вы уверены, что хотите объединить несколько коммитов в нижний коммит?", - Squash: "Объединить коммиты (Squash)", - PickCommitTooltip: "Выбрать коммит (в середине перебазирования)", - RevertCommit: "Отменить коммит", - Reword: "Перефразировать коммит", - DropCommit: "Удалить коммит", - MoveDownCommit: "Переместить коммит вниз на один", - MoveUpCommit: "Переместить коммит вверх на один", - EditCommitTooltip: "Изменить коммит", - AmendCommitTooltip: "Править последний коммит с проиндексированными изменениями", - ResetAuthor: "Сброс автора коммита", - SetAuthor: "Установить автора", - AmendCommitAttribute: "Установить/убрать автора коммита", - SetAuthorPromptTitle: "Установить автора (должно выглядеть как «Имя »)", - SureResetCommitAuthor: "Поле автора этого автора будет обновлено в соответствии с настроенным пользователем. Это также обновляет временную метку автора. Продолжить?", - RewordCommitEditor: "Переписать коммит с помощью редактора", - Error: "Ошибка", - PickHunk: "Выбрать эту часть", - PickAllHunks: "Выбрать все части", - Undo: "Отменить", - UndoReflog: "Отменить (через reflog) (экспериментальный)", - RedoReflog: "Повторить (через reflog) (экспериментальный)", - UndoTooltip: "Журнал ссылок (reflog) будет использоваться для определения того, какую команду git запустить, чтобы отменить последнюю команду git. Сюда не входят изменения в рабочем дереве; учитываются только коммиты.", - RedoTooltip: "Журнал ссылок (reflog) будет использоваться для определения того, какую команду git нужно запустить, чтобы повторить последнюю команду git. Сюда не входят изменения в рабочем дереве; учитываются только коммиты.", - DiscardAllTooltip: "Отменить проиндексированные и непроиндексированные изменения в '{{.path}}'.", - DiscardUnstagedTooltip: "Отменить непроиндексированные изменения в '{{.path}}'.", - Pop: "Применить припрятанные изменения и тут же удалить их из хранилища", - Drop: "Удалить припрятанные изменения из хранилища", - Apply: "Применить припрятанные изменения", - NoStashEntries: "Нет записей в хранилище", - StashDrop: "Сбросить хранилище", - SureDropStashEntry: "Вы уверены, что хотите удалить эту запись хранилища?", - StashPop: "Применить припрятанные изменения и тут же удалить их из хранилища", - SurePopStashEntry: "Вы уверены, что хотите применить эти припрятанные изменения и тут же удалить их из хранилища?", - StashApply: "Применить припрятанные изменения", - SureApplyStashEntry: "Вы уверены, что хотите применить эти припрятанные изменения?", - NoTrackedStagedFilesStash: "У вас нет отслеженных/проиндексированных файлов для хранения", - NoFilesToStash: "У вас нет файлов для хранения", - StashChanges: "Припрятать изменения", - RenameStash: "Переименовать хранилище", - RenameStashPrompt: "Переименовать хранилище: {{.stashName}}", - OpenConfig: "Открыть файл конфигурации", - EditConfig: "Редактировать файл конфигурации", - ForcePush: "Принудительная отправка изменении", - ForcePushPrompt: "Ветка отклонилась от удалённой ветки. Нажмите «esc», чтобы отменить, или «enter», чтобы начать принудительную отправку изменении.", - ForcePushDisabled: "Ветка отклонилась от удалённой ветки. Принудительная отправка изменении была отключена", - UpdatesRejectedAndForcePushDisabled: "Обновления были отклонены. Принудительная отправка изменении была отключена", - CheckForUpdate: "Проверить обновления", - CheckingForUpdates: "Проверка обновлений...", - UpdateAvailableTitle: "Доступно обновление!", - UpdateAvailable: "Скачать и установить версию {{.newVersion}}?", - UpdateInProgressWaitingStatus: "Обновление", - UpdateCompletedTitle: "Обновление завершено!", - UpdateCompleted: "Обновление успешно установлено. Перезапустите lazygit, чтобы обновление вступило в силу.", - FailedToRetrieveLatestVersionErr: "Не удалось получить информацию о версии", - OnLatestVersionErr: "Установлена последняя версия", - MajorVersionErr: "Новая версия ({{.newVersion}}) содержит несовместимые с предыдущими версии изменения по сравнению с текущей версией ({{.currentVersion}})", - CouldNotFindBinaryErr: "Не удалось найти бинарный файл на {{.url}}", - UpdateFailedErr: "Не удалось обновить: {{.errMessage}}", - ConfirmQuitDuringUpdateTitle: "Идёт Обновление", - ConfirmQuitDuringUpdate: "Выполняется обновление. Вы уверены, что хотите выйти?", - MergeToolTitle: "Инструмент слияния", - MergeToolPrompt: "Вы уверены, что хотите открыть `git mergetool`?", - IntroPopupMessage: russianIntroPopupMessage, - DeprecatedEditConfigWarning: russianDeprecatedEditConfigWarning, - GitconfigParseErr: `Gogit не удалось проанализировать ваш файл gitconfig из-за наличия символов «\» без кавычек. Их удаление должно решить проблему.`, - EditFile: `Редактировать файл`, - OpenFile: `Открыть файл`, - IgnoreFile: `Добавить в .gitignore`, - ExcludeFile: `Добавить в .git/info/exclude`, - RefreshFiles: `Обновить файлы`, - Merge: `Слияние с текущей переключённой веткой`, - ConfirmQuit: `Вы уверены, что хотите выйти?`, - SwitchRepo: `Переключиться на последний репозиторий`, - AllBranchesLogGraph: `Показать все логи ветки`, - UnsupportedGitService: `Неподдерживаемая служба git`, - CreatePullRequest: `Создать запрос на принятие изменений`, - CopyPullRequestURL: `Скопировать URL запроса на принятие изменений в буфер обмена`, - NoBranchOnRemote: `Этой ветки не существует в удалённом репозитории. Сначала вам нужно его отправить в удалённый репозитории.`, - Fetch: `Получить изменения`, - NoAutomaticGitFetchTitle: `Нет автоматического получения изменении`, - NoAutomaticGitFetchBody: `Lazygit не может использовать «git fetch» в приватном репозитории; используйте «f» на панели файлов, чтобы запустить «git fetch» вручную`, - FileEnter: `Проиндексировать отдельные части/строки для файла или свернуть/развернуть для каталога`, - FileStagingRequirements: `Можно проиндексировать только отдельные строки для отслеживаемых файлов`, - StageSelectionTooltip: `Переключить строку в проиндексированные / непроиндексированные`, - DiscardSelection: `Отменить изменение (git reset)`, - ToggleRangeSelect: `Переключить выборку перетаскивания`, - ToggleSelectHunk: `Переключить выборку частей`, - ToggleSelectionForPatch: `Добавить/удалить строку(и) для патча`, - EditHunk: `Изменить эту часть`, - ToggleStagingView: `Переключиться на другую панель (проиндексированные/непроиндексированные изменения)`, - ReturnToFilesPanel: `Вернуться к панели файлов`, - FastForward: `Перемотать эту ветку вперёд из её upstream-ветки`, - FastForwarding: "Получить изменения и перемотать вперёд", - FoundConflictsTitle: "Конфликты!", - ViewConflictsMenuItem: "Просмотр конфликтов", - AbortMenuItem: "Прервать %s", - ViewMergeRebaseOptions: "Просмотреть параметры слияния/перебазирования", - NotMergingOrRebasing: "В данный момент вы не выполняете ни перебазирования, ни слияние", - AlreadyRebasing: "Невозможно выполнить это действие во время перебазирования", - RecentRepos: "Последние репозитории", - MergeOptionsTitle: "Параметры слияния", - RebaseOptionsTitle: "Параметры перебазирования", - CommitSummaryTitle: "Сводка коммита", - CommitDescriptionTitle: "Описание коммита", - CommitDescriptionSubTitle: "Нажмите вкладку, чтобы переключить фокус", - LocalBranchesTitle: "Локальные Ветки", - SearchTitle: "Поиск", - TagsTitle: "Теги", - MenuTitle: "Меню", - RemotesTitle: "Удалённые репозитории", - RemoteBranchesTitle: "Удалённые ветки", - PatchBuildingTitle: "Главная панель (сборка патчей)", - InformationTitle: "Информация", - SecondaryTitle: "Вторичный", - ReflogCommitsTitle: "Журнал ссылок (Reflog)", - GlobalTitle: "Глобальные сочетания клавиш", - ConflictsResolved: "Все конфликты слияния разрешены. Продолжить?", - Continue: "Продолжить", - Keybindings: "Связки клавиш", - RebasingTitle: "Перебазировать '{{.checkedOutBranch}}'", - SimpleRebase: "Простая перебазировка на '{{.ref}}'", - InteractiveRebase: "Интерактивная перебазировка на '{{.ref}}'", - InteractiveRebaseTooltip: "Начать интерактивную перебазировку с перерыва в начале, чтобы можно было обновить TODO коммиты, прежде чем продолжить.", - ConfirmMerge: "Вы уверены, что хотите to merge '{{.selectedBranch}}' into '{{.checkedOutBranch}}'?", - FwdNoUpstream: "Невозможно перемотать ветку без upstream-ветки", - FwdNoLocalUpstream: "Невозможно перемотать ветку. Удалённый репозитории не зарегистрирован локально", - FwdCommitsToPush: "Невозможно перемотать ветку с коммитами для отправки", - ErrorOccurred: "Произошла ошибка! Пожалуйста, заявите о проблеме на", - NoRoom: "Недостаточно места", - YouAreHere: "ВЫ ЗДЕСЬ", - YouDied: "ТЫ УМЕР!", - RewordNotSupported: "Переформулировка коммитов при интерактивном перебазировании в настоящее время не поддерживается", - ChangingThisActionIsNotAllowed: "Изменение этого типа записи todo перебазирования не допускается", - CherryPickCopy: "Скопировать отобранные коммит (cherry-pick)", - PasteCommits: "Вставить отобранные коммиты (cherry-pick)", - SureCherryPick: "Вы уверены, что хотите выборочно применить (cherry-picked) отобранные коммиты в эту ветку?", - CherryPick: "Выборочная отборка (Cherry-Pick)", - Donate: "Пожертвовать", - AskQuestion: "Задать вопрос", - PrevLine: "Выбрать предыдущую строку", - NextLine: "Выбрать следующую строку", - PrevHunk: "Выбрать предыдущую часть", - NextHunk: "Выбрать следующую часть", - PrevConflict: "Выбрать предыдущий конфликт", - NextConflict: "Выбрать следующий конфликт", - SelectPrevHunk: "Выбрать предыдущую часть", - SelectNextHunk: "Выбрать следующую часть", - ScrollDown: "Прокрутить вниз", - ScrollUp: "Прокрутить вверх", - ScrollUpMainWindow: "Прокрутить вверх главную панель", - ScrollDownMainWindow: "Прокрутить вниз главную панель", - AmendCommitTitle: "Править коммит (amend)", - AmendCommitPrompt: "Вы уверены, что хотите править этот коммит проиндексированными файлами?", - DropCommitTitle: "Удалить коммит", - DropCommitPrompt: "Вы уверены, что хотите удалить этот коммит?", - PullingStatus: "Получение и слияние изменении", - PushingStatus: "Отправка изменении", - FetchingStatus: "Получение изменении", - SquashingStatus: "Объединение коммитов", - FixingStatus: "Объединение коммитов, отбросив сообщение коммита", - DeletingStatus: "Удаление", - MovingStatus: "Перемещение", - RebasingStatus: "Перебазирование", - MergingStatus: "Слияние", - LowercaseRebasingStatus: "перебазировка", // lowercase because it shows up in parentheses - LowercaseMergingStatus: "слияние", // lowercase because it shows up in parentheses - AmendingStatus: "Правка коммита", - CherryPickingStatus: "Выборочная отборка (cherry-picking)", - UndoingStatus: "Отмена последней команды", - RedoingStatus: "Выполнение последней команды", - CheckingOutStatus: "Переключение", - CommittingStatus: "Сохранение изменении", - CommitFiles: "Сохранить изменения файлов", - SubCommitsDynamicTitle: "Коммиты (%s)", - CommitFilesDynamicTitle: "Различия файлов (%s)", - RemoteBranchesDynamicTitle: "Удалённые ветки (%s)", - ViewItemFiles: "Просмотреть файлы выбранного элемента", - CommitFilesTitle: "Сохранить Изменения Файлов", - CheckoutCommitFileTooltip: "Переключить файл", - CanOnlyDiscardFromLocalCommits: "Изменения можно отменить только из локальных коммитов.", - DiscardOldFileChangeTooltip: "Отменить изменения коммита в этом файле", - DiscardFileChangesTitle: "Отменить изменения файла", - DiscardFileChangesPrompt: "Вы уверены, что хотите удалить изменения в выбранных файлах из этого коммита?\n\nЭто действие запустит перебазирование и отменит изменения в этих файлах. Обратите внимание, что если последующие коммиты зависят от этих изменений, вам, возможно, придется разрешить конфликты.\nПримечание: это также сбросит все активные пользовательские патчи.", - DisabledForGPG: "Функция недоступна для пользователей, использующих GPG", - CreateRepo: "Не в git репозитории. Создать новый git репозиторий? (y/n):", - BareRepo: "Вы пытались открыть Lazygit в пустом репозитории, но Lazygit ещё не поддерживает пустые репозитории. Открыть последний репозиторий? (y/n)", - InitialBranch: "Название ветки? (оставьте пустым для git по умолчанию):", - NoRecentRepositories: "Необходимо открыть lazygit в git репозитории. Нет валидных последних репозиториев. Выход.", - IncorrectNotARepository: "Неверное значение 'notARepository'. Это должно быть одним из 'prompt', 'create', 'skip', или 'quit'.", - AutoStashTitle: "Автосохранить изменения?", - AutoStashPrompt: "Чтобы перенести изменения, их нужно сохранить и вынуть. Сделать это автоматически? (enter/esc)", - StashPrefix: "Автосохранение изменений для", - Discard: "Просмотреть параметры «отмены изменении»", - Cancel: "Отменить", - DiscardAllChanges: "Отменить все изменения", - DiscardUnstagedChanges: "Отменить непроиндексированные изменения", - DiscardAllChangesToAllFiles: "Разбомбить рабочее дерево?", - DiscardAnyUnstagedChanges: "Отменить непроиндексированные изменения", - DiscardUntrackedFiles: "Удалить неотслеживаемые файлы", - DiscardStagedChanges: "Отменить проиндексированные изменения", - HardReset: "Жёсткий сброс", - ViewResetOptions: `Просмотреть параметры сброса`, - CreateFixupCommitTooltip: `Создать fixup коммит для этого коммита`, - SquashAboveCommitsTooltip: `Объединить все 'fixup!' коммиты выше в выбранный коммит (автосохранение)`, - CreateFixupCommit: `Создать fixup коммит`, - ExecuteCustomCommand: "Выполнить пользовательскую команду", - CustomCommand: "Пользовательская Команда:", - CommitChangesWithoutHook: "Закоммитить изменения без предварительного хука коммита", - SkipHookPrefixNotConfigured: "Вы не настроили префикс сообщения коммита для пропуска хуков. Установите `git.skipHookPrefix = 'WIP'` в вашей конфигурации", - ResetTo: `Сбросить на`, - PressEnterToReturn: "Нажмите Enter, чтобы вернуться в lazygit", - ViewStashOptions: "Просмотреть параметры хранилища", - StashAllChanges: "Припрятать все изменения", - StashStagedChanges: "Припрятать проиндексированные изменения", - StashAllChangesKeepIndex: "Припрятать все изменения и сохранить индекс", - StashUnstagedChanges: "Припрятать непроиндексированные изменения", - StashIncludeUntrackedChanges: "Припрятать все изменения, включая неотслеживаемые файлы", - StashOptions: "Параметры хранилища", - NotARepository: "Ошибка: необходимо запустить внутри git репозитория", - Jump: "Перейти к панели", - ScrollLeftRight: "Прокрутить влево/вправо", - ScrollLeft: "Прокрутить влево", - ScrollRight: "Прокрутить вправо", - DiscardPatch: "Отменить патч", - DiscardPatchConfirm: "Вы можете собрать патч только из одной записи коммита/хранилища за раз. Отменить текущий патч?", - CantPatchWhileRebasingError: "Вы не можете создавать патчи или запускать команды патча, находясь в состоянии слияния или перемещения.", - ToggleAddToPatch: "Переключить файлы включённые в патч", - ToggleAllInPatch: "Переключить все файлы, включённые в патч", - UpdatingPatch: "Обновление патча", - ViewPatchOptions: "Просмотреть пользовательские параметры патча", - PatchOptionsTitle: "Параметры патча", - NoPatchError: "Патч ещё не создан. Чтобы начать сборку патча, используйте «пробел» в файле коммита или введите, чтобы добавить определённые строки.", - EnterCommitFile: "Введите файл, чтобы добавить выбранные строки в патч (или свернуть каталог переключения)", - ExitCustomPatchBuilder: `Выйти из сборщика пользовательских патчей`, - EnterUpstream: `Введите upstream как ' '`, - InvalidUpstream: "Недействительный upstream. Должен быть в формате ' '", - ReturnToRemotesList: `Вернуться к списку удалённых репозитории`, - NewRemote: `Добавить новую удалённую ветку`, - NewRemoteName: `Название новой удалённой ветки`, - NewRemoteUrl: `Ссылка новой удалённой ветки`, - EditRemoteName: `Введите новое название для удалённое ветки {{.remoteName}}:`, - EditRemoteUrl: `Введите новую ссылку для удалённое ветки {{.remoteName}}:`, - RemoveRemote: `Удалить удалённую ветку`, - RemoveRemotePrompt: "Вы уверены, что хотите удалить удалённую ветку?", - DeleteRemoteBranch: "Удалить Удалённую Ветку", - DeleteRemoteBranchMessage: "Вы уверены, что хотите удалить удалённую ветку", - SetAsUpstreamTooltip: "Установить как upstream-ветку переключённую ветку", - SetUpstream: "Установить upstream-ветку из выбранной ветки", - UnsetUpstream: "Убрать upstream-ветку из выбранной ветки", - SetUpstreamTitle: "Установить upstream-ветку", - SetUpstreamMessage: "Вы уверены, что хотите установить upstream-ветвь '{{.checkedOut}}' на '{{.selected}}'", - EditRemoteTooltip: "Редактировать удалённый репозитории", - TagCommit: "Пометить коммит тегом", - TagMenuTitle: "Создать тег", - TagNameTitle: "Название тега", - TagMessageTitle: "Сообщения тега", - AnnotatedTag: "Аннотированный тег", - LightweightTag: "Легковесный тег", - DeleteTagTitle: "Удалить тег", - PushTagTitle: "Удалённый репозитории для отправки тега '{{.tagName}}' в:", - PushTag: "Отправить тег", - NewTag: "Создать тег", - FetchRemoteTooltip: "Получение изменения из удалённого репозитория", - FetchingRemoteStatus: "Получение статуса удалённого репозитория", - CheckoutCommit: "Переключить коммит", - SureCheckoutThisCommit: "Вы уверены, что хотите переключить коммит?", - GitFlowOptions: "Показать параметры git-flow", - NotAGitFlowBranch: "Это не похоже на ветку git-flow", - NewGitFlowBranchPrompt: "Новое {{.branchType}} название:", - IgnoreTracked: "Игнорировать отслеживаемый файл", - IgnoreTrackedPrompt: "Вы уверены, что хотите игнорировать отслеживаемый файл?", - ExcludeTracked: "Исключить отслеживаемый файл", - ExcludeTrackedPrompt: "Вы уверены, что хотите исключить отслеживаемый файл?", - ViewResetToUpstreamOptions: "Просмотреть параметры сброса upstream-ветки", - NextScreenMode: "Следующий режим экрана (нормальный/полуэкранный/полноэкранный)", - PrevScreenMode: "Предыдущий режим экрана", - StartSearch: "Найти", - Panel: "Панель", - KeybindingsLegend: "Связки клавиш", - RenameBranch: "Переименовать ветку", - NewBranchNamePrompt: "Введите новое название ветки", - RenameBranchWarning: "Эта ветвь отслеживает удалённый репозитории. Это действие переименует только имя локальной ветки, а не имя удалённой ветки. Продолжать?", - OpenKeybindingsMenu: "Открыть меню", - ResetCherryPick: "Сбросить отобранную (скопированную | cherry-picked) выборку коммитов", - NextTab: "Следующая вкладка", - PrevTab: "Предыдущая вкладка", - CantUndoWhileRebasing: "Невозможно отменить во время перебазирования", - CantRedoWhileRebasing: "Невозможно повторить при перебазировании", - MustStashWarning: "Вытаскивание исправления в индекс требует сохранения и распаковки ваших изменений. Если что-то пойдёт не так, можно получить доступ к файлам из хранилища. Продолжить?", - MustStashTitle: "Необходимо припрятать", - ConfirmationTitle: "Панель Подтверждения", - PrevPage: "Предыдущая страница", - NextPage: "Следующая страница", - GotoTop: "Пролистать наверх", - GotoBottom: "Прокрутить вниз", - FilteringBy: "Фильтрация по", - ResetInParentheses: "(сбросить)", - OpenFilteringMenu: "Просмотреть параметры фильтрации по пути", - FilterBy: "Фильтровать по", - ExitFilterMode: "Прекратить фильтрацию по пути", - FilterPathOption: "Введите путь для фильтрации", - EnterFileName: "Введите путь:", - FilteringMenuTitle: "Фильтрация", - MustExitFilterModeTitle: "Команда недоступна", - MustExitFilterModePrompt: "Команда недоступна в режиме фильтрации. Выйти из режима фильтрации?", - Diff: "Разница", - EnterRefToDiff: "Введите ссылку для сравнения", - EnterRefName: "Введите ссылку:", - ExitDiffMode: "Выйти из режима сравнения", - DiffingMenuTitle: "Сравнение", - SwapDiff: "Обратное направление сравнении", - ViewDiffingOptions: "Открыть меню сравнении", - // the actual view is the extras view which I intend to give more tabs in future but for now we'll only mention the command log part - OpenCommandLogMenu: "Открыть меню журнала команд", - ShowingGitDiff: "Показывает вывод для:", - CommitDiff: "Разница коммита", - CopyCommitHashToClipboard: "Скопировать hash коммита в буфер обмена", - CommitHash: "hash коммита", - CommitURL: "URL коммита", - CopyCommitMessageToClipboard: "Скопировать сообщение коммита в буфер обмена", - CommitMessage: "Полное сообщение коммита", - CommitSubject: "Тема коммита", - CommitAuthor: "Автор коммита", - CopyCommitAttributeToClipboard: "Скопировать атрибут коммита", - CopyBranchNameToClipboard: "Скопировать название ветки в буфер обмена", - CopyPathToClipboard: "Скопировать название файла в буфер обмена", - CopySelectedTextToClipboard: "Скопировать выделенный текст в буфер обмена", - CommitPrefixPatternError: "Ошибка в шаблоне commitPrefix", - NoFilesStagedTitle: "Нет проиндексированных файлов", - NoFilesStagedPrompt: "Нет проиндексированых файлов. Закоммитить все файлы?", - BranchNotFoundTitle: "Ветка не найдена", - BranchNotFoundPrompt: "Ветка не найден. Создайте новую ветку с названием", - BranchUnknown: "Ветка неизвестна", - DiscardChangeTitle: "Отменить изменение", - DiscardChangePrompt: "Вы уверены, что хотите отменить это изменение (git reset)? Это необратимо.\nЧтобы отключить этот диалог, установите для конфигурационного ключа 'gui.skipDiscardChangeWarning' значение true.", - CreateNewBranchFromCommit: "Создать новую ветку с этого коммита", - BuildingPatch: "Сборка патча", - ViewCommits: "Просмотреть коммиты", - MinGitVersionError: "Версия Git должна быть не ниже 2.20 (т. е. начиная с 2018 года). Пожалуйста, обновите версию git. В качестве альтернативы заявите о проблеме на https://github.com/jesseduffield/lazygit/issues, чтобы lazygit был более совместим с предыдущими версиями.", - RunningCustomCommandStatus: "Запуск пользовательской команды", - SubmoduleStashAndReset: "Спрятать непроиндексированные изменения подмодуля и обновить", - AndResetSubmodules: "И сбросить подмодули", - EnterSubmoduleTooltip: "Ввести подмодуль", - CopySubmoduleNameToClipboard: "Скопировать название подмодуля в буфер обмена", - RemoveSubmodule: "Удалить подмодуль", - RemoveSubmodulePrompt: "Вы уверены, что хотите удалить подмодуль '%s' и соответствующий ему каталог? Это необратимо.", - ResettingSubmoduleStatus: "Сброс подмодуля", - NewSubmoduleName: "Названия нового подмодуля:", - NewSubmoduleUrl: "URL нового подмодуля:", - NewSubmodulePath: "Путь нового подмодуля:", - NewSubmodule: "Добавить новый подмодуль", - AddingSubmoduleStatus: "Добавление подмодуля", - UpdateSubmoduleUrl: "Обновить URL подмодуля '%s'", - UpdatingSubmoduleUrlStatus: "Обновление URL", - EditSubmoduleUrl: "Обновить URL подмодуля", - InitializingSubmoduleStatus: "Инициализация подмодуля", - InitSubmoduleTooltip: "Инициализировать подмодуль", - SubmoduleUpdateTooltip: "Обновить подмодуль", - UpdatingSubmoduleStatus: "Обновление подмодуля", - BulkInitSubmodules: "Массовая инициализация подмодулей", - BulkUpdateSubmodules: "Массовое обновление подмодулей", - BulkDeinitSubmodules: "Массовая деинициализация подмодулей", - ViewBulkSubmoduleOptions: "Просмотреть параметры массового подмодуля", - BulkSubmoduleOptions: "Параметры массового подмодуля", - RunningCommand: "Выполнение команды", - SubCommitsTitle: "Подкоммиты", - SubmodulesTitle: "Подмодули", - NavigationTitle: "Навигация по панели списка", - SuggestionsCheatsheetTitle: "Подсказки", - SuggestionsTitle: "Подсказки (нажмите %s, чтобы сфокусироваться)", - ExtrasTitle: "Журнал команд", - PushingTagStatus: "Отправка тега", - PullRequestURLCopiedToClipboard: "URL запроса на принятие изменений скопирован в буфер обмена", - CommitDiffCopiedToClipboard: "Сравнения коммита скопированы в буфер обмена", - CommitURLCopiedToClipboard: "URL коммита скопирован в буфер обмена", - CommitMessageCopiedToClipboard: "Сообщение коммита скопировано в буфер обмена", - CommitSubjectCopiedToClipboard: "Тема коммита скопирована в буфер обмена", - CommitAuthorCopiedToClipboard: "Автор коммита скопирован в буфер обмена", - PatchCopiedToClipboard: "Патч скопирован в буфер обмена", - CopiedToClipboard: "Скопировано в буфер обмена", - ErrCannotEditDirectory: "Невозможно редактировать каталог: вы можете редактировать только отдельные файлы", - ErrStageDirWithInlineMergeConflicts: "Невозможно подготовить/удалить каталог, содержащий файлы со встроенными конфликтами слияния. Сначала устраните конфликты слияния", - ErrRepositoryMovedOrDeleted: "Не могу найти репозиторий. Возможно, он был перемещён или удалён ¯\\_(ツ)_/¯", - CommandLog: "Журнал команд", - ToggleShowCommandLog: "Показать/скрыть журнал команд", - FocusCommandLog: "Сфокусировать журнал команд", - CommandLogHeader: "Вы можете скрыть/сфокусировать эту панель, нажав '%s'\n", - RandomTip: "Случайный совет", - SelectParentCommitForMerge: "Выберите родительский коммит для слияния", - ToggleWhitespaceInDiffView: "Переключить отображение изменении пробелов в просмотрщике сравнении", - IgnoreWhitespaceDiffViewSubTitle: "(игнорирование пробелов)", - IgnoreWhitespaceNotSupportedHere: "Игнорирование пробелов не поддерживается в этом представлении", - IncreaseContextInDiffView: "Увеличить размер контекста, отображаемого вокруг изменений в просмотрщике сравнении", - DecreaseContextInDiffView: "Уменьшите размер контекста, отображаемого вокруг изменений в просмотрщике сравнении", - CreatePullRequestOptions: "Создать параметры запроса принятие изменений", - DefaultBranch: "Ветка по-умолчанию", - SelectBranch: "Выбрать ветку", - SelectConfigFile: "Выбрать файл конфигурации", - NoConfigFileFoundErr: "Файл конфигурации не найден", - LoadingFileSuggestions: "Загрузка подсказок по файлам", - LoadingCommits: "Загрузка коммитов", - MustSpecifyOriginError: "Необходимо указать удалённый репозитории, если указываете ветку", - GitOutput: "Вывод git:", - GitCommandFailed: "Ошибка команды Git. Подробности смотрите в журнале команд (открыть с помощью %s)", - AbortTitle: "Прервать %s", - AbortPrompt: "Вы уверены, что хотите прервать текущий %s?", - OpenLogMenu: "Открыть меню журнала", - LogMenuTitle: "Параметры журнала коммитов", - ToggleShowGitGraphAll: "Переключить отображение всего git графа (передать флаг --all в git log )", - ShowGitGraph: "Показать git граф", - SortOrder: "Порядок сортировки", - SortAlphabetical: "По алфавиту", - SortByDate: "По дате", - SortCommits: "Упорядочить коммиты", - CantChangeContextSizeError: "Невозможно изменить контекст в режиме создания патча, потому что мы были слишком ленивы, чтобы поддерживать его при выпуске функции. Если вы действительно этого хотите, пожалуйста, дайте нам знать!", - OpenCommitInBrowser: "Открыть коммит в браузере", - ViewBisectOptions: "Просмотреть параметры бинарного поиска", - ConfirmRevertCommit: "Вы уверены, что хотите отменить {{.selectedCommit}}?", - RewordInEditorTitle: "Перефразировать в редакторе", - RewordInEditorPrompt: "Вы уверены, что хотите перефразировать этот коммит вашем редакторе?", - HardResetAutostashPrompt: "Вы уверены, что хотите сделать жёсткий сброс на '%s'? При необходимости будет выполнен автосохранение в хранилище.", - CheckoutPrompt: "Вы уверены, что хотите переключить '%s'?", - UpstreamGone: "(upstream gone)", - NukeDescription: "Если вы хотите, чтобы все изменения в рабочем дереве исчезли, это способ сделать это. Если есть какие-либо изменения подмодуля, эти изменения будут припрятаны в подмодуле(-ях).", - DiscardStagedChangesDescription: "Это создаст новую запись в хранилище, содержащую только проиндексированные файлы, а затем удалит её, так что в рабочем дереве останутся только непроиндексированные изменения.", - EmptyOutput: "<Пустой вывод>", - Patch: "Патч", - CustomPatch: "Пользовательский патч", - CommitsCopied: "коммиты скопированы", // lowercase because it's used in a sentence - CommitCopied: "коммит скопирован", // lowercase because it's used in a sentence - ResetPatch: "Сбросить патч", - ApplyPatch: "Применить патч", - ApplyPatchInReverse: "Применить патч в обратном порядке", - RemovePatchFromOriginalCommit: "Удалить патч из исходного коммита (%s)", - MovePatchOutIntoIndex: "Переместить патч в индекс", - MovePatchIntoNewCommit: "Переместить патч в новый коммит", - MovePatchToSelectedCommit: "Переместить патч в выбранный коммит (%s)", - CopyPatchToClipboard: "Скопировать патч в буфер обмена", - NoMatchesFor: "Нет совпадений для '%s' %s", - ExitSearchMode: "%s: Выйти из режима поиска", - MatchesFor: "совпадений для '%s' (%d из %d) %s", // lowercase because it's after other text - SearchKeybindings: "%s: Следующее совпадение, %s: Предыдущее совпадение, %s: Выйти из режима поиска", - SearchPrefix: "Поиск: ", - Actions: Actions{ - // TODO: combine this with the original keybinding descriptions (those are all in lowercase atm) - CheckoutCommit: "Переключить коммит", - CheckoutTag: "Переключить тег", - CheckoutBranch: "Переключить ветку", - ForceCheckoutBranch: "Принудительное переключение ветки", - DeleteBranch: "Удалить ветку", - Merge: "Слить", - RebaseBranch: "Перебазировать ветку", - RenameBranch: "Переименовать ветку", - CreateBranch: "Создать ветку", - CherryPick: "(Cherry-pick) Вставить коммиты", - CheckoutFile: "Переключить файл", - DiscardOldFileChange: "Отменить старое изменение файла", - SquashCommitDown: "Объединить несколько коммитов в один нижний", - FixupCommit: "Объединить несколько коммитов в один, отбросив сообщение коммита", - RewordCommit: "Перефразировать коммит", - DropCommit: "Сбросить коммит", - EditCommit: "Изменить коммит", - AmendCommit: "Править коммит (amend)", - ResetCommitAuthor: "Сброс автора коммита", - SetCommitAuthor: "Установить автора коммита", - RevertCommit: "Отменить коммит", - CreateFixupCommit: "Создать fixup коммит", - SquashAllAboveFixupCommits: "Объединить все выше fixup коммиты", - CreateLightweightTag: "Создать легковесный тег", - CreateAnnotatedTag: "Создать аннотированный тег", - CopyCommitMessageToClipboard: "Скопировать сообщение коммита в буфер обмена", - CopyCommitSubjectToClipboard: "Скопировать тему коммита в буфер обмена", - CopyCommitDiffToClipboard: "Скопировать сравнения коммита в буфер обмена", - CopyCommitHashToClipboard: "Скопировать hash коммита в буфер обмена", - CopyCommitURLToClipboard: "Скопировать URL коммита в буфер обмена", - CopyCommitAuthorToClipboard: "Скопировать автора коммита в буфер обмена", - CopyCommitAttributeToClipboard: "Скопировать в буфер обмена", - CopyPatchToClipboard: "Скопировать патч в буфер обмена", - MoveCommitUp: "Переместить коммит вверх", - MoveCommitDown: "Переместить коммит вниз", - CustomCommand: "Пользовательская команда", - DiscardAllChangesInDirectory: "Отменить все изменения в каталоге", - DiscardUnstagedChangesInDirectory: "Отменить непроиндексированные изменения в каталоге", - DiscardAllChangesInFile: "Отменить все изменения в файле", - DiscardAllUnstagedChangesInFile: "Отменить все непроиндексированные изменения в файле", - StageFile: "Проиндексировать файл", - StageResolvedFiles: "Проиндексированные файлы, конфликты слияния которых были устранены", - UnstageFile: "Непроиндексированные файл", - UnstageAllFiles: "Удалить все файлы из индекса", - StageAllFiles: "Проиндексировать все файлы", - IgnoreExcludeFile: "Игнорировать или исключить файл", - IgnoreFileErr: "Невозможно игнорировать .gitignore", - ExcludeFile: "Исключить файл", - ExcludeGitIgnoreErr: "Невозможно исключить .gitignore", - Commit: "Коммит", - EditFile: "Редактировать файл", - Push: "Отправить изменения", - Pull: "Получить и слить изменения", - OpenFile: "Открыть файл", - StashAllChanges: "Припрятать все изменения", - StashAllChangesKeepIndex: "Припрятать все изменения и сохранить индекс", - StashStagedChanges: "Припрятать проиндексированные изменения", - StashUnstagedChanges: "Припрятать непроиндексированные изменения", - StashIncludeUntrackedChanges: "Припрятать все изменения, включая неотслеживаемые файлы", - GitFlowFinish: "Завершение Git-потока", - GitFlowStart: "Запуск Git-потока", - CopyToClipboard: "Скопировать в буфер обмена", - CopySelectedTextToClipboard: "Скопировать выделенный текст в буфер обмена", - RemovePatchFromCommit: "Удалить патч из коммита", - MovePatchToSelectedCommit: "Переместить патч в выбранный коммит", - MovePatchIntoIndex: "Переместите патч в индекс", - MovePatchIntoNewCommit: "Переместить патч в новый коммит", - DeleteRemoteBranch: "Удалить удалённую ветку", - SetBranchUpstream: "Установить ветку как upstream", - AddRemote: "Добавить удалённую ветку", - RemoveRemote: "Удалить удалённую ветку", - UpdateRemote: "Обновить удалённую ветку", - ApplyPatch: "Применить патч", - Stash: "Хранилище", - RenameStash: "Переименовать хранилище", - RemoveSubmodule: "Удалить подмодуль", - ResetSubmodule: "Сброс подмодуля", - AddSubmodule: "Добавить подмодуль", - UpdateSubmoduleUrl: "Обновить URL подмодуля", - InitialiseSubmodule: "Инициализация подмодуля", - BulkInitialiseSubmodules: "Массовая инициализация подмодулей", - BulkUpdateSubmodules: "Массовое обновление подмодулей", - BulkDeinitialiseSubmodules: "Массовая деинициализация подмодулей", - UpdateSubmodule: "Обновить подмодуль", - PushTag: "Отправить тег", - NukeWorkingTree: "Уничтожить рабочее дерево", - DiscardUnstagedFileChanges: "Отменить непроиндексированные изменения файла", - RemoveUntrackedFiles: "Удалить неотслеживаемые файлы", - RemoveStagedFiles: "Удалить проиндексированные файлы", - SoftReset: "Мягкий сброс", - MixedReset: "Смешанный сброс", - HardReset: "Жёсткий сброс", - FastForwardBranch: "Ветка перемотки вперёд", - Undo: "Отменить", - Redo: "Повторить", - CopyPullRequestURL: "Скопировать запрос на принятие изменений URL", - OpenMergeTool: "Открыть инструмент слияния", - OpenCommitInBrowser: "Открыть коммит в браузере", - OpenPullRequest: "Открыть запрос на принятие изменений в браузера", - StartBisect: "Начать бинарный поиск", - ResetBisect: "Сбросить бинарный поиск", - BisectSkip: "Пропустить бинарный поиск", - BisectMark: "Отметить бинарный поиск", - }, - Bisect: Bisect{ - Mark: "Отметить %s как %s", - MarkStart: "Отметить %s как %s (начать бинарный поиск)", - SkipCurrent: "Пропустить %s", - ResetTitle: "Сбросить 'git bisect'", - ResetPrompt: "Вы уверены, что хотите сбросить 'git bisect'?", - ResetOption: "Сбросить бинарный поиск", - BisectMenuTitle: "Бинарный поиск", - CompleteTitle: "Бинарный поиск завершён", - CompletePrompt: "Бинарный поиск завершён! Изменения внесённые следующим коммитом:\n\n%s\n\nСбросить 'git bisect' сейчас?", - CompletePromptIndeterminate: "Бинарный поиск завершён! Некоторые коммиты были пропущены, поэтому любое из следующих коммитов могло внести изменения::\n\n%s\n\nСбросить 'git bisect' сейчас?", - Bisecting: "Бинарный поиск", - }, - } -} diff --git a/pkg/i18n/traditional_chinese.go b/pkg/i18n/traditional_chinese.go deleted file mode 100644 index 1e80344e4a3..00000000000 --- a/pkg/i18n/traditional_chinese.go +++ /dev/null @@ -1,741 +0,0 @@ -/* -繁體中文翻譯詞彙選擇主要依據下列來源: -The selection of Traditional Chinese translation vocabulary is mainly based on -the following sources: - - 1. GitLab: 其介面有相當完整的繁體中文翻譯,但缺少一些本地端功能的對照,例如 stash。 - - 2. Pro Git: Git 的權威參考用書,可惜繁中部分翻譯僅約一半。 - https://git-scm.com/book/zh-tw/v2 - - 3. Microsoft 語言入口網站 (Visual Studio) - https://www.microsoft.com/zh-tw/language/ - -### Glossary ### - - 譯文中括號內文字會依語境添加或省略。 - - Repository 版本庫 - Amend 修改 - Checkout 檢出 - Cherry-pick 揀選 - Diff 差異 - Discard 捨棄 - Drop [stash] 捨棄 - Fast-forward 快轉 (Fast-forward) - Fetch 擷取 - Fixup 修復 (Fixup) - Patch 補丁 - Pop [stash] 還原 - Rebase 變基 (Rebase) - Reset 重設 - Revert 還原 - Reword 改寫 - Squash 壓縮 (Squash) - Stage 預存 (Stage) - Stash 收藏 (Stash) -*/ -package i18n - -const traditionalChineseIntroPopupMessage = ` -感謝使用 lazygit!這裡有一些資源可供參考: - - 1) 📺lazygit 教學📺: - https://youtu.be/CPLdltN7wgE - - 2) 📣釋出說明📣: - https://github.com/jesseduffield/lazygit/releases - - 3) 💖如果你想要貢獻一份心力你可以💖: - 改進 lazygit 原始碼:https://github.com/jesseduffield/lazygit - 按右下角的捐款斗內我們 - 或單存添加 lazygit 到你的 star 清單內以增加曝光度都能大力的幫助我們! -` - -const traditionalChineseDeprecatedEditConfigWarning = ` -### Deprecated config warning ### - -以下設定已被取代並將於未來版本中刪除: -{{configs}} - -編輯器設定教學: - - https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#configuring-file-editing - -` - -// exporting this so we can use it in tests -func traditionalChineseTranslationSet() TranslationSet { - return TranslationSet{ - NotEnoughSpace: "無足夠空間顯示面板", - DiffTitle: "差異", - FilesTitle: "檔案", - BranchesTitle: "分支", - CommitsTitle: "提交", - StashTitle: "收藏 (Stash)", - SnakeTitle: "貪食蛇", - EasterEgg: "彩蛋", - UnstagedChanges: "未預存變更", - StagedChanges: "已預存變更", - MainTitle: "主要", - MergeConfirmTitle: "合併", - StagingTitle: "主面板(預存)", - MergingTitle: "主面板(合併)", - NormalTitle: "主面板(一般)", - LogTitle: "版本記錄", - CommitSummary: "提交摘要", - CredentialsUsername: "使用者名稱", - CredentialsPassword: "密碼", - CredentialsPassphrase: "SSH 金鑰密語", - CredentialsPIN: "SSH 金鑰 PIN 碼", - PassUnameWrong: "密碼、密語或使用者名稱錯誤", - Commit: "提交變更", - AmendLastCommit: "修改上次提交", - AmendLastCommitTitle: "修改上次提交", - SureToAmend: "是否確定要修改上次提交?之後你可以從提交面板中再次更改此次提交的訊息。", - NoCommitToAmend: "沒有可以修改的提交。", - CommitChangesWithEditor: "使用 git 編輯器提交變更", - StatusTitle: "狀態", - Menu: "選單", - Execute: "執行", - Stage: "切換預存", - ToggleStagedAll: "全部預存/取消預存", - ToggleTreeView: "顯示檔案樹狀視圖", - OpenMergeTool: "開啟外部合併工具 (git mergetool)", - Refresh: "重新整理", - Push: "推送", - Pull: "拉取", - Scroll: "捲動", - MergeConflictsTitle: "合併衝突", - Checkout: "檢出", - FileFilter: "篩選檔案 (預存/未預存)", - FilterStagedFiles: "僅顯示預存的檔案", - FilterUnstagedFiles: "僅顯示未預存的檔案", - ResetFilter: "重設篩選", - NoChangedFiles: "沒有變更的檔案", - SoftReset: "軟重設", - AlreadyCheckedOutBranch: "你已經檢出這個分支了", - SureForceCheckout: "是否強制檢出?這將會使你失去本地的所有更改", - ForceCheckoutBranch: "強制檢出分支", - BranchName: "分支名稱", - NewBranchNameBranchOff: "新的分支名稱 (根據 '{{.branchName}}' 分支創建)", - CantDeleteCheckOutBranch: "無法刪除已檢出的分支!", - ForceDeleteBranchMessage: "'{{.selectedBranchName}}' 分支尚未完全合併。是否刪除?", - RebaseBranch: "將已檢出的分支變基至此分支", - CantRebaseOntoSelf: "無法將分支變基至自己", - CantMergeBranchIntoItself: "無法將一個分支合併至自己", - ForceCheckout: "強制檢出", - CheckoutByName: "根據名稱檢出", - NewBranch: "新分支", - NoBranchesThisRepo: "這個版本庫中沒有分支", - CommitWithoutMessageErr: "沒有提交訊息,無法提交", - Close: "關閉", - CloseCancel: "關閉/取消", - Confirm: "確認", - Quit: "結束", - NoCommitsThisBranch: "這個分支沒有提交", - UpdateRefHere: "在這裡更新 '{{.ref}}' 分支", - CannotSquashOrFixupFirstCommit: "沒有可以壓縮的提交", - Fixup: "修復 (Fixup)", - SureFixupThisCommit: "是否對此提交進行 '修復' ? 其將被合併於以下之提交中", - SureSquashThisCommit: "是否要把這個提交壓縮到下面的提交中?", - Squash: "壓縮 (Squash)", - PickCommitTooltip: "挑選提交 (於變基過程中)", - RevertCommit: "還原提交", - Reword: "改寫提交", - DropCommit: "刪除提交", - MoveDownCommit: "向下移動提交", - MoveUpCommit: "向上移動提交", - EditCommitTooltip: "編輯提交", - AmendCommitTooltip: "使用已預存的更改修正提交", - ResetAuthor: "重設作者", - SetAuthor: "設定作者", - AmendCommitAttribute: "設定/重設提交作者", - SetAuthorPromptTitle: "設定作者(格式:「姓名 <電子郵件>」)", - SureResetCommitAuthor: "為了符合已配置的使用者,此作者的提交欄位以及時間戳將被更新。是否繼續?", - RewordCommitEditor: "使用編輯器改寫提交", - Error: "錯誤", - PickHunk: "挑選程式碼片段", - PickAllHunks: "挑選所有程式碼片段", - Undo: "復原", - UndoReflog: "復原", - RedoReflog: "取消復原", - UndoTooltip: "將使用 reflog 確任 git 指令以復原。這不包括工作區更改;只考慮提交。", - RedoTooltip: "將使用 reflog 確任 git 指令以重作。這不包括工作區更改;只考慮提交。", - DiscardAllTooltip: "捨棄 '{{.path}}' 預存/未預存更改。", - DiscardUnstagedTooltip: "捨棄 '{{.path}}' 未預存更改。", - Pop: "還原", - Drop: "捨棄", - Apply: "套用", - NoStashEntries: "沒有收藏記錄", - StashDrop: "放棄收藏記錄", - SureDropStashEntry: "是否捨棄這條收藏記錄?", - StashPop: "還原收藏記錄", - SurePopStashEntry: "是否從收藏中還原這個記錄?", - StashApply: "套用收藏記錄", - SureApplyStashEntry: "是否套用這個收藏記錄?", - NoTrackedStagedFilesStash: "你沒有被追蹤的、預存的檔案可進行收藏", - NoFilesToStash: "沒有檔案可以進行收藏", - StashChanges: "安置現有變更到收藏中", - RenameStash: "重新命名收藏", - RenameStashPrompt: "重新命名收藏:{{.stashName}}", - OpenConfig: "開啟設定檔案", - EditConfig: "編輯設定檔案", - ForcePush: "強制推送", - ForcePushPrompt: "你的分支與遠端分支分岔。按 'ESC' 取消,或按 'Enter' 強制推送。", - ForcePushDisabled: "你的分支與遠端分支分岔,你已禁用強制推送", - UpdatesRejectedAndForcePushDisabled: "更新被拒絕,你已禁用強制推送", - CheckForUpdate: "檢查更新", - CheckingForUpdates: "正在檢查更新...", - UpdateAvailableTitle: "有可用的更新!", - UpdateAvailable: "下載並安裝版本 {{.newVersion}}?", - UpdateInProgressWaitingStatus: "更新中", - UpdateCompletedTitle: "更新已完成!", - UpdateCompleted: "更新已成功安裝。為了使其生效,請重新啟動 lazygit。", - FailedToRetrieveLatestVersionErr: "無法取得版本資訊", - OnLatestVersionErr: "已更新至最新版本", - MajorVersionErr: "新版本({{.newVersion}})不支援當前版本({{.currentVersion}})更改", - CouldNotFindBinaryErr: "找不到 {{.url}} 執行檔", - UpdateFailedErr: "更新失敗:{{.errMessage}}", - ConfirmQuitDuringUpdateTitle: "正在更新中", - ConfirmQuitDuringUpdate: "正在進行更新,是否結束?", - MergeToolTitle: "合併工具", - MergeToolPrompt: "是否開啟 'git mergetool'?", - IntroPopupMessage: traditionalChineseIntroPopupMessage, - DeprecatedEditConfigWarning: traditionalChineseDeprecatedEditConfigWarning, - GitconfigParseErr: `Gogit 無法解析你的 gitconfig 檔案,因為存在未引用的 '\' 字符,刪除它們應該可以解決這個問題。`, - EditFile: `編輯檔案`, - OpenFile: `開啟檔案`, - IgnoreFile: `添加到 .gitignore`, - ExcludeFile: `添加到 .git/info/exclude`, - RefreshFiles: `重新整理檔案`, - Merge: `合併到當前檢出的分支`, - ConfirmQuit: `是否結束?`, - SwitchRepo: `切換到最近使用的版本庫`, - AllBranchesLogGraph: `顯示所有分支日誌`, - UnsupportedGitService: `不支援的 git 服務`, - CreatePullRequest: `建立拉取請求`, - CopyPullRequestURL: `複製拉取請求的 URL 到剪貼板`, - NoBranchOnRemote: `這個分支在遠端不存在。需要先將其推送至遠端。`, - Fetch: `擷取`, - NoAutomaticGitFetchTitle: `手動 git 擷取`, - NoAutomaticGitFetchBody: `lazygit 無法在私有庫使用 "git 擷取";在檔案面板中使用 'f' 手動執行 "git 擷取"`, - FileEnter: `選擇檔案中的單個程式碼塊/行,或展開/折疊目錄`, - FileStagingRequirements: `只能選擇跟踪檔案中的單個行`, - StageSelectionTooltip: `切換現有行的狀態 (已預存/未預存)`, - DiscardSelection: `刪除變更 (git reset)`, - ToggleRangeSelect: `切換拖曳選擇`, - ToggleSelectHunk: `切換選擇程式碼塊`, - ToggleSelectionForPatch: `向 (或從) 補丁中添加/刪除行`, - EditHunk: `編輯程式碼塊`, - ToggleStagingView: `切換至另一個面板 (已預存/未預存更改)`, - ReturnToFilesPanel: `返回檔案面板`, - FastForward: `從上游快進此分支`, - FastForwarding: "的擷取和快進中", - FoundConflictsTitle: "自動合併失敗", - ViewMergeRebaseOptions: "查看合併/變基選項", - NotMergingOrRebasing: "你當前既不在變基也不在合併中", - AlreadyRebasing: "無法在變基期間執行此操作", - RecentRepos: "最近的版本庫", - MergeOptionsTitle: "合併選項", - RebaseOptionsTitle: "變基選項", - CommitSummaryTitle: "提交摘要", - CommitDescriptionTitle: "提交描述", - CommitDescriptionSubTitle: "按 tab 鍵聚焦", - LocalBranchesTitle: "本地分支", - SearchTitle: "搜尋", - TagsTitle: "標籤", - MenuTitle: "功能表", - RemotesTitle: "遠端", - RemoteBranchesTitle: "遠端分支", - PatchBuildingTitle: "主面板 (補丁生成)", - InformationTitle: "資訊", - SecondaryTitle: "次要", - ReflogCommitsTitle: "日誌", - GlobalTitle: "全域快捷鍵", - ConflictsResolved: "所有合併衝突都已解決。是否繼續?", - Continue: "確認", - Keybindings: "鍵盤快捷鍵", - RebasingTitle: "將 '{{.checkedOutBranch}}'", - SimpleRebase: "簡單變基 變基至 '{{.ref}}'", - InteractiveRebase: "互動變基 變基至 '{{.ref}}'", - InteractiveRebaseTooltip: "開始一個互動變基,以中斷開始,這樣你可以在繼續之前更新TODO提交", - ConfirmMerge: "是否將 '{{.selectedBranch}}' 合併至 '{{.checkedOutBranch}}' ?", - FwdNoUpstream: "無法快進無上游分支", - FwdNoLocalUpstream: "無法快進尚未在本地註冊的遠端分支", - FwdCommitsToPush: "無法快進帶有尚未推送的提交的分支", - ErrorOccurred: "發生錯誤!請在此詢問錯誤:", - NoRoom: "無足夠的空間", - YouAreHere: "你在這", - YouDied: "你死了!", - RewordNotSupported: "在互動變基期間改寫提交目前不支援", - ChangingThisActionIsNotAllowed: "不允許更改此類變基待辦事項", - CherryPickCopy: "複製提交 (揀選)", - PasteCommits: "貼上提交 (揀選)", - SureCherryPick: "是否將複製的提交揀選到此分支?", - CherryPick: "揀選 (Cherry-pick)", - Donate: "贊助", - AskQuestion: "諮詢", - PrevLine: "選擇上一行", - NextLine: "選擇下一行", - PrevHunk: "選擇上一段", - NextHunk: "選擇下一段", - PrevConflict: "選擇上一個衝突", - NextConflict: "選擇下一個衝突", - SelectPrevHunk: "選擇上一段", - SelectNextHunk: "選擇下一段", - ScrollDown: "向下捲動", - ScrollUp: "向上捲動", - ScrollUpMainWindow: "向上捲動主面板", - ScrollDownMainWindow: "向下捲動主面板", - AmendCommitTitle: "修改提交", - AmendCommitPrompt: "是否使用預存檔案修改提交?", - DropCommitTitle: "刪除提交", - DropCommitPrompt: "是否刪除此提交?", - PullingStatus: "拉取", - PushingStatus: "推送", - FetchingStatus: "擷取", - SquashingStatus: "壓縮中", - FixingStatus: "修復中", - DeletingStatus: "刪除中", - MovingStatus: "移動中", - RebasingStatus: "變基中", - MergingStatus: "合併中", - LowercaseRebasingStatus: "變基", // lowercase because it shows up in parentheses - LowercaseMergingStatus: "合併", // lowercase because it shows up in parentheses - AmendingStatus: "修改中", - CherryPickingStatus: "揀選中", - UndoingStatus: "復原中", - RedoingStatus: "重做中", - CheckingOutStatus: "檢出中", - CommittingStatus: "提交中", - RevertingStatus: "還原中", - CommitFiles: "提交檔案", - SubCommitsDynamicTitle: "提交 (共 %s項)", - CommitFilesDynamicTitle: "差異檔案 (共 %s項)", - RemoteBranchesDynamicTitle: "遠端分支 (共 %s項)", - ViewItemFiles: "檢視所選項目的檔案", - CommitFilesTitle: "提交檔案", - CheckoutCommitFileTooltip: "檢出檔案", - DiscardFileChangesTitle: "捨棄檔案更改", - DiscardFileChangesPrompt: "是否捨棄此提交?如果這個檔案是在此提交中創建的,它將被刪除", - DisabledForGPG: "此功能不適用於 GPG 加密", - CreateRepo: "未在 git 版本庫中。是否建立新版本庫? (y/n): ", - BareRepo: "你嘗試在裸版本庫中開啟 Lazygit,但 Lazygit 尚未支援裸版本庫。是否開啟最新版本庫? (y/n) ", - InitialBranch: "分支名稱?(留空使用 git 的預設值):", - NoRecentRepositories: "必須在 git 版本庫中開啟 lazygit。沒有有效的最近版本庫。退出。", - IncorrectNotARepository: "無效 `notARepository` 輸入。輸入應為「prompt」、「create」、「skip」、或「quit」。", - AutoStashTitle: "是否自動收藏?", - AutoStashPrompt: "必須收藏並拾起變更才得以繼續操作。是否自動執行?(Enter/Esc)", - StashPrefix: "自動收藏 ", - Cancel: "取消", - DiscardAllChanges: "刪除所有變更", - DiscardUnstagedChanges: "刪除未預存變更", - DiscardAllChangesToAllFiles: "刪除工作目錄", - DiscardAnyUnstagedChanges: "刪除未預存變更", - DiscardUntrackedFiles: "刪除未追蹤檔案", - DiscardStagedChanges: "刪除已預存變更", - HardReset: "強制重設", - ViewResetOptions: "檢視重設選項", - CreateFixupCommitTooltip: "為此提交建立修復提交", - SquashAboveCommits: "壓縮上方所有「fixup」提交(自動壓縮)", - SquashAboveCommitsTooltip: "是否壓縮上方 {{.commit}} 所有「fixup」提交?", - CreateFixupCommit: "建立修復提交", - ExecuteCustomCommand: "執行自訂命令", - CustomCommand: "自訂命令:", - CommitChangesWithoutHook: "沒有預提交 hook 就提交更改", - SkipHookPrefixNotConfigured: "你尚未配置略過 hook 的提交訊息前綴,請在設定中設置 `git.skipHookPrefix = 'WIP'`", - ResetTo: `重設至`, - PressEnterToReturn: "按 Enter 返回到 lazygit", - ViewStashOptions: "檢視收藏選項", - StashAllChanges: "收藏所有變更", - StashStagedChanges: "收藏已預存變更", - StashAllChangesKeepIndex: "收藏所有變更並保留預存區", - StashUnstagedChanges: "收藏未預存變更", - StashIncludeUntrackedChanges: "收藏所有變更,包括未追蹤檔案", - StashOptions: "收藏選項", - NotARepository: "錯誤:必須在 git 版本庫中執行", - Jump: "跳轉至面板", - ScrollLeftRight: "左右捲動", - ScrollLeft: "向左捲動", - ScrollRight: "向右捲動", - DiscardPatch: "捨棄補丁", - DiscardPatchConfirm: "你只能從單一提交或收藏項目建立一個補丁。是否捨棄當前補丁?", - CantPatchWhileRebasingError: "在合併或變基狀態下,你不能建立或運行補丁命令", - ToggleAddToPatch: "切換檔案是否包含在補丁中", - ToggleAllInPatch: "切換所有檔案是否包含在補丁中", - UpdatingPatch: "正在更新補丁", - ViewPatchOptions: "檢視自訂補丁選項", - PatchOptionsTitle: "補丁選項", - NoPatchError: "尚未建立補丁。要開始建立補丁,請在提交檔案上使用空格或輸入以添加特定行", - EnterCommitFile: "輸入檔案以將選定的行添加至補丁(或切換目錄折疊)", - ExitCustomPatchBuilder: `退出自訂補丁建立器`, - EnterUpstream: `輸入上游為 ' '`, - InvalidUpstream: "無效的上游。必須符合 ' ' 的格式", - ReturnToRemotesList: `返回遠端列表`, - NewRemote: `新增遠端`, - NewRemoteName: `新遠端名稱:`, - NewRemoteUrl: `新遠端 URL:`, - EditRemoteName: `輸入更新 {{.remoteName}} 遠端名稱:`, - EditRemoteUrl: `輸入更新 {{.remoteName}} 遠端 URL:`, - RemoveRemote: `移除遠端`, - RemoveRemotePrompt: "你確定要移除遠端?", - DeleteRemoteBranch: "刪除遠端分支", - DeleteRemoteBranchMessage: "你確定要刪除遠端分支?", - SetAsUpstreamTooltip: "將此分支設為當前分支之上游", - SetUpstream: "設定所選分支之上游", - UnsetUpstream: "取消設定選定分支之上游", - SetUpstreamTitle: "設定上游分支", - SetUpstreamMessage: "你確定要將 '{{. selected}}' 設為 '{{.checkedOut}}' 的上游分支?", - EditRemoteTooltip: "編輯遠端", - TagCommit: "打標籤到提交", - TagMenuTitle: "建立標籤", - TagNameTitle: "標籤名稱", - TagMessageTitle: "標籤訊息", - AnnotatedTag: "附註標籤", - LightweightTag: "輕量標籤", - PushTagTitle: "推送標籤 '{{.tagName}}' 至遠端:", - PushTag: "推送標籤", - NewTag: "建立標籤", - FetchRemoteTooltip: "擷取遠端", - FetchingRemoteStatus: "正在擷取遠端", - CheckoutCommit: "檢出提交", - SureCheckoutThisCommit: "你確定要檢出這個提交?", - GitFlowOptions: "顯示 git-flow 選項", - NotAGitFlowBranch: "這似乎不是一個 git flow 分支", - NewGitFlowBranchPrompt: "{{.branchType}} 名稱:", - IgnoreTracked: "忽略已追蹤檔案", - IgnoreTrackedPrompt: "你確定要忽略一個已追蹤的檔案?", - ExcludeTracked: "排除已追蹤檔案", - ViewResetToUpstreamOptions: "檢視上游重設選項", - NextScreenMode: "下一個螢幕模式(常規/半螢幕/全螢幕)", - PrevScreenMode: "上一個螢幕模式", - StartSearch: "搜尋", - StartFilter: "搜尋", - Panel: "面板", - KeybindingsLegend: "說明:`` 表示 Ctrl+B、`` 表示 Alt+B,`B`表示 Shift+B", - RenameBranch: "重新命名分支", - BranchUpstreamOptionsTitle: "上游分支設定", - ViewBranchUpstreamOptionsTooltip: "檢視有關上游分支的設定(例如重設至上游)", - UpstreamNotSetError: "目標分支沒有上游分支(或其上游分支未儲存於本地)", - ViewBranchUpstreamOptions: "檢視上游設定", - NewBranchNamePrompt: "為分支輸入新名稱", - RenameBranchWarning: "此分支正在追蹤遠端分支。此操作僅會重新命名本地分支名稱,而不是遠端分支的名稱。是否繼續?", - OpenKeybindingsMenu: "開啟選單", - ResetCherryPick: "重設選定的揀選 (複製) 提交", - NextTab: "下一個索引標籤", - PrevTab: "上一個索引標籤", - CantUndoWhileRebasing: "在變基時無法復原", - CantRedoWhileRebasing: "在變基時無法取消復原", - MustStashWarning: "將補丁提取到索引中需要收藏並取消收藏你的變更。如果出現問題,你可以從收藏中訪問你的檔案。是否繼續?", - MustStashTitle: "必須收藏", - ConfirmationTitle: "確認面板", - PrevPage: "上一頁", - NextPage: "下一頁", - GotoTop: "捲動到頂部", - GotoBottom: "捲動到底部", - FilteringBy: "篩選方式", - ResetInParentheses: "(已重設)", - OpenFilteringMenu: "檢視篩選路徑選項", - FilterBy: "篩選路徑", - ExitFilterMode: "停止按路徑篩選", - FilterPathOption: "輸入要依路徑篩選的路徑", - EnterFileName: "輸入路徑:", - FilteringMenuTitle: "篩選", - MustExitFilterModeTitle: "命令不可用", - MustExitFilterModePrompt: "在按路徑篩選的模式下,該命令不可用。是否退出按路徑篩選的模式?", - Diff: "差異", - EnterRefToDiff: "輸入欲比較之 Ref", - EnterRefName: "輸入 Ref:", - ExitDiffMode: "退出差異模式", - DiffingMenuTitle: "差異比較", - SwapDiff: "反轉差異方向", - ViewDiffingOptions: "開啟差異比較選單", - // the actual view is the extras view which I intend to give more tabs in future but for now we'll only mention the command log part - OpenCommandLogMenu: "開啟命令記錄選單", - ShowingGitDiff: "顯示輸出:", - CommitDiff: "提交差異", - CopyCommitHashToClipboard: "複製提交 hash 到剪貼簿", - CommitHash: "提交 hash", - CommitURL: "提交 URL", - CopyCommitMessageToClipboard: "複製提交訊息到剪貼簿", - CommitMessage: "提交訊息", - CommitAuthor: "提交者", - CopyCommitAttributeToClipboard: "複製提交屬性", - CopyBranchNameToClipboard: "複製分支名稱到剪貼簿", - CopyPathToClipboard: "複製檔案名稱到剪貼簿", - CopySelectedTextToClipboard: "複製所選文本至剪貼簿", - CommitPrefixPatternError: "commitPrefix 模式錯誤", - NoFilesStagedTitle: "沒有檔案預存", - NoFilesStagedPrompt: "你沒有預存任何檔案。提交所有檔案?", - BranchNotFoundTitle: "找不到分支", - BranchNotFoundPrompt: "找不到分支。新分支名稱", - BranchUnknown: "分支未知", - DiscardChangeTitle: "取消預存行", - DiscardChangePrompt: "是否刪除所選行(git reset)?此操作不可逆。\n將「gui.skipDiscardChangeWarning」設為 true 可禁用此警告。", - CreateNewBranchFromCommit: "從提交建立新分支", - BuildingPatch: "正在建立補丁", - ViewCommits: "檢視提交", - MinGitVersionError: "請升級 git 至新於 2.20(即從 2018 年起)之版本。或於 https://github.com/jesseduffield/lazygit/issues 上回報問題使 lazygit 能支援更舊的 git 版本。", - RunningCustomCommandStatus: "正在執行自訂命令", - SubmoduleStashAndReset: "收藏未提交的子模組變更並更新", - AndResetSubmodules: "以及重設子模組", - EnterSubmoduleTooltip: "進入子模組", - CopySubmoduleNameToClipboard: "複製子模組名稱到剪貼簿", - RemoveSubmodule: "移除子模組", - RemoveSubmodulePrompt: "是否確定要刪除子模組 '%s' 以及它相應的目錄?此操作是不可逆的。", - ResettingSubmoduleStatus: "重設子模型中", - NewSubmoduleName: "子模組名稱:", - NewSubmoduleUrl: "新子模組 URL:", - NewSubmodulePath: "新子模組路徑:", - NewSubmodule: "新增子模組", - AddingSubmoduleStatus: "正在新增子模組", - UpdateSubmoduleUrl: "更新子模組 '%s' 的 URL", - UpdatingSubmoduleUrlStatus: "正在更新 URL", - EditSubmoduleUrl: "更新子模組 URL", - InitializingSubmoduleStatus: "正在初始化子模組", - InitSubmoduleTooltip: "初始化子模組", - SubmoduleUpdateTooltip: "更新子模組", - UpdatingSubmoduleStatus: "正在更新子模組", - BulkInitSubmodules: "批量初始化子模組", - BulkUpdateSubmodules: "批量更新子模組", - BulkDeinitSubmodules: "批量解除子模組初始化", - ViewBulkSubmoduleOptions: "查看批量子模組選項", - BulkSubmoduleOptions: "批量子模組選項", - RunningCommand: "正在執行命令", - SubCommitsTitle: "子提交", - SubmodulesTitle: "子模組", - NavigationTitle: "移動", - SuggestionsCheatsheetTitle: "提示", - SuggestionsTitle: "提示(按 %s 進入焦點)", - ExtrasTitle: "命令記錄", - PushingTagStatus: "正在推送標籤", - PullRequestURLCopiedToClipboard: "複製拉取請求 URL 至剪貼簿", - CommitDiffCopiedToClipboard: "已複製提交差異至剪貼簿", - CommitURLCopiedToClipboard: "已複製提交 URL 至剪貼簿", - CommitMessageCopiedToClipboard: "已複製提交訊息至剪貼簿", - CommitAuthorCopiedToClipboard: "已複製提交者至剪貼簿", - PatchCopiedToClipboard: "已複製補丁至剪貼簿", - CopiedToClipboard: "已複製至剪貼簿", - ErrCannotEditDirectory: "無法編輯目錄:你只能編輯單獨的檔案", - ErrStageDirWithInlineMergeConflicts: "不能預存/取消預存包含具備內嵌合併衝突的檔案的目錄。請先解決合併衝突", - ErrRepositoryMovedOrDeleted: "找不到版本庫。可能已被移動或刪除", - CommandLog: "命令記錄", - ToggleShowCommandLog: "切換顯示/隱藏命令記錄", - FocusCommandLog: "聚焦命令記錄", - CommandLogHeader: " '%s' 隱藏/聚焦此面板\n", - RandomTip: "隨機提示", - SelectParentCommitForMerge: "選擇合併的父提交", - ToggleWhitespaceInDiffView: "切換是否在差異檢視中顯示空格變更", - IgnoreWhitespaceDiffViewSubTitle: "(忽略空格)", - IgnoreWhitespaceNotSupportedHere: "在此檢視中不支援忽略空格", - IncreaseContextInDiffView: "增加差異檢視中顯示變更周圍上下文的大小", - DecreaseContextInDiffView: "減小差異檢視中顯示變更周圍上下文的大小", - CreatePullRequestOptions: "建立拉取請求選項", - DefaultBranch: "預設分支", - SelectBranch: "選擇分支", - SelectConfigFile: "選擇設定檔", - NoConfigFileFoundErr: "找不到設定檔", - LoadingFileSuggestions: "正在加載檔案建議", - LoadingCommits: "正在加載提交", - MustSpecifyOriginError: "如果指定分支,必須指定遠端", - GitOutput: "git 輸出:", - GitCommandFailed: "git 命令失敗。請查看命令記錄以獲取詳細資訊(按 %s 開啟)", - AbortTitle: "中止%s", - AbortPrompt: "是否確定要中止當前的%s?", - OpenLogMenu: "開啟記錄選單", - LogMenuTitle: "提交記錄選項", - ToggleShowGitGraphAll: "切換顯示整個 git 圖表(將 `--all` 標誌傳遞給 `git log`)", - ShowGitGraph: "顯示 git 圖表", - SortCommits: "提交排序順序", - CantChangeContextSizeError: "在製作補丁期間無法更改上下文大小,因為當發布功能時我們太懒了以至於沒有支援它。如果你真的需要它,請告訴我們!", - OpenCommitInBrowser: "在瀏覽器中開啟提交", - ViewBisectOptions: "查看二分選項", - ConfirmRevertCommit: "是否還原 {{.selectedCommit}} ?", - RewordInEditorTitle: "在編輯器中改寫", - RewordInEditorPrompt: "是否在編輯器中改寫此提交?", - HardResetAutostashPrompt: "是否強制重設為 '%s' ?如果需要會進行自動存儲。", - CheckoutPrompt: "是否檢出 '%s' ?", - UpstreamGone: "(上游已經不存在)", - NukeDescription: "如果你想讓所有工作樹上的變更消失,這就是要做的方式。如果有未提交的子模組變更,它將把這些變更藏在子模組中。", - DiscardStagedChangesDescription: "這將創建一個新的存儲條目,其中只包含預存檔案,然後如果存儲條目不需要,將其刪除,因此工作樹僅保留未預存的變更。", - EmptyOutput: "<空輸出>", - Patch: "補丁", - CustomPatch: "自定義補丁", - CommitsCopied: "提交已複製", // lowercase because it's used in a sentence - CommitCopied: "提交已複製", // lowercase because it's used in a sentence - ResetPatch: "重設補丁", - ApplyPatch: "套用補丁", - ApplyPatchInReverse: "反向套用補丁", - RemovePatchFromOriginalCommit: "從原始提交中刪除補丁(%s)", - MovePatchOutIntoIndex: "將補丁移到預存區", - MovePatchIntoNewCommit: "將補丁移到新的提交", - MovePatchToSelectedCommit: "將補丁移到選定的提交(%s)", - CopyPatchToClipboard: "將補丁複製到剪貼簿", - NoMatchesFor: "沒有找到符合 '%s' %s 的結果", - ExitSearchMode: "%s:退出搜尋模式", - MatchesFor: "符合 '%s' 的結果(%d/%d)%s", // lowercase because it's after other text - SearchKeybindings: "%s:下一個結果,%s:上一個結果,%s:退出搜尋模式", - SearchPrefix: "搜尋:", - FilterPrefix: "篩選:", - WorktreesTitle: "工作目錄", - WorktreeTitle: "工作目錄", - SwitchToWorktree: "切換至工作目錄面板", - AlreadyCheckedOutByWorktree: "此分支已被檢出到 {{.worktreeName}} 是否切換到此工作目錄?", - BranchCheckedOutByWorktree: "分支 {{.branchName}} 已被 {{.worktreeName}} 檢出", - DetachWorktreeTooltip: "此將在工作目錄中執行 `git checkout --detach` 以解開分支與它的連結,但工作目錄本身將不被更動", - Switching: "切換中", - RemoveWorktree: "刪除工作目錄", - RemoveWorktreeTitle: "刪除工作目錄", - RemoveWorktreePrompt: "是否刪除 {{.worktreeName}} 工作目錄?", - ForceRemoveWorktreePrompt: "'{{.worktreeName}}' 包括已更動或未追蹤的檔案。是否繼續刪除工作目錄?", - RemovingWorktree: "正在刪除工作目錄", - DetachWorktree: "解開工作目錄連結", - DetachingWorktree: "正在解除工作目錄連結", - AddingWorktree: "正在建立工作目錄", - CantDeleteCurrentWorktree: "無法刪除當前工作目錄!", - AlreadyInWorktree: "已經在目標工作目錄內", - CantDeleteMainWorktree: "無法刪除主要工作目錄!", - NoWorktreesThisRepo: "無工作目錄", - MissingWorktree: "(失蹤)", - MainWorktree: "(主要)", - NewWorktreePath: "工作目錄路徑", - NewWorktreeBase: "工作目錄來源", - BranchNameCannotBeBlank: "分支名稱不能為空", - NewBranchName: "分支名稱", - NewBranchNameLeaveBlank: "分支名稱(留空將檢出 {{.default}})", - ViewWorktreeOptions: "檢視工作目錄選項", - CreateWorktreeFrom: "從 {{.ref}} 建立工作目錄", - CreateWorktreeFromDetached: "從 {{.ref}} 建立工作目錄(未連結)", - LcWorktree: "工作目錄", - ChangingDirectoryTo: "切換至 {{.path}}", - Name: "名稱", - Branch: "分支", - Path: "路徑", - MarkedBaseCommitStatus: "為了變基已標注基準提交", - MarkAsBaseCommit: "為了變基已標注提交為基準提交", - MarkAsBaseCommitTooltip: "請為了下一次變基選擇一項基準提交;此將執行 `git rebase --onto`。", - MarkedCommitMarker: "↑↑↑ 將由此變基 ↑↑↑", - PleaseGoToURL: "請開啟 URL:{{.url}}", - DisabledMenuItemPrefix: "已停用:", - NoCopiedCommits: "未複製提交", - Actions: Actions{ - // TODO: combine this with the original keybinding descriptions (those are all in lowercase atm) - CheckoutCommit: "檢出提交", - CheckoutTag: "檢出標籤", - CheckoutBranch: "檢出分支", - ForceCheckoutBranch: "強制檢出分支", - DeleteBranch: "刪除分支", - Merge: "合併", - RebaseBranch: "變基分支", - RenameBranch: "重新命名分支", - CreateBranch: "建立分支", - CherryPick: "(Cherry-pick)複製提交", - CheckoutFile: "檢出檔案", - DiscardOldFileChange: "放棄舊檔案更改", - SquashCommitDown: "下列次方執行 Squash", - FixupCommit: "修復提交", - RewordCommit: "改寫提交", - DropCommit: "捨棄提交", - EditCommit: "編輯提交", - AmendCommit: "修改提交", - ResetCommitAuthor: "重設提交作者", - SetCommitAuthor: "設置提交作者", - RevertCommit: "還原提交", - CreateFixupCommit: "建立修改提交", - SquashAllAboveFixupCommits: "Squash 所有上面的修改提交", - CreateLightweightTag: "建立輕量標籤", - CreateAnnotatedTag: "建立附註標籤", - CopyCommitMessageToClipboard: "將提交訊息複製到剪貼簿", - CopyCommitDiffToClipboard: "將提交差異複製到剪貼簿", - CopyCommitHashToClipboard: "將提交 hash 複製到剪貼簿", - CopyCommitURLToClipboard: "將提交 URL 複製到剪貼簿", - CopyCommitAuthorToClipboard: "將提交作者複製到剪貼簿", - CopyCommitAttributeToClipboard: "複製到剪貼簿", - CopyPatchToClipboard: "將補丁複製到剪貼簿", - MoveCommitUp: "上移提交", - MoveCommitDown: "下移提交", - CustomCommand: "自定義命令", - DiscardAllChangesInDirectory: "捨棄目錄中的所有更改", - DiscardUnstagedChangesInDirectory: "捨棄目錄中未預存的更改", - DiscardAllChangesInFile: "捨棄檔案中的所有更改", - DiscardAllUnstagedChangesInFile: "捨棄檔案中未預存的所有更改", - StageFile: "預存檔案", - StageResolvedFiles: "預存已解決合併衝突的檔案", - UnstageFile: "取消預存檔案", - UnstageAllFiles: "取消預存所有檔案", - StageAllFiles: "預存所有檔案", - IgnoreExcludeFile: "忽略或排除檔案", - IgnoreFileErr: "無法忽略 .gitignore 檔案", - ExcludeFile: "排除檔案", - ExcludeGitIgnoreErr: "無法排除 .gitignore 檔案", - Commit: "提交", - EditFile: "編輯檔案", - Push: "推送", - Pull: "拉取", - OpenFile: "開啟檔案", - StashAllChanges: "收藏所有更改", - StashAllChangesKeepIndex: "收藏所有更改並保留索引", - StashStagedChanges: "收藏已預存的更改", - StashUnstagedChanges: "收藏未預存的更改", - StashIncludeUntrackedChanges: "收藏所有更改,包括未追蹤的檔案", - GitFlowFinish: "`git flow` 完成", - GitFlowStart: "`git flow` 開始", - CopyToClipboard: "複製到剪貼簿", - CopySelectedTextToClipboard: "複製所選文本到剪貼簿", - RemovePatchFromCommit: "從提交中刪除補丁", - MovePatchToSelectedCommit: "將補丁移動到所選提交", - MovePatchIntoIndex: "將補丁移動到索引中", - MovePatchIntoNewCommit: "將補丁移動到新提交中", - DeleteRemoteBranch: "刪除遠端分支", - SetBranchUpstream: "設置分支上游", - AddRemote: "添加遠端", - RemoveRemote: "移除遠端", - UpdateRemote: "更新遠端", - ApplyPatch: "套用補丁", - Stash: "收藏 (Stash)", - RenameStash: "重命名暫存", - RemoveSubmodule: "移除子模塊", - ResetSubmodule: "重設子模塊", - AddSubmodule: "添加子模塊", - UpdateSubmoduleUrl: "更新子模塊 URL", - InitialiseSubmodule: "初始化子模塊", - BulkInitialiseSubmodules: "批量初始化子模塊", - BulkUpdateSubmodules: "批量更新子模塊", - BulkDeinitialiseSubmodules: "批量取消初始化子模塊", - UpdateSubmodule: "更新子模塊", - PushTag: "推送標籤", - NukeWorkingTree: "清空工作樹", - DiscardUnstagedFileChanges: "放棄未預存的檔案更改", - RemoveUntrackedFiles: "移除未追蹤的檔案", - RemoveStagedFiles: "移除已預存的檔案", - SoftReset: "軟重設", - MixedReset: "混合重設", - HardReset: "強制重設", - FastForwardBranch: "快進分支", - Undo: "復原", - Redo: "重做", - CopyPullRequestURL: "複製拉取請求的 URL", - OpenMergeTool: "開啟合併工具", - OpenCommitInBrowser: "在瀏覽器中開啟提交", - OpenPullRequest: "在瀏覽器中開啟拉取請求", - StartBisect: "開始二分查找", - ResetBisect: "重設二分查找", - BisectSkip: "二分查找跳過", - BisectMark: "二分查找標記", - }, - Bisect: Bisect{ - Mark: "將 %s 標記為 %s", - MarkStart: "將 %s 標記為 %s(開始二分查找)", - SkipCurrent: "跳過 %s", - ResetTitle: "重設 `git bisect`", - ResetPrompt: "是否重設 `git bisect`?", - ResetOption: "重設二分查找", - BisectMenuTitle: "二分查找", - CompleteTitle: "二分查找完成", - CompletePrompt: "二分查找完成!以下提交引入了更改:\n\n%s\n\n是否重設 `git bisect` ?", - CompletePromptIndeterminate: "二分查找完成!有一些提交被跳過,因此以下任何提交皆可能引進更改:\n\n%s\n\n是否重設 `git bisect`?", - Bisecting: "二分查找中", - }, - } -} diff --git a/pkg/utils/dummies.go b/pkg/utils/dummies.go index 120c094f7ac..b84a9e38e69 100644 --- a/pkg/utils/dummies.go +++ b/pkg/utils/dummies.go @@ -21,7 +21,7 @@ func NewDummyCommon() *common.Common { tr := i18n.EnglishTranslationSet() return &common.Common{ Log: NewDummyLog(), - Tr: &tr, + Tr: tr, UserConfig: config.GetDefaultConfig(), Fs: afero.NewOsFs(), } @@ -31,7 +31,7 @@ func NewDummyCommonWithUserConfigAndAppState(userConfig *config.UserConfig, appS tr := i18n.EnglishTranslationSet() return &common.Common{ Log: NewDummyLog(), - Tr: &tr, + Tr: tr, UserConfig: userConfig, AppState: appState, // TODO: remove dependency on actual filesystem in tests and switch to using From 741d9a26b626d4dc72d1f8873e0499997e6a7f1e Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Sat, 8 Jun 2024 13:02:56 +0200 Subject: [PATCH 103/157] Change script to write only the English translation set to JSON We will have to do this regularly in order to upload it to Crowdin (or Weblate or whatever translation system we are going to use). Unlike the non-English JSON files, the en.json file is not committed to the git repo. --- cmd/i18n/main.go | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/cmd/i18n/main.go b/cmd/i18n/main.go index 5623c53fcf0..f388c396b13 100644 --- a/cmd/i18n/main.go +++ b/cmd/i18n/main.go @@ -18,24 +18,8 @@ func saveLanguageFileToJson(tr *i18n.TranslationSet, filepath string) error { return os.WriteFile(filepath, jsonData, 0o644) } -func saveNonEnglishLanguageFilesToJson() error { - translationSets, _ := i18n.GetTranslationSets() - for lang, tr := range translationSets { - if lang == "en" { - continue - } - - err := saveLanguageFileToJson(tr, "pkg/i18n/translations/"+lang+".json") - if err != nil { - return err - } - } - - return nil -} - func main() { - err := saveNonEnglishLanguageFilesToJson() + err := saveLanguageFileToJson(i18n.EnglishTranslationSet(), "en.json") if err != nil { log.Fatal(err) } From 68edfa20b43848f337da6eeb9e0098c88205550a Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Wed, 26 Jun 2024 22:19:03 +0200 Subject: [PATCH 104/157] Add function os.PasteFromClipboard And a user config to override it with a custom command. --- docs/Config.md | 14 ++++++++++++-- pkg/commands/oscommands/os.go | 17 +++++++++++++++++ pkg/config/user_config.go | 6 +++++- schema/config.json | 6 +++++- 4 files changed, 39 insertions(+), 4 deletions(-) diff --git a/docs/Config.md b/docs/Config.md index 67d73ebd4d0..88df40621f1 100644 --- a/docs/Config.md +++ b/docs/Config.md @@ -415,9 +415,13 @@ os: openLinkCommand: "" # CopyToClipboardCmd is the command for copying to clipboard. - # See https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#custom-command-for-copying-to-clipboard + # See https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#custom-command-for-copying-to-and-pasting-from-clipboard copyToClipboardCmd: "" + # ReadFromClipboardCmd is the command for reading the clipboard. + # See https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#custom-command-for-copying-to-and-pasting-from-clipboard + readFromClipboardCmd: "" + # If true, don't display introductory popups upon opening Lazygit. disableStartupPopups: false @@ -620,7 +624,7 @@ os: open: 'open {{filename}}' ``` -## Custom Command for Copying to Clipboard +## Custom Command for Copying to and Pasting from Clipboard ```yaml os: copyToClipboardCmd: '' @@ -633,6 +637,12 @@ os: copyToClipboardCmd: printf "\033]52;c;$(printf {{text}} | base64)\a" > /dev/tty ``` +A custom command for reading from the clipboard can be set using +```yaml +os: + readFromClipboardCmd: '' +``` +It is used, for example, when pasting a commit message into the commit message panel. The command is supposed to output the clipboard content to stdout. ## Configuring File Editing diff --git a/pkg/commands/oscommands/os.go b/pkg/commands/oscommands/os.go index 0a6bf7397c9..7771dffba5f 100644 --- a/pkg/commands/oscommands/os.go +++ b/pkg/commands/oscommands/os.go @@ -302,6 +302,23 @@ func (c *OSCommand) CopyToClipboard(str string) error { return clipboard.WriteAll(str) } +func (c *OSCommand) PasteFromClipboard() (string, error) { + var s string + var err error + if c.UserConfig.OS.CopyToClipboardCmd != "" { + cmdStr := c.UserConfig.OS.ReadFromClipboardCmd + s, err = c.Cmd.NewShell(cmdStr).RunWithOutput() + } else { + s, err = clipboard.ReadAll() + } + + if err != nil { + return "", err + } + + return strings.ReplaceAll(s, "\r\n", "\n"), nil +} + func (c *OSCommand) RemoveFile(path string) error { msg := utils.ResolvePlaceholderString( c.Tr.Log.RemoveFile, diff --git a/pkg/config/user_config.go b/pkg/config/user_config.go index 7ab567fbe25..26d10f73a90 100644 --- a/pkg/config/user_config.go +++ b/pkg/config/user_config.go @@ -565,8 +565,12 @@ type OSConfig struct { OpenLinkCommand string `yaml:"openLinkCommand,omitempty"` // CopyToClipboardCmd is the command for copying to clipboard. - // See https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#custom-command-for-copying-to-clipboard + // See https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#custom-command-for-copying-to-and-pasting-from-clipboard CopyToClipboardCmd string `yaml:"copyToClipboardCmd,omitempty"` + + // ReadFromClipboardCmd is the command for reading the clipboard. + // See https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#custom-command-for-copying-to-and-pasting-from-clipboard + ReadFromClipboardCmd string `yaml:"readFromClipboardCmd,omitempty"` } type CustomCommandAfterHook struct { diff --git a/schema/config.json b/schema/config.json index 802069bed66..daaf4ada66c 100644 --- a/schema/config.json +++ b/schema/config.json @@ -796,7 +796,11 @@ }, "copyToClipboardCmd": { "type": "string", - "description": "CopyToClipboardCmd is the command for copying to clipboard.\nSee https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#custom-command-for-copying-to-clipboard" + "description": "CopyToClipboardCmd is the command for copying to clipboard.\nSee https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#custom-command-for-copying-to-and-pasting-from-clipboard" + }, + "readFromClipboardCmd": { + "type": "string", + "description": "ReadFromClipboardCmd is the command for reading the clipboard.\nSee https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#custom-command-for-copying-to-and-pasting-from-clipboard" } }, "additionalProperties": false, From d146d834c29c4e410b9e0f654ab51be542d4e5af Mon Sep 17 00:00:00 2001 From: WaterLemons2k <62788816+WaterLemons2k@users.noreply.github.com> Date: Tue, 18 Jun 2024 20:49:02 +0800 Subject: [PATCH 105/157] Add command to paste commit message from clipboard Resolves #3672 --- pkg/gui/controllers/helpers/commits_helper.go | 32 +++++++++++ pkg/i18n/english.go | 4 ++ .../tests/commit/paste_commit_message.go | 49 +++++++++++++++++ .../paste_commit_message_over_existing.go | 54 +++++++++++++++++++ pkg/integration/tests/test_list.go | 2 + 5 files changed, 141 insertions(+) create mode 100644 pkg/integration/tests/commit/paste_commit_message.go create mode 100644 pkg/integration/tests/commit/paste_commit_message_over_existing.go diff --git a/pkg/gui/controllers/helpers/commits_helper.go b/pkg/gui/controllers/helpers/commits_helper.go index 6e1a181c77d..216f55f8e8b 100644 --- a/pkg/gui/controllers/helpers/commits_helper.go +++ b/pkg/gui/controllers/helpers/commits_helper.go @@ -238,6 +238,13 @@ func (self *CommitsHelper) OpenCommitMenu(suggestionFunc func(string) []*types.S }, Key: 'c', }, + { + Label: self.c.Tr.PasteCommitMessageFromClipboard, + OnPress: func() error { + return self.pasteCommitMessageFromClipboard() + }, + Key: 'p', + }, } return self.c.Menu(types.CreateMenuOptions{ Title: self.c.Tr.CommitMenuTitle, @@ -257,3 +264,28 @@ func (self *CommitsHelper) addCoAuthor(suggestionFunc func(string) []*types.Sugg }, }) } + +func (self *CommitsHelper) pasteCommitMessageFromClipboard() error { + message, err := self.c.OS().PasteFromClipboard() + if err != nil { + return err + } + if message == "" { + return nil + } + + if currentMessage := self.JoinCommitMessageAndUnwrappedDescription(); currentMessage == "" { + self.SetMessageAndDescriptionInView(message) + return nil + } + + // Confirm before overwriting the commit message + return self.c.Confirm(types.ConfirmOpts{ + Title: self.c.Tr.PasteCommitMessageFromClipboard, + Prompt: self.c.Tr.SurePasteCommitMessage, + HandleConfirm: func() error { + self.SetMessageAndDescriptionInView(message) + return nil + }, + }) +} diff --git a/pkg/i18n/english.go b/pkg/i18n/english.go index 0c8f0047903..3665ae8b1ae 100644 --- a/pkg/i18n/english.go +++ b/pkg/i18n/english.go @@ -582,6 +582,8 @@ type TranslationSet struct { CommitHash string CommitURL string CopyCommitMessageToClipboard string + PasteCommitMessageFromClipboard string + SurePasteCommitMessage string CommitMessage string CommitSubject string CommitAuthor string @@ -1553,6 +1555,8 @@ func EnglishTranslationSet() *TranslationSet { CommitHash: "Commit hash", CommitURL: "Commit URL", CopyCommitMessageToClipboard: "Copy commit message to clipboard", + PasteCommitMessageFromClipboard: "Paste commit message from clipboard", + SurePasteCommitMessage: "Pasting will overwrite the current commit message, continue?", CommitMessage: "Commit message", CommitSubject: "Commit subject", CommitAuthor: "Commit author", diff --git a/pkg/integration/tests/commit/paste_commit_message.go b/pkg/integration/tests/commit/paste_commit_message.go new file mode 100644 index 00000000000..130d1885f7b --- /dev/null +++ b/pkg/integration/tests/commit/paste_commit_message.go @@ -0,0 +1,49 @@ +package commit + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var PasteCommitMessage = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Paste a commit message into the commit message panel", + ExtraCmdArgs: []string{}, + Skip: false, + SetupConfig: func(config *config.AppConfig) { + config.UserConfig.OS.CopyToClipboardCmd = "echo {{text}} > ../clipboard" + config.UserConfig.OS.ReadFromClipboardCmd = "cat ../clipboard" + }, + SetupRepo: func(shell *Shell) { + shell.EmptyCommit("subject\n\nbody 1st line\nbody 2nd line") + shell.CreateFileAndAdd("file", "file content") + }, + Run: func(t *TestDriver, keys config.KeybindingConfig) { + t.Views().Commits(). + Focus(). + ContainsLines( + Contains("subject").IsSelected(), + ). + Press(keys.Commits.CopyCommitAttributeToClipboard) + + t.ExpectPopup().Menu().Title(Equals("Copy to clipboard")). + Select(Contains("Commit message")).Confirm() + + t.ExpectToast(Equals("Commit message copied to clipboard")) + + t.Views().Files(). + Focus(). + Press(keys.Files.CommitChanges) + + t.ExpectPopup().CommitMessagePanel(). + OpenCommitMenu() + + t.ExpectPopup().Menu().Title(Equals("Commit Menu")). + Select(Contains("Paste commit message from clipboard")). + Confirm() + + t.ExpectPopup().CommitMessagePanel(). + Content(Equals("subject")). + SwitchToDescription(). + Content(Equals("body 1st line\nbody 2nd line")) + }, +}) diff --git a/pkg/integration/tests/commit/paste_commit_message_over_existing.go b/pkg/integration/tests/commit/paste_commit_message_over_existing.go new file mode 100644 index 00000000000..52f6d44f506 --- /dev/null +++ b/pkg/integration/tests/commit/paste_commit_message_over_existing.go @@ -0,0 +1,54 @@ +package commit + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var PasteCommitMessageOverExisting = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Paste a commit message into the commit message panel when there is already text in the panel, causing a confirmation", + ExtraCmdArgs: []string{}, + Skip: false, + SetupConfig: func(config *config.AppConfig) { + config.UserConfig.OS.CopyToClipboardCmd = "echo {{text}} > ../clipboard" + config.UserConfig.OS.ReadFromClipboardCmd = "cat ../clipboard" + }, + SetupRepo: func(shell *Shell) { + shell.EmptyCommit("subject\n\nbody 1st line\nbody 2nd line") + shell.CreateFileAndAdd("file", "file content") + }, + Run: func(t *TestDriver, keys config.KeybindingConfig) { + t.Views().Commits(). + Focus(). + ContainsLines( + Contains("subject").IsSelected(), + ). + Press(keys.Commits.CopyCommitAttributeToClipboard) + + t.ExpectPopup().Menu().Title(Equals("Copy to clipboard")). + Select(Contains("Commit message")).Confirm() + + t.ExpectToast(Equals("Commit message copied to clipboard")) + + t.Views().Files(). + Focus(). + Press(keys.Files.CommitChanges) + + t.ExpectPopup().CommitMessagePanel(). + Type("existing message"). + OpenCommitMenu() + + t.ExpectPopup().Menu().Title(Equals("Commit Menu")). + Select(Contains("Paste commit message from clipboard")). + Confirm() + + t.ExpectPopup().Alert().Title(Equals("Paste commit message from clipboard")). + Content(Equals("Pasting will overwrite the current commit message, continue?")). + Confirm() + + t.ExpectPopup().CommitMessagePanel(). + Content(Equals("subject")). + SwitchToDescription(). + Content(Equals("body 1st line\nbody 2nd line")) + }, +}) diff --git a/pkg/integration/tests/test_list.go b/pkg/integration/tests/test_list.go index c879b8638ec..b6ebad021e9 100644 --- a/pkg/integration/tests/test_list.go +++ b/pkg/integration/tests/test_list.go @@ -89,6 +89,8 @@ var tests = []*components.IntegrationTest{ commit.History, commit.HistoryComplex, commit.NewBranch, + commit.PasteCommitMessage, + commit.PasteCommitMessageOverExisting, commit.PreserveCommitMessage, commit.ResetAuthor, commit.ResetAuthorRange, From c3d1a79a89d335bb539db78bf55fae067886c8f5 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Mon, 24 Jun 2024 18:45:30 +0200 Subject: [PATCH 106/157] Fix clicking outside of the commit description panel or suggestions panel We forgot to handle the "suggestions" and "commitDescription" view names. Instead of listing all the names of views that can appear in popups though, let's use the context kind for this, which feels more robust. This is a change in behavior: previously, clicking outside of the search or filter prompt would close the prompt, now it no longer does (because search has a persistent popup kind, but it wasn't listed in the list of view names before). --- pkg/gui/controllers/helpers/confirmation_helper.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkg/gui/controllers/helpers/confirmation_helper.go b/pkg/gui/controllers/helpers/confirmation_helper.go index 8f7c60b5a8b..4fed9ab0bbb 100644 --- a/pkg/gui/controllers/helpers/confirmation_helper.go +++ b/pkg/gui/controllers/helpers/confirmation_helper.go @@ -454,12 +454,12 @@ func (self *ConfirmationHelper) ResizeCommitMessagePanels() { _, _ = self.c.GocuiGui().SetView(self.c.Views().CommitDescription.Name(), x0, y0+summaryViewHeight, x1, y1+summaryViewHeight, 0) } -func (self *ConfirmationHelper) IsPopupPanel(viewName string) bool { - return viewName == "commitMessage" || viewName == "confirmation" || viewName == "menu" +func (self *ConfirmationHelper) IsPopupPanel(context types.Context) bool { + return context.GetKind() == types.PERSISTENT_POPUP || context.GetKind() == types.TEMPORARY_POPUP } func (self *ConfirmationHelper) IsPopupPanelFocused() bool { - return self.IsPopupPanel(self.c.CurrentContext().GetViewName()) + return self.IsPopupPanel(self.c.CurrentContext()) } func (self *ConfirmationHelper) TooltipForMenuItem(menuItem *types.MenuItem) string { From 22dc7fece98b37c359f6305ee9ac5271bb2c5f54 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Wed, 26 Jun 2024 09:34:46 +0200 Subject: [PATCH 107/157] Have only one of commit message and description on the context stack at a time This is how we do it for confirmation with suggestions too, so be consistent. It will make things easier later in this branch if we only have one context per "panel" on the stack, even if the panel consists of two views. Concretely this means: - only push the message context onto the stack when opening the panel (this requires making the description view visible manually; we do the same for suggestions) - when switching between message and description, use ReplaceContext rather than PushContext --- pkg/gui/context/commit_message_context.go | 2 ++ .../commit_description_controller.go | 2 +- .../controllers/commit_message_controller.go | 2 +- .../custom_patch_options_menu_action.go | 2 +- pkg/gui/controllers/helpers/commits_helper.go | 26 +++---------------- 5 files changed, 9 insertions(+), 25 deletions(-) diff --git a/pkg/gui/context/commit_message_context.go b/pkg/gui/context/commit_message_context.go index f69b7ef74e4..402f9b12ee6 100644 --- a/pkg/gui/context/commit_message_context.go +++ b/pkg/gui/context/commit_message_context.go @@ -116,6 +116,8 @@ func (self *CommitMessageContext) SetPanelState( "togglePanelKeyBinding": keybindings.Label(self.c.UserConfig.Keybinding.Universal.TogglePanel), "commitMenuKeybinding": keybindings.Label(self.c.UserConfig.Keybinding.CommitMessage.CommitMenu), }) + + self.c.Views().CommitDescription.Visible = true } func (self *CommitMessageContext) RenderCommitLength() { diff --git a/pkg/gui/controllers/commit_description_controller.go b/pkg/gui/controllers/commit_description_controller.go index 0c078382b1f..80608fff504 100644 --- a/pkg/gui/controllers/commit_description_controller.go +++ b/pkg/gui/controllers/commit_description_controller.go @@ -53,7 +53,7 @@ func (self *CommitDescriptionController) context() *context.CommitMessageContext } func (self *CommitDescriptionController) switchToCommitMessage() error { - return self.c.PushContext(self.c.Contexts().CommitMessage) + return self.c.ReplaceContext(self.c.Contexts().CommitMessage) } func (self *CommitDescriptionController) close() error { diff --git a/pkg/gui/controllers/commit_message_controller.go b/pkg/gui/controllers/commit_message_controller.go index 4012dc9504b..5c37b4da9e8 100644 --- a/pkg/gui/controllers/commit_message_controller.go +++ b/pkg/gui/controllers/commit_message_controller.go @@ -85,7 +85,7 @@ func (self *CommitMessageController) handleNextCommit() error { } func (self *CommitMessageController) switchToCommitDescription() error { - if err := self.c.PushContext(self.c.Contexts().CommitDescription); err != nil { + if err := self.c.ReplaceContext(self.c.Contexts().CommitDescription); err != nil { return err } return nil diff --git a/pkg/gui/controllers/custom_patch_options_menu_action.go b/pkg/gui/controllers/custom_patch_options_menu_action.go index f246075977a..867e4528a14 100644 --- a/pkg/gui/controllers/custom_patch_options_menu_action.go +++ b/pkg/gui/controllers/custom_patch_options_menu_action.go @@ -214,7 +214,7 @@ func (self *CustomPatchOptionsMenuAction) handlePullPatchIntoNewCommit() error { PreserveMessage: false, OnConfirm: func(summary string, description string) error { return self.c.WithWaitingStatus(self.c.Tr.RebasingStatus, func(gocui.Task) error { - _ = self.c.Helpers().Commits.PopCommitMessageContexts() + _ = self.c.Helpers().Commits.CloseCommitMessagePanel() self.c.LogAction(self.c.Tr.Actions.MovePatchIntoNewCommit) err := self.c.Git().Patch.PullPatchIntoNewCommit(self.c.Model().Commits, commitIndex, summary, description) if err := self.c.Helpers().MergeAndRebase.CheckMergeOrRebase(err); err != nil { diff --git a/pkg/gui/controllers/helpers/commits_helper.go b/pkg/gui/controllers/helpers/commits_helper.go index 216f55f8e8b..be3a36e8dd2 100644 --- a/pkg/gui/controllers/helpers/commits_helper.go +++ b/pkg/gui/controllers/helpers/commits_helper.go @@ -154,7 +154,7 @@ func (self *CommitsHelper) OpenCommitMessagePanel(opts *OpenCommitMessagePanelOp self.UpdateCommitPanelView(opts.InitialMessage) - return self.pushCommitMessageContexts() + return self.c.PushContext(self.c.Contexts().CommitMessage) } func (self *CommitsHelper) OnCommitSuccess() { @@ -190,28 +190,10 @@ func (self *CommitsHelper) CloseCommitMessagePanel() error { self.c.Contexts().CommitMessage.SetHistoryMessage("") - return self.PopCommitMessageContexts() -} - -func (self *CommitsHelper) PopCommitMessageContexts() error { - return self.c.RemoveContexts(self.commitMessageContexts()) -} + self.c.Views().CommitMessage.Visible = false + self.c.Views().CommitDescription.Visible = false -func (self *CommitsHelper) pushCommitMessageContexts() error { - for _, context := range self.commitMessageContexts() { - if err := self.c.PushContext(context); err != nil { - return err - } - } - - return nil -} - -func (self *CommitsHelper) commitMessageContexts() []types.Context { - return []types.Context{ - self.c.Contexts().CommitDescription, - self.c.Contexts().CommitMessage, - } + return self.c.PopContext() } func (self *CommitsHelper) OpenCommitMenu(suggestionFunc func(string) []*types.Suggestion) error { From 34d7afc0e91014732d79a4164fe0b00769f8b713 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Mon, 24 Jun 2024 18:14:51 +0200 Subject: [PATCH 108/157] Remove unused functions --- pkg/gui/controllers/helpers/confirmation_helper.go | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/pkg/gui/controllers/helpers/confirmation_helper.go b/pkg/gui/controllers/helpers/confirmation_helper.go index 4fed9ab0bbb..2364a4f574c 100644 --- a/pkg/gui/controllers/helpers/confirmation_helper.go +++ b/pkg/gui/controllers/helpers/confirmation_helper.go @@ -5,8 +5,6 @@ import ( "fmt" "strings" - "github.com/jesseduffield/gocui" - "github.com/jesseduffield/lazygit/pkg/gui/style" "github.com/jesseduffield/lazygit/pkg/gui/types" "github.com/jesseduffield/lazygit/pkg/theme" @@ -118,12 +116,6 @@ func wrapMessageToWidth(wrap bool, message string, width int) []string { return wrappedLines } -func (self *ConfirmationHelper) getPopupPanelDimensions(wrap bool, prompt string) (int, int, int, int) { - panelWidth := self.getPopupPanelWidth() - panelHeight := getMessageHeight(wrap, prompt, panelWidth) - return self.getPopupPanelDimensionsAux(panelWidth, panelHeight) -} - func (self *ConfirmationHelper) getPopupPanelDimensionsForContentHeight(panelWidth, contentHeight int) (int, int, int, int) { return self.getPopupPanelDimensionsAux(panelWidth, contentHeight) } @@ -361,12 +353,6 @@ func (self *ConfirmationHelper) ResizeCurrentPopupPanel() error { return nil } -func (self *ConfirmationHelper) ResizePopupPanel(v *gocui.View, content string) error { - x0, y0, x1, y1 := self.getPopupPanelDimensions(v.Wrap, content) - _, err := self.c.GocuiGui().SetView(v.Name(), x0, y0, x1, y1, 0) - return err -} - func (self *ConfirmationHelper) resizeMenu() { // we want the unfiltered length here so that if we're filtering we don't // resize the window From ccc620e5fc0891000d329d244b61eec6ff8017d3 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Mon, 24 Jun 2024 18:21:21 +0200 Subject: [PATCH 109/157] Remove duplicate function ResizeConfirmationPanel and resizeConfirmationPanel were identical, get rid of one of them. --- .../helpers/confirmation_helper.go | 25 ++----------------- 1 file changed, 2 insertions(+), 23 deletions(-) diff --git a/pkg/gui/controllers/helpers/confirmation_helper.go b/pkg/gui/controllers/helpers/confirmation_helper.go index 2364a4f574c..b3f1eca4946 100644 --- a/pkg/gui/controllers/helpers/confirmation_helper.go +++ b/pkg/gui/controllers/helpers/confirmation_helper.go @@ -169,7 +169,7 @@ func (self *ConfirmationHelper) prepareConfirmationPanel( suggestionsView.Subtitle = "" } - self.ResizeConfirmationPanel() + self.resizeConfirmationPanel() return nil } @@ -219,7 +219,7 @@ func (self *ConfirmationHelper) CreatePopupPanel(ctx goContext.Context, opts typ textArea := confirmationView.TextArea textArea.Clear() textArea.TypeString(opts.Prompt) - self.ResizeConfirmationPanel() + self.resizeConfirmationPanel() confirmationView.RenderTextArea() } else { self.c.ResetViewOrigin(confirmationView) @@ -317,27 +317,6 @@ func (self *ConfirmationHelper) getSelectedSuggestionValue() string { return "" } -func (self *ConfirmationHelper) ResizeConfirmationPanel() { - suggestionsViewHeight := 0 - if self.c.Views().Suggestions.Visible { - suggestionsViewHeight = 11 - } - panelWidth := self.getPopupPanelWidth() - prompt := self.c.Views().Confirmation.Buffer() - wrap := true - if self.c.Views().Confirmation.Editable { - prompt = self.c.Views().Confirmation.TextArea.GetContent() - wrap = false - } - panelHeight := getMessageHeight(wrap, prompt, panelWidth) + suggestionsViewHeight - x0, y0, x1, y1 := self.getPopupPanelDimensionsAux(panelWidth, panelHeight) - confirmationViewBottom := y1 - suggestionsViewHeight - _, _ = self.c.GocuiGui().SetView(self.c.Views().Confirmation.Name(), x0, y0, x1, confirmationViewBottom, 0) - - suggestionsViewTop := confirmationViewBottom + 1 - _, _ = self.c.GocuiGui().SetView(self.c.Views().Suggestions.Name(), x0, suggestionsViewTop, x1, suggestionsViewTop+suggestionsViewHeight, 0) -} - func (self *ConfirmationHelper) ResizeCurrentPopupPanel() error { c := self.c.CurrentContext() From b795d91fa8112534db96311eb86d339066dedb07 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Thu, 27 Jun 2024 10:18:07 +0200 Subject: [PATCH 110/157] Remove redundant resizeConfirmationPanel() call at panel creating time We resize the panel in layout, so there's no need to do that after creation. --- pkg/gui/controllers/helpers/confirmation_helper.go | 1 - 1 file changed, 1 deletion(-) diff --git a/pkg/gui/controllers/helpers/confirmation_helper.go b/pkg/gui/controllers/helpers/confirmation_helper.go index b3f1eca4946..d564eeabcee 100644 --- a/pkg/gui/controllers/helpers/confirmation_helper.go +++ b/pkg/gui/controllers/helpers/confirmation_helper.go @@ -169,7 +169,6 @@ func (self *ConfirmationHelper) prepareConfirmationPanel( suggestionsView.Subtitle = "" } - self.resizeConfirmationPanel() return nil } From 32cfe7a5c3d325e035f0768d0ff2a37cdec2aff6 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Fri, 28 Jun 2024 08:14:05 +0200 Subject: [PATCH 111/157] Bump gocui --- go.mod | 2 +- go.sum | 4 ++-- vendor/github.com/jesseduffield/gocui/gui.go | 18 +++++++++++++++--- vendor/modules.txt | 2 +- 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/go.mod b/go.mod index 69546555d27..bc8009a986b 100644 --- a/go.mod +++ b/go.mod @@ -16,7 +16,7 @@ require ( github.com/integrii/flaggy v1.4.0 github.com/jesseduffield/generics v0.0.0-20220320043834-727e535cbe68 github.com/jesseduffield/go-git/v5 v5.1.2-0.20221018185014-fdd53fef665d - github.com/jesseduffield/gocui v0.3.1-0.20240623124136-ce5274be521d + github.com/jesseduffield/gocui v0.3.1-0.20240628061234-aed9e133e65b github.com/jesseduffield/kill v0.0.0-20220618033138-bfbe04675d10 github.com/jesseduffield/lazycore v0.0.0-20221012050358-03d2e40243c5 github.com/jesseduffield/minimal/gitignore v0.3.3-0.20211018110810-9cde264e6b1e diff --git a/go.sum b/go.sum index dae59e80722..e575afcadba 100644 --- a/go.sum +++ b/go.sum @@ -188,8 +188,8 @@ github.com/jesseduffield/generics v0.0.0-20220320043834-727e535cbe68 h1:EQP2Tv8T github.com/jesseduffield/generics v0.0.0-20220320043834-727e535cbe68/go.mod h1:+LLj9/WUPAP8LqCchs7P+7X0R98HiFujVFANdNaxhGk= github.com/jesseduffield/go-git/v5 v5.1.2-0.20221018185014-fdd53fef665d h1:bO+OmbreIv91rCe8NmscRwhFSqkDJtzWCPV4Y+SQuXE= github.com/jesseduffield/go-git/v5 v5.1.2-0.20221018185014-fdd53fef665d/go.mod h1:nGNEErzf+NRznT+N2SWqmHnDnF9aLgANB1CUNEan09o= -github.com/jesseduffield/gocui v0.3.1-0.20240623124136-ce5274be521d h1:I6rViLB+ZW5SnS8P7ZE0FdY6lMfx803qZ9ZYEYCvfro= -github.com/jesseduffield/gocui v0.3.1-0.20240623124136-ce5274be521d/go.mod h1:XtEbqCbn45keRXEu+OMZkjN5gw6AEob59afsgHjokZ8= +github.com/jesseduffield/gocui v0.3.1-0.20240628061234-aed9e133e65b h1:oxCq0DvR2GMGf4UaoaASb0nQK/fJMQW3c3PNCLWCjS8= +github.com/jesseduffield/gocui v0.3.1-0.20240628061234-aed9e133e65b/go.mod h1:XtEbqCbn45keRXEu+OMZkjN5gw6AEob59afsgHjokZ8= github.com/jesseduffield/kill v0.0.0-20220618033138-bfbe04675d10 h1:jmpr7KpX2+2GRiE91zTgfq49QvgiqB0nbmlwZ8UnOx0= github.com/jesseduffield/kill v0.0.0-20220618033138-bfbe04675d10/go.mod h1:aA97kHeNA+sj2Hbki0pvLslmE4CbDyhBeSSTUUnOuVo= github.com/jesseduffield/lazycore v0.0.0-20221012050358-03d2e40243c5 h1:CDuQmfOjAtb1Gms6a1p5L2P8RhbLUq5t8aL7PiQd2uY= diff --git a/vendor/github.com/jesseduffield/gocui/gui.go b/vendor/github.com/jesseduffield/gocui/gui.go index e2593b98589..0c64e692539 100644 --- a/vendor/github.com/jesseduffield/gocui/gui.go +++ b/vendor/github.com/jesseduffield/gocui/gui.go @@ -307,14 +307,26 @@ func (g *Gui) SetView(name string, x0, y0, x1, y1 int, overlaps byte) (*View, er } if v, err := g.View(name); err == nil { - if v.x0 != x0 || v.x1 != x1 || v.y0 != y0 || v.y1 != y1 { - v.clearViewLines() - } + sizeChanged := v.x0 != x0 || v.x1 != x1 || v.y0 != y0 || v.y1 != y1 v.x0 = x0 v.y0 = y0 v.x1 = x1 v.y1 = y1 + + if sizeChanged { + v.clearViewLines() + + if v.Editable { + cursorX, cursorY := v.TextArea.GetCursorXY() + newViewCursorX, newOriginX := updatedCursorAndOrigin(0, v.InnerWidth(), cursorX) + newViewCursorY, newOriginY := updatedCursorAndOrigin(0, v.InnerHeight(), cursorY) + + _ = v.SetCursor(newViewCursorX, newViewCursorY) + _ = v.SetOrigin(newOriginX, newOriginY) + } + } + return v, nil } diff --git a/vendor/modules.txt b/vendor/modules.txt index c7d601a9326..6b34633e2ed 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -172,7 +172,7 @@ github.com/jesseduffield/go-git/v5/utils/merkletrie/filesystem github.com/jesseduffield/go-git/v5/utils/merkletrie/index github.com/jesseduffield/go-git/v5/utils/merkletrie/internal/frame github.com/jesseduffield/go-git/v5/utils/merkletrie/noder -# github.com/jesseduffield/gocui v0.3.1-0.20240623124136-ce5274be521d +# github.com/jesseduffield/gocui v0.3.1-0.20240628061234-aed9e133e65b ## explicit; go 1.12 github.com/jesseduffield/gocui # github.com/jesseduffield/kill v0.0.0-20220618033138-bfbe04675d10 From bb016485212b322a11debaa4a64494f5904e06b5 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Tue, 25 Jun 2024 18:18:55 +0200 Subject: [PATCH 112/157] Remove redundant calls to resize editable panels at creating time The only purpose of this was to scroll the editable text correctly (see https://github.com/jesseduffield/lazygit/pull/2146); now that gocui takes care of that, we no longer need to do this. --- pkg/gui/controllers.go | 1 - pkg/gui/controllers/helpers/confirmation_helper.go | 1 - 2 files changed, 2 deletions(-) diff --git a/pkg/gui/controllers.go b/pkg/gui/controllers.go index d6ac5a26870..ba39fef5a45 100644 --- a/pkg/gui/controllers.go +++ b/pkg/gui/controllers.go @@ -404,7 +404,6 @@ func (gui *Gui) getCommitMessageSetTextareaTextFn(getView func() *gocui.View) fu view := getView() view.ClearTextArea() view.TextArea.TypeString(text) - gui.helpers.Confirmation.ResizeCommitMessagePanels() view.RenderTextArea() } } diff --git a/pkg/gui/controllers/helpers/confirmation_helper.go b/pkg/gui/controllers/helpers/confirmation_helper.go index d564eeabcee..9fa2ce8a850 100644 --- a/pkg/gui/controllers/helpers/confirmation_helper.go +++ b/pkg/gui/controllers/helpers/confirmation_helper.go @@ -218,7 +218,6 @@ func (self *ConfirmationHelper) CreatePopupPanel(ctx goContext.Context, opts typ textArea := confirmationView.TextArea textArea.Clear() textArea.TypeString(opts.Prompt) - self.resizeConfirmationPanel() confirmationView.RenderTextArea() } else { self.c.ResetViewOrigin(confirmationView) From 1d502d3245c543f20b4b72d00f555bb41438e374 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Thu, 27 Jun 2024 10:23:08 +0200 Subject: [PATCH 113/157] Remove return value from ResizeCurrentPopupPanel It always returned nil, so there's no point in returning an error. --- pkg/gui/controllers/helpers/confirmation_helper.go | 4 +--- pkg/gui/layout.go | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/pkg/gui/controllers/helpers/confirmation_helper.go b/pkg/gui/controllers/helpers/confirmation_helper.go index 9fa2ce8a850..2a1a821c23c 100644 --- a/pkg/gui/controllers/helpers/confirmation_helper.go +++ b/pkg/gui/controllers/helpers/confirmation_helper.go @@ -315,7 +315,7 @@ func (self *ConfirmationHelper) getSelectedSuggestionValue() string { return "" } -func (self *ConfirmationHelper) ResizeCurrentPopupPanel() error { +func (self *ConfirmationHelper) ResizeCurrentPopupPanel() { c := self.c.CurrentContext() switch c { @@ -326,8 +326,6 @@ func (self *ConfirmationHelper) ResizeCurrentPopupPanel() error { case self.c.Contexts().CommitMessage, self.c.Contexts().CommitDescription: self.ResizeCommitMessagePanels() } - - return nil } func (self *ConfirmationHelper) resizeMenu() { diff --git a/pkg/gui/layout.go b/pkg/gui/layout.go index 861bb0bd124..077ee3c8482 100644 --- a/pkg/gui/layout.go +++ b/pkg/gui/layout.go @@ -173,9 +173,7 @@ func (gui *Gui) layout(g *gocui.Gui) error { // if you run `lazygit --logs` // this will let you see these branches as prettified json // gui.c.Log.Info(utils.AsJson(gui.State.Model.Branches[0:4])) - if err := gui.helpers.Confirmation.ResizeCurrentPopupPanel(); err != nil { - return err - } + gui.helpers.Confirmation.ResizeCurrentPopupPanel() gui.renderContextOptionsMap() From 1ab1fb3599c9aa891e9ff0c8ca52f1a22b8af141 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Tue, 25 Jun 2024 19:25:46 +0200 Subject: [PATCH 114/157] Resize all open popup panels in layout, not just the topmost one Probably not the most import feature in the world, but when resizing the terminal window while multiple popup panels were open at the same time, we would only resize the topmost one. The main reason for changing this is because it makes the next commit easier to implement. --- pkg/gui/context.go | 9 +++++++++ .../helpers/confirmation_helper.go | 20 +++++++++---------- pkg/gui/gui_common.go | 4 ++++ pkg/gui/layout.go | 2 +- pkg/gui/types/common.go | 1 + 5 files changed, 25 insertions(+), 11 deletions(-) diff --git a/pkg/gui/context.go b/pkg/gui/context.go index 28ecf240549..5dc6df6a084 100644 --- a/pkg/gui/context.go +++ b/pkg/gui/context.go @@ -391,3 +391,12 @@ func (self *ContextMgr) ContextForKey(key types.ContextKey) types.Context { return nil } + +func (self *ContextMgr) PopupContexts() []types.Context { + self.RLock() + defer self.RUnlock() + + return lo.Filter(self.ContextStack, func(context types.Context, _ int) bool { + return context.GetKind() == types.TEMPORARY_POPUP || context.GetKind() == types.PERSISTENT_POPUP + }) +} diff --git a/pkg/gui/controllers/helpers/confirmation_helper.go b/pkg/gui/controllers/helpers/confirmation_helper.go index 2a1a821c23c..83e4102ac57 100644 --- a/pkg/gui/controllers/helpers/confirmation_helper.go +++ b/pkg/gui/controllers/helpers/confirmation_helper.go @@ -315,16 +315,16 @@ func (self *ConfirmationHelper) getSelectedSuggestionValue() string { return "" } -func (self *ConfirmationHelper) ResizeCurrentPopupPanel() { - c := self.c.CurrentContext() - - switch c { - case self.c.Contexts().Menu: - self.resizeMenu() - case self.c.Contexts().Confirmation, self.c.Contexts().Suggestions: - self.resizeConfirmationPanel() - case self.c.Contexts().CommitMessage, self.c.Contexts().CommitDescription: - self.ResizeCommitMessagePanels() +func (self *ConfirmationHelper) ResizeCurrentPopupPanels() { + for _, c := range self.c.CurrentPopupContexts() { + switch c { + case self.c.Contexts().Menu: + self.resizeMenu() + case self.c.Contexts().Confirmation, self.c.Contexts().Suggestions: + self.resizeConfirmationPanel() + case self.c.Contexts().CommitMessage, self.c.Contexts().CommitDescription: + self.ResizeCommitMessagePanels() + } } } diff --git a/pkg/gui/gui_common.go b/pkg/gui/gui_common.go index 434f4b38bfd..8a537f2ca2b 100644 --- a/pkg/gui/gui_common.go +++ b/pkg/gui/gui_common.go @@ -73,6 +73,10 @@ func (self *guiCommon) CurrentSideContext() types.Context { return self.gui.State.ContextMgr.CurrentSide() } +func (self *guiCommon) CurrentPopupContexts() []types.Context { + return self.gui.State.ContextMgr.PopupContexts() +} + func (self *guiCommon) IsCurrentContext(c types.Context) bool { return self.gui.State.ContextMgr.IsCurrent(c) } diff --git a/pkg/gui/layout.go b/pkg/gui/layout.go index 077ee3c8482..3bf6a7c35c8 100644 --- a/pkg/gui/layout.go +++ b/pkg/gui/layout.go @@ -173,7 +173,7 @@ func (gui *Gui) layout(g *gocui.Gui) error { // if you run `lazygit --logs` // this will let you see these branches as prettified json // gui.c.Log.Info(utils.AsJson(gui.State.Model.Branches[0:4])) - gui.helpers.Confirmation.ResizeCurrentPopupPanel() + gui.helpers.Confirmation.ResizeCurrentPopupPanels() gui.renderContextOptionsMap() diff --git a/pkg/gui/types/common.go b/pkg/gui/types/common.go index 61c27de496f..c6885d7175c 100644 --- a/pkg/gui/types/common.go +++ b/pkg/gui/types/common.go @@ -67,6 +67,7 @@ type IGuiCommon interface { CurrentContext() Context CurrentStaticContext() Context CurrentSideContext() Context + CurrentPopupContexts() []Context IsCurrentContext(Context) bool // TODO: replace the above context-based methods with just using Context() e.g. replace PushContext() with Context().Push() Context() IContextMgr From 4b6479b25f8fcbacb360ee18ef3359cfeee8bd8c Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Wed, 26 Jun 2024 08:02:56 +0200 Subject: [PATCH 115/157] Stagger popup panels When opening a popup panel on top of another one, offset the new one a little bit down and to the right. --- .../helpers/confirmation_helper.go | 35 ++++++++++++------- 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/pkg/gui/controllers/helpers/confirmation_helper.go b/pkg/gui/controllers/helpers/confirmation_helper.go index 83e4102ac57..c0fb5bafb82 100644 --- a/pkg/gui/controllers/helpers/confirmation_helper.go +++ b/pkg/gui/controllers/helpers/confirmation_helper.go @@ -116,15 +116,23 @@ func wrapMessageToWidth(wrap bool, message string, width int) []string { return wrappedLines } -func (self *ConfirmationHelper) getPopupPanelDimensionsForContentHeight(panelWidth, contentHeight int) (int, int, int, int) { - return self.getPopupPanelDimensionsAux(panelWidth, contentHeight) +func (self *ConfirmationHelper) getPopupPanelDimensionsForContentHeight(panelWidth, contentHeight int, parentPopupContext types.Context) (int, int, int, int) { + return self.getPopupPanelDimensionsAux(panelWidth, contentHeight, parentPopupContext) } -func (self *ConfirmationHelper) getPopupPanelDimensionsAux(panelWidth int, panelHeight int) (int, int, int, int) { +func (self *ConfirmationHelper) getPopupPanelDimensionsAux(panelWidth int, panelHeight int, parentPopupContext types.Context) (int, int, int, int) { width, height := self.c.GocuiGui().Size() if panelHeight > height*3/4 { panelHeight = height * 3 / 4 } + if parentPopupContext != nil { + // If there's already a popup on the screen, offset the new one from its + // parent so that it's clearly distinguished from the parent + x0, y0, _, _ := parentPopupContext.GetView().Dimensions() + x0 += 2 + y0 += 1 + return x0, y0, x0 + panelWidth, y0 + panelHeight + 1 + } return width/2 - panelWidth/2, height/2 - panelHeight/2 - panelHeight%2 - 1, width/2 + panelWidth/2, @@ -316,19 +324,22 @@ func (self *ConfirmationHelper) getSelectedSuggestionValue() string { } func (self *ConfirmationHelper) ResizeCurrentPopupPanels() { + var parentPopupContext types.Context for _, c := range self.c.CurrentPopupContexts() { switch c { case self.c.Contexts().Menu: - self.resizeMenu() + self.resizeMenu(parentPopupContext) case self.c.Contexts().Confirmation, self.c.Contexts().Suggestions: - self.resizeConfirmationPanel() + self.resizeConfirmationPanel(parentPopupContext) case self.c.Contexts().CommitMessage, self.c.Contexts().CommitDescription: - self.ResizeCommitMessagePanels() + self.ResizeCommitMessagePanels(parentPopupContext) } + + parentPopupContext = c } } -func (self *ConfirmationHelper) resizeMenu() { +func (self *ConfirmationHelper) resizeMenu(parentPopupContext types.Context) { // we want the unfiltered length here so that if we're filtering we don't // resize the window itemCount := self.c.Contexts().Menu.UnfilteredLen() @@ -336,7 +347,7 @@ func (self *ConfirmationHelper) resizeMenu() { panelWidth := self.getPopupPanelWidth() contentWidth := panelWidth - 2 // minus 2 for the frame promptLinesCount := self.layoutMenuPrompt(contentWidth) - x0, y0, x1, y1 := self.getPopupPanelDimensionsForContentHeight(panelWidth, itemCount+offset+promptLinesCount) + x0, y0, x1, y1 := self.getPopupPanelDimensionsForContentHeight(panelWidth, itemCount+offset+promptLinesCount, parentPopupContext) menuBottom := y1 - offset _, _ = self.c.GocuiGui().SetView(self.c.Views().Menu.Name(), x0, y0, x1, menuBottom, 0) @@ -379,7 +390,7 @@ func (self *ConfirmationHelper) layoutMenuPrompt(contentWidth int) int { return len(promptLines) } -func (self *ConfirmationHelper) resizeConfirmationPanel() { +func (self *ConfirmationHelper) resizeConfirmationPanel(parentPopupContext types.Context) { suggestionsViewHeight := 0 if self.c.Views().Suggestions.Visible { suggestionsViewHeight = 11 @@ -392,7 +403,7 @@ func (self *ConfirmationHelper) resizeConfirmationPanel() { wrap = false } panelHeight := getMessageHeight(wrap, prompt, panelWidth) + suggestionsViewHeight - x0, y0, x1, y1 := self.getPopupPanelDimensionsAux(panelWidth, panelHeight) + x0, y0, x1, y1 := self.getPopupPanelDimensionsAux(panelWidth, panelHeight, parentPopupContext) confirmationViewBottom := y1 - suggestionsViewHeight _, _ = self.c.GocuiGui().SetView(self.c.Views().Confirmation.Name(), x0, y0, x1, confirmationViewBottom, 0) @@ -400,7 +411,7 @@ func (self *ConfirmationHelper) resizeConfirmationPanel() { _, _ = self.c.GocuiGui().SetView(self.c.Views().Suggestions.Name(), x0, suggestionsViewTop, x1, suggestionsViewTop+suggestionsViewHeight, 0) } -func (self *ConfirmationHelper) ResizeCommitMessagePanels() { +func (self *ConfirmationHelper) ResizeCommitMessagePanels(parentPopupContext types.Context) { panelWidth := self.getPopupPanelWidth() content := self.c.Views().CommitDescription.TextArea.GetContent() summaryViewHeight := 3 @@ -409,7 +420,7 @@ func (self *ConfirmationHelper) ResizeCommitMessagePanels() { if panelHeight < minHeight { panelHeight = minHeight } - x0, y0, x1, y1 := self.getPopupPanelDimensionsAux(panelWidth, panelHeight) + x0, y0, x1, y1 := self.getPopupPanelDimensionsAux(panelWidth, panelHeight, parentPopupContext) _, _ = self.c.GocuiGui().SetView(self.c.Views().CommitMessage.Name(), x0, y0, x1, y0+summaryViewHeight-1, 0) _, _ = self.c.GocuiGui().SetView(self.c.Views().CommitDescription.Name(), x0, y0+summaryViewHeight, x1, y1+summaryViewHeight, 0) From c6df856079a80b2e5d178238d2622901c7487cba Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Mon, 10 Jun 2024 11:19:54 +0200 Subject: [PATCH 116/157] Add test demonstrating a problem with updating the filter when the model changes We only update the filter when the filtered view has the focus. --- .../filter_updates_when_model_changes.go | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/pkg/integration/tests/filter_and_search/filter_updates_when_model_changes.go b/pkg/integration/tests/filter_and_search/filter_updates_when_model_changes.go index 60ce9b580b3..950decc14e5 100644 --- a/pkg/integration/tests/filter_and_search/filter_updates_when_model_changes.go +++ b/pkg/integration/tests/filter_and_search/filter_updates_when_model_changes.go @@ -41,13 +41,35 @@ var FilterUpdatesWhenModelChanges = NewIntegrationTest(NewIntegrationTestArgs{ }). Lines( Contains("checked-out-branch").IsSelected(), - ). + ) + + // Verify that updating the filter works even if the view is not the active one + t.Views().Files().Focus() + + // To do that, we use a custom command to create a new branch that matches the filter + t.GlobalPress(keys.Universal.ExecuteCustomCommand) + t.ExpectPopup().Prompt(). + Title(Equals("Custom command:")). + Type("git branch new-branch"). + Confirm() + + t.Views().Branches(). + Lines( + Contains("checked-out-branch").IsSelected(), + /* EXPECTED: + Contains("new-branch"), + */ + ) + + t.Views().Branches(). + Focus(). // cancel the filter PressEscape(). Lines( Contains("checked-out-branch").IsSelected(), Contains("other"), Contains("master"), + Contains("new-branch"), ) }, }) From e205c6ba7f65e566eeee0a08c08cde245a0493f9 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Mon, 10 Jun 2024 11:20:59 +0200 Subject: [PATCH 117/157] Always reapply filters on filtered views, even inactive ones --- pkg/gui/controllers/helpers/search_helper.go | 10 +++++----- .../filter_updates_when_model_changes.go | 2 -- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/pkg/gui/controllers/helpers/search_helper.go b/pkg/gui/controllers/helpers/search_helper.go index 2cffe418bee..653640e0209 100644 --- a/pkg/gui/controllers/helpers/search_helper.go +++ b/pkg/gui/controllers/helpers/search_helper.go @@ -239,14 +239,14 @@ func (self *SearchHelper) OnPromptContentChanged(searchString string) { } func (self *SearchHelper) ReApplyFilter(context types.Context) { - state := self.searchState() - if context == state.Context { - filterableContext, ok := context.(types.IFilterableContext) - if ok { + filterableContext, ok := context.(types.IFilterableContext) + if ok { + state := self.searchState() + if context == state.Context { filterableContext.SetSelection(0) _ = filterableContext.GetView().SetOriginY(0) - filterableContext.ReApplyFilter(self.c.UserConfig.Gui.UseFuzzySearch()) } + filterableContext.ReApplyFilter(self.c.UserConfig.Gui.UseFuzzySearch()) } } diff --git a/pkg/integration/tests/filter_and_search/filter_updates_when_model_changes.go b/pkg/integration/tests/filter_and_search/filter_updates_when_model_changes.go index 950decc14e5..eb98f730e1b 100644 --- a/pkg/integration/tests/filter_and_search/filter_updates_when_model_changes.go +++ b/pkg/integration/tests/filter_and_search/filter_updates_when_model_changes.go @@ -56,9 +56,7 @@ var FilterUpdatesWhenModelChanges = NewIntegrationTest(NewIntegrationTestArgs{ t.Views().Branches(). Lines( Contains("checked-out-branch").IsSelected(), - /* EXPECTED: Contains("new-branch"), - */ ) t.Views().Branches(). From c3715d0f86b3278e4a3c193c4426ee4a6af88a95 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Thu, 27 Jun 2024 14:36:18 +0200 Subject: [PATCH 118/157] Extract helper function SuggestionsController.switchToConfirmation This fixes the minor issue that the subtitle of the suggestions view wasn't emptied when hitting "e" to edit a custom command. --- pkg/gui/controllers/suggestions_controller.go | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/pkg/gui/controllers/suggestions_controller.go b/pkg/gui/controllers/suggestions_controller.go index 857952d9bf5..90ac431075b 100644 --- a/pkg/gui/controllers/suggestions_controller.go +++ b/pkg/gui/controllers/suggestions_controller.go @@ -40,11 +40,8 @@ func (self *SuggestionsController) GetKeybindings(opts types.KeybindingsOpts) [] Handler: func() error { return self.context().State.OnClose() }, }, { - Key: opts.GetKey(opts.Config.Universal.TogglePanel), - Handler: func() error { - self.c.Views().Suggestions.Subtitle = "" - return self.c.ReplaceContext(self.c.Contexts().Confirmation) - }, + Key: opts.GetKey(opts.Config.Universal.TogglePanel), + Handler: self.switchToConfirmation, }, { Key: opts.GetKey(opts.Config.Universal.Remove), @@ -61,7 +58,7 @@ func (self *SuggestionsController) GetKeybindings(opts types.KeybindingsOpts) [] self.c.Contexts().Confirmation.GetView().TextArea.TypeString(selectedItem.Value) self.c.Contexts().Confirmation.GetView().RenderTextArea() self.c.Contexts().Suggestions.RefreshSuggestions() - return self.c.ReplaceContext(self.c.Contexts().Confirmation) + return self.switchToConfirmation() } } return nil @@ -72,6 +69,11 @@ func (self *SuggestionsController) GetKeybindings(opts types.KeybindingsOpts) [] return bindings } +func (self *SuggestionsController) switchToConfirmation() error { + self.c.Views().Suggestions.Subtitle = "" + return self.c.ReplaceContext(self.c.Contexts().Confirmation) +} + func (self *SuggestionsController) GetOnFocusLost() func(types.OnFocusLostOpts) error { return func(types.OnFocusLostOpts) error { self.c.Helpers().Confirmation.DeactivateConfirmationPrompt() From 9b73b68f95399e90da501a0be9d751c7d893a413 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Thu, 27 Jun 2024 14:45:29 +0200 Subject: [PATCH 119/157] Turn off the highlight of the suggestions panel when it loses focus The highlight is normally turned off in HandleFocusLost, but that's not called when using ReplaceContext (and changing this would be a lot of work, it seems), so turn it off manually here for now. --- pkg/gui/controllers/suggestions_controller.go | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/gui/controllers/suggestions_controller.go b/pkg/gui/controllers/suggestions_controller.go index 90ac431075b..a425f356ef5 100644 --- a/pkg/gui/controllers/suggestions_controller.go +++ b/pkg/gui/controllers/suggestions_controller.go @@ -71,6 +71,7 @@ func (self *SuggestionsController) GetKeybindings(opts types.KeybindingsOpts) [] func (self *SuggestionsController) switchToConfirmation() error { self.c.Views().Suggestions.Subtitle = "" + self.c.Views().Suggestions.Highlight = false return self.c.ReplaceContext(self.c.Contexts().Confirmation) } From 7be82d47135d8fa28823c506080311cba6d7b5f0 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Sun, 23 Jun 2024 14:54:27 +0200 Subject: [PATCH 120/157] Revert "Add user config gui.commitAuthorFormat (#3625)" This reverts commit 3af545daf7cf6458e8efd324012047ce688f08e6, reversing changes made to 629b7ba1b8f634c26adad43ffe44ed601d652f0c. We changed our mind about this and want to provide different options for achieving the same thing, but with more flexibility. --- docs/Config.md | 5 ----- pkg/config/user_config.go | 5 ----- pkg/config/user_config_validation.go | 5 ----- pkg/gui/presentation/commits.go | 9 ++------- schema/config.json | 10 ---------- 5 files changed, 2 insertions(+), 32 deletions(-) diff --git a/docs/Config.md b/docs/Config.md index 88df40621f1..86e26855096 100644 --- a/docs/Config.md +++ b/docs/Config.md @@ -185,11 +185,6 @@ gui: # If true (default), file icons are shown in the file views. Only relevant if NerdFontsVersion is not empty. showFileIcons: true - # Whether to show full author names or their shortened form in the commit graph. - # One of 'auto' (default) | 'full' | 'short' - # If 'auto', initials will be shown in small windows, and full names - in larger ones. - commitAuthorFormat: auto - # Length of commit hash in commits view. 0 shows '*' if NF icons aren't on. commitHashLength: 8 diff --git a/pkg/config/user_config.go b/pkg/config/user_config.go index 26d10f73a90..522a4f2348a 100644 --- a/pkg/config/user_config.go +++ b/pkg/config/user_config.go @@ -125,10 +125,6 @@ type GuiConfig struct { NerdFontsVersion string `yaml:"nerdFontsVersion" jsonschema:"enum=2,enum=3,enum="` // If true (default), file icons are shown in the file views. Only relevant if NerdFontsVersion is not empty. ShowFileIcons bool `yaml:"showFileIcons"` - // Whether to show full author names or their shortened form in the commit graph. - // One of 'auto' (default) | 'full' | 'short' - // If 'auto', initials will be shown in small windows, and full names - in larger ones. - CommitAuthorFormat string `yaml:"commitAuthorFormat" jsonschema:"enum=auto,enum=short,enum=full"` // Length of commit hash in commits view. 0 shows '*' if NF icons aren't on. CommitHashLength int `yaml:"commitHashLength" jsonschema:"minimum=0"` // If true, show commit hashes alongside branch names in the branches view. @@ -687,7 +683,6 @@ func GetDefaultConfig() *UserConfig { UnstagedChangesColor: []string{"red"}, DefaultFgColor: []string{"default"}, }, - CommitAuthorFormat: "auto", CommitLength: CommitLengthConfig{Show: true}, SkipNoStagedFilesWarning: false, ShowListFooter: true, diff --git a/pkg/config/user_config_validation.go b/pkg/config/user_config_validation.go index ed248fc4474..403119adadb 100644 --- a/pkg/config/user_config_validation.go +++ b/pkg/config/user_config_validation.go @@ -7,11 +7,6 @@ import ( ) func (config *UserConfig) Validate() error { - if err := validateEnum("gui.commitAuthorFormat", config.Gui.CommitAuthorFormat, - []string{"auto", "short", "full"}); err != nil { - return err - } - if err := validateEnum("gui.statusPanelView", config.Gui.StatusPanelView, []string{"dashboard", "allBranchesLog"}); err != nil { return err diff --git a/pkg/gui/presentation/commits.go b/pkg/gui/presentation/commits.go index d8e1a45ce25..c385d3407b2 100644 --- a/pkg/gui/presentation/commits.go +++ b/pkg/gui/presentation/commits.go @@ -440,14 +440,9 @@ func displayCommit( mark = fmt.Sprintf("%s ", willBeRebased) } - var authorFunc func(string) string - switch common.UserConfig.Gui.CommitAuthorFormat { - case "short": - authorFunc = authors.ShortAuthor - case "full": + authorFunc := authors.ShortAuthor + if fullDescription { authorFunc = authors.LongAuthor - default: - authorFunc = lo.Ternary(fullDescription, authors.LongAuthor, authors.ShortAuthor) } cols := make([]string, 0, 7) diff --git a/schema/config.json b/schema/config.json index daaf4ada66c..77a16099fe7 100644 --- a/schema/config.json +++ b/schema/config.json @@ -332,16 +332,6 @@ "description": "If true (default), file icons are shown in the file views. Only relevant if NerdFontsVersion is not empty.", "default": true }, - "commitAuthorFormat": { - "type": "string", - "enum": [ - "auto", - "short", - "full" - ], - "description": "Whether to show full author names or their shortened form in the commit graph.\nOne of 'auto' (default) | 'full' | 'short'\nIf 'auto', initials will be shown in small windows, and full names - in larger ones.", - "default": "auto" - }, "commitHashLength": { "type": "integer", "minimum": 0, From bd782f16ddde1bdff6ee6e5237826be25e90fa9d Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Sat, 15 Jun 2024 15:48:18 +0200 Subject: [PATCH 121/157] Provide two config keys for configuring the author length in commits view One is for the normal view, the other for the expanded view. --- docs/Config.md | 6 ++++ pkg/config/user_config.go | 6 ++++ pkg/gui/presentation/authors/authors.go | 35 ++++++++++++++++---- pkg/gui/presentation/authors/authors_test.go | 25 +++++++++++++- pkg/gui/presentation/commits.go | 7 ++-- schema/config.json | 10 ++++++ 6 files changed, 79 insertions(+), 10 deletions(-) diff --git a/docs/Config.md b/docs/Config.md index 86e26855096..ac296532fea 100644 --- a/docs/Config.md +++ b/docs/Config.md @@ -185,6 +185,12 @@ gui: # If true (default), file icons are shown in the file views. Only relevant if NerdFontsVersion is not empty. showFileIcons: true + # Length of author name in (non-expanded) commits view. 2 means show initials only. + commitAuthorShortLength: 2 + + # Length of author name in expanded commits view. 2 means show initials only. + commitAuthorLongLength: 17 + # Length of commit hash in commits view. 0 shows '*' if NF icons aren't on. commitHashLength: 8 diff --git a/pkg/config/user_config.go b/pkg/config/user_config.go index 522a4f2348a..2c3baaa1b49 100644 --- a/pkg/config/user_config.go +++ b/pkg/config/user_config.go @@ -125,6 +125,10 @@ type GuiConfig struct { NerdFontsVersion string `yaml:"nerdFontsVersion" jsonschema:"enum=2,enum=3,enum="` // If true (default), file icons are shown in the file views. Only relevant if NerdFontsVersion is not empty. ShowFileIcons bool `yaml:"showFileIcons"` + // Length of author name in (non-expanded) commits view. 2 means show initials only. + CommitAuthorShortLength int `yaml:"commitAuthorShortLength"` + // Length of author name in expanded commits view. 2 means show initials only. + CommitAuthorLongLength int `yaml:"commitAuthorLongLength"` // Length of commit hash in commits view. 0 shows '*' if NF icons aren't on. CommitHashLength int `yaml:"commitHashLength" jsonschema:"minimum=0"` // If true, show commit hashes alongside branch names in the branches view. @@ -694,6 +698,8 @@ func GetDefaultConfig() *UserConfig { ShowIcons: false, NerdFontsVersion: "", ShowFileIcons: true, + CommitAuthorShortLength: 2, + CommitAuthorLongLength: 17, CommitHashLength: 8, ShowBranchCommitHash: false, ShowDivergenceFromBaseBranch: "none", diff --git a/pkg/gui/presentation/authors/authors.go b/pkg/gui/presentation/authors/authors.go index 8f63258410e..28c375f7522 100644 --- a/pkg/gui/presentation/authors/authors.go +++ b/pkg/gui/presentation/authors/authors.go @@ -11,11 +11,16 @@ import ( "github.com/mattn/go-runewidth" ) +type authorNameCacheKey struct { + authorName string + truncateTo int +} + // if these being global variables causes trouble we can wrap them in a struct // attached to the gui state. var ( authorInitialCache = make(map[string]string) - authorNameCache = make(map[string]string) + authorNameCache = make(map[authorNameCacheKey]string) authorStyleCache = make(map[string]style.TextStyle) ) @@ -37,19 +42,37 @@ func ShortAuthor(authorName string) string { return value } -func LongAuthor(authorName string) string { - if value, ok := authorNameCache[authorName]; ok { +func LongAuthor(authorName string, length int) string { + cacheKey := authorNameCacheKey{authorName: authorName, truncateTo: length} + if value, ok := authorNameCache[cacheKey]; ok { return value } - paddedAuthorName := utils.WithPadding(authorName, 17, utils.AlignLeft) - truncatedName := utils.TruncateWithEllipsis(paddedAuthorName, 17) + paddedAuthorName := utils.WithPadding(authorName, length, utils.AlignLeft) + truncatedName := utils.TruncateWithEllipsis(paddedAuthorName, length) value := AuthorStyle(authorName).Sprint(truncatedName) - authorNameCache[authorName] = value + authorNameCache[cacheKey] = value return value } +// AuthorWithLength returns a representation of the author that fits into a +// given maximum length: +// - if the length is less than 2, it returns an empty string +// - if the length is 2, it returns the initials +// - otherwise, it returns the author name truncated to the maximum length +func AuthorWithLength(authorName string, length int) string { + if length < 2 { + return "" + } + + if length == 2 { + return ShortAuthor(authorName) + } + + return LongAuthor(authorName, length) +} + func AuthorStyle(authorName string) style.TextStyle { if value, ok := authorStyleCache[authorName]; ok { return value diff --git a/pkg/gui/presentation/authors/authors_test.go b/pkg/gui/presentation/authors/authors_test.go index 58efba29757..d7c651031e1 100644 --- a/pkg/gui/presentation/authors/authors_test.go +++ b/pkg/gui/presentation/authors/authors_test.go @@ -1,6 +1,11 @@ package authors -import "testing" +import ( + "testing" + + "github.com/jesseduffield/lazygit/pkg/utils" + "github.com/stretchr/testify/assert" +) func TestGetInitials(t *testing.T) { for input, expectedOutput := range map[string]string{ @@ -18,3 +23,21 @@ func TestGetInitials(t *testing.T) { } } } + +func TestAuthorWithLength(t *testing.T) { + scenarios := []struct { + authorName string + length int + expectedOutput string + }{ + {"Jesse Duffield", 0, ""}, + {"Jesse Duffield", 1, ""}, + {"Jesse Duffield", 2, "JD"}, + {"Jesse Duffield", 3, "Je…"}, + {"Jesse Duffield", 10, "Jesse Duf…"}, + {"Jesse Duffield", 14, "Jesse Duffield"}, + } + for _, s := range scenarios { + assert.Equal(t, s.expectedOutput, utils.Decolorise(AuthorWithLength(s.authorName, s.length))) + } +} diff --git a/pkg/gui/presentation/commits.go b/pkg/gui/presentation/commits.go index c385d3407b2..92327462f71 100644 --- a/pkg/gui/presentation/commits.go +++ b/pkg/gui/presentation/commits.go @@ -440,10 +440,11 @@ func displayCommit( mark = fmt.Sprintf("%s ", willBeRebased) } - authorFunc := authors.ShortAuthor + authorLength := common.UserConfig.Gui.CommitAuthorShortLength if fullDescription { - authorFunc = authors.LongAuthor + authorLength = common.UserConfig.Gui.CommitAuthorLongLength } + author := authors.AuthorWithLength(commit.AuthorName, authorLength) cols := make([]string, 0, 7) cols = append( @@ -453,7 +454,7 @@ func displayCommit( bisectString, descriptionString, actionString, - authorFunc(commit.AuthorName), + author, graphLine+mark+tagString+theme.DefaultTextColor.Sprint(name), ) diff --git a/schema/config.json b/schema/config.json index 77a16099fe7..ba422388ac7 100644 --- a/schema/config.json +++ b/schema/config.json @@ -332,6 +332,16 @@ "description": "If true (default), file icons are shown in the file views. Only relevant if NerdFontsVersion is not empty.", "default": true }, + "commitAuthorShortLength": { + "type": "integer", + "description": "Length of author name in (non-expanded) commits view. 2 means show initials only.", + "default": 2 + }, + "commitAuthorLongLength": { + "type": "integer", + "description": "Length of author name in expanded commits view. 2 means show initials only.", + "default": 17 + }, "commitHashLength": { "type": "integer", "minimum": 0, From 232be05785c4f1b12c7d0ddda2c64f12ec525562 Mon Sep 17 00:00:00 2001 From: Noah Date: Thu, 16 May 2024 12:48:59 +0200 Subject: [PATCH 122/157] feat: squash merge --- docs/Config.md | 3 + docs/keybindings/Keybindings_en.md | 4 +- docs/keybindings/Keybindings_ja.md | 4 +- docs/keybindings/Keybindings_ko.md | 4 +- docs/keybindings/Keybindings_nl.md | 4 +- docs/keybindings/Keybindings_ru.md | 4 +- docs/keybindings/Keybindings_zh-CN.md | 4 +- docs/keybindings/Keybindings_zh-TW.md | 4 +- pkg/commands/git_commands/branch.go | 5 ++ pkg/config/user_config.go | 7 +- pkg/gui/controllers/branches_controller.go | 14 ++- .../helpers/merge_and_rebase_helper.go | 87 ++++++++++++++++--- pkg/i18n/english.go | 22 +++-- pkg/integration/tests/branch/squash_merge.go | 64 ++++++++++++++ pkg/integration/tests/test_list.go | 1 + .../mode_specific_keybinding_suggestions.go | 6 +- schema/config.json | 5 ++ 17 files changed, 203 insertions(+), 39 deletions(-) create mode 100644 pkg/integration/tests/branch/squash_merge.go diff --git a/docs/Config.md b/docs/Config.md index ac296532fea..358e7be5b60 100644 --- a/docs/Config.md +++ b/docs/Config.md @@ -283,6 +283,9 @@ git: # Extra args passed to `git merge`, e.g. --no-ff args: "" + # The commit message to use for a squash merge commit. Can contain "{{selectedRef}}" and "{{currentBranch}}" placeholders. + squashMergeMessage: Squash merge {{selectedRef}} into {{currentBranch}} + # list of branches that are considered 'main' branches, used when displaying commits mainBranches: - master diff --git a/docs/keybindings/Keybindings_en.md b/docs/keybindings/Keybindings_en.md index a777a5578b2..b4e566c9f4a 100644 --- a/docs/keybindings/Keybindings_en.md +++ b/docs/keybindings/Keybindings_en.md @@ -162,7 +162,7 @@ If you would instead like to start an interactive rebase from the selected commi | `` F `` | Force checkout | Force checkout selected branch. This will discard all local changes in your working directory before checking out the selected branch. | | `` d `` | Delete | View delete options for local/remote branch. | | `` r `` | Rebase | Rebase the checked-out branch onto the selected branch. | -| `` M `` | Merge | Merge selected branch into currently checked out branch. | +| `` M `` | Merge | View options for merging the selected item into the current branch (regular merge, squash merge) | | `` f `` | Fast-forward | Fast-forward selected branch from its upstream. | | `` T `` | New tag | | | `` s `` | Sort order | | @@ -265,7 +265,7 @@ If you would instead like to start an interactive rebase from the selected commi | `` `` | Copy branch name to clipboard | | | `` `` | Checkout | Checkout a new local branch based on the selected remote branch, or the remote branch as a detached head. | | `` n `` | New branch | | -| `` M `` | Merge | Merge selected branch into currently checked out branch. | +| `` M `` | Merge | View options for merging the selected item into the current branch (regular merge, squash merge) | | `` r `` | Rebase | Rebase the checked-out branch onto the selected branch. | | `` d `` | Delete | Delete the remote branch from the remote. | | `` u `` | Set as upstream | Set the selected remote branch as the upstream of the checked-out branch. | diff --git a/docs/keybindings/Keybindings_ja.md b/docs/keybindings/Keybindings_ja.md index 1e511ee7459..39741ee7c4c 100644 --- a/docs/keybindings/Keybindings_ja.md +++ b/docs/keybindings/Keybindings_ja.md @@ -232,7 +232,7 @@ If you would instead like to start an interactive rebase from the selected commi | `` F `` | Force checkout | Force checkout selected branch. This will discard all local changes in your working directory before checking out the selected branch. | | `` d `` | Delete | View delete options for local/remote branch. | | `` r `` | Rebase | Rebase the checked-out branch onto the selected branch. | -| `` M `` | 現在のブランチにマージ | Merge selected branch into currently checked out branch. | +| `` M `` | 現在のブランチにマージ | View options for merging the selected item into the current branch (regular merge, squash merge) | | `` f `` | Fast-forward | Fast-forward selected branch from its upstream. | | `` T `` | タグを作成 | | | `` s `` | 並び替え | | @@ -329,7 +329,7 @@ If you would instead like to start an interactive rebase from the selected commi | `` `` | ブランチ名をクリップボードにコピー | | | `` `` | チェックアウト | Checkout a new local branch based on the selected remote branch, or the remote branch as a detached head. | | `` n `` | 新しいブランチを作成 | | -| `` M `` | 現在のブランチにマージ | Merge selected branch into currently checked out branch. | +| `` M `` | 現在のブランチにマージ | View options for merging the selected item into the current branch (regular merge, squash merge) | | `` r `` | Rebase | Rebase the checked-out branch onto the selected branch. | | `` d `` | Delete | Delete the remote branch from the remote. | | `` u `` | Set as upstream | Set the selected remote branch as the upstream of the checked-out branch. | diff --git a/docs/keybindings/Keybindings_ko.md b/docs/keybindings/Keybindings_ko.md index af81c92b141..37696b38567 100644 --- a/docs/keybindings/Keybindings_ko.md +++ b/docs/keybindings/Keybindings_ko.md @@ -189,7 +189,7 @@ _Legend: `` means ctrl+b, `` means alt+b, `B` means shift+b_ | `` F `` | 강제 체크아웃 | Force checkout selected branch. This will discard all local changes in your working directory before checking out the selected branch. | | `` d `` | Delete | View delete options for local/remote branch. | | `` r `` | 체크아웃된 브랜치를 이 브랜치에 리베이스 | Rebase the checked-out branch onto the selected branch. | -| `` M `` | 현재 브랜치에 병합 | Merge selected branch into currently checked out branch. | +| `` M `` | 현재 브랜치에 병합 | View options for merging the selected item into the current branch (regular merge, squash merge) | | `` f `` | Fast-forward this branch from its upstream | Fast-forward selected branch from its upstream. | | `` T `` | 태그를 생성 | | | `` s `` | Sort order | | @@ -242,7 +242,7 @@ _Legend: `` means ctrl+b, `` means alt+b, `B` means shift+b_ | `` `` | 브랜치명을 클립보드에 복사 | | | `` `` | 체크아웃 | Checkout a new local branch based on the selected remote branch, or the remote branch as a detached head. | | `` n `` | 새 브랜치 생성 | | -| `` M `` | 현재 브랜치에 병합 | Merge selected branch into currently checked out branch. | +| `` M `` | 현재 브랜치에 병합 | View options for merging the selected item into the current branch (regular merge, squash merge) | | `` r `` | 체크아웃된 브랜치를 이 브랜치에 리베이스 | Rebase the checked-out branch onto the selected branch. | | `` d `` | Delete | Delete the remote branch from the remote. | | `` u `` | Set as upstream | Set the selected remote branch as the upstream of the checked-out branch. | diff --git a/docs/keybindings/Keybindings_nl.md b/docs/keybindings/Keybindings_nl.md index d7c5e7dc9f2..f0f117ab00d 100644 --- a/docs/keybindings/Keybindings_nl.md +++ b/docs/keybindings/Keybindings_nl.md @@ -101,7 +101,7 @@ _Legend: `` means ctrl+b, `` means alt+b, `B` means shift+b_ | `` F `` | Forceer checkout | Force checkout selected branch. This will discard all local changes in your working directory before checking out the selected branch. | | `` d `` | Delete | View delete options for local/remote branch. | | `` r `` | Rebase branch | Rebase the checked-out branch onto the selected branch. | -| `` M `` | Merge in met huidige checked out branch | Merge selected branch into currently checked out branch. | +| `` M `` | Merge in met huidige checked out branch | View options for merging the selected item into the current branch (regular merge, squash merge) | | `` f `` | Fast-forward deze branch vanaf zijn upstream | Fast-forward selected branch from its upstream. | | `` T `` | Creëer tag | | | `` s `` | Sort order | | @@ -243,7 +243,7 @@ If you would instead like to start an interactive rebase from the selected commi | `` `` | Kopieer branch name naar klembord | | | `` `` | Uitchecken | Checkout a new local branch based on the selected remote branch, or the remote branch as a detached head. | | `` n `` | Nieuwe branch | | -| `` M `` | Merge in met huidige checked out branch | Merge selected branch into currently checked out branch. | +| `` M `` | Merge in met huidige checked out branch | View options for merging the selected item into the current branch (regular merge, squash merge) | | `` r `` | Rebase branch | Rebase the checked-out branch onto the selected branch. | | `` d `` | Delete | Delete the remote branch from the remote. | | `` u `` | Set as upstream | Stel in als upstream van uitgecheckte branch | diff --git a/docs/keybindings/Keybindings_ru.md b/docs/keybindings/Keybindings_ru.md index e7f88c7c91e..479df526182 100644 --- a/docs/keybindings/Keybindings_ru.md +++ b/docs/keybindings/Keybindings_ru.md @@ -189,7 +189,7 @@ If you would instead like to start an interactive rebase from the selected commi | `` F `` | Принудительное переключение | Force checkout selected branch. This will discard all local changes in your working directory before checking out the selected branch. | | `` d `` | Delete | View delete options for local/remote branch. | | `` r `` | Перебазировать переключённую ветку на эту ветку | Rebase the checked-out branch onto the selected branch. | -| `` M `` | Слияние с текущей переключённой веткой | Merge selected branch into currently checked out branch. | +| `` M `` | Слияние с текущей переключённой веткой | View options for merging the selected item into the current branch (regular merge, squash merge) | | `` f `` | Перемотать эту ветку вперёд из её upstream-ветки | Fast-forward selected branch from its upstream. | | `` T `` | Создать тег | | | `` s `` | Порядок сортировки | | @@ -299,7 +299,7 @@ If you would instead like to start an interactive rebase from the selected commi | `` `` | Скопировать название ветки в буфер обмена | | | `` `` | Переключить | Checkout a new local branch based on the selected remote branch, or the remote branch as a detached head. | | `` n `` | Новая ветка | | -| `` M `` | Слияние с текущей переключённой веткой | Merge selected branch into currently checked out branch. | +| `` M `` | Слияние с текущей переключённой веткой | View options for merging the selected item into the current branch (regular merge, squash merge) | | `` r `` | Перебазировать переключённую ветку на эту ветку | Rebase the checked-out branch onto the selected branch. | | `` d `` | Delete | Delete the remote branch from the remote. | | `` u `` | Set as upstream | Установить как upstream-ветку переключённую ветку | diff --git a/docs/keybindings/Keybindings_zh-CN.md b/docs/keybindings/Keybindings_zh-CN.md index eaff6d1414f..3c8e7d3ce69 100644 --- a/docs/keybindings/Keybindings_zh-CN.md +++ b/docs/keybindings/Keybindings_zh-CN.md @@ -91,7 +91,7 @@ _Legend: `` means ctrl+b, `` means alt+b, `B` means shift+b_ | `` F `` | 强制检出 | Force checkout selected branch. This will discard all local changes in your working directory before checking out the selected branch. | | `` d `` | Delete | View delete options for local/remote branch. | | `` r `` | 将已检出的分支变基到该分支 | Rebase the checked-out branch onto the selected branch. | -| `` M `` | 合并到当前检出的分支 | Merge selected branch into currently checked out branch. | +| `` M `` | 合并到当前检出的分支 | View options for merging the selected item into the current branch (regular merge, squash merge) | | `` f `` | 从上游快进此分支 | Fast-forward selected branch from its upstream. | | `` T `` | 创建标签 | | | `` s `` | Sort order | | @@ -342,7 +342,7 @@ If you would instead like to start an interactive rebase from the selected commi | `` `` | 将分支名称复制到剪贴板 | | | `` `` | 检出 | Checkout a new local branch based on the selected remote branch, or the remote branch as a detached head. | | `` n `` | 新分支 | | -| `` M `` | 合并到当前检出的分支 | Merge selected branch into currently checked out branch. | +| `` M `` | 合并到当前检出的分支 | View options for merging the selected item into the current branch (regular merge, squash merge) | | `` r `` | 将已检出的分支变基到该分支 | Rebase the checked-out branch onto the selected branch. | | `` d `` | Delete | Delete the remote branch from the remote. | | `` u `` | Set as upstream | 设置为检出分支的上游 | diff --git a/docs/keybindings/Keybindings_zh-TW.md b/docs/keybindings/Keybindings_zh-TW.md index 1a891b05f5a..a90334dad1b 100644 --- a/docs/keybindings/Keybindings_zh-TW.md +++ b/docs/keybindings/Keybindings_zh-TW.md @@ -264,7 +264,7 @@ If you would instead like to start an interactive rebase from the selected commi | `` F `` | 強制檢出 | Force checkout selected branch. This will discard all local changes in your working directory before checking out the selected branch. | | `` d `` | Delete | View delete options for local/remote branch. | | `` r `` | 將已檢出的分支變基至此分支 | Rebase the checked-out branch onto the selected branch. | -| `` M `` | 合併到當前檢出的分支 | Merge selected branch into currently checked out branch. | +| `` M `` | 合併到當前檢出的分支 | View options for merging the selected item into the current branch (regular merge, squash merge) | | `` f `` | 從上游快進此分支 | Fast-forward selected branch from its upstream. | | `` T `` | 建立標籤 | | | `` s `` | Sort order | | @@ -353,7 +353,7 @@ If you would instead like to start an interactive rebase from the selected commi | `` `` | 複製分支名稱到剪貼簿 | | | `` `` | 檢出 | Checkout a new local branch based on the selected remote branch, or the remote branch as a detached head. | | `` n `` | 新分支 | | -| `` M `` | 合併到當前檢出的分支 | Merge selected branch into currently checked out branch. | +| `` M `` | 合併到當前檢出的分支 | View options for merging the selected item into the current branch (regular merge, squash merge) | | `` r `` | 將已檢出的分支變基至此分支 | Rebase the checked-out branch onto the selected branch. | | `` d `` | Delete | Delete the remote branch from the remote. | | `` u `` | Set as upstream | 將此分支設為當前分支之上游 | diff --git a/pkg/commands/git_commands/branch.go b/pkg/commands/git_commands/branch.go index 8212b29b3d9..79e418d7f5e 100644 --- a/pkg/commands/git_commands/branch.go +++ b/pkg/commands/git_commands/branch.go @@ -216,13 +216,18 @@ func (self *BranchCommands) Rename(oldName string, newName string) error { type MergeOpts struct { FastForwardOnly bool + Squash bool } func (self *BranchCommands) Merge(branchName string, opts MergeOpts) error { + if opts.Squash && opts.FastForwardOnly { + panic("Squash and FastForwardOnly can't both be true") + } cmdArgs := NewGitCmd("merge"). Arg("--no-edit"). Arg(strings.Fields(self.UserConfig.Git.Merging.Args)...). ArgIf(opts.FastForwardOnly, "--ff-only"). + ArgIf(opts.Squash, "--squash", "--ff"). Arg(branchName). ToArgv() diff --git a/pkg/config/user_config.go b/pkg/config/user_config.go index 2c3baaa1b49..b5bccba45c1 100644 --- a/pkg/config/user_config.go +++ b/pkg/config/user_config.go @@ -285,6 +285,8 @@ type MergingConfig struct { ManualCommit bool `yaml:"manualCommit"` // Extra args passed to `git merge`, e.g. --no-ff Args string `yaml:"args" jsonschema:"example=--no-ff"` + // The commit message to use for a squash merge commit. Can contain "{{selectedRef}}" and "{{currentBranch}}" placeholders. + SquashMergeMessage string `yaml:"squashMergeMessage"` } type LogConfig struct { @@ -730,8 +732,9 @@ func GetDefaultConfig() *UserConfig { AutoWrapWidth: 72, }, Merging: MergingConfig{ - ManualCommit: false, - Args: "", + ManualCommit: false, + Args: "", + SquashMergeMessage: "Squash merge {{selectedRef}} into {{currentBranch}}", }, Log: LogConfig{ Order: "topo-order", diff --git a/pkg/gui/controllers/branches_controller.go b/pkg/gui/controllers/branches_controller.go index 8b4a5d39535..9f5ba7f05ed 100644 --- a/pkg/gui/controllers/branches_controller.go +++ b/pkg/gui/controllers/branches_controller.go @@ -111,10 +111,11 @@ func (self *BranchesController) GetKeybindings(opts types.KeybindingsOpts) []*ty { Key: opts.GetKey(opts.Config.Branches.MergeIntoCurrentBranch), Handler: opts.Guards.OutsideFilterMode(self.merge), - GetDisabledReason: self.require(self.singleItemSelected()), + GetDisabledReason: self.require(self.singleItemSelected(self.notMergingIntoYourself)), Description: self.c.Tr.Merge, Tooltip: self.c.Tr.MergeBranchTooltip, DisplayOnScreen: true, + OpensMenu: true, }, { Key: opts.GetKey(opts.Config.Branches.FastForward), @@ -826,3 +827,14 @@ func (self *BranchesController) branchIsReal(branch *models.Branch) *types.Disab return nil } + +func (self *BranchesController) notMergingIntoYourself(branch *models.Branch) *types.DisabledReason { + selectedBranchName := branch.Name + checkedOutBranch := self.c.Helpers().Refs.GetCheckedOutRef().Name + + if checkedOutBranch == selectedBranchName { + return &types.DisabledReason{Text: self.c.Tr.CantMergeBranchIntoItself} + } + + return nil +} diff --git a/pkg/gui/controllers/helpers/merge_and_rebase_helper.go b/pkg/gui/controllers/helpers/merge_and_rebase_helper.go index c5ad78c479c..a5554aa5870 100644 --- a/pkg/gui/controllers/helpers/merge_and_rebase_helper.go +++ b/pkg/gui/controllers/helpers/merge_and_rebase_helper.go @@ -369,25 +369,84 @@ func (self *MergeAndRebaseHelper) MergeRefIntoCheckedOutBranch(refName string) e if checkedOutBranchName == refName { return errors.New(self.c.Tr.CantMergeBranchIntoItself) } - prompt := utils.ResolvePlaceholderString( - self.c.Tr.ConfirmMerge, - map[string]string{ - "checkedOutBranch": checkedOutBranchName, - "selectedBranch": refName, - }, - ) - return self.c.Confirm(types.ConfirmOpts{ - Title: self.c.Tr.MergeConfirmTitle, - Prompt: prompt, - HandleConfirm: func() error { - self.c.LogAction(self.c.Tr.Actions.Merge) - err := self.c.Git().Branch.Merge(refName, git_commands.MergeOpts{}) - return self.CheckMergeOrRebase(err) + return self.c.Menu(types.CreateMenuOptions{ + Title: self.c.Tr.Merge, + Items: []*types.MenuItem{ + { + Label: self.c.Tr.RegularMerge, + OnPress: self.RegularMerge(refName), + Key: 'm', + Tooltip: utils.ResolvePlaceholderString( + self.c.Tr.RegularMergeTooltip, + map[string]string{ + "checkedOutBranch": checkedOutBranchName, + "selectedBranch": refName, + }, + ), + }, + { + Label: self.c.Tr.SquashMergeUncommittedTitle, + OnPress: self.SquashMergeUncommitted(refName), + Key: 's', + Tooltip: utils.ResolvePlaceholderString( + self.c.Tr.SquashMergeUncommitted, + map[string]string{ + "selectedBranch": refName, + }, + ), + }, + { + Label: self.c.Tr.SquashMergeCommittedTitle, + OnPress: self.SquashMergeCommitted(refName, checkedOutBranchName), + Key: 'S', + Tooltip: utils.ResolvePlaceholderString( + self.c.Tr.SquashMergeCommitted, + map[string]string{ + "checkedOutBranch": checkedOutBranchName, + "selectedBranch": refName, + }, + ), + }, }, }) } +func (self *MergeAndRebaseHelper) RegularMerge(refName string) func() error { + return func() error { + self.c.LogAction(self.c.Tr.Actions.Merge) + err := self.c.Git().Branch.Merge(refName, git_commands.MergeOpts{}) + return self.CheckMergeOrRebase(err) + } +} + +func (self *MergeAndRebaseHelper) SquashMergeUncommitted(refName string) func() error { + return func() error { + self.c.LogAction(self.c.Tr.Actions.SquashMerge) + err := self.c.Git().Branch.Merge(refName, git_commands.MergeOpts{Squash: true}) + return self.CheckMergeOrRebase(err) + } +} + +func (self *MergeAndRebaseHelper) SquashMergeCommitted(refName, checkedOutBranchName string) func() error { + return func() error { + self.c.LogAction(self.c.Tr.Actions.SquashMerge) + err := self.c.Git().Branch.Merge(refName, git_commands.MergeOpts{Squash: true}) + if err = self.CheckMergeOrRebase(err); err != nil { + return err + } + message := utils.ResolvePlaceholderString(self.c.UserConfig.Git.Merging.SquashMergeMessage, map[string]string{ + "selectedRef": refName, + "currentBranch": checkedOutBranchName, + }) + err = self.c.Git().Commit.CommitCmdObj(message, "").Run() + if err != nil { + return err + } + return self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC}) + } +} + func (self *MergeAndRebaseHelper) ResetMarkedBaseCommit() error { self.c.Modes().MarkedBaseCommit.Reset() return self.c.PostRefreshUpdate(self.c.Contexts().LocalCommits) diff --git a/pkg/i18n/english.go b/pkg/i18n/english.go index 3665ae8b1ae..949e96b7d91 100644 --- a/pkg/i18n/english.go +++ b/pkg/i18n/english.go @@ -24,7 +24,11 @@ type TranslationSet struct { MainTitle string StagingTitle string MergingTitle string - MergeConfirmTitle string + SquashMergeUncommittedTitle string + SquashMergeCommittedTitle string + SquashMergeUncommitted string + SquashMergeCommitted string + RegularMergeTooltip string NormalTitle string LogTitle string CommitSummary string @@ -133,6 +137,7 @@ type TranslationSet struct { SureFixupThisCommit string SureSquashThisCommit string Squash string + SquashMerge string PickCommitTooltip string Pick string CantPickDisabledReason string @@ -229,6 +234,7 @@ type TranslationSet struct { ExcludeFile string RefreshFiles string Merge string + RegularMerge string MergeBranchTooltip string ConfirmQuit string SwitchRepo string @@ -296,7 +302,6 @@ type TranslationSet struct { InteractiveRebaseTooltip string RebaseOntoBaseBranchTooltip string MustSelectTodoCommits string - ConfirmMerge string FwdNoUpstream string FwdNoLocalUpstream string FwdCommitsToPush string @@ -841,6 +846,7 @@ type Actions struct { DeleteLocalBranch string DeleteBranch string Merge string + SquashMerge string RebaseBranch string RenameBranch string CreateBranch string @@ -993,7 +999,8 @@ func EnglishTranslationSet() *TranslationSet { UnstagedChanges: "Unstaged changes", StagedChanges: "Staged changes", MainTitle: "Main", - MergeConfirmTitle: "Merge", + SquashMergeUncommittedTitle: "Squash merge and leave uncommitted", + SquashMergeCommittedTitle: "Squash merge and commit", StagingTitle: "Main panel (staging)", MergingTitle: "Main panel (merging)", NormalTitle: "Main panel (normal)", @@ -1105,6 +1112,7 @@ func EnglishTranslationSet() *TranslationSet { SureFixupThisCommit: "Are you sure you want to 'fixup' the selected commit(s) into the commit below?", SureSquashThisCommit: "Are you sure you want to squash the selected commit(s) into the commit below?", Squash: "Squash", + SquashMerge: "Squash Merge", PickCommitTooltip: "Mark the selected commit to be picked (when mid-rebase). This means that the commit will be retained upon continuing the rebase.", Pick: "Pick", CantPickDisabledReason: "Cannot pick a commit when not mid-rebase", @@ -1200,7 +1208,8 @@ func EnglishTranslationSet() *TranslationSet { ExcludeFile: `Add to .git/info/exclude`, RefreshFiles: `Refresh files`, Merge: `Merge`, - MergeBranchTooltip: "Merge selected branch into currently checked out branch.", + RegularMerge: "Regular merge", + MergeBranchTooltip: "View options for merging the selected item into the current branch (regular merge, squash merge)", ConfirmQuit: `Are you sure you want to quit?`, SwitchRepo: `Switch to a recent repo`, AllBranchesLogGraph: `Show all branch logs`, @@ -1271,7 +1280,9 @@ func EnglishTranslationSet() *TranslationSet { InteractiveRebaseTooltip: "Begin an interactive rebase with a break at the start, so you can update the TODO commits before continuing.", RebaseOntoBaseBranchTooltip: "Rebase the checked out branch onto its base branch (i.e. the closest main branch).", MustSelectTodoCommits: "When rebasing, this action only works on a selection of TODO commits.", - ConfirmMerge: "Are you sure you want to merge '{{.selectedBranch}}' into '{{.checkedOutBranch}}'?", + SquashMergeUncommitted: "Squash merge '{{.selectedBranch}}' into the working tree.", + SquashMergeCommitted: "Squash merge '{{.selectedBranch}}' into '{{.checkedOutBranch}}' as a single commit.", + RegularMergeTooltip: "Merge '{{.selectedBranch}}' into '{{.checkedOutBranch}}'.", FwdNoUpstream: "Cannot fast-forward a branch with no upstream", FwdNoLocalUpstream: "Cannot fast-forward a branch whose remote is not registered locally", FwdCommitsToPush: "Cannot fast-forward a branch with commits to push", @@ -1770,6 +1781,7 @@ func EnglishTranslationSet() *TranslationSet { DeleteLocalBranch: "Delete local branch", DeleteBranch: "Delete branch", Merge: "Merge", + SquashMerge: "Squash merge", RebaseBranch: "Rebase branch", RenameBranch: "Rename branch", CreateBranch: "Create branch", diff --git a/pkg/integration/tests/branch/squash_merge.go b/pkg/integration/tests/branch/squash_merge.go new file mode 100644 index 00000000000..509073cbe73 --- /dev/null +++ b/pkg/integration/tests/branch/squash_merge.go @@ -0,0 +1,64 @@ +package branch + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var SquashMerge = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Squash merge a branch both with and without committing", + ExtraCmdArgs: []string{}, + Skip: false, + SetupConfig: func(config *config.AppConfig) {}, + SetupRepo: func(shell *Shell) { + shell.NewBranch("original-branch"). + EmptyCommit("one"). + NewBranch("change-worktree-branch"). + CreateFileAndAdd("work", "content"). + Commit("work"). + Checkout("original-branch"). + NewBranch("change-commit-branch"). + CreateFileAndAdd("file", "content"). + Commit("file"). + Checkout("original-branch") + }, + Run: func(t *TestDriver, keys config.KeybindingConfig) { + t.Views().Commits().TopLines( + Contains("one"), + ) + + t.Views().Branches(). + Focus(). + Lines( + Contains("original-branch").IsSelected(), + Contains("change-commit-branch"), + Contains("change-worktree-branch"), + ). + SelectNextItem(). + Press(keys.Branches.MergeIntoCurrentBranch) + + t.ExpectPopup().Menu(). + Title(Equals("Merge")). + Select(Contains("Squash merge and commit")). + Confirm() + + t.Views().Commits().TopLines( + Contains("Squash merge change-commit-branch into original-branch"), + Contains("one"), + ) + + t.Views().Branches(). + Focus(). + NavigateToLine(Contains("change-worktree-branch")). + Press(keys.Branches.MergeIntoCurrentBranch) + + t.ExpectPopup().Menu(). + Title(Equals("Merge")). + Select(Contains("Squash merge and leave uncommitted")). + Confirm() + + t.Views().Files().Focus().Lines( + Contains("work"), + ) + }, +}) diff --git a/pkg/integration/tests/test_list.go b/pkg/integration/tests/test_list.go index b6ebad021e9..22072be977b 100644 --- a/pkg/integration/tests/test_list.go +++ b/pkg/integration/tests/test_list.go @@ -61,6 +61,7 @@ var tests = []*components.IntegrationTest{ branch.ShowDivergenceFromUpstream, branch.SortLocalBranches, branch.SortRemoteBranches, + branch.SquashMerge, branch.Suggestions, branch.UnsetUpstream, cherry_pick.CherryPick, diff --git a/pkg/integration/tests/ui/mode_specific_keybinding_suggestions.go b/pkg/integration/tests/ui/mode_specific_keybinding_suggestions.go index f11e5fd27e0..5cd412146f2 100644 --- a/pkg/integration/tests/ui/mode_specific_keybinding_suggestions.go +++ b/pkg/integration/tests/ui/mode_specific_keybinding_suggestions.go @@ -93,7 +93,7 @@ var ModeSpecificKeybindingSuggestions = NewIntegrationTest(NewIntegrationTestArg t.Views().Options().Content(DoesNotContain(customPatchSuggestion)) }) - // Test merge options suggestion + // Test merge options suggestion t.Views().Branches(). Focus(). NavigateToLine(Contains("first-change-branch")). @@ -101,9 +101,9 @@ var ModeSpecificKeybindingSuggestions = NewIntegrationTest(NewIntegrationTestArg NavigateToLine(Contains("second-change-branch")). Press(keys.Branches.MergeIntoCurrentBranch). Tap(func() { - t.ExpectPopup().Confirmation(). + t.ExpectPopup().Menu(). Title(Equals("Merge")). - Content(Contains("Are you sure you want to merge")). + Select(Contains("Regular merge")). Confirm() t.Common().AcknowledgeConflicts() diff --git a/schema/config.json b/schema/config.json index ba422388ac7..580765c0f9c 100644 --- a/schema/config.json +++ b/schema/config.json @@ -530,6 +530,11 @@ "examples": [ "--no-ff" ] + }, + "squashMergeMessage": { + "type": "string", + "description": "The commit message to use for a squash merge commit. Can contain \"{{selectedRef}}\" and \"{{currentBranch}}\" placeholders.", + "default": "Squash merge {{selectedRef}} into {{currentBranch}}" } }, "additionalProperties": false, From 2335772db6b3027b06faf79a44983a03e05655af Mon Sep 17 00:00:00 2001 From: "T." <3098462+part22@users.noreply.github.com> Date: Wed, 26 Jun 2024 12:02:37 -0400 Subject: [PATCH 123/157] Make opening git difftool more consistent The default shortcut to open git difftool (ctrl+t) is not available on the "Local Branches" window. It is available when selecting a commit from a local branch, a remote branch, or a tag from the "Local Branches" window. This is inconsistent since branches or tags are also commits, the shortcut should also work on them directly. This commit remedies this inconsistency by allowing the use of the shortcut directly on a branch or a tag. The shortcut works both in the "standard" mode and the "diffing" mode. --- docs/keybindings/Keybindings_en.md | 3 +++ docs/keybindings/Keybindings_ja.md | 3 +++ docs/keybindings/Keybindings_ko.md | 3 +++ docs/keybindings/Keybindings_nl.md | 3 +++ docs/keybindings/Keybindings_pl.md | 3 +++ docs/keybindings/Keybindings_ru.md | 3 +++ docs/keybindings/Keybindings_zh-CN.md | 3 +++ docs/keybindings/Keybindings_zh-TW.md | 3 +++ pkg/gui/controllers/branches_controller.go | 8 ++++++++ pkg/gui/controllers/helpers/diff_helper.go | 16 ++++++++++++++++ .../controllers/remote_branches_controller.go | 8 ++++++++ pkg/gui/controllers/tags_controller.go | 8 ++++++++ 12 files changed, 64 insertions(+) diff --git a/docs/keybindings/Keybindings_en.md b/docs/keybindings/Keybindings_en.md index b4e566c9f4a..73104e994d3 100644 --- a/docs/keybindings/Keybindings_en.md +++ b/docs/keybindings/Keybindings_en.md @@ -169,6 +169,7 @@ If you would instead like to start an interactive rebase from the selected commi | `` g `` | Reset | | | `` R `` | Rename branch | | | `` u `` | View upstream options | View options relating to the branch's upstream e.g. setting/unsetting the upstream and resetting to the upstream. | +| `` `` | Open external diff tool (git difftool) | | | `` `` | View commits | | | `` w `` | View worktree options | | | `` / `` | Filter the current view by text | | @@ -271,6 +272,7 @@ If you would instead like to start an interactive rebase from the selected commi | `` u `` | Set as upstream | Set the selected remote branch as the upstream of the checked-out branch. | | `` s `` | Sort order | | | `` g `` | Reset | View reset options (soft/mixed/hard) for resetting onto selected item. | +| `` `` | Open external diff tool (git difftool) | | | `` `` | View commits | | | `` w `` | View worktree options | | | `` / `` | Filter the current view by text | | @@ -349,6 +351,7 @@ If you would instead like to start an interactive rebase from the selected commi | `` d `` | Delete | View delete options for local/remote tag. | | `` P `` | Push tag | Push the selected tag to a remote. You'll be prompted to select a remote. | | `` g `` | Reset | View reset options (soft/mixed/hard) for resetting onto selected item. | +| `` `` | Open external diff tool (git difftool) | | | `` `` | View commits | | | `` w `` | View worktree options | | | `` / `` | Filter the current view by text | | diff --git a/docs/keybindings/Keybindings_ja.md b/docs/keybindings/Keybindings_ja.md index 39741ee7c4c..9a146261b9a 100644 --- a/docs/keybindings/Keybindings_ja.md +++ b/docs/keybindings/Keybindings_ja.md @@ -183,6 +183,7 @@ If you would instead like to start an interactive rebase from the selected commi | `` d `` | Delete | View delete options for local/remote tag. | | `` P `` | タグをpush | Push the selected tag to a remote. You'll be prompted to select a remote. | | `` g `` | Reset | View reset options (soft/mixed/hard) for resetting onto selected item. | +| `` `` | Open external diff tool (git difftool) | | | `` `` | コミットを閲覧 | | | `` w `` | View worktree options | | | `` / `` | Filter the current view by text | | @@ -239,6 +240,7 @@ If you would instead like to start an interactive rebase from the selected commi | `` g `` | Reset | | | `` R `` | ブランチ名を変更 | | | `` u `` | View upstream options | View options relating to the branch's upstream e.g. setting/unsetting the upstream and resetting to the upstream. | +| `` `` | Open external diff tool (git difftool) | | | `` `` | コミットを閲覧 | | | `` w `` | View worktree options | | | `` / `` | Filter the current view by text | | @@ -335,6 +337,7 @@ If you would instead like to start an interactive rebase from the selected commi | `` u `` | Set as upstream | Set the selected remote branch as the upstream of the checked-out branch. | | `` s `` | 並び替え | | | `` g `` | Reset | View reset options (soft/mixed/hard) for resetting onto selected item. | +| `` `` | Open external diff tool (git difftool) | | | `` `` | コミットを閲覧 | | | `` w `` | View worktree options | | | `` / `` | Filter the current view by text | | diff --git a/docs/keybindings/Keybindings_ko.md b/docs/keybindings/Keybindings_ko.md index 37696b38567..289f6931ff1 100644 --- a/docs/keybindings/Keybindings_ko.md +++ b/docs/keybindings/Keybindings_ko.md @@ -196,6 +196,7 @@ _Legend: `` means ctrl+b, `` means alt+b, `B` means shift+b_ | `` g `` | View reset options | | | `` R `` | 브랜치 이름 변경 | | | `` u `` | View upstream options | View options relating to the branch's upstream e.g. setting/unsetting the upstream and resetting to the upstream. | +| `` `` | Open external diff tool (git difftool) | | | `` `` | 커밋 보기 | | | `` w `` | View worktree options | | | `` / `` | Filter the current view by text | | @@ -248,6 +249,7 @@ _Legend: `` means ctrl+b, `` means alt+b, `B` means shift+b_ | `` u `` | Set as upstream | Set the selected remote branch as the upstream of the checked-out branch. | | `` s `` | Sort order | | | `` g `` | View reset options | View reset options (soft/mixed/hard) for resetting onto selected item. | +| `` `` | Open external diff tool (git difftool) | | | `` `` | 커밋 보기 | | | `` w `` | View worktree options | | | `` / `` | Filter the current view by text | | @@ -322,6 +324,7 @@ If you would instead like to start an interactive rebase from the selected commi | `` d `` | Delete | View delete options for local/remote tag. | | `` P `` | 태그를 push | Push the selected tag to a remote. You'll be prompted to select a remote. | | `` g `` | Reset | View reset options (soft/mixed/hard) for resetting onto selected item. | +| `` `` | Open external diff tool (git difftool) | | | `` `` | 커밋 보기 | | | `` w `` | View worktree options | | | `` / `` | Filter the current view by text | | diff --git a/docs/keybindings/Keybindings_nl.md b/docs/keybindings/Keybindings_nl.md index f0f117ab00d..03bf0214c6c 100644 --- a/docs/keybindings/Keybindings_nl.md +++ b/docs/keybindings/Keybindings_nl.md @@ -108,6 +108,7 @@ _Legend: `` means ctrl+b, `` means alt+b, `B` means shift+b_ | `` g `` | Bekijk reset opties | | | `` R `` | Hernoem branch | | | `` u `` | View upstream options | View options relating to the branch's upstream e.g. setting/unsetting the upstream and resetting to the upstream. | +| `` `` | Open external diff tool (git difftool) | | | `` `` | Bekijk commits | | | `` w `` | View worktree options | | | `` / `` | Filter the current view by text | | @@ -249,6 +250,7 @@ If you would instead like to start an interactive rebase from the selected commi | `` u `` | Set as upstream | Stel in als upstream van uitgecheckte branch | | `` s `` | Sort order | | | `` g `` | Bekijk reset opties | View reset options (soft/mixed/hard) for resetting onto selected item. | +| `` `` | Open external diff tool (git difftool) | | | `` `` | Bekijk commits | | | `` w `` | View worktree options | | | `` / `` | Filter the current view by text | | @@ -349,6 +351,7 @@ If you would instead like to start an interactive rebase from the selected commi | `` d `` | Delete | View delete options for local/remote tag. | | `` P `` | Push tag | Push the selected tag to a remote. You'll be prompted to select a remote. | | `` g `` | Reset | View reset options (soft/mixed/hard) for resetting onto selected item. | +| `` `` | Open external diff tool (git difftool) | | | `` `` | Bekijk commits | | | `` w `` | View worktree options | | | `` / `` | Filter the current view by text | | diff --git a/docs/keybindings/Keybindings_pl.md b/docs/keybindings/Keybindings_pl.md index e41c07e4d0e..0336419c1e4 100644 --- a/docs/keybindings/Keybindings_pl.md +++ b/docs/keybindings/Keybindings_pl.md @@ -134,6 +134,7 @@ Jeśli chcesz zamiast tego rozpocząć interaktywny rebase od wybranego commita, | `` g `` | Reset | | | `` R `` | Zmień nazwę gałęzi | | | `` u `` | Pokaż opcje upstream | Pokaż opcje dotyczące upstream gałęzi, np. ustawianie/usuwanie upstream i resetowanie do upstream. | +| `` `` | Otwórz zewnętrzne narzędzie różnic (git difftool) | | | `` `` | Pokaż commity | | | `` w `` | Zobacz opcje drzewa pracy | | | `` / `` | Filtruj bieżący widok po tekście | | @@ -331,6 +332,7 @@ Jeśli chcesz zamiast tego rozpocząć interaktywny rebase od wybranego commita, | `` d `` | Usuń | Wyświetl opcje usuwania lokalnego/odległego tagu. | | `` P `` | Wyślij tag | Wyślij wybrany tag do zdalnego. Zostaniesz poproszony o wybranie zdalnego. | | `` g `` | Reset | Wyświetl opcje resetu (miękki/mieszany/twardy) do wybranego elementu. | +| `` `` | Otwórz zewnętrzne narzędzie różnic (git difftool) | | | `` `` | Pokaż commity | | | `` w `` | Zobacz opcje drzewa pracy | | | `` / `` | Filtruj bieżący widok po tekście | | @@ -359,6 +361,7 @@ Jeśli chcesz zamiast tego rozpocząć interaktywny rebase od wybranego commita, | `` u `` | Ustaw jako upstream | Ustaw wybraną gałąź zdalną jako upstream sprawdzonej gałęzi. | | `` s `` | Kolejność sortowania | | | `` g `` | Reset | Wyświetl opcje resetu (miękki/mieszany/twardy) do wybranego elementu. | +| `` `` | Otwórz zewnętrzne narzędzie różnic (git difftool) | | | `` `` | Pokaż commity | | | `` w `` | Zobacz opcje drzewa pracy | | | `` / `` | Filtruj bieżący widok po tekście | | diff --git a/docs/keybindings/Keybindings_ru.md b/docs/keybindings/Keybindings_ru.md index 479df526182..c6a784b7223 100644 --- a/docs/keybindings/Keybindings_ru.md +++ b/docs/keybindings/Keybindings_ru.md @@ -196,6 +196,7 @@ If you would instead like to start an interactive rebase from the selected commi | `` g `` | Просмотреть параметры сброса | | | `` R `` | Переименовать ветку | | | `` u `` | View upstream options | View options relating to the branch's upstream e.g. setting/unsetting the upstream and resetting to the upstream. | +| `` `` | Open external diff tool (git difftool) | | | `` `` | Просмотреть коммиты | | | `` w `` | View worktree options | | | `` / `` | Filter the current view by text | | @@ -288,6 +289,7 @@ If you would instead like to start an interactive rebase from the selected commi | `` d `` | Delete | View delete options for local/remote tag. | | `` P `` | Отправить тег | Push the selected tag to a remote. You'll be prompted to select a remote. | | `` g `` | Reset | View reset options (soft/mixed/hard) for resetting onto selected item. | +| `` `` | Open external diff tool (git difftool) | | | `` `` | Просмотреть коммиты | | | `` w `` | View worktree options | | | `` / `` | Filter the current view by text | | @@ -305,6 +307,7 @@ If you would instead like to start an interactive rebase from the selected commi | `` u `` | Set as upstream | Установить как upstream-ветку переключённую ветку | | `` s `` | Порядок сортировки | | | `` g `` | Просмотреть параметры сброса | View reset options (soft/mixed/hard) for resetting onto selected item. | +| `` `` | Open external diff tool (git difftool) | | | `` `` | Просмотреть коммиты | | | `` w `` | View worktree options | | | `` / `` | Filter the current view by text | | diff --git a/docs/keybindings/Keybindings_zh-CN.md b/docs/keybindings/Keybindings_zh-CN.md index 3c8e7d3ce69..8cb93e519e7 100644 --- a/docs/keybindings/Keybindings_zh-CN.md +++ b/docs/keybindings/Keybindings_zh-CN.md @@ -98,6 +98,7 @@ _Legend: `` means ctrl+b, `` means alt+b, `B` means shift+b_ | `` g `` | 查看重置选项 | | | `` R `` | 重命名分支 | | | `` u `` | View upstream options | View options relating to the branch's upstream e.g. setting/unsetting the upstream and resetting to the upstream. | +| `` `` | Open external diff tool (git difftool) | | | `` `` | 查看提交 | | | `` w `` | View worktree options | | | `` / `` | Filter the current view by text | | @@ -248,6 +249,7 @@ If you would instead like to start an interactive rebase from the selected commi | `` d `` | Delete | View delete options for local/remote tag. | | `` P `` | 推送标签 | Push the selected tag to a remote. You'll be prompted to select a remote. | | `` g `` | Reset | View reset options (soft/mixed/hard) for resetting onto selected item. | +| `` `` | Open external diff tool (git difftool) | | | `` `` | 查看提交 | | | `` w `` | View worktree options | | | `` / `` | Filter the current view by text | | @@ -348,6 +350,7 @@ If you would instead like to start an interactive rebase from the selected commi | `` u `` | Set as upstream | 设置为检出分支的上游 | | `` s `` | Sort order | | | `` g `` | 查看重置选项 | View reset options (soft/mixed/hard) for resetting onto selected item. | +| `` `` | Open external diff tool (git difftool) | | | `` `` | 查看提交 | | | `` w `` | View worktree options | | | `` / `` | Filter the current view by text | | diff --git a/docs/keybindings/Keybindings_zh-TW.md b/docs/keybindings/Keybindings_zh-TW.md index a90334dad1b..d82e3361d4f 100644 --- a/docs/keybindings/Keybindings_zh-TW.md +++ b/docs/keybindings/Keybindings_zh-TW.md @@ -271,6 +271,7 @@ If you would instead like to start an interactive rebase from the selected commi | `` g `` | 檢視重設選項 | | | `` R `` | 重新命名分支 | | | `` u `` | 檢視上游設定 | 檢視有關上游分支的設定(例如重設至上游) | +| `` `` | Open external diff tool (git difftool) | | | `` `` | 檢視提交 | | | `` w `` | 檢視工作目錄選項 | | | `` / `` | 搜尋 | | @@ -284,6 +285,7 @@ If you would instead like to start an interactive rebase from the selected commi | `` d `` | Delete | View delete options for local/remote tag. | | `` P `` | 推送標籤 | Push the selected tag to a remote. You'll be prompted to select a remote. | | `` g `` | Reset | View reset options (soft/mixed/hard) for resetting onto selected item. | +| `` `` | Open external diff tool (git difftool) | | | `` `` | 檢視提交 | | | `` w `` | 檢視工作目錄選項 | | | `` / `` | 搜尋 | | @@ -359,6 +361,7 @@ If you would instead like to start an interactive rebase from the selected commi | `` u `` | Set as upstream | 將此分支設為當前分支之上游 | | `` s `` | Sort order | | | `` g `` | 檢視重設選項 | View reset options (soft/mixed/hard) for resetting onto selected item. | +| `` `` | Open external diff tool (git difftool) | | | `` `` | 檢視提交 | | | `` w `` | 檢視工作目錄選項 | | | `` / `` | 搜尋 | | diff --git a/pkg/gui/controllers/branches_controller.go b/pkg/gui/controllers/branches_controller.go index 9f5ba7f05ed..f0d0899a591 100644 --- a/pkg/gui/controllers/branches_controller.go +++ b/pkg/gui/controllers/branches_controller.go @@ -159,6 +159,14 @@ func (self *BranchesController) GetKeybindings(opts types.KeybindingsOpts) []*ty OpensMenu: true, DisplayOnScreen: true, }, + { + Key: opts.GetKey(opts.Config.Universal.OpenDiffTool), + Handler: self.withItem(func(selectedBranch *models.Branch) error { + return self.c.Helpers().Diff.OpenDiffToolForRef(selectedBranch) + }), + GetDisabledReason: self.require(self.singleItemSelected()), + Description: self.c.Tr.OpenDiffTool, + }, } } diff --git a/pkg/gui/controllers/helpers/diff_helper.go b/pkg/gui/controllers/helpers/diff_helper.go index bf4b33052b3..8b5c01cd3e6 100644 --- a/pkg/gui/controllers/helpers/diff_helper.go +++ b/pkg/gui/controllers/helpers/diff_helper.go @@ -1,6 +1,7 @@ package helpers import ( + "github.com/jesseduffield/lazygit/pkg/commands/git_commands" "github.com/jesseduffield/lazygit/pkg/gui/context" "github.com/jesseduffield/lazygit/pkg/gui/modes/diffing" "github.com/jesseduffield/lazygit/pkg/gui/types" @@ -119,3 +120,18 @@ func (self *DiffHelper) IgnoringWhitespaceSubTitle() string { return "" } + +func (self *DiffHelper) OpenDiffToolForRef(selectedRef types.Ref) error { + to := selectedRef.RefName() + from, reverse := self.c.Modes().Diffing.GetFromAndReverseArgsForDiff("") + _, err := self.c.RunSubprocess(self.c.Git().Diff.OpenDiffToolCmdObj( + git_commands.DiffToolCmdOptions{ + Filepath: ".", + FromCommit: from, + ToCommit: to, + Reverse: reverse, + IsDirectory: true, + Staged: false, + })) + return err +} diff --git a/pkg/gui/controllers/remote_branches_controller.go b/pkg/gui/controllers/remote_branches_controller.go index d793c61488b..c859ef3f63a 100644 --- a/pkg/gui/controllers/remote_branches_controller.go +++ b/pkg/gui/controllers/remote_branches_controller.go @@ -94,6 +94,14 @@ func (self *RemoteBranchesController) GetKeybindings(opts types.KeybindingsOpts) Tooltip: self.c.Tr.ResetTooltip, OpensMenu: true, }, + { + Key: opts.GetKey(opts.Config.Universal.OpenDiffTool), + Handler: self.withItem(func(selectedBranch *models.RemoteBranch) error { + return self.c.Helpers().Diff.OpenDiffToolForRef(selectedBranch) + }), + GetDisabledReason: self.require(self.singleItemSelected()), + Description: self.c.Tr.OpenDiffTool, + }, } } diff --git a/pkg/gui/controllers/tags_controller.go b/pkg/gui/controllers/tags_controller.go index d845f192d49..623ef72179f 100644 --- a/pkg/gui/controllers/tags_controller.go +++ b/pkg/gui/controllers/tags_controller.go @@ -74,6 +74,14 @@ func (self *TagsController) GetKeybindings(opts types.KeybindingsOpts) []*types. DisplayOnScreen: true, OpensMenu: true, }, + { + Key: opts.GetKey(opts.Config.Universal.OpenDiffTool), + Handler: self.withItem(func(selectedTag *models.Tag) error { + return self.c.Helpers().Diff.OpenDiffToolForRef(selectedTag) + }), + GetDisabledReason: self.require(self.singleItemSelected()), + Description: self.c.Tr.OpenDiffTool, + }, } return bindings From 398ceb1dd94f2ce99f753daf6e95f434116390d9 Mon Sep 17 00:00:00 2001 From: stk Date: Sun, 30 Jun 2024 10:41:48 +0200 Subject: [PATCH 124/157] Fix loading translation set json files on Windows It seems that the embed.FS always uses foreward slashes, even on Windows. This not only affected generating the cheatsheets, but also loading a translation file in production. --- pkg/i18n/i18n.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/i18n/i18n.go b/pkg/i18n/i18n.go index ea5fcbb06e9..f9febbe01ec 100644 --- a/pkg/i18n/i18n.go +++ b/pkg/i18n/i18n.go @@ -3,8 +3,8 @@ package i18n import ( "embed" "encoding/json" + "fmt" "io/fs" - "path/filepath" "strings" "github.com/cloudfoundry/jibber_jabber" @@ -83,7 +83,7 @@ func getSupportedLanguageCodes() ([]string, error) { } func readLanguageFile(languageCode string) (*TranslationSet, error) { - jsonData, err := embedFS.ReadFile(filepath.Join("translations", languageCode+".json")) + jsonData, err := embedFS.ReadFile(fmt.Sprintf("translations/%s.json", languageCode)) if err != nil { return nil, err } From 94a1c27916a19af4eb5a57baa22a3a529765c4a2 Mon Sep 17 00:00:00 2001 From: stk Date: Sun, 30 Jun 2024 11:11:17 +0200 Subject: [PATCH 125/157] Normalize line endings of docs/README.md For some reason this was checked in with CRLF line endings; change it to just LF, like all other text files. --- docs/README.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/docs/README.md b/docs/README.md index d840637a045..1bc0bb6be2e 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,11 +1,11 @@ -# Documentation Overview - -* [Configuration](./Config.md). -* [Custom Commands](./Custom_Command_Keybindings.md) -* [Custom Pagers](./Custom_Pagers.md) -* [Dev docs](./dev) -* [Keybindings](./keybindings) -* [Undo/Redo](./Undoing.md) -* [Range Select](./Range_Select.md) -* [Searching/Filtering](./Searching.md) -* [Stacked Branches](./Stacked_Branches.md) +# Documentation Overview + +* [Configuration](./Config.md). +* [Custom Commands](./Custom_Command_Keybindings.md) +* [Custom Pagers](./Custom_Pagers.md) +* [Dev docs](./dev) +* [Keybindings](./keybindings) +* [Undo/Redo](./Undoing.md) +* [Range Select](./Range_Select.md) +* [Searching/Filtering](./Searching.md) +* [Stacked Branches](./Stacked_Branches.md) From 61313e5dfa69747abc1d11b4e3b4768f9485dbac Mon Sep 17 00:00:00 2001 From: stk Date: Sun, 30 Jun 2024 11:15:19 +0200 Subject: [PATCH 126/157] Add .gitattributes file This tells git to checkout all .md and .json files with Unix line feeds, even on Windows. This shouldn't be a problem for working with these files on Windows, as all modern text editors and IDEs should be capable of editing Unix files transparently; but it makes it possible to run `go generate ./...` on Windows, which assumes Unix line feeds in a few places. --- .gitattributes | 3 +++ .gitignore | 1 + 2 files changed, 4 insertions(+) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000000..8143bb75f7c --- /dev/null +++ b/.gitattributes @@ -0,0 +1,3 @@ +*.go text +*.md text eol=lf +*.json text eol=lf diff --git a/.gitignore b/.gitignore index 2fc9940dc02..09340a6c9bf 100644 --- a/.gitignore +++ b/.gitignore @@ -19,6 +19,7 @@ lazygit.exe # Exceptions !.gitignore +!.gitattributes !.goreleaser.yml !.golangci.yml !.circleci/ From 71a62b7573d0b913e5e58af30fb6b66b42036e78 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Sun, 30 Jun 2024 11:36:02 +0200 Subject: [PATCH 127/157] Re-add a vendor .gitattributes file This was previously ignored by our top-level .gitignore file; now that we no longer do that, running `go mod vendor` brings it back. --- vendor/github.com/kevinburke/ssh_config/.gitattributes | 1 + 1 file changed, 1 insertion(+) create mode 100644 vendor/github.com/kevinburke/ssh_config/.gitattributes diff --git a/vendor/github.com/kevinburke/ssh_config/.gitattributes b/vendor/github.com/kevinburke/ssh_config/.gitattributes new file mode 100644 index 00000000000..44db5818894 --- /dev/null +++ b/vendor/github.com/kevinburke/ssh_config/.gitattributes @@ -0,0 +1 @@ +testdata/dos-lines eol=crlf From c27a7e0816ab9bb1f19d2259cc82bdf3faf534b6 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Sun, 30 Jun 2024 13:03:55 +0200 Subject: [PATCH 128/157] Add missing english text I was looking for empty strings in en.json, that's how I found this one. It resulted in an empty log entry when adding a co-author to an existing commit. --- pkg/i18n/english.go | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/i18n/english.go b/pkg/i18n/english.go index 949e96b7d91..0705d1ffb2a 100644 --- a/pkg/i18n/english.go +++ b/pkg/i18n/english.go @@ -1796,6 +1796,7 @@ func EnglishTranslationSet() *TranslationSet { AmendCommit: "Amend commit", ResetCommitAuthor: "Reset commit author", SetCommitAuthor: "Set commit author", + AddCommitCoAuthor: "Add commit co-author", RevertCommit: "Revert commit", CreateFixupCommit: "Create fixup commit", SquashAllAboveFixupCommits: "Squash all above fixup commits", From 92d4073b2a454b58d76b767360e6d089ed6d7fa0 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Sun, 30 Jun 2024 13:04:36 +0200 Subject: [PATCH 129/157] Remove unused TranslationSet entries Found these by looking for empty strings in en.json. --- pkg/i18n/english.go | 6 ------ 1 file changed, 6 deletions(-) diff --git a/pkg/i18n/english.go b/pkg/i18n/english.go index 0705d1ffb2a..273dae5302b 100644 --- a/pkg/i18n/english.go +++ b/pkg/i18n/english.go @@ -255,7 +255,6 @@ type TranslationSet struct { ToggleSelectHunk string ToggleSelectHunkTooltip string ToggleSelectionForPatch string - ToggleSelectionForPatchTooltip string EditHunk string EditHunkTooltip string ToggleStagingView string @@ -314,7 +313,6 @@ type TranslationSet struct { ChangingThisActionIsNotAllowed string CherryPickCopy string CherryPickCopyTooltip string - CherryPickCopyRange string CherryPickCopyRangeTooltip string PasteCommits string SureCherryPick string @@ -562,7 +560,6 @@ type TranslationSet struct { OpenFilteringMenuTooltip string FilterBy string ExitFilterMode string - ExitFilterModeAuthor string FilterPathOption string FilterAuthorOption string EnterFileName string @@ -805,8 +802,6 @@ type TranslationSet struct { type Bisect struct { MarkStart string - MarkSkipCurrent string - MarkSkipSelected string ResetTitle string ResetPrompt string ResetOption string @@ -895,7 +890,6 @@ type Actions struct { Push string Pull string OpenFile string - OpenFileTooltip string StashAllChanges string StashAllChangesKeepIndex string StashStagedChanges string From 5b6dbe57b112311f038947130ca21860a3332a18 Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Sun, 30 Jun 2024 15:33:47 +0200 Subject: [PATCH 130/157] Add script to update translation files from Crowdin --- scripts/update_language_files.sh | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100755 scripts/update_language_files.sh diff --git a/scripts/update_language_files.sh b/scripts/update_language_files.sh new file mode 100755 index 00000000000..217bba9fcca --- /dev/null +++ b/scripts/update_language_files.sh @@ -0,0 +1,27 @@ +#!/bin/sh + +set -e + +# Since I couldn't get crowdin-cli to work yet, I'm doing things a bit more +# manually for now. The process is as follows: +# +# 1. Download the translations from Crowdin as a zip file +# 2. Unzip the file +# 3. Run this script with the path to the unzipped directory as an argument +# +# Requires jq (1.7 or later): https://github.com/jqlang/jq + +if [ "$#" -ne 1 ]; then + echo "Usage: $0 " + exit 2 +fi + +download_dir="$1" + +for d in "$download_dir"/* +do + # We need to remove empty strings from the JSON files; those are the ones + # that haven't been translated yet. Crowdin has an option to skip these when + # exporting, but unfortunately it doesn't work for json files. + jq 'del(..|select(. == ""))' < "$d/en.json" > pkg/i18n/translations/$(basename "$d").json +done From 974016cfba6d05e47820385b8d0513adcb24bd2d Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Sun, 30 Jun 2024 15:38:43 +0200 Subject: [PATCH 131/157] Update translations from Crowdin No content changes yet, because nobody has edited anything in Crowdin so far. However, this changes a few `\u003` to `<` (pretty sure that was an artefact of how we manually generated the json files in #3649), and it removes all the translations that are identical to the English version, which I guess is a good thing (but doesn't make a difference in practice). --- pkg/i18n/translations/ja.json | 25 +---- pkg/i18n/translations/ko.json | 173 ++----------------------------- pkg/i18n/translations/nl.json | 44 ++------ pkg/i18n/translations/pl.json | 41 ++------ pkg/i18n/translations/ru.json | 15 ++- pkg/i18n/translations/zh-CN.json | 13 +-- pkg/i18n/translations/zh-TW.json | 16 +-- 7 files changed, 47 insertions(+), 280 deletions(-) diff --git a/pkg/i18n/translations/ja.json b/pkg/i18n/translations/ja.json index 8b1c9dc8fc5..d823fa81f40 100644 --- a/pkg/i18n/translations/ja.json +++ b/pkg/i18n/translations/ja.json @@ -4,13 +4,11 @@ "FilesTitle": "ファイル", "BranchesTitle": "ブランチ", "CommitsTitle": "コミット", - "StashTitle": "Stash", "UnstagedChanges": "ステージされていない変更", "StagedChanges": "ステージされた変更", "MainTitle": "メイン", "StagingTitle": "メインパネル (Staging)", "MergingTitle": "メインパネル (Merging)", - "MergeConfirmTitle": "マージ", "NormalTitle": "メインパネル (Normal)", "LogTitle": "ログ", "CommitSummary": "コミットメッセージ", @@ -33,8 +31,6 @@ "ToggleTreeView": "ファイルツリーの表示を切り替え", "OpenMergeTool": "Git mergetoolを開く", "Refresh": "リフレッシュ", - "Push": "Push", - "Pull": "Pull", "Scroll": "スクロール", "FileFilter": "ファイルをフィルタ (ステージ/アンステージ)", "FilterStagedFiles": "ステージされたファイルのみを表示", @@ -68,8 +64,6 @@ "Undo": "アンドゥ", "UndoReflog": "アンドゥ (via reflog) (experimental)", "RedoReflog": "リドゥ (via reflog) (experimental)", - "Pop": "Pop", - "Drop": "Drop", "Apply": "適用", "NoStashEntries": "Stashが存在しません", "StashDrop": "Stashを削除", @@ -83,7 +77,6 @@ "RenameStashPrompt": "Stash名を変更: {{.stashName}}", "OpenConfig": "設定ファイルを開く", "EditConfig": "設定ファイルを編集", - "ForcePush": "Force push", "ForcePushPrompt": "ブランチがリモートブランチから分岐しています。'esc'でキャンセル, または'enter'でforce pushします。", "ForcePushDisabled": "ブランチがリモートブランチから分岐しています。force pushは無効化されています。", "CheckForUpdate": "更新を確認", @@ -102,7 +95,6 @@ "ConfirmQuitDuringUpdate": "現在更新を実行中です。終了しますか?", "MergeToolTitle": "マージツール", "MergeToolPrompt": "`git mergetool`を開きます。よろしいですか?", - "IntroPopupMessage": "\nThanks for using lazygit! Seriously you rock. Three things to share with you:\n\n 1) If you want to learn about lazygit's features, watch this vid:\n https://youtu.be/CPLdltN7wgE\n\n 2) Be sure to read the latest release notes at:\n https://github.com/jesseduffield/lazygit/releases\n\n 3) If you're using git, that makes you a programmer! With your help we can make\n lazygit better, so consider becoming a contributor and joining the fun at\n https://github.com/jesseduffield/lazygit\n You can also sponsor me and tell me what to work on by clicking the donate\n button at the bottom right.\n Or even just star the repo to share the love!\n", "EditFile": "ファイルを編集", "OpenFile": "ファイルを開く", "IgnoreFile": ".gitignoreに追加", @@ -114,7 +106,6 @@ "UnsupportedGitService": "サポートされていないGitサービスです。", "CopyPullRequestURL": "Pull RequestのURLをクリップボードにコピー", "NoBranchOnRemote": "ブランチがリモートに存在しません。リモートにpushしてください。", - "Fetch": "Fetch", "StageSelectionTooltip": "選択行をステージ/アンステージ", "DiscardSelection": "変更を削除 (git reset)", "ToggleSelectHunk": "Hunk選択を切り替え", @@ -130,8 +121,6 @@ "RemotesTitle": "リモート", "RemoteBranchesTitle": "リモートブランチ", "PatchBuildingTitle": "メインパネル (Patch Building)", - "InformationTitle": "Information", - "SecondaryTitle": "Secondary", "ReflogCommitsTitle": "参照ログ", "ErrorOccurred": "エラーが発生しました! issueを作成してください: ", "YouAreHere": "現在位置", @@ -159,9 +148,7 @@ "PullingStatus": "Pull中", "PushingStatus": "Push中", "FetchingStatus": "Fetch中", - "CommitFiles": "Commit files", "SubCommitsDynamicTitle": "コミット (%s)", - "CommitFilesDynamicTitle": "Diff files (%s)", "RemoteBranchesDynamicTitle": "リモートブランチ (%s)", "CommitFilesTitle": "コミットファイル", "DiscardFileChangesTitle": "ファイルの変更を破棄", @@ -181,8 +168,8 @@ "ScrollLeft": "左スクロール", "ScrollRight": "右スクロール", "DiscardPatch": "パッチを破棄", - "EnterUpstream": "'\u003cremote\u003e \u003cbranchname\u003e' の形式でupstreamを入力", - "InvalidUpstream": "Upstreamの形式が正しくありません。'\u003cremote\u003e \u003cbranchname\u003e' の形式で入力してください。", + "EnterUpstream": "' ' の形式でupstreamを入力", + "InvalidUpstream": "Upstreamの形式が正しくありません。' ' の形式で入力してください。", "ReturnToRemotesList": "リモート一覧に戻る", "NewRemote": "リモートを新規追加", "NewRemoteName": "新規リモート名:", @@ -345,8 +332,6 @@ "IgnoreExcludeFile": "ファイルをignore", "Commit": "コミット", "EditFile": "ファイルを編集", - "Push": "Push", - "Pull": "Pull", "OpenFile": "ファイルを開く", "StashAllChanges": "すべての変更をStash", "StashStagedChanges": "ステージされた変更をStash", @@ -364,7 +349,6 @@ "RemoveRemote": "リモートを削除", "UpdateRemote": "リモートを更新", "ApplyPatch": "パッチを適用", - "Stash": "Stash", "RenameStash": "Stash名を変更", "RemoveSubmodule": "サブモジュールを削除", "ResetSubmodule": "サブモジュールをリセット", @@ -399,7 +383,6 @@ "SkipCurrent": "%s をスキップする", "CompleteTitle": "Bisect完了" }, - "Log": { - "EditRebaseFromBaseCommit": "" - } + "Log": {}, + "BreakingChangesByVersion": {} } diff --git a/pkg/i18n/translations/ko.json b/pkg/i18n/translations/ko.json index edd5f9c1829..10ea4ec813d 100644 --- a/pkg/i18n/translations/ko.json +++ b/pkg/i18n/translations/ko.json @@ -1,16 +1,13 @@ { "NotEnoughSpace": "패널을 렌더링 할 공간이 부족합니다.", - "DiffTitle": "Diff", "FilesTitle": "파일", "BranchesTitle": "브랜치", "CommitsTitle": "커밋", - "StashTitle": "Stash", "UnstagedChanges": "Staged되지 않은 변경 내용", "StagedChanges": "Staged된 변경 내용", "MainTitle": "메인", "StagingTitle": "메인 패널 (Staging)", "MergingTitle": "메인 패널 (Merging)", - "MergeConfirmTitle": "병합", "NormalTitle": "메인 패널 (Normal)", "LogTitle": "로그", "CommitSummary": "커밋 메시지", @@ -63,11 +60,8 @@ "CloseCancel": "닫기/취소", "Confirm": "확인", "Quit": "종료", - "CannotSquashOrFixupFirstCommit": "There's no commit below to squash into", - "Fixup": "Fixup", "SureFixupThisCommit": "Are you sure you want to 'fixup' this commit? It will be merged into the commit below", "SureSquashThisCommit": "Are you sure you want to squash this commit into the commit below?", - "Squash": "Squash", "PickCommitTooltip": "Pick commit (when mid-rebase)", "RevertCommit": "커밋 되돌리기", "Reword": "커밋메시지 변경", @@ -77,15 +71,12 @@ "EditCommitTooltip": "커밋을 편집", "AmendCommitTooltip": "Amend commit with staged changes", "ResetAuthor": "Reset commit author", - "SureResetCommitAuthor": "The author field of this commit will be updated to match the configured user. This also renews the author timestamp. Continue?", "RewordCommitEditor": "에디터에서 커밋메시지 수정", "NoCommitsThisBranch": "이 브랜치에 커밋이 없습니다.", "Error": "오류", "Undo": "되돌리기", "UndoReflog": "되돌리기 (reflog) (실험적)", "RedoReflog": "다시 실행 (reflog) (실험적)", - "Pop": "Pop", - "Drop": "Drop", "Apply": "적용", "NoStashEntries": "Stash가 존재하지 않습니다.", "StashDrop": "Stash를 삭제", @@ -94,10 +85,7 @@ "SurePopStashEntry": "정말로 Stash를 pop하시겠습니까?", "StashApply": "Stash 적용", "SureApplyStashEntry": "정말로 Stash를 적용하시겠습니까?", - "NoTrackedStagedFilesStash": "You have no tracked/staged files to stash", "StashChanges": "변경을 Stash", - "RenameStash": "Rename stash", - "RenameStashPrompt": "Rename stash: {{.stashName}}", "OpenConfig": "설정 파일 열기", "EditConfig": "설정 파일 수정", "ForcePush": "강제 푸시", @@ -133,7 +121,6 @@ "UnsupportedGitService": "지원되지 않는 Git 서비스입니다.", "CopyPullRequestURL": "풀 리퀘스트 URL을 클립보드에 복사", "NoBranchOnRemote": "브랜치가 원격에 없습니다. 원격에 먼저 푸시해야합니다.", - "Fetch": "Fetch", "NoAutomaticGitFetchTitle": "자동 git 업데이트) 없음", "NoAutomaticGitFetchBody": "Lazygit은 private 저장소에서 \"git fetch\"를 사용할 수 없습니다. 파일 패널에서 'f'를 사용하여 \"git fetch\"를 수동으로 실행하세요.", "FileEnter": "Stage individual hunks/lines for file, or collapse/expand for directory", @@ -145,15 +132,8 @@ "ToggleStagingView": "패널 전환", "ReturnToFilesPanel": "파일 목록으로 돌아가기", "FastForward": "Fast-forward this branch from its upstream", - "FastForwarding": "Fast-forwarding", "FoundConflictsTitle": "Auto-merge failed", - "PickHunk": "Pick hunk", - "PickAllHunks": "Pick all hunks", - "ViewMergeRebaseOptions": "View merge/rebase options", - "NotMergingOrRebasing": "You are currently neither rebasing nor merging", "RecentRepos": "최근에 사용한 저장소", - "MergeOptionsTitle": "Merge options", - "RebaseOptionsTitle": "Rebase options", "CommitSummaryTitle": "커밋메시지", "LocalBranchesTitle": "브랜치", "SearchTitle": "검색", @@ -163,17 +143,9 @@ "RemoteBranchesTitle": "원격 브랜치", "PatchBuildingTitle": "메인 패널 (Patch Building)", "InformationTitle": "정보", - "SecondaryTitle": "Secondary", - "ReflogCommitsTitle": "Reflog", "ConflictsResolved": "모든 병합 충돌이 해결되었습니다. 계속 할까요?", - "ConfirmMerge": "정말로 '{{.selectedBranch}}' 을(를) '{{.checkedOutBranch}}'에 병합하시겠습니까?", - "FwdNoUpstream": "Cannot fast-forward a branch with no upstream", - "FwdNoLocalUpstream": "Cannot fast-forward a branch whose remote is not registered locally", - "FwdCommitsToPush": "Cannot fast-forward a branch with commits to push", "ErrorOccurred": "오류가 발생했습니다! issue를 작성해 주세요: ", - "NoRoom": "Not enough room", "YouAreHere": "현재 위치", - "RewordNotSupported": "Rewording commits while interactively rebasing is not currently supported", "CherryPickCopy": "커밋을 복사 (cherry-pick)", "PasteCommits": "커밋을 붙여넣기 (cherry-pick)", "SureCherryPick": "정말로 복사한 커밋을 이 브랜치에 체리픽하시겠습니까?", @@ -192,27 +164,12 @@ "ScrollUp": "위로 스크롤", "ScrollUpMainWindow": "메인 패널을 위로 스크롤", "ScrollDownMainWindow": "메인 패널을 아래로로 스크롤", - "AmendCommitTitle": "Amend commit", - "AmendCommitPrompt": "Are you sure you want to amend this commit with your staged files?", "DropCommitTitle": "커밋 삭제", "DropCommitPrompt": "정말로 선택한 커밋을 삭제하시겠습니까?", "PullingStatus": "업데이트 중", "PushingStatus": "푸시 중", "FetchingStatus": "패치 중", - "SquashingStatus": "Squashing", - "FixingStatus": "Fixing up", - "DeletingStatus": "Deleting", - "MovingStatus": "Moving", - "RebasingStatus": "Rebasing", - "AmendingStatus": "Amending", - "CherryPickingStatus": "Cherry-picking", - "UndoingStatus": "Undoing", - "RedoingStatus": "Redoing", - "CheckingOutStatus": "Checking out", - "CommittingStatus": "Committing", - "CommitFiles": "Commit files", "SubCommitsDynamicTitle": "커밋 (%s)", - "CommitFilesDynamicTitle": "Diff files (%s)", "RemoteBranchesDynamicTitle": "원격브랜치 (%s)", "ViewItemFiles": "View selected item's files", "CommitFilesTitle": "커밋 파일", @@ -220,50 +177,28 @@ "DiscardOldFileChangeTooltip": "Discard this commit's changes to this file", "DiscardFileChangesTitle": "파일 변경 사항 버리기", "DiscardFileChangesPrompt": "Are you sure you want to discard this commit's changes to this file? If this file was created in this commit, it will be deleted", - "DisabledForGPG": "Feature not available for users using GPG", "CreateRepo": "Git 저장소가 아닙니다. 저장소를 생성하시겠습니까? (y/n): ", - "AutoStashTitle": "Autostash?", - "AutoStashPrompt": "You must stash and pop your changes to bring them across. Do this automatically? (enter/esc)", - "StashPrefix": "Auto-stashing changes for ", "Discard": "View 'discard changes' options", "Cancel": "취소", "DiscardAllChanges": "모든 변경사항 버리기", - "DiscardUnstagedChanges": "Discard unstaged changes", - "DiscardAllChangesToAllFiles": "Nuke working tree", - "DiscardAnyUnstagedChanges": "Discard unstaged changes", - "DiscardUntrackedFiles": "Discard untracked files", - "HardReset": "Hard reset", "ViewResetOptions": "View reset options", - "CreateFixupCommit": "Create fixup commit", "CreateFixupCommitTooltip": "Create fixup commit for this commit", "SquashAboveCommitsTooltip": "Squash all 'fixup!' commits above selected commit (autosquash)", - "ExecuteCustomCommand": "Execute custom command", - "CustomCommand": "Custom command:", - "CommitChangesWithoutHook": "Commit changes without pre-commit hook", - "SkipHookPrefixNotConfigured": "You have not configured a commit message prefix for skipping hooks. Set `git.skipHookPrefix = 'WIP'` in your config", - "ResetTo": "Reset to", "PressEnterToReturn": "엔터를 눌러 lazygit으로 돌아갑니다.", "ViewStashOptions": "Stash 옵션 보기", "StashAllChanges": "변경사항을 Stash", - "StashStagedChanges": "Stash staged changes", "StashOptions": "Stash 옵션", - "NotARepository": "Error: must be run inside a git repository", "Jump": "패널로 이동", "ScrollLeftRight": "좌우로 스크롤", "ScrollLeft": "우 스크롤", "ScrollRight": "좌 스크롤", "DiscardPatch": "Patch 버리기", - "DiscardPatchConfirm": "You can only build a patch from one commit/stash-entry at a time. Discard current patch?", - "CantPatchWhileRebasingError": "You cannot build a patch or run patch commands while in a merging or rebasing state", - "ToggleAddToPatch": "Toggle file included in patch", "ToggleAllInPatch": "Toggle all files included in patch", - "UpdatingPatch": "Updating patch", "ViewPatchOptions": "커스텀 Patch 옵션 보기", "PatchOptionsTitle": "Patch 옵션", - "NoPatchError": "No patch created yet. To start building a patch, use 'space' on a commit file or enter to add specific lines", "EnterCommitFile": "Enter file to add selected lines to the patch (or toggle directory collapsed)", - "EnterUpstream": "'\u003cremote\u003e \u003cbranchname\u003e'와 같은 형식으로 입력하세요.", - "InvalidUpstream": "Upstream의 형식이 잘못되었습니다.'\u003cremote\u003e \u003cbranchname\u003e' 와 같은 형식으로 입력하세요.", + "EnterUpstream": "' '와 같은 형식으로 입력하세요.", + "InvalidUpstream": "Upstream의 형식이 잘못되었습니다.' ' 와 같은 형식으로 입력하세요.", "ReturnToRemotesList": "원격목록으로 돌아가기", "NewRemote": "새로운 Remote 추가", "NewRemoteName": "새로운 Remote 이름:", @@ -275,15 +210,10 @@ "DeleteRemoteBranch": "원격 브랜치를 삭제", "DeleteRemoteBranchMessage": "정말로 원격 브랜치를 삭제하시겠습니까?", "SetUpstream": "Set as upstream of checked-out branch", - "SetUpstreamTitle": "Set upstream branch", - "SetUpstreamMessage": "Are you sure you want to set the upstream branch of '{{.checkedOut}}' to '{{.selected}}'", "EditRemoteTooltip": "Remote를 수정", - "TagCommit": "Tag commit", "TagMenuTitle": "태그 작성", "TagNameTitle": "태그 이름", "TagMessageTitle": "태그 메시지", - "LightweightTag": "Lightweight tag", - "AnnotatedTag": "Annotated tag", "PushTagTitle": "원격에 태그 '{{.tagName}}' 를 푸시", "PushTag": "태그를 push", "NewTag": "태그를 생성", @@ -292,51 +222,33 @@ "CheckoutCommit": "커밋을 체크아웃", "SureCheckoutThisCommit": "정말로 선택한 커밋을 체크아웃 하시겠습니까?", "GitFlowOptions": "Git-flow 옵션 보기", - "NotAGitFlowBranch": "This does not seem to be a git flow branch", "NewBranchNamePrompt": "새로운 브랜치 이름 입력", - "IgnoreTracked": "Ignore tracked file", - "IgnoreTrackedPrompt": "Are you sure you want to ignore a tracked file?", - "ViewResetToUpstreamOptions": "View upstream reset options", "NextScreenMode": "다음 스크린 모드 (normal/half/fullscreen)", "PrevScreenMode": "이전 스크린 모드", "StartSearch": "검색 시작", "Panel": "패널", "Keybindings": "키 바인딩", "RenameBranch": "브랜치 이름 변경", - "NewGitFlowBranchPrompt": "New {{.branchType}} name:", - "RenameBranchWarning": "This branch is tracking a remote. This action will only rename the local branch name, not the name of the remote branch. Continue?", "OpenKeybindingsMenu": "매뉴 열기", "ResetCherryPick": "Reset cherry-picked (copied) commits selection", "NextTab": "이전 탭", "PrevTab": "다음 탭", "CantUndoWhileRebasing": "리베이스중에는 되돌릴 수 없습니다.", "CantRedoWhileRebasing": "리베이스중에는 다시 실행할 수 없습니다.", - "MustStashWarning": "Pulling a patch out into the index requires stashing and unstashing your changes. If something goes wrong, you'll be able to access your files from the stash. Continue?", - "MustStashTitle": "Must stash", "ConfirmationTitle": "확인 패널", "PrevPage": "이전 페이지", "NextPage": "다음 페이지", "GotoTop": "맨 위로 스크롤 ", "GotoBottom": "맨 아래로 스크롤 ", - "FilteringBy": "Filtering by", "ResetInParentheses": "(reset)", "OpenFilteringMenu": "View filter-by-path options", - "FilterBy": "Filter by", "ExitFilterMode": "Stop filtering by path", - "FilterPathOption": "Enter path to filter by", - "EnterFileName": "Enter path:", - "FilteringMenuTitle": "Filtering", - "MustExitFilterModeTitle": "Command not available", "MustExitFilterModePrompt": "Command not available in filtered mode. Exit filtered mode?", - "Diff": "Diff", - "EnterRefToDiff": "Enter ref to diff", "EnterRefName": "Ref 입력:", "ExitDiffMode": "Diff 모드 종료", "DiffingMenuTitle": "Diff", - "SwapDiff": "Reverse diff direction", "ViewDiffingOptions": "Diff 메뉴 열기", "OpenCommandLogMenu": "명령어 로그 메뉴 열기", - "ShowingGitDiff": "Showing output for:", "CommitDiff": "커밋의 iff", "CopyCommitHashToClipboard": "커밋 해시를 클립보드에 복사", "CommitHash": "커밋 해시", @@ -347,7 +259,6 @@ "CopyCommitAttributeToClipboard": "커밋 attribute 복사", "CopyBranchNameToClipboard": "브랜치명을 클립보드에 복사", "CopyPathToClipboard": "파일명을 클립보드에 복사", - "CommitPrefixPatternError": "Error in commitPrefix pattern", "CopySelectedTextToClipboard": "선택한 텍스트를 클립보드에 복사", "NoFilesStagedTitle": "파일이 Staged 되지 않았습니다.", "NoFilesStagedPrompt": "파일이 Staged 되지 않았습니다. 모든 파일을 커밋하시겠습니까?", @@ -356,12 +267,9 @@ "DiscardChangeTitle": "선택한 라인을 unstaged", "DiscardChangePrompt": "정말로 선택한 라인을 삭제 (git reset) 하시겠습니까? 이 조작은 취소할 수 없습니다.\n이 경고를 비활성화 하려면 설정 파일의 'gui.skipDiscardChangeWarning' 를 true로 설정하세요.", "CreateNewBranchFromCommit": "커밋에서 새 브랜치를 만듭니다.", - "BuildingPatch": "Building patch", "ViewCommits": "커밋 보기", "MinGitVersionError": "Lazygit 실행을 위해서는 Git 2.20 이후의 버전(2018년 이후의)이 필요합니다. Git를 업데이트 해주세요. 아니면 lazygit이 이전 버전과 더 잘 호환되도록 https://github.com/jesseduffield/lazygit/issues 에 issue를 작성해 주세요.", "RunningCustomCommandStatus": "커스텀 명령어 실행", - "SubmoduleStashAndReset": "Stash uncommitted submodule changes and update", - "AndResetSubmodules": "And reset submodules", "EnterSubmoduleTooltip": "서브모듈 열기", "CopySubmoduleNameToClipboard": "서브모듈 이름을 클립보드에 복사", "RemoveSubmodule": "서브모듈 삭제", @@ -373,7 +281,6 @@ "NewSubmodule": "새로운 서브모듈 추가", "AddingSubmoduleStatus": "새로운 서브모듈 추가", "UpdateSubmoduleUrl": "서브모듈 '%s' 의 URL을 업데이트", - "UpdatingSubmoduleUrlStatus": "Updating URL", "EditSubmoduleUrl": "서브모듈의 URL을 수정", "InitializingSubmoduleStatus": "서브모듈 초기화", "InitSubmoduleTooltip": "서브모듈 초기화", @@ -381,17 +288,10 @@ "UpdatingSubmoduleStatus": "서브모듈 업데이트", "BulkInitSubmodules": "서브모듈 일괄 초기화", "BulkUpdateSubmodules": "서브모듈 일괄 업데이트", - "BulkDeinitSubmodules": "Bulk deinit submodules", - "ViewBulkSubmoduleOptions": "View bulk submodule options", - "BulkSubmoduleOptions": "Bulk submodule options", - "RunningCommand": "Running command", - "SubCommitsTitle": "Sub-commits", "SubmodulesTitle": "서브모듈", - "NavigationTitle": "List panel navigation", "SuggestionsCheatsheetTitle": "추천", "SuggestionsTitle": "추천 (press %s to focus)", "ExtrasTitle": "명령어 로그", - "PushingTagStatus": "Pushing tag", "PullRequestURLCopiedToClipboard": "풀 리퀘스트의 URL을 클립보드에 복사했습니다.", "CommitDiffCopiedToClipboard": "커밋의 Diff를 클립보드에 복사했습니다.", "CommitURLCopiedToClipboard": "커밋의 URL를 클립보드에 복사했습니다.", @@ -418,25 +318,15 @@ "NoConfigFileFoundErr": "설정 파일을 찾지 못했습니다.", "LoadingFileSuggestions": "파일 제안 로딩 중", "LoadingCommits": "커밋 로딩", - "MustSpecifyOriginError": "Must specify a remote if specifying a branch", - "GitOutput": "Git output:", - "GitCommandFailed": "Git command failed. Check command log for details (open with %s)", "AbortTitle": "%s 중지", "AbortPrompt": "정말로 실행중인 %s 를 중지할까요?", "OpenLogMenu": "로그 메뉴 열기", "LogMenuTitle": "커밋 로그 옵션", - "ToggleShowGitGraphAll": "Toggle show whole git graph (pass the `--all` flag to `git log`)", "ShowGitGraph": "커밋 그래프 표시", "SortCommits": "커밋 정렬", - "CantChangeContextSizeError": "Cannot change context while in patch building mode because we were too lazy to support it when releasing the feature. If you really want it, please let us know!", "OpenCommitInBrowser": "브라우저에서 커밋 열기", "ViewBisectOptions": "Bisect 옵션 보기", - "ConfirmRevertCommit": "Are you sure you want to revert {{.selectedCommit}}?", "RewordInEditorTitle": "커밋 메시지를 에디터에서 수정", - "RewordInEditorPrompt": "Are you sure you want to reword this commit in your editor?", - "CheckoutPrompt": "Are you sure you want to checkout '%s'?", - "HardResetAutostashPrompt": "Are you sure you want to hard reset to '%s'? An auto-stash will be performed if necessary.", - "UpstreamGone": "(upstream gone)", "ToggleRangeSelect": "드래그 선택 전환", "Actions": { "CheckoutCommit": "커밋 체크아웃", @@ -447,11 +337,8 @@ "RebaseBranch": "브랜치 리베이스", "RenameBranch": "브랜치 이름 변경", "CreateBranch": "브랜치 생성", - "FastForwardBranch": "Fast forward branch", "CherryPick": "(Cherry-pick) 커밋 붙여넣기", "CheckoutFile": "체크아웃 파일", - "DiscardOldFileChange": "Discard old file change", - "SquashCommitDown": "Squash commit down", "FixupCommit": "커밋 Fixup", "RewordCommit": "커밋 Reword", "DropCommit": "커밋 Drop", @@ -460,91 +347,45 @@ "ResetCommitAuthor": "커밋 작성자 Reset", "RevertCommit": "커밋 Revert", "CreateFixupCommit": "Fixup 커밋 생성", - "SquashAllAboveFixupCommits": "Squash all above fixup commits", - "MoveCommitUp": "Move commit up", - "MoveCommitDown": "Move commit down", "CopyCommitMessageToClipboard": "커밋 메시지를 클립보드에 복사", "CopyCommitDiffToClipboard": "커밋 diff를 클립보드에 복사", "CopyCommitHashToClipboard": "커밋 해시를 클립보드에 복사", "CopyCommitURLToClipboard": "커밋 URL를 클립보드에 복사", "CopyCommitAuthorToClipboard": "커밋 작성자를 클립보드에 복사", "CopyCommitAttributeToClipboard": "클립보드에 복사", - "CustomCommand": "Custom command", - "DiscardAllChangesInDirectory": "Discard all changes in directory", - "DiscardUnstagedChangesInDirectory": "Discard unstaged changes in directory", "DiscardAllChangesInFile": "Discard all changes in file", "DiscardAllUnstagedChangesInFile": "Discard all unstaged changes in file", - "StageFile": "Stage file", - "StageResolvedFiles": "Stage files whose merge conflicts were resolved", - "UnstageFile": "Unstage file", - "UnstageAllFiles": "Unstage all files", - "StageAllFiles": "Stage all files", "IgnoreExcludeFile": "Ignore file", "Commit": "커밋", "EditFile": "파일 수정", "Push": "푸시", "Pull": "업데이트(Pull)", "OpenFile": "파일 열기", - "StashAllChanges": "Stash all changes", - "StashAllChangesKeepIndex": "Stash all changes and keep index", - "StashStagedChanges": "Stash staged changes", - "StashUnstagedChanges": "Stash unstaged changes", - "GitFlowFinish": "git flow finish", - "GitFlowStart": "git flow start", - "CopyToClipboard": "Copy to clipboard", - "CopySelectedTextToClipboard": "Copy selected text to clipboard", - "RemovePatchFromCommit": "Remove patch from commit", - "MovePatchToSelectedCommit": "Move patch to selected commit", - "MovePatchIntoIndex": "Move patch into index", - "MovePatchIntoNewCommit": "Move patch into new commit", - "DeleteRemoteBranch": "Delete remote branch", - "SetBranchUpstream": "Set branch upstream", - "AddRemote": "Add remote", - "RemoveRemote": "Remove remote", - "UpdateRemote": "Update remote", - "ApplyPatch": "Apply patch", - "Stash": "Stash", - "RenameStash": "Rename stash", "RemoveSubmodule": "서브모듈 삭제", "ResetSubmodule": "서브모듈 Reset", "AddSubmodule": "서브모듈 추가", "UpdateSubmoduleUrl": "서브모듈 URL 업데이트", "InitialiseSubmodule": "서브모듈 초기화", - "BulkInitialiseSubmodules": "Bulk initialise submodules", - "BulkUpdateSubmodules": "Bulk update submodules", - "BulkDeinitialiseSubmodules": "Bulk deinitialise submodules", "UpdateSubmodule": "서브모듈 업데이트", - "CreateLightweightTag": "Create lightweight tag", - "CreateAnnotatedTag": "Create annotated tag", "PushTag": "태그 푸시g", - "NukeWorkingTree": "Nuke working tree", "DiscardUnstagedFileChanges": "Unstaged 파일 변경사항 버리기", "RemoveUntrackedFiles": "Untracked 파일 삭제", "RemoveStagedFiles": "Staged 파일 삭제", - "SoftReset": "Soft reset", - "MixedReset": "Mixed reset", - "HardReset": "Hard reset", "Undo": "되돌리기", "Redo": "다시 실행", "CopyPullRequestURL": "풀 리퀘스트 URL 복사", "OpenMergeTool": "병합 도구 열기", "OpenCommitInBrowser": "브라우저에서 커밋 열기", - "OpenPullRequest": "브라우저에서 풀 리퀘스트 열기", - "StartBisect": "Start bisect", - "ResetBisect": "Reset bisect", - "BisectSkip": "Bisect skip", - "BisectMark": "Bisect mark" + "OpenPullRequest": "브라우저에서 풀 리퀘스트 열기" }, "Bisect": { - "MarkStart": "Mark %s as %s (start bisect)", "ResetTitle": "'git bisect' 를 리셋", "ResetPrompt": "정말로 'git bisect' 를 리셋하시겠습니까?", "ResetOption": "Bisect를 리셋", - "BisectMenuTitle": "Bisect", "Mark": "Mark %s as %s", "SkipCurrent": "%s 를 스킵", - "CompleteTitle": "Bisect 완료", - "CompletePrompt": "Bisect complete! The following commit introduced the change:\n\n%s\n\nDo you want to reset 'git bisect' now?", - "CompletePromptIndeterminate": "Bisect complete! Some commits were skipped, so any of the following commits may have introduced the change:\n\n%s\n\nDo you want to reset 'git bisect' now?" - } + "CompleteTitle": "Bisect 완료" + }, + "Log": {}, + "BreakingChangesByVersion": {} } diff --git a/pkg/i18n/translations/nl.json b/pkg/i18n/translations/nl.json index ad54b37368d..879df1c5824 100644 --- a/pkg/i18n/translations/nl.json +++ b/pkg/i18n/translations/nl.json @@ -1,10 +1,6 @@ { "NotEnoughSpace": "Niet genoeg ruimte om de panelen te renderen", - "DiffTitle": "Diff", "FilesTitle": "Bestanden", - "BranchesTitle": "Branches", - "CommitsTitle": "Commits", - "StashTitle": "Stash", "UnstagedChanges": "Unstaged wijzigingen", "StagedChanges": "Staged wijzigingen", "MainTitle": "Hoofd", @@ -22,19 +18,12 @@ "SureToAmend": "Weet je zeker dat je de laatste commit wilt wijzigen? U kunt het commit-bericht wijzigen vanuit het commits-paneel.", "NoCommitToAmend": "Er is geen commits om te wijzigen.", "CommitChangesWithEditor": "Commit veranderingen met de git editor", - "StatusTitle": "Status", "GlobalTitle": "Globale sneltoetsen", - "Menu": "Menu", "Execute": "Uitvoeren", "Stage": "Toggle staged", "ToggleStagedAll": "Toggle staged alle", "ToggleTreeView": "Toggle bestandsboom weergave", "Refresh": "Verversen", - "Push": "Push", - "Pull": "Pull", - "Scroll": "Scroll", - "FilterStagedFiles": "Show only staged files", - "FilterUnstagedFiles": "Show only unstaged files", "ResetFilter": "Reset commit file state filter", "MergeConflictsTitle": "Merge conflicten", "Checkout": "Uitchecken", @@ -58,12 +47,8 @@ "Close": "Sluiten", "CloseCancel": "Sluiten", "Confirm": "Bevestig", - "Quit": "Quit", - "CannotSquashOrFixupFirstCommit": "There's no commit below to squash into", - "Fixup": "Fixup", "SureFixupThisCommit": "Weet je zeker dat je fixup wil uitvoeren op deze commit? De commit hieronder zol worden squashed in deze", "SureSquashThisCommit": "Weet je zeker dat je deze commit wil samenvoegen met de commit hieronder?", - "Squash": "Squash", "PickCommitTooltip": "Kies commit (wanneer midden in rebase)", "RevertCommit": "Commit ongedaan maken", "Reword": "Hernoem commit", @@ -78,25 +63,20 @@ "Undo": "Ongedaan maken", "UndoReflog": "Ongedaan maken (via reflog) (experimenteel)", "RedoReflog": "Redo (via reflog) (experimenteel)", - "Pop": "Pop", "Drop": "Laten vallen", "Apply": "Toepassen", "NoStashEntries": "Geen stash items", "StashDrop": "Stash laten vallen", "SureDropStashEntry": "Weet je het zeker dat je deze stash entry wil laten vallen?", - "StashPop": "Stash pop", "SurePopStashEntry": "Weet je zeker dat je deze stash entry wil poppen?", "StashApply": "Stash toepassen", "SureApplyStashEntry": "Weet je zeker dat je deze stash entry wil toepassen?", "NoTrackedStagedFilesStash": "Je hebt geen tracked/staged bestanden om te laten stashen", "StashChanges": "Stash veranderingen", - "RenameStash": "Rename stash", - "RenameStashPrompt": "Rename stash: {{.stashName}}", "OpenConfig": "Open config bestand", "EditConfig": "Verander config bestand", "ForcePush": "Forceer push", "ForcePushPrompt": "Jouw branch is afgeweken van de remote branch. Druk 'esc' om te annuleren, of 'enter' om geforceert te pushen.", - "ForcePushDisabled": "Your branch has diverged from the remote branch and you've disabled force pushing", "CheckForUpdate": "Check voor updates", "CheckingForUpdates": "Zoeken naar updates...", "OnLatestVersionErr": "Je hebt al de laatste versie", @@ -115,7 +95,6 @@ "UnsupportedGitService": "Niet-ondersteunde git-service", "CopyPullRequestURL": "Kopieer de URL van het pull-verzoek naar het klembord", "NoBranchOnRemote": "Deze branch bestaat niet op de remote. U moet het eerst naar de remote pushen.", - "Fetch": "Fetch", "NoAutomaticGitFetchTitle": "Geen automatische git fetch", "NoAutomaticGitFetchBody": "Lazygit kan niet \"git fetch\" uitvoeren in een privé repository, gebruik f in het branches paneel om \"git fetch\" manueel uit te voeren", "FileEnter": "Stage individuele hunks/lijnen", @@ -127,7 +106,6 @@ "ToggleStagingView": "Ga naar een ander paneel", "ReturnToFilesPanel": "Ga terug naar het bestanden paneel", "FastForward": "Fast-forward deze branch vanaf zijn upstream", - "FastForwarding": "Fast-forwarding", "FoundConflictsTitle": "Conflicten!", "PickHunk": "Kies stuk", "PickAllHunks": "Kies beide stukken", @@ -139,16 +117,9 @@ "CommitSummaryTitle": "Commit bericht", "LocalBranchesTitle": "Branches", "SearchTitle": "Zoek", - "TagsTitle": "Tags", - "MenuTitle": "Menu", - "RemotesTitle": "Remotes", - "RemoteBranchesTitle": "Remote branches", "PatchBuildingTitle": "Patch bouwen", "InformationTitle": "Informatie", - "SecondaryTitle": "Secondary", - "ReflogCommitsTitle": "Reflog", "ConflictsResolved": "Alle merge conflicten zijn opgelost. Wilt je verder gaan?", - "ConfirmMerge": "Weet je zeker dat je '{{.selectedBranch}}' in '{{.checkedOutBranch}}' wil mergen?", "FwdNoUpstream": "Kan niet de branch vooruitspoelen zonder upstream", "FwdCommitsToPush": "Je kan niet vooruitspoelen als de branch geen nieuwe commits heeft", "ErrorOccurred": "Er is iets fout gegaan! Zou je hier een issue aan willen maken", @@ -180,14 +151,12 @@ "PushingStatus": "Pushen", "FetchingStatus": "Fetchen", "SquashingStatus": "Squashen", - "FixingStatus": "Fixing up", "DeletingStatus": "Verwijderen", "MovingStatus": "Verplaatsen", "RebasingStatus": "Rebasen", "AmendingStatus": "Wijzigen", "CherryPickingStatus": "Cherry-picken", "UndoingStatus": "Ongedaan maken", - "RedoingStatus": "Redoing", "CheckingOutStatus": "Uitchecken", "CommitFiles": "Commit bestanden", "ViewItemFiles": "Bekijk gecommite bestanden", @@ -198,7 +167,6 @@ "DiscardFileChangesPrompt": "Weet je zeker dat je de wijzigingen van deze commit in dit bestand wilt weggooien? Als dit bestand is gecreëerd in deze commit dan zal dit bestand worden verwijdert", "DisabledForGPG": "Onderdelen niet beschikbaar voor gebruikers die GPG gebruiken", "CreateRepo": "Niet in een git repository. Creëer een nieuwe git repository? (y/n): ", - "AutoStashTitle": "Autostash?", "AutoStashPrompt": "Je moet je veranderingen stashen en poppen om ze over te brengen. Dit automatisch doen? (enter/esc)", "StashPrefix": "Auto-stashing veranderingen voor ", "Discard": "Bekijk 'veranderingen ongedaan maken' opties", @@ -234,7 +202,7 @@ "NoPatchError": "Nog geen patch gecreëerd. Om een patch te bouwen gebruik 'space' op een commit bestand of 'enter' om een spesiefieke lijnen toe te voegen", "EnterCommitFile": "Enter bestand om geselecteerde regels toe te voegen aan de patch", "ExitCustomPatchBuilder": "Sluit lijn-bij-lijn modus", - "EnterUpstream": "Enter upstream als '\u003cremote\u003e \u003cbranchnaam\u003e'", + "EnterUpstream": "Enter upstream als ' '", "ReturnToRemotesList": "Ga terug naar remotes lijst", "NewRemote": "Voeg een nieuwe remote toe", "NewRemoteName": "Nieuwe remote name:", @@ -250,14 +218,11 @@ "SetUpstreamTitle": "Stel in als upstream branch", "SetUpstreamMessage": "Weet je zeker dat je de upstream branch van '{{.checkedOut}}' naar '{{.selected}}' wilt zetten", "EditRemoteTooltip": "Wijzig remote", - "TagCommit": "Tag commit", "TagNameTitle": "Tag naam:", "PushTagTitle": "Remote om tag '{{.tagName}}' te pushen naar:", - "PushTag": "Push tag", "NewTag": "Creëer tag", "FetchRemoteTooltip": "Fetch remote", "FetchingRemoteStatus": "Remote fetchen", - "CheckoutCommit": "Checkout commit", "SureCheckoutThisCommit": "Weet je zeker dat je deze commit wil uitchecken?", "GitFlowOptions": "Laat git-flow opties zien", "NotAGitFlowBranch": "Dit lijkt geen git flow branch te zijn", @@ -296,7 +261,6 @@ "FilteringMenuTitle": "Filteren", "MustExitFilterModeTitle": "Command niet beschikbaar", "MustExitFilterModePrompt": "Command niet beschikbaar in filter modus. Sluit filter modus?", - "Diff": "Diff", "EnterRefToDiff": "Vul in ref naar diff", "EnterRefName": "Vul in ref:", "ExitDiffMode": "Sluit diff mode", @@ -327,5 +291,9 @@ "CreatePullRequestOptions": "Bekijk opties voor pull-aanvraag", "CreatePullRequest": "Maak een pull-request", "ConfirmRevertCommit": "Weet u zeker dat u {{.selectedCommit}} ongedaan wilt maken?", - "ToggleRangeSelect": "Toggle drag selecteer" + "ToggleRangeSelect": "Toggle drag selecteer", + "Actions": {}, + "Bisect": {}, + "Log": {}, + "BreakingChangesByVersion": {} } diff --git a/pkg/i18n/translations/pl.json b/pkg/i18n/translations/pl.json index a32f9e30cf8..44ad7bdcdbd 100644 --- a/pkg/i18n/translations/pl.json +++ b/pkg/i18n/translations/pl.json @@ -5,14 +5,12 @@ "BranchesTitle": "Gałęzie", "CommitsTitle": "Commity", "StashTitle": "Schowek", - "SnakeTitle": "Snake", "EasterEgg": "Jajko wielkanocne", "UnstagedChanges": "Zmiany niezatwierdzone", "StagedChanges": "Zmiany zatwierdzone", "MainTitle": "Główny", "StagingTitle": "Panel główny (zatwierdzanie)", "MergingTitle": "Panel główny (scalanie)", - "MergeConfirmTitle": "Scalanie", "NormalTitle": "Panel główny (normalny)", "LogTitle": "Dziennik", "CommitSummary": "Podsumowanie commita", @@ -21,7 +19,6 @@ "CredentialsPassphrase": "Wprowadź hasło do klucza SSH", "CredentialsPIN": "Wprowadź PIN do klucza SSH", "PassUnameWrong": "Niewłaściwe hasło, fraza lub nazwa użytkownika", - "Commit": "Commit", "CommitTooltip": "Zatwierdź zmiany zatwierdzone.", "AmendLastCommit": "Popraw ostatni commit", "AmendLastCommitTitle": "Popraw ostatni commit", @@ -29,16 +26,14 @@ "NoCommitToAmend": "Brak commita do poprawienia.", "CommitChangesWithEditor": "Zatwierdź zmiany używając edytora git", "FindBaseCommitForFixup": "Znajdź bazowy commit do poprawki", - "FindBaseCommitForFixupTooltip": "Znajdź commit, na którym opierają się Twoje obecne zmiany, w celu poprawienia/zmiany commita. To pozwala Ci uniknąć przeglądania commitów w Twojej gałęzi jeden po drugim, aby zobaczyć, który commit powinien być poprawiony/zmieniony. Zobacz dokumentację: \u003chttps://github.com/jesseduffield/lazygit/tree/master/docs/Fixup_Commits.md\u003e", + "FindBaseCommitForFixupTooltip": "Znajdź commit, na którym opierają się Twoje obecne zmiany, w celu poprawienia/zmiany commita. To pozwala Ci uniknąć przeglądania commitów w Twojej gałęzi jeden po drugim, aby zobaczyć, który commit powinien być poprawiony/zmieniony. Zobacz dokumentację: ", "NoBaseCommitsFound": "Nie znaleziono bazowych commitów", "MultipleBaseCommitsFoundStaged": "Znaleziono wiele bazowych commitów. (Spróbuj zatwierdzić mniej zmian naraz)", "MultipleBaseCommitsFoundUnstaged": "Znaleziono wiele bazowych commitów. (Spróbuj zatwierdzić część zmian)", "BaseCommitIsAlreadyOnMainBranch": "Bazowy commit dla tej zmiany jest już na gałęzi głównej", "BaseCommitIsNotInCurrentView": "Bazowy commit nie jest w bieżącym widoku", "HunksWithOnlyAddedLinesWarning": "Istnieją zakresy tylko z dodanymi liniami w różnicach; uważaj, aby sprawdzić, czy te należą do znalezionego bazowego commita.\n\nKontynuować?", - "StatusTitle": "Status", "GlobalTitle": "Globalne skróty klawiszowe", - "Menu": "Menu", "Execute": "Wykonaj", "Stage": "Zatwierdź", "StageTooltip": "Przełącz zatwierdzenie dla wybranego pliku.", @@ -140,8 +135,8 @@ "AddCoAuthor": "Dodaj współautora", "AmendCommitAttribute": "Popraw atrybut commita", "AmendCommitAttributeTooltip": "Ustaw/Resetuj autora commita lub ustaw współautora.", - "SetAuthorPromptTitle": "Ustaw autora (musi wyglądać jak 'Imię \u003cEmail\u003e')", - "AddCoAuthorPromptTitle": "Dodaj współautora (musi wyglądać jak 'Imię \u003cEmail\u003e')", + "SetAuthorPromptTitle": "Ustaw autora (musi wyglądać jak 'Imię ')", + "AddCoAuthorPromptTitle": "Dodaj współautora (musi wyglądać jak 'Imię ')", "AddCoAuthorTooltip": "Dodaj współautora używając metadanych Github/Gitlab Co-authored-by.", "SureResetCommitAuthor": "Pole autora tego commita zostanie zaktualizowane, aby pasowało do skonfigurowanego użytkownika. To również odświeży znacznik czasu autora. Kontynuować?", "RewordCommitEditor": "Przeformułuj za pomocą edytora", @@ -196,8 +191,6 @@ "ConfirmQuitDuringUpdate": "Aktualizacja jest w toku. Czy na pewno chcesz wyjść?", "MergeToolTitle": "Narzędzie scalania", "MergeToolPrompt": "Czy na pewno chcesz otworzyć `git mergetool`?", - "IntroPopupMessage": "\nThanks for using lazygit! Seriously you rock. Three things to share with you:\n\n 1) If you want to learn about lazygit's features, watch this vid:\n https://youtu.be/CPLdltN7wgE\n\n 2) Be sure to read the latest release notes at:\n https://github.com/jesseduffield/lazygit/releases\n\n 3) If you're using git, that makes you a programmer! With your help we can make\n lazygit better, so consider becoming a contributor and joining the fun at\n https://github.com/jesseduffield/lazygit\n You can also sponsor me and tell me what to work on by clicking the donate\n button at the bottom right.\n Or even just star the repo to share the love!\n", - "DeprecatedEditConfigWarning": "\n### Deprecated config warning ###\n\nThe following config settings are deprecated and will be removed in a future\nversion:\n{{configs}}\n\nPlease refer to\n\n https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#configuring-file-editing\n\nfor up-to-date information how to configure your editor.\n\n", "GitconfigParseErr": "Gogit nie mógł przetworzyć pliku gitconfig z powodu obecności niezacytowanych znaków '\\'. Usunięcie ich powinno rozwiązać problem.", "EditFile": "Edytuj plik", "EditFileTooltip": "Otwórz plik w zewnętrznym edytorze.", @@ -256,23 +249,19 @@ "LocalBranchesTitle": "Lokalne gałęzie", "SearchTitle": "Szukaj", "TagsTitle": "Tagi", - "MenuTitle": "Menu", "CommitMenuTitle": "Menu commita", "RemotesTitle": "Zdalne", "RemoteBranchesTitle": "Zdalne gałęzie", "PatchBuildingTitle": "Główny panel (budowanie łatki)", "InformationTitle": "Informacje", "SecondaryTitle": "Dodatkowy", - "ReflogCommitsTitle": "Reflog", "ConflictsResolved": "Wszystkie konflikty scalania rozwiązane. Kontynuować?", "Continue": "Kontynuuj", - "RebasingTitle": "Rebase '{{.checkedOutBranch}}'", "RebasingFromBaseCommitTitle": "Rebase '{{.checkedOutBranch}}' od oznaczonego commita bazowego", "SimpleRebase": "Prosty rebase na '{{.ref}}'", "InteractiveRebase": "Interaktywny rebase na '{{.ref}}'", "InteractiveRebaseTooltip": "Rozpocznij interaktywny rebase z przerwaniem na początku, abyś mógł zaktualizować commity TODO przed kontynuacją.", "MustSelectTodoCommits": "Podczas rebase ta akcja działa tylko na zaznaczonych commitach TODO.", - "ConfirmMerge": "Czy na pewno chcesz scalić '{{.selectedBranch}}' z '{{.checkedOutBranch}}'?", "FwdNoUpstream": "Nie można szybko przewinąć gałęzi bez źródła", "FwdNoLocalUpstream": "Nie można szybko przewinąć gałęzi, której zdalne źródło nie jest zarejestrowane lokalnie", "FwdCommitsToPush": "Nie można szybko przewinąć gałęzi z commitami do wysłania", @@ -288,7 +277,6 @@ "CherryPickCopyRangeTooltip": "Oznacz commity jako skopiowane od ostatniego skopiowanego commita do wybranego commita.", "PasteCommits": "Wklej (cherry-pick)", "SureCherryPick": "Czy na pewno chcesz cherry-pick skopiowane commity na tę gałąź?", - "CherryPick": "Cherry-pick", "CannotCherryPickNonCommit": "Nie można cherry-pick tego rodzaju wpisu TODO", "CannotCherryPickMergeCommit": "Cherry-pick commitów scalających nie jest obsługiwane", "Donate": "Wesprzyj", @@ -322,7 +310,6 @@ "LowercaseRebasingStatus": "rebase", "LowercaseMergingStatus": "scalanie", "AmendingStatus": "Poprawianie", - "CherryPickingStatus": "Cherry-picking", "UndoingStatus": "Cofanie", "RedoingStatus": "Ponawianie", "CheckingOutStatus": "Sprawdzanie", @@ -348,7 +335,6 @@ "InitialBranch": "Nazwa gałęzi? (pozostaw puste dla domyślnej gita): ", "NoRecentRepositories": "Musisz otworzyć lazygit w repozytorium git. Brak ważnych ostatnich repozytoriów. Wyjście.", "IncorrectNotARepository": "Wartość 'notARepository' jest nieprawidłowa. Powinna być jedną z 'prompt', 'create', 'skip', lub 'quit'.", - "AutoStashTitle": "Autostash?", "AutoStashPrompt": "Musisz schować i wyciągnąć swoje zmiany, aby je przenieść. Zrobić to automatycznie? (enter/esc)", "StashPrefix": "Automatyczne chowanie zmian dla ", "Discard": "Odrzuć", @@ -365,9 +351,7 @@ "BranchDeleteTooltip": "Wyświetl opcje usuwania lokalnej/odległej gałęzi.", "TagDeleteTooltip": "Wyświetl opcje usuwania lokalnego/odległego tagu.", "Delete": "Usuń", - "Reset": "Reset", "ResetTooltip": "Wyświetl opcje resetu (miękki/mieszany/twardy) do wybranego elementu.", - "ViewResetOptions": "Reset", "FileResetOptionsTooltip": "Wyświetl opcje resetu dla drzewa roboczego (np. zniszczenie drzewa roboczego).", "CreateFixupCommit": "Utwórz commit fixup", "CreateFixupCommitTooltip": "Utwórz commit 'fixup!' dla wybranego commita. Później możesz nacisnąć `{{.squashAbove}}` na tym samym commicie, aby zastosować wszystkie powyższe commity fixup.", @@ -420,8 +404,8 @@ "EnterCommitFile": "Wejdź do pliku / Przełącz zwiń katalog", "EnterCommitFileTooltip": "Jeśli plik jest wybrany, wejdź do pliku, aby móc dodawać/usuwać poszczególne linie do niestandardowej łatki. Jeśli wybrany jest katalog, przełącz katalog.", "ExitCustomPatchBuilder": "Wyjdź z budowniczego niestandardowej łatki", - "EnterUpstream": "Wprowadź upstream jako '\u003czdalny\u003e \u003cnazwa gałęzi\u003e'", - "InvalidUpstream": "Nieprawidłowy upstream. Musi być w formacie '\u003czdalny\u003e \u003cnazwa gałęzi\u003e'", + "EnterUpstream": "Wprowadź upstream jako ' '", + "InvalidUpstream": "Nieprawidłowy upstream. Musi być w formacie ' '", "ReturnToRemotesList": "Wróć do listy zdalnych", "NewRemote": "Nowy zdalny", "NewRemoteName": "Nowa nazwa zdalnego:", @@ -488,14 +472,12 @@ "PrevScreenMode": "Poprzedni tryb ekranu", "StartSearch": "Szukaj w bieżącym widoku po tekście", "StartFilter": "Filtruj bieżący widok po tekście", - "Panel": "Panel", "Keybindings": "Skróty klawiszowe", - "KeybindingsLegend": "Legenda: `\u003cc-b\u003e` oznacza ctrl+b, `\u003ca-b\u003e` oznacza alt+b, `B` oznacza shift+b", + "KeybindingsLegend": "Legenda: `` oznacza ctrl+b, `` oznacza alt+b, `B` oznacza shift+b", "KeybindingsMenuSectionLocal": "Lokalne", "KeybindingsMenuSectionGlobal": "Globalne", "KeybindingsMenuSectionNavigation": "Nawigacja", "RenameBranch": "Zmień nazwę gałęzi", - "Upstream": "Upstream", "UpstreamTooltip": "Pokaż opcje upstream dla wybranej gałęzi, np. ustawianie/usuwanie upstream i resetowanie do upstream.", "BranchUpstreamOptionsTitle": "Opcje upstream", "ViewBranchUpstreamOptions": "Pokaż opcje upstream", @@ -665,8 +647,7 @@ "UpstreamGone": "(upstream zniknął)", "NukeDescription": "Jeśli chcesz, aby wszystkie zmiany w drzewie pracy zniknęły, to jest sposób na to. Jeśli są brudne zmiany w submodule, to zostaną one zapisane w submodule(s).", "DiscardStagedChangesDescription": "To stworzy nowy wpis stash zawierający tylko pliki w stanie staged, a następnie go usunie, tak że drzewo pracy zostanie tylko ze zmianami niezatwierdzonymi", - "EmptyOutput": "\u003cPuste wyjście\u003e", - "Patch": "Patch", + "EmptyOutput": "", "CustomPatch": "Niestandardowy patch", "CommitsCopied": "commitów skopiowanych", "CommitCopied": "commit skopiowany", @@ -728,7 +709,6 @@ "LcWorktree": "drzewo pracy", "ChangingDirectoryTo": "Zmiana katalogu na {{.path}}", "Name": "Nazwa", - "Branch": "Branch", "Path": "Ścieżka", "MarkedBaseCommitStatus": "Oznaczono bazowy commit dla rebase", "MarkAsBaseCommit": "Oznacz jako bazowy commit dla rebase", @@ -748,7 +728,7 @@ "SelectedItemIsNotABranch": "Wybrany element nie jest branch'em", "SelectedItemDoesNotHaveFiles": "Wybrany element nie ma plików do wyświetlenia", "RangeSelectNotSupportedForSubmodules": "Zaznaczanie zakresu nie jest wspierane dla submodułów", - "OldCherryPickKeyWarning": "Klawisz 'c' nie jest już domyślnym klawiszem do kopiowania commitów do cherry pick. Proszę użyj `{{.copy}}` zamiast tego (i `{{.paste}}` aby wkleić). Powodem tej zmiany jest to, że klawisz 'v' do wybierania zakresu linii podczas stagingu jest teraz używany również do wybierania zakresu linii w każdym widoku listy, co oznacza, że musieliśmy znaleźć nowy klawisz do wklejania commitów, i jeśli zamierzamy teraz używać `{{.paste}}` do wklejania commitów, możemy równie dobrze użyć `{{.copy}}` do ich kopiowania. Jeśli chcesz skonfigurować klawisze, aby uzyskać stare zachowanie, ustaw następujące w swojej konfiguracji:\n\nkeybinding:\n universal:\n toggleRangeSelect: \u003ccoś innego niż v\u003e\n commits:\n cherryPickCopy: 'c'\n pasteCommits: 'v'", + "OldCherryPickKeyWarning": "Klawisz 'c' nie jest już domyślnym klawiszem do kopiowania commitów do cherry pick. Proszę użyj `{{.copy}}` zamiast tego (i `{{.paste}}` aby wkleić). Powodem tej zmiany jest to, że klawisz 'v' do wybierania zakresu linii podczas stagingu jest teraz używany również do wybierania zakresu linii w każdym widoku listy, co oznacza, że musieliśmy znaleźć nowy klawisz do wklejania commitów, i jeśli zamierzamy teraz używać `{{.paste}}` do wklejania commitów, możemy równie dobrze użyć `{{.copy}}` do ich kopiowania. Jeśli chcesz skonfigurować klawisze, aby uzyskać stare zachowanie, ustaw następujące w swojej konfiguracji:\n\nkeybinding:\n universal:\n toggleRangeSelect: \n commits:\n cherryPickCopy: 'c'\n pasteCommits: 'v'", "Actions": { "CheckoutCommit": "Przełącz commit", "CheckoutTag": "Przełącz tag", @@ -868,7 +848,6 @@ "ChooseTerms": "Wybierz terminy bisect", "OldTermPrompt": "Termin dla starego/dobrego commita:", "NewTermPrompt": "Termin dla nowego/złego commita:", - "BisectMenuTitle": "Bisect", "Mark": "Oznacz bieżący commit (%s) jako %s", "SkipCurrent": "Pomiń bieżący commit (%s)", "SkipSelected": "Pomiń wybrany commit (%s)", @@ -892,8 +871,8 @@ "EditRebaseFromBaseCommit": "Rozpoczynanie interaktywnego rebazowania od '{{.baseCommit}}' na '{{.targetBranchName}}" }, "BreakingChangesTitle": "Zmiany przełomowe", - "BreakingChangesMessage": "Aktualizujesz do nowej wersji lazygit, która zawiera zmiany przełomowe. Proszę przejrzeć poniższe notatki i zaktualizować swoją konfigurację, jeśli jest to konieczne.\nAby uzyskać więcej informacji, zobacz pełne notatki do wydania na \u003chttps://github.com/jesseduffield/lazygit/releases\u003e.", + "BreakingChangesMessage": "Aktualizujesz do nowej wersji lazygit, która zawiera zmiany przełomowe. Proszę przejrzeć poniższe notatki i zaktualizować swoją konfigurację, jeśli jest to konieczne.\nAby uzyskać więcej informacji, zobacz pełne notatki do wydania na .", "BreakingChangesByVersion": { - "0.41.0": "- Gdy naciśniesz 'g', aby wywołać menu resetu git, opcja 'mixed' jest teraz pierwsza i domyślna, a nie 'soft'. Jest to dlatego, że 'mixed' jest najczęściej używaną opcją.\n- Panel wiadomości commita teraz domyślnie zawija tekst (tj. dodaje znaki nowej linii, gdy osiągniesz margines). Możesz dostosować konfigurację w następujący sposób:\n\ngit:\n commit:\n autoWrapCommitMessage: true\n autoWrapWidth: 72\n\n- Klawisz 'v' był już używany w widoku staging do rozpoczęcia zaznaczania zakresu, ale teraz możesz go użyć do rozpoczęcia zaznaczania zakresu w dowolnym widoku. Niestety koliduje to z klawiszem 'v' dla wklejania commitów (cherry-pick), więc teraz wklejanie commitów odbywa się za pomocą 'shift+V', a dla spójności kopiowanie commitów odbywa się teraz za pomocą 'shift+C' zamiast 'c'. Zauważ, że klawisz 'v' to tylko jeden ze sposobów na rozpoczęcie zaznaczania zakresu: możesz zamiast tego użyć shift+góra/dół. Więc jeśli chcesz skonfigurować klawisze cherry-pick, aby uzyskać stare zachowanie, ustaw następujące w swojej konfiguracji:\n\nkeybinding:\n universal:\n toggleRangeSelect: \u003ccoś innego niż v\u003e\n commits:\n cherryPickCopy: 'c'\n pasteCommits: 'v'\n\n- Sciskanie fixupów za pomocą 'shift-S' teraz wywołuje menu, z domyślną opcją sciskania wszystkich commitów fixup w gałęzi. Oryginalne zachowanie sciskania tylko commitów fixup powyżej wybranego commita jest nadal dostępne jako druga opcja w tym menu.\n- Statusy ładowania push/pull/fetch są teraz wyświetlane przy gałęzi, a nie w popupie. Pozwala to np. na równoczesne fetchowanie wielu gałęzi i widzenie statusu dla każdej gałęzi.\n- Graf logu git w widoku commitów jest teraz zawsze wyświetlany domyślnie (wcześniej był wyświetlany tylko, gdy widok był maksymalizowany). Jeśli uznasz to za zbyt hałaśliwe, możesz to zmienić za pomocą ctrl+L -\u003e 'Pokaż graf git' -\u003e 'gdy maksymalizowany'\n\t " + "0.41.0": "- Gdy naciśniesz 'g', aby wywołać menu resetu git, opcja 'mixed' jest teraz pierwsza i domyślna, a nie 'soft'. Jest to dlatego, że 'mixed' jest najczęściej używaną opcją.\n- Panel wiadomości commita teraz domyślnie zawija tekst (tj. dodaje znaki nowej linii, gdy osiągniesz margines). Możesz dostosować konfigurację w następujący sposób:\n\ngit:\n commit:\n autoWrapCommitMessage: true\n autoWrapWidth: 72\n\n- Klawisz 'v' był już używany w widoku staging do rozpoczęcia zaznaczania zakresu, ale teraz możesz go użyć do rozpoczęcia zaznaczania zakresu w dowolnym widoku. Niestety koliduje to z klawiszem 'v' dla wklejania commitów (cherry-pick), więc teraz wklejanie commitów odbywa się za pomocą 'shift+V', a dla spójności kopiowanie commitów odbywa się teraz za pomocą 'shift+C' zamiast 'c'. Zauważ, że klawisz 'v' to tylko jeden ze sposobów na rozpoczęcie zaznaczania zakresu: możesz zamiast tego użyć shift+góra/dół. Więc jeśli chcesz skonfigurować klawisze cherry-pick, aby uzyskać stare zachowanie, ustaw następujące w swojej konfiguracji:\n\nkeybinding:\n universal:\n toggleRangeSelect: \n commits:\n cherryPickCopy: 'c'\n pasteCommits: 'v'\n\n- Sciskanie fixupów za pomocą 'shift-S' teraz wywołuje menu, z domyślną opcją sciskania wszystkich commitów fixup w gałęzi. Oryginalne zachowanie sciskania tylko commitów fixup powyżej wybranego commita jest nadal dostępne jako druga opcja w tym menu.\n- Statusy ładowania push/pull/fetch są teraz wyświetlane przy gałęzi, a nie w popupie. Pozwala to np. na równoczesne fetchowanie wielu gałęzi i widzenie statusu dla każdej gałęzi.\n- Graf logu git w widoku commitów jest teraz zawsze wyświetlany domyślnie (wcześniej był wyświetlany tylko, gdy widok był maksymalizowany). Jeśli uznasz to za zbyt hałaśliwe, możesz to zmienić za pomocą ctrl+L -> 'Pokaż graf git' -> 'gdy maksymalizowany'\n\t " } } diff --git a/pkg/i18n/translations/ru.json b/pkg/i18n/translations/ru.json index 3427532bff3..bafaf8fb32a 100644 --- a/pkg/i18n/translations/ru.json +++ b/pkg/i18n/translations/ru.json @@ -12,7 +12,6 @@ "MainTitle": "Главная", "StagingTitle": "Главная панель (Индексирование)", "MergingTitle": "Главная панель (Слияние)", - "MergeConfirmTitle": "Слияние", "NormalTitle": "Главная панель (Обычный)", "LogTitle": "Журнал", "CommitSummary": "Сводка коммита", @@ -82,7 +81,7 @@ "ResetAuthor": "Сброс автора коммита", "SetAuthor": "Установить автора", "AmendCommitAttribute": "Установить/убрать автора коммита", - "SetAuthorPromptTitle": "Установить автора (должно выглядеть как «Имя \u003cEmail\u003e»)", + "SetAuthorPromptTitle": "Установить автора (должно выглядеть как «Имя »)", "SureResetCommitAuthor": "Поле автора этого автора будет обновлено в соответствии с настроенным пользователем. Это также обновляет временную метку автора. Продолжить?", "RewordCommitEditor": "Переписать коммит с помощью редактора", "NoCommitsThisBranch": "Нет коммитов для этой ветки", @@ -191,7 +190,6 @@ "SimpleRebase": "Простая перебазировка на '{{.ref}}'", "InteractiveRebase": "Интерактивная перебазировка на '{{.ref}}'", "InteractiveRebaseTooltip": "Начать интерактивную перебазировку с перерыва в начале, чтобы можно было обновить TODO коммиты, прежде чем продолжить.", - "ConfirmMerge": "Вы уверены, что хотите to merge '{{.selectedBranch}}' into '{{.checkedOutBranch}}'?", "FwdNoUpstream": "Невозможно перемотать ветку без upstream-ветки", "FwdNoLocalUpstream": "Невозможно перемотать ветку. Удалённый репозитории не зарегистрирован локально", "FwdCommitsToPush": "Невозможно перемотать ветку с коммитами для отправки", @@ -302,8 +300,8 @@ "NoPatchError": "Патч ещё не создан. Чтобы начать сборку патча, используйте «пробел» в файле коммита или введите, чтобы добавить определённые строки.", "EnterCommitFile": "Введите файл, чтобы добавить выбранные строки в патч (или свернуть каталог переключения)", "ExitCustomPatchBuilder": "Выйти из сборщика пользовательских патчей", - "EnterUpstream": "Введите upstream как '\u003cremote\u003e \u003cbranchname\u003e'", - "InvalidUpstream": "Недействительный upstream. Должен быть в формате '\u003cremote\u003e \u003cbranchname\u003e'", + "EnterUpstream": "Введите upstream как ' '", + "InvalidUpstream": "Недействительный upstream. Должен быть в формате ' '", "ReturnToRemotesList": "Вернуться к списку удалённых репозитории", "NewRemote": "Добавить новую удалённую ветку", "NewRemoteName": "Название новой удалённой ветки", @@ -491,10 +489,9 @@ "RewordInEditorPrompt": "Вы уверены, что хотите перефразировать этот коммит вашем редакторе?", "CheckoutPrompt": "Вы уверены, что хотите переключить '%s'?", "HardResetAutostashPrompt": "Вы уверены, что хотите сделать жёсткий сброс на '%s'? При необходимости будет выполнен автосохранение в хранилище.", - "UpstreamGone": "(upstream gone)", "NukeDescription": "Если вы хотите, чтобы все изменения в рабочем дереве исчезли, это способ сделать это. Если есть какие-либо изменения подмодуля, эти изменения будут припрятаны в подмодуле(-ях).", "DiscardStagedChangesDescription": "Это создаст новую запись в хранилище, содержащую только проиндексированные файлы, а затем удалит её, так что в рабочем дереве останутся только непроиндексированные изменения.", - "EmptyOutput": "\u003cПустой вывод\u003e", + "EmptyOutput": "<Пустой вывод>", "Patch": "Патч", "CustomPatch": "Пользовательский патч", "CommitsCopied": "коммиты скопированы", @@ -630,5 +627,7 @@ "CompletePrompt": "Бинарный поиск завершён! Изменения внесённые следующим коммитом:\n\n%s\n\nСбросить 'git bisect' сейчас?", "CompletePromptIndeterminate": "Бинарный поиск завершён! Некоторые коммиты были пропущены, поэтому любое из следующих коммитов могло внести изменения::\n\n%s\n\nСбросить 'git bisect' сейчас?", "Bisecting": "Бинарный поиск" - } + }, + "Log": {}, + "BreakingChangesByVersion": {} } diff --git a/pkg/i18n/translations/zh-CN.json b/pkg/i18n/translations/zh-CN.json index 90f06b59384..9a3463a7775 100644 --- a/pkg/i18n/translations/zh-CN.json +++ b/pkg/i18n/translations/zh-CN.json @@ -57,7 +57,6 @@ "CloseCancel": "关闭", "Confirm": "确认", "Quit": "退出", - "CannotSquashOrFixupFirstCommit": "There's no commit below to squash into", "Fixup": "修正(fixup)", "SureFixupThisCommit": "您确定要“修正”此提交吗?它将合并到下面的提交中", "SureSquashThisCommit": "您确定要将这个提交压缩到下面的提交中吗?", @@ -88,8 +87,6 @@ "SureApplyStashEntry": "您确定要应用此贮藏条目?", "NoTrackedStagedFilesStash": "没有可以贮藏的已跟踪/暂存文件", "StashChanges": "贮藏更改", - "RenameStash": "Rename stash", - "RenameStashPrompt": "Rename stash: {{.stashName}}", "OpenConfig": "打开配置文件", "EditConfig": "编辑配置文件", "ForcePush": "强制推送", @@ -149,7 +146,6 @@ "SecondaryTitle": "次要", "ReflogCommitsTitle": "Reflog 页面", "ConflictsResolved": "已解决所有冲突。是否继续?", - "ConfirmMerge": "您确定要将分支 {{.selectedBranch}} 合并到 {{.checkedOutBranch}} 吗?", "FwdNoUpstream": "此分支没有上游,无法快进", "FwdNoLocalUpstream": "此分支的远程未在本地注册,无法快进", "FwdCommitsToPush": "此分支带有尚未推送的提交,无法快进", @@ -241,8 +237,8 @@ "NoPatchError": "尚未创建补丁。你可以在提交中的文件上按下“空格”或使用“回车”添加其中的特定行以开始构建补丁", "EnterCommitFile": "输入文件以将所选行添加到补丁中(或切换目录折叠)", "ExitCustomPatchBuilder": "退出逐行模式", - "EnterUpstream": "以这种格式输入上游:'\u003c远程仓库\u003e \u003c分支名称\u003e'", - "InvalidUpstream": "上游格式无效,格式应当为:'\u003cremote\u003e \u003cbranchname\u003e'", + "EnterUpstream": "以这种格式输入上游:'<远程仓库> <分支名称>'", + "InvalidUpstream": "上游格式无效,格式应当为:' '", "ReturnToRemotesList": "返回远程仓库列表", "NewRemote": "添加新的远程仓库", "NewRemoteName": "新远程仓库名称:", @@ -460,7 +456,6 @@ "UpdateRemote": "更新远程", "ApplyPatch": "应用补丁", "Stash": "贮藏 (Stash)", - "RenameStash": "Rename stash", "RemoveSubmodule": "删除子模块", "ResetSubmodule": "重置子模块", "AddSubmodule": "添加子模块", @@ -501,5 +496,7 @@ "CompleteTitle": "二分查找完成", "CompletePrompt": "二分查找完成!以下提交引入了此变更:\n\n%s\n\n您现在要重置 'git bisect' 吗?", "CompletePromptIndeterminate": "二分查找完成!一些提交被跳过了,所以下列提交中的任何一个都可能引入了此变更:\n\n%s\n\n您现在要重置 'git bisect' 吗?" - } + }, + "Log": {}, + "BreakingChangesByVersion": {} } diff --git a/pkg/i18n/translations/zh-TW.json b/pkg/i18n/translations/zh-TW.json index d7673a2aa25..497528cb0ca 100644 --- a/pkg/i18n/translations/zh-TW.json +++ b/pkg/i18n/translations/zh-TW.json @@ -12,7 +12,6 @@ "MainTitle": "主要", "StagingTitle": "主面板(預存)", "MergingTitle": "主面板(合併)", - "MergeConfirmTitle": "合併", "NormalTitle": "主面板(一般)", "LogTitle": "版本記錄", "CommitSummary": "提交摘要", @@ -82,7 +81,7 @@ "ResetAuthor": "重設作者", "SetAuthor": "設定作者", "AmendCommitAttribute": "設定/重設提交作者", - "SetAuthorPromptTitle": "設定作者(格式:「姓名 \u003c電子郵件\u003e」)", + "SetAuthorPromptTitle": "設定作者(格式:「姓名 <電子郵件>」)", "SureResetCommitAuthor": "為了符合已配置的使用者,此作者的提交欄位以及時間戳將被更新。是否繼續?", "RewordCommitEditor": "使用編輯器改寫提交", "NoCommitsThisBranch": "這個分支沒有提交", @@ -189,7 +188,6 @@ "SimpleRebase": "簡單變基 變基至 '{{.ref}}'", "InteractiveRebase": "互動變基 變基至 '{{.ref}}'", "InteractiveRebaseTooltip": "開始一個互動變基,以中斷開始,這樣你可以在繼續之前更新TODO提交", - "ConfirmMerge": "是否將 '{{.selectedBranch}}' 合併至 '{{.checkedOutBranch}}' ?", "FwdNoUpstream": "無法快進無上游分支", "FwdNoLocalUpstream": "無法快進尚未在本地註冊的遠端分支", "FwdCommitsToPush": "無法快進帶有尚未推送的提交的分支", @@ -299,8 +297,8 @@ "NoPatchError": "尚未建立補丁。要開始建立補丁,請在提交檔案上使用空格或輸入以添加特定行", "EnterCommitFile": "輸入檔案以將選定的行添加至補丁(或切換目錄折疊)", "ExitCustomPatchBuilder": "退出自訂補丁建立器", - "EnterUpstream": "輸入上游為 '\u003cremote\u003e \u003cbranchname\u003e'", - "InvalidUpstream": "無效的上游。必須符合 '\u003cremote\u003e \u003cbranchname\u003e' 的格式", + "EnterUpstream": "輸入上游為 ' '", + "InvalidUpstream": "無效的上游。必須符合 ' ' 的格式", "ReturnToRemotesList": "返回遠端列表", "NewRemote": "新增遠端", "NewRemoteName": "新遠端名稱:", @@ -343,7 +341,7 @@ "StartFilter": "搜尋", "Panel": "面板", "Keybindings": "鍵盤快捷鍵", - "KeybindingsLegend": "說明:`\u003cc-b\u003e` 表示 Ctrl+B、`\u003ca-b\u003e` 表示 Alt+B,`B`表示 Shift+B", + "KeybindingsLegend": "說明:`` 表示 Ctrl+B、`` 表示 Alt+B,`B`表示 Shift+B", "RenameBranch": "重新命名分支", "BranchUpstreamOptionsTitle": "上游分支設定", "ViewBranchUpstreamOptions": "檢視上游設定", @@ -489,7 +487,7 @@ "UpstreamGone": "(上游已經不存在)", "NukeDescription": "如果你想讓所有工作樹上的變更消失,這就是要做的方式。如果有未提交的子模組變更,它將把這些變更藏在子模組中。", "DiscardStagedChangesDescription": "這將創建一個新的存儲條目,其中只包含預存檔案,然後如果存儲條目不需要,將其刪除,因此工作樹僅保留未預存的變更。", - "EmptyOutput": "\u003c空輸出\u003e", + "EmptyOutput": "<空輸出>", "Patch": "補丁", "CustomPatch": "自定義補丁", "CommitsCopied": "提交已複製", @@ -666,5 +664,7 @@ "CompletePrompt": "二分查找完成!以下提交引入了更改:\n\n%s\n\n是否重設 `git bisect` ?", "CompletePromptIndeterminate": "二分查找完成!有一些提交被跳過,因此以下任何提交皆可能引進更改:\n\n%s\n\n是否重設 `git bisect`?", "Bisecting": "二分查找中" - } + }, + "Log": {}, + "BreakingChangesByVersion": {} } From b26ff43d9ef2bf6238bd24ddfb4dc5ede1ff2b1c Mon Sep 17 00:00:00 2001 From: "T." <3098462+part22@users.noreply.github.com> Date: Tue, 2 Jul 2024 14:29:01 -0400 Subject: [PATCH 132/157] Update tracking behaviour for branches created from remote branches The current behaviour when creating a new branch off of a remote branch is to always track the branch it was created from. For example, if a branch 'my_branch' is created off of the remote branch 'fix_crash_13', then 'my_branch' will be tracking the remote 'fix_crash_13' branch. It is common practice to have both the local and remote branches named the same when the local is tracking the remote one. Therefore, it is reasonable to expect that 'my_branch' should not track the remote 'fix_crash_13' branch. The new behaviour when creating a new branch off of a remote branch is to track the branch it was created from only if the branch names match. If the branch names DO NOT match then the newly created branch will not track the remote branch it was created from. For example, if a user creates a new branch 'fix_crash_13' off of the remote branch 'fix_crash_13', then the local 'fix_crash_13' branch will track the remote 'fix_crash_13' branch. However, if the user creates a new branch called 'other_branch_name' off of the remote branch 'fix_crash_13', then the local 'other_branch_name' branch will NOT track the remote 'fix_crash_13' branch. --- pkg/commands/git_commands/branch.go | 9 ++++ pkg/gui/controllers/helpers/refs_helper.go | 7 ++- ...nch_from_remote_tracking_different_name.go | 50 +++++++++++++++++++ ...w_branch_from_remote_tracking_same_name.go | 48 ++++++++++++++++++ pkg/integration/tests/test_list.go | 2 + 5 files changed, 115 insertions(+), 1 deletion(-) create mode 100644 pkg/integration/tests/branch/new_branch_from_remote_tracking_different_name.go create mode 100644 pkg/integration/tests/branch/new_branch_from_remote_tracking_same_name.go diff --git a/pkg/commands/git_commands/branch.go b/pkg/commands/git_commands/branch.go index 79e418d7f5e..bb065605c4f 100644 --- a/pkg/commands/git_commands/branch.go +++ b/pkg/commands/git_commands/branch.go @@ -28,6 +28,15 @@ func (self *BranchCommands) New(name string, base string) error { return self.cmd.New(cmdArgs).Run() } +func (self *BranchCommands) NewWithoutTracking(name string, base string) error { + cmdArgs := NewGitCmd("checkout"). + Arg("-b", name, base). + Arg("--no-track"). + ToArgv() + + return self.cmd.New(cmdArgs).Run() +} + // CreateWithUpstream creates a new branch with a given upstream, but without // checking it out func (self *BranchCommands) CreateWithUpstream(name string, upstream string) error { diff --git a/pkg/gui/controllers/helpers/refs_helper.go b/pkg/gui/controllers/helpers/refs_helper.go index 08c6e173a5f..095e9848b1b 100644 --- a/pkg/gui/controllers/helpers/refs_helper.go +++ b/pkg/gui/controllers/helpers/refs_helper.go @@ -279,7 +279,12 @@ func (self *RefsHelper) NewBranch(from string, fromFormattedName string, suggest InitialContent: suggestedBranchName, HandleConfirm: func(response string) error { self.c.LogAction(self.c.Tr.Actions.CreateBranch) - if err := self.c.Git().Branch.New(SanitizedBranchName(response), from); err != nil { + newBranchName := SanitizedBranchName(response) + newBranchFunc := self.c.Git().Branch.New + if newBranchName != suggestedBranchName { + newBranchFunc = self.c.Git().Branch.NewWithoutTracking + } + if err := newBranchFunc(newBranchName, from); err != nil { return err } diff --git a/pkg/integration/tests/branch/new_branch_from_remote_tracking_different_name.go b/pkg/integration/tests/branch/new_branch_from_remote_tracking_different_name.go new file mode 100644 index 00000000000..75cc2828096 --- /dev/null +++ b/pkg/integration/tests/branch/new_branch_from_remote_tracking_different_name.go @@ -0,0 +1,50 @@ +package branch + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var NewBranchFromRemoteTrackingDifferentName = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Set tracking information when creating a new branch from a remote branch", + ExtraCmdArgs: []string{}, + Skip: false, + SetupConfig: func(config *config.AppConfig) {}, + SetupRepo: func(shell *Shell) { + shell.EmptyCommit("commit") + shell.NewBranch("other_branch") + shell.CloneIntoRemote("origin") + shell.Checkout("master") + shell.RunCommand([]string{"git", "branch", "-D", "other_branch"}) + }, + Run: func(t *TestDriver, keys config.KeybindingConfig) { + t.Views().Remotes(). + Focus(). + Lines( + Contains("origin").IsSelected(), + ). + PressEnter() + + t.Views().RemoteBranches(). + IsFocused(). + Lines( + Contains("master").IsSelected(), + Contains("other_branch"), + ). + SelectNextItem(). + Press(keys.Universal.New) + + t.ExpectPopup().Prompt(). + Title(Equals("New branch name (branch is off of 'origin/other_branch')")). + Clear(). + Type("different_name"). + Confirm() + + t.Views().Branches(). + Focus(). + Lines( + Contains("different_name").DoesNotContain("✓"), + Contains("master"), + ) + }, +}) diff --git a/pkg/integration/tests/branch/new_branch_from_remote_tracking_same_name.go b/pkg/integration/tests/branch/new_branch_from_remote_tracking_same_name.go new file mode 100644 index 00000000000..753fd32fb9d --- /dev/null +++ b/pkg/integration/tests/branch/new_branch_from_remote_tracking_same_name.go @@ -0,0 +1,48 @@ +package branch + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var NewBranchFromRemoteTrackingSameName = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Set tracking information when creating a new branch from a remote branch", + ExtraCmdArgs: []string{}, + Skip: false, + SetupConfig: func(config *config.AppConfig) {}, + SetupRepo: func(shell *Shell) { + shell.EmptyCommit("commit") + shell.NewBranch("other_branch") + shell.CloneIntoRemote("origin") + shell.Checkout("master") + shell.RunCommand([]string{"git", "branch", "-D", "other_branch"}) + }, + Run: func(t *TestDriver, keys config.KeybindingConfig) { + t.Views().Remotes(). + Focus(). + Lines( + Contains("origin").IsSelected(), + ). + PressEnter() + + t.Views().RemoteBranches(). + IsFocused(). + Lines( + Contains("master").IsSelected(), + Contains("other_branch"), + ). + SelectNextItem(). + Press(keys.Universal.New) + + t.ExpectPopup().Prompt(). + Title(Equals("New branch name (branch is off of 'origin/other_branch')")). + Confirm() + + t.Views().Branches(). + Focus(). + Lines( + Contains("other_branch").Contains("✓"), + Contains("master"), + ) + }, +}) diff --git a/pkg/integration/tests/test_list.go b/pkg/integration/tests/test_list.go index 22072be977b..ee547e95007 100644 --- a/pkg/integration/tests/test_list.go +++ b/pkg/integration/tests/test_list.go @@ -42,6 +42,8 @@ var tests = []*components.IntegrationTest{ branch.Delete, branch.DeleteRemoteBranchWithCredentialPrompt, branch.DetachedHead, + branch.NewBranchFromRemoteTrackingDifferentName, + branch.NewBranchFromRemoteTrackingSameName, branch.OpenPullRequestNoUpstream, branch.OpenWithCliArg, branch.Rebase, From 4df8f87715790c6a9616051500d151e18c67237b Mon Sep 17 00:00:00 2001 From: fossdd Date: Tue, 30 Apr 2024 17:17:42 +0000 Subject: [PATCH 133/157] Upgrade to Alpine Linux v3.19 Alpine v3.15 is out-of-date since 2023-11-01 and is not getting any security updates anymore: https://alpinelinux.org/releases/ --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 5945044688d..6ddba841476 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,7 +9,7 @@ RUN go mod download COPY . . RUN CGO_ENABLED=0 GOOS=linux go build -FROM alpine:3.15 +FROM alpine:3.19 RUN apk add --no-cache -U git xdg-utils WORKDIR /go/src/github.com/jesseduffield/lazygit/ COPY --from=build /go/src/github.com/jesseduffield/lazygit ./ From 08bd36ea783ca0709d2900220a38864c26b73109 Mon Sep 17 00:00:00 2001 From: Scott McKendry <39483124+scottmckendry@users.noreply.github.com> Date: Sat, 2 Dec 2023 11:28:00 +1300 Subject: [PATCH 134/157] Add bicep & bicepparam icons --- pkg/gui/presentation/icons/file_icons.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/pkg/gui/presentation/icons/file_icons.go b/pkg/gui/presentation/icons/file_icons.go index 05832c55db8..cdc284df506 100644 --- a/pkg/gui/presentation/icons/file_icons.go +++ b/pkg/gui/presentation/icons/file_icons.go @@ -98,6 +98,8 @@ var extIconMap = map[string]IconProperties{ ".csv": {Icon: "\uf1c3", Color: 113}, //  ".csx": {Icon: "\U000f031b", Color: 58}, // 󰌛 ".cxx": {Icon: "\ue61d", Color: 74}, //  + ".bicep": {Icon: "\ue63b", Color: 32}, //  + ".bicepparam": {Icon: "\ue63b", Color: 103}, //  ".d": {Icon: "\ue7af", Color: 28}, //  ".dart": {Icon: "\ue798", Color: 25}, //  ".db": {Icon: "\uf1c0", Color: 188}, //  @@ -326,7 +328,12 @@ func patchFileIconsForNerdFontsV2() { extIconMap[".vue"] = IconProperties{Icon: "\ufd42", Color: 113} // ﵂ } -func IconForFile(name string, isSubmodule bool, isLinkedWorktree bool, isDirectory bool) IconProperties { +func IconForFile( + name string, + isSubmodule bool, + isLinkedWorktree bool, + isDirectory bool, +) IconProperties { base := filepath.Base(name) if icon, ok := nameIconMap[base]; ok { return icon From 2317dac7302227fc98e1434729efd0071845bcc8 Mon Sep 17 00:00:00 2001 From: Scott McKendry <39483124+scottmckendry@users.noreply.github.com> Date: Thu, 21 Dec 2023 16:39:36 +1300 Subject: [PATCH 135/157] fix formatting --- pkg/gui/presentation/icons/file_icons.go | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/pkg/gui/presentation/icons/file_icons.go b/pkg/gui/presentation/icons/file_icons.go index cdc284df506..fe63cfa29bb 100644 --- a/pkg/gui/presentation/icons/file_icons.go +++ b/pkg/gui/presentation/icons/file_icons.go @@ -328,12 +328,7 @@ func patchFileIconsForNerdFontsV2() { extIconMap[".vue"] = IconProperties{Icon: "\ufd42", Color: 113} // ﵂ } -func IconForFile( - name string, - isSubmodule bool, - isLinkedWorktree bool, - isDirectory bool, -) IconProperties { +func IconForFile(name string, isSubmodule bool, isLinkedWorktree bool, isDirectory bool) IconProperties { base := filepath.Base(name) if icon, ok := nameIconMap[base]; ok { return icon From 5959f7bc8ef76d2a79e6c46ecd7039529337f2fc Mon Sep 17 00:00:00 2001 From: Elliot Cubit Date: Tue, 9 Apr 2024 15:41:26 -0400 Subject: [PATCH 136/157] Allow setting a default name when creating new branches --- docs/Config.md | 18 ++++++++++ pkg/config/user_config.go | 3 ++ pkg/gui/controllers/helpers/refs_helper.go | 4 +++ .../tests/commit/new_branch_with_prefix.go | 33 +++++++++++++++++++ pkg/integration/tests/test_list.go | 1 + schema/config.json | 4 +++ 6 files changed, 63 insertions(+) create mode 100644 pkg/integration/tests/commit/new_branch_with_prefix.go diff --git a/docs/Config.md b/docs/Config.md index 358e7be5b60..8506f7aed46 100644 --- a/docs/Config.md +++ b/docs/Config.md @@ -323,6 +323,9 @@ git: # Replace directive. E.g. for 'feature/AB-123' to start the commit message with 'AB-123 ' use "[$1] " replace: "" + # See https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#predefined-branch-name-prefix + branchPrefix: "" + # If true, parse emoji strings in commit messages e.g. render :rocket: as 🚀 # (This should really be under 'gui', not 'git') parseEmoji: false @@ -885,6 +888,21 @@ git: replace: '[$1] ' ``` +## Predefined branch name prefix + +In situations where certain naming pattern is used for branches, this can be used to populate new branch creation with a static prefix. + +Example: + +Some branches: +- jsmith/AB-123 +- cwilson/AB-125 + +```yaml +git: + branchPrefix: "firstlast/" +``` + ## Custom git log command You can override the `git log` command that's used to render the log of the selected branch like so: diff --git a/pkg/config/user_config.go b/pkg/config/user_config.go index b5bccba45c1..c0613865e9f 100644 --- a/pkg/config/user_config.go +++ b/pkg/config/user_config.go @@ -236,6 +236,8 @@ type GitConfig struct { CommitPrefix *CommitPrefixConfig `yaml:"commitPrefix"` // See https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#predefined-commit-message-prefix CommitPrefixes map[string]CommitPrefixConfig `yaml:"commitPrefixes"` + // See https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#predefined-branch-name-prefix + BranchPrefix string `yaml:"branchPrefix"` // If true, parse emoji strings in commit messages e.g. render :rocket: as 🚀 // (This should really be under 'gui', not 'git') ParseEmoji bool `yaml:"parseEmoji"` @@ -750,6 +752,7 @@ func GetDefaultConfig() *UserConfig { AllBranchesLogCmd: "git log --graph --all --color=always --abbrev-commit --decorate --date=relative --pretty=medium", DisableForcePushing: false, CommitPrefixes: map[string]CommitPrefixConfig(nil), + BranchPrefix: "", ParseEmoji: false, TruncateCopiedCommitHashesTo: 12, }, diff --git a/pkg/gui/controllers/helpers/refs_helper.go b/pkg/gui/controllers/helpers/refs_helper.go index 095e9848b1b..f471f57e2fc 100644 --- a/pkg/gui/controllers/helpers/refs_helper.go +++ b/pkg/gui/controllers/helpers/refs_helper.go @@ -274,6 +274,10 @@ func (self *RefsHelper) NewBranch(from string, fromFormattedName string, suggest }, ) + if suggestedBranchName == "" { + suggestedBranchName = self.c.UserConfig.Git.BranchPrefix + } + return self.c.Prompt(types.PromptOpts{ Title: message, InitialContent: suggestedBranchName, diff --git a/pkg/integration/tests/commit/new_branch_with_prefix.go b/pkg/integration/tests/commit/new_branch_with_prefix.go new file mode 100644 index 00000000000..21381630e75 --- /dev/null +++ b/pkg/integration/tests/commit/new_branch_with_prefix.go @@ -0,0 +1,33 @@ +package commit + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var NewBranchWithPrefix = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Creating a new branch from a commit with a default name", + ExtraCmdArgs: []string{}, + Skip: false, + SetupConfig: func(cfg *config.AppConfig) { + cfg.UserConfig.Git.BranchPrefix = "myprefix/" + }, + SetupRepo: func(shell *Shell) { + shell. + EmptyCommit("commit 1") + }, + Run: func(t *TestDriver, keys config.KeybindingConfig) { + t.Views().Commits(). + Focus(). + Lines( + Contains("commit 1").IsSelected(), + ). + SelectNextItem(). + Press(keys.Universal.New). + Tap(func() { + branchName := "my-branch-name" + t.ExpectPopup().Prompt().Title(Contains("New branch name")).Type(branchName).Confirm() + t.Git().CurrentBranchName("myprefix/" + branchName) + }) + }, +}) diff --git a/pkg/integration/tests/test_list.go b/pkg/integration/tests/test_list.go index ee547e95007..cbd3471e5a5 100644 --- a/pkg/integration/tests/test_list.go +++ b/pkg/integration/tests/test_list.go @@ -92,6 +92,7 @@ var tests = []*components.IntegrationTest{ commit.History, commit.HistoryComplex, commit.NewBranch, + commit.NewBranchWithPrefix, commit.PasteCommitMessage, commit.PasteCommitMessageOverExisting, commit.PreserveCommitMessage, diff --git a/schema/config.json b/schema/config.json index 580765c0f9c..cf67f78c8fc 100644 --- a/schema/config.json +++ b/schema/config.json @@ -638,6 +638,10 @@ "type": "object", "description": "See https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#predefined-commit-message-prefix" }, + "branchPrefix": { + "type": "string", + "description": "See https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md#predefined-branch-name-prefix" + }, "parseEmoji": { "type": "boolean", "description": "If true, parse emoji strings in commit messages e.g. render :rocket: as 🚀\n(This should really be under 'gui', not 'git')", From ac30aee1b82e6e5e32fde0e24ef4ef5815643931 Mon Sep 17 00:00:00 2001 From: kyu08 <49891479+kyu08@users.noreply.github.com> Date: Thu, 23 May 2024 23:58:13 +0900 Subject: [PATCH 137/157] Bump `actions/checkout`, `actions/setup-go`, `actions/cache/restore`, `actions/cache/save` --- .github/workflows/cd.yml | 4 ++-- .github/workflows/ci.yml | 28 ++++++++++++++-------------- .github/workflows/sponsors.yml | 2 +- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index 823f2bc8076..0b5b7d980e5 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -10,11 +10,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Unshallow repo run: git fetch --prune --unshallow - name: Setup Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: 1.22.x - name: Run goreleaser diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f6e2af2607d..64c890894c8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,9 +28,9 @@ jobs: GOFLAGS: -mod=vendor steps: - name: Checkout code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: 1.22.x - name: Test code @@ -61,11 +61,11 @@ jobs: GOFLAGS: -mod=vendor steps: - name: Checkout code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Restore Git cache if: matrix.git-version != 'latest' id: cache-git-restore - uses: actions/cache/restore@v3 + uses: actions/cache/restore@v4 with: path: ~/git-${{matrix.git-version}} key: ${{runner.os}}-git-${{matrix.git-version}} @@ -82,12 +82,12 @@ jobs: run: sudo make -C "$HOME/git-${{matrix.git-version}}" -j install - name: Save Git cache if: steps.cache-git-restore.outputs.cache-hit != 'true' && matrix.git-version != 'latest' - uses: actions/cache/save@v3 + uses: actions/cache/save@v4 with: path: ~/git-${{matrix.git-version}} key: ${{runner.os}}-git-${{matrix.git-version}} - name: Setup Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: 1.22.x - name: Print git version @@ -111,9 +111,9 @@ jobs: GOARCH: amd64 steps: - name: Checkout code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: 1.22.x - name: Build linux binary @@ -138,9 +138,9 @@ jobs: GOARCH: amd64 steps: - name: Checkout code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: 1.22.x - name: Check Vendor Directory @@ -164,9 +164,9 @@ jobs: GOFLAGS: -mod=vendor steps: - name: Checkout code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: 1.22.x - name: Lint @@ -192,10 +192,10 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: 1.22.x diff --git a/.github/workflows/sponsors.yml b/.github/workflows/sponsors.yml index d49731b29fa..1737d6ce178 100644 --- a/.github/workflows/sponsors.yml +++ b/.github/workflows/sponsors.yml @@ -9,7 +9,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout 🛎️ - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Generate Sponsors 💖 uses: JamesIves/github-sponsors-readme-action@v1.2.2 From a5eec48b4b8f51054ef1b909df76cfd13ab78d46 Mon Sep 17 00:00:00 2001 From: Brandon Date: Sat, 25 May 2024 15:47:15 -0700 Subject: [PATCH 138/157] Fix multi selection stage/discard not working for files with substrings --- pkg/gui/controllers/files_controller.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pkg/gui/controllers/files_controller.go b/pkg/gui/controllers/files_controller.go index 81d3f4cf0a4..39730ae0935 100644 --- a/pkg/gui/controllers/files_controller.go +++ b/pkg/gui/controllers/files_controller.go @@ -1009,10 +1009,14 @@ func normalisedSelectedNodes(selectedNodes []*filetree.FileNode) []*filetree.Fil func isDescendentOfSelectedNodes(node *filetree.FileNode, selectedNodes []*filetree.FileNode) bool { for _, selectedNode := range selectedNodes { + if selectedNode.IsFile() { + continue + } + selectedNodePath := selectedNode.GetPath() nodePath := node.GetPath() - if strings.HasPrefix(nodePath, selectedNodePath) && nodePath != selectedNodePath { + if strings.HasPrefix(nodePath, selectedNodePath+"/") { return true } } From 2e5b570bb69e2cb1c1622b2ecb65ccb8c97cbe9a Mon Sep 17 00:00:00 2001 From: Brandon Date: Sun, 26 May 2024 11:34:25 -0700 Subject: [PATCH 139/157] Add integration test --- pkg/integration/components/shell.go | 11 +++++ .../tests/file/stage_renamed_range_select.go | 43 +++++++++++++++++++ pkg/integration/tests/test_list.go | 1 + 3 files changed, 55 insertions(+) create mode 100644 pkg/integration/tests/file/stage_renamed_range_select.go diff --git a/pkg/integration/components/shell.go b/pkg/integration/components/shell.go index 01a9caf3a80..e38e0cd3fb6 100644 --- a/pkg/integration/components/shell.go +++ b/pkg/integration/components/shell.go @@ -134,6 +134,17 @@ func (self *Shell) UpdateFile(path string, content string) *Shell { return self } +func (self *Shell) Rename(path string, newPath string) *Shell { + fullPath := filepath.Join(self.dir, path) + newFullPath := filepath.Join(self.dir, newPath) + err := os.Rename(fullPath, newFullPath) + if err != nil { + self.fail(fmt.Sprintf("error renaming %s to %s\n%s", fullPath, newFullPath, err)) + } + + return self +} + func (self *Shell) NewBranch(name string) *Shell { return self.RunCommand([]string{"git", "checkout", "-b", name}) } diff --git a/pkg/integration/tests/file/stage_renamed_range_select.go b/pkg/integration/tests/file/stage_renamed_range_select.go new file mode 100644 index 00000000000..472d8ef11bc --- /dev/null +++ b/pkg/integration/tests/file/stage_renamed_range_select.go @@ -0,0 +1,43 @@ +package file + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var StageRenamedRangeSelect = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Stage a range of renamed files/folders using range select", + ExtraCmdArgs: []string{}, + Skip: false, + SetupConfig: func(config *config.AppConfig) { + }, + SetupRepo: func(shell *Shell) { + shell.CreateFileAndAdd("dir1/file-a", "A's content") + shell.CreateFileAndAdd("file-b", "B's content") + shell.Commit("first commit") + shell.Rename("dir1", "dir1_v2") + shell.Rename("file-b", "file-b_v2") + }, + Run: func(t *TestDriver, keys config.KeybindingConfig) { + t.Views().Files(). + IsFocused(). + Lines( + Contains("▼ dir1").IsSelected(), + Contains(" D").Contains("file-a"), + Contains("▼ dir1_v2"), + Contains(" ??").Contains("file-a"), + Contains(" D").Contains("file-b"), + Contains("??").Contains("file-b_v2"), + ). + // Select everything + Press(keys.Universal.ToggleRangeSelect). + NavigateToLine(Contains("file-b_v2")). + // Stage + PressPrimaryAction(). + Lines( + Contains("▼ dir1_v2"), + Contains(" R ").Contains("dir1/file-a → file-a"), + Contains("R ").Contains("file-b → file-b_v2").IsSelected(), + ) + }, +}) diff --git a/pkg/integration/tests/test_list.go b/pkg/integration/tests/test_list.go index cbd3471e5a5..ff2634d079d 100644 --- a/pkg/integration/tests/test_list.go +++ b/pkg/integration/tests/test_list.go @@ -161,6 +161,7 @@ var tests = []*components.IntegrationTest{ file.Gitignore, file.RememberCommitMessageAfterFail, file.StageRangeSelect, + file.StageRenamedRangeSelect, filter_and_search.FilterCommitFiles, filter_and_search.FilterFiles, filter_and_search.FilterFuzzy, From 38aa5b89ab10adeff83ae9e67d669268813bd2f1 Mon Sep 17 00:00:00 2001 From: Brandon Date: Tue, 28 May 2024 18:09:07 -0700 Subject: [PATCH 140/157] Simplify integration test --- pkg/integration/components/shell.go | 11 ----- .../tests/file/stage_children_range_select.go | 45 +++++++++++++++++++ .../tests/file/stage_renamed_range_select.go | 43 ------------------ pkg/integration/tests/test_list.go | 2 +- 4 files changed, 46 insertions(+), 55 deletions(-) create mode 100644 pkg/integration/tests/file/stage_children_range_select.go delete mode 100644 pkg/integration/tests/file/stage_renamed_range_select.go diff --git a/pkg/integration/components/shell.go b/pkg/integration/components/shell.go index e38e0cd3fb6..01a9caf3a80 100644 --- a/pkg/integration/components/shell.go +++ b/pkg/integration/components/shell.go @@ -134,17 +134,6 @@ func (self *Shell) UpdateFile(path string, content string) *Shell { return self } -func (self *Shell) Rename(path string, newPath string) *Shell { - fullPath := filepath.Join(self.dir, path) - newFullPath := filepath.Join(self.dir, newPath) - err := os.Rename(fullPath, newFullPath) - if err != nil { - self.fail(fmt.Sprintf("error renaming %s to %s\n%s", fullPath, newFullPath, err)) - } - - return self -} - func (self *Shell) NewBranch(name string) *Shell { return self.RunCommand([]string{"git", "checkout", "-b", name}) } diff --git a/pkg/integration/tests/file/stage_children_range_select.go b/pkg/integration/tests/file/stage_children_range_select.go new file mode 100644 index 00000000000..30a0a5e6bd0 --- /dev/null +++ b/pkg/integration/tests/file/stage_children_range_select.go @@ -0,0 +1,45 @@ +package file + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var StageChildrenRangeSelect = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Stage a range of files/folders and their children using range select", + ExtraCmdArgs: []string{}, + Skip: false, + SetupConfig: func(config *config.AppConfig) { + }, + SetupRepo: func(shell *Shell) { + shell.CreateFile("foo", "") + shell.CreateFile("foobar", "") + shell.CreateFile("baz/file", "") + shell.CreateFile("bazbam/file", "") + }, + Run: func(t *TestDriver, keys config.KeybindingConfig) { + t.Views().Files(). + IsFocused(). + Lines( + Contains("▼ baz").IsSelected(), + Contains(" ??").Contains("file"), + Contains("▼ bazbam"), + Contains(" ??").Contains("file"), + Contains("??").Contains("foo"), + Contains("??").Contains("foobar"), + ). + // Select everything + Press(keys.Universal.ToggleRangeSelect). + NavigateToLine(Contains("foobar")). + // Stage + PressPrimaryAction(). + Lines( + Contains("▼ baz").IsSelected(), + Contains(" A ").Contains("file").IsSelected(), + Contains("▼ bazbam").IsSelected(), + Contains(" A ").Contains("file").IsSelected(), + Contains("A ").Contains("foo").IsSelected(), + Contains("A ").Contains("foobar").IsSelected(), + ) + }, +}) diff --git a/pkg/integration/tests/file/stage_renamed_range_select.go b/pkg/integration/tests/file/stage_renamed_range_select.go deleted file mode 100644 index 472d8ef11bc..00000000000 --- a/pkg/integration/tests/file/stage_renamed_range_select.go +++ /dev/null @@ -1,43 +0,0 @@ -package file - -import ( - "github.com/jesseduffield/lazygit/pkg/config" - . "github.com/jesseduffield/lazygit/pkg/integration/components" -) - -var StageRenamedRangeSelect = NewIntegrationTest(NewIntegrationTestArgs{ - Description: "Stage a range of renamed files/folders using range select", - ExtraCmdArgs: []string{}, - Skip: false, - SetupConfig: func(config *config.AppConfig) { - }, - SetupRepo: func(shell *Shell) { - shell.CreateFileAndAdd("dir1/file-a", "A's content") - shell.CreateFileAndAdd("file-b", "B's content") - shell.Commit("first commit") - shell.Rename("dir1", "dir1_v2") - shell.Rename("file-b", "file-b_v2") - }, - Run: func(t *TestDriver, keys config.KeybindingConfig) { - t.Views().Files(). - IsFocused(). - Lines( - Contains("▼ dir1").IsSelected(), - Contains(" D").Contains("file-a"), - Contains("▼ dir1_v2"), - Contains(" ??").Contains("file-a"), - Contains(" D").Contains("file-b"), - Contains("??").Contains("file-b_v2"), - ). - // Select everything - Press(keys.Universal.ToggleRangeSelect). - NavigateToLine(Contains("file-b_v2")). - // Stage - PressPrimaryAction(). - Lines( - Contains("▼ dir1_v2"), - Contains(" R ").Contains("dir1/file-a → file-a"), - Contains("R ").Contains("file-b → file-b_v2").IsSelected(), - ) - }, -}) diff --git a/pkg/integration/tests/test_list.go b/pkg/integration/tests/test_list.go index ff2634d079d..bfc0fe786c6 100644 --- a/pkg/integration/tests/test_list.go +++ b/pkg/integration/tests/test_list.go @@ -160,8 +160,8 @@ var tests = []*components.IntegrationTest{ file.DiscardVariousChangesRangeSelect, file.Gitignore, file.RememberCommitMessageAfterFail, + file.StageChildrenRangeSelect, file.StageRangeSelect, - file.StageRenamedRangeSelect, filter_and_search.FilterCommitFiles, filter_and_search.FilterFiles, filter_and_search.FilterFuzzy, From eae76a97e9e0272895ff1d44d5f2e1f078d30a96 Mon Sep 17 00:00:00 2001 From: Bryan Honof Date: Wed, 12 Jun 2024 14:24:32 +0200 Subject: [PATCH 141/157] docs: Add flox install --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index 3935f70eeee..a600e500c95 100644 --- a/README.md +++ b/README.md @@ -371,6 +371,16 @@ nix run nixpkgs#lazygit Or you can add lazygit to you configuration.nix in the environment.systemPackages section. More details can be found via NixOs search [page](https://search.nixos.org/). +### Flox + +Lazygit can be installed into a Flox environment as follows. + +```sh +flox install lazygit +``` + +More details about Flox can be found on [their website](https://flox.dev/). + ### FreeBSD ```sh From 8813587961c1d4e93a366b2a893996b6e36c328a Mon Sep 17 00:00:00 2001 From: Aleksei Larkov Date: Sun, 9 Jun 2024 22:13:07 +0300 Subject: [PATCH 142/157] Add Token credential request handling Asking for 2FA Token prompt when an additional authentication is configured for git over SSH --- pkg/commands/oscommands/cmd_obj_runner.go | 2 ++ pkg/commands/oscommands/cmd_obj_runner_test.go | 8 ++++++++ pkg/gui/controllers/helpers/credentials_helper.go | 2 ++ pkg/i18n/english.go | 2 ++ 4 files changed, 14 insertions(+) diff --git a/pkg/commands/oscommands/cmd_obj_runner.go b/pkg/commands/oscommands/cmd_obj_runner.go index 16257158e18..1dd6ab2b277 100644 --- a/pkg/commands/oscommands/cmd_obj_runner.go +++ b/pkg/commands/oscommands/cmd_obj_runner.go @@ -284,6 +284,7 @@ const ( Username Passphrase PIN + Token ) // Whenever we're asked for a password we just enter a newline, which will @@ -376,6 +377,7 @@ func (self *cmdObjRunner) getCheckForCredentialRequestFunc() func([]byte) (Crede `Username\s*for\s*'.+':`: Username, `Enter\s*passphrase\s*for\s*key\s*'.+':`: Passphrase, `Enter\s*PIN\s*for\s*.+\s*key\s*.+:`: PIN, + `.*2FA Token.*`: Token, } compiledPrompts := map[*regexp.Regexp]CredentialType{} diff --git a/pkg/commands/oscommands/cmd_obj_runner_test.go b/pkg/commands/oscommands/cmd_obj_runner_test.go index 31966cec1c9..c906cea3fa3 100644 --- a/pkg/commands/oscommands/cmd_obj_runner_test.go +++ b/pkg/commands/oscommands/cmd_obj_runner_test.go @@ -39,6 +39,8 @@ func TestProcessOutput(t *testing.T) { return "passphrase" case PIN: return "pin" + case Token: + return "token" default: panic("unexpected credential type") } @@ -92,6 +94,12 @@ func TestProcessOutput(t *testing.T) { output: "Enter PIN for key '123':", expectedToWrite: "pin", }, + { + name: "2FA token prompt", + promptUserForCredential: defaultPromptUserForCredential, + output: "testuser 2FA Token (citadel)", + expectedToWrite: "token", + }, { name: "username and password prompt", promptUserForCredential: defaultPromptUserForCredential, diff --git a/pkg/gui/controllers/helpers/credentials_helper.go b/pkg/gui/controllers/helpers/credentials_helper.go index 20fb5905202..6050c9be8a0 100644 --- a/pkg/gui/controllers/helpers/credentials_helper.go +++ b/pkg/gui/controllers/helpers/credentials_helper.go @@ -56,6 +56,8 @@ func (self *CredentialsHelper) getTitleAndMask(passOrUname oscommands.Credential return self.c.Tr.CredentialsPassphrase, true case oscommands.PIN: return self.c.Tr.CredentialsPIN, true + case oscommands.Token: + return self.c.Tr.CredentialsToken, true } // should never land here diff --git a/pkg/i18n/english.go b/pkg/i18n/english.go index 273dae5302b..62f429cde63 100644 --- a/pkg/i18n/english.go +++ b/pkg/i18n/english.go @@ -36,6 +36,7 @@ type TranslationSet struct { CredentialsPassword string CredentialsPassphrase string CredentialsPIN string + CredentialsToken string PassUnameWrong string Commit string CommitTooltip string @@ -1004,6 +1005,7 @@ func EnglishTranslationSet() *TranslationSet { CredentialsPassword: "Password", CredentialsPassphrase: "Enter passphrase for SSH key", CredentialsPIN: "Enter PIN for SSH key", + CredentialsToken: "Enter Token for SSH key", PassUnameWrong: "Password, passphrase and/or username wrong", Commit: "Commit", CommitTooltip: "Commit staged changes.", From be21328c69a2436d99f80c9247852641b20a08cc Mon Sep 17 00:00:00 2001 From: Martin Kock Date: Sat, 6 Jul 2024 21:59:10 +1000 Subject: [PATCH 143/157] Allow cycling between multiple log commands - Introduced a new optional user config command, allBranchesLogCmds - When pressing 'a' in the Status view, cycle between non-empty, non-identical log commands - There will always be at least one command to run, since allBranhesLogCmd has a default - Update documentation & write an integration test - Update translation string --- docs/Config.md | 3 ++- docs/keybindings/Keybindings_en.md | 2 +- pkg/commands/git_commands/branch.go | 16 +++++++++++- pkg/config/user_config.go | 5 +++- pkg/i18n/english.go | 2 +- pkg/integration/tests/status/log_cmd.go | 33 +++++++++++++++++++++++++ pkg/integration/tests/test_list.go | 1 + schema/config.json | 9 ++++++- 8 files changed, 65 insertions(+), 6 deletions(-) create mode 100644 pkg/integration/tests/status/log_cmd.go diff --git a/docs/Config.md b/docs/Config.md index 8506f7aed46..03501e8c2fe 100644 --- a/docs/Config.md +++ b/docs/Config.md @@ -306,7 +306,8 @@ git: # Command used when displaying the current branch git log in the main window branchLogCmd: git log --graph --color=always --abbrev-commit --decorate --date=relative --pretty=medium {{branchName}} -- - # Command used to display git log of all branches in the main window + # Command used to display git log of all branches in the main window. + # Deprecated: User `allBranchesLogCmds` instead. allBranchesLogCmd: git log --graph --all --color=always --abbrev-commit --decorate --date=relative --pretty=medium # If true, do not spawn a separate process when using GPG diff --git a/docs/keybindings/Keybindings_en.md b/docs/keybindings/Keybindings_en.md index 73104e994d3..eb88cb1829c 100644 --- a/docs/keybindings/Keybindings_en.md +++ b/docs/keybindings/Keybindings_en.md @@ -309,7 +309,7 @@ If you would instead like to start an interactive rebase from the selected commi | `` e `` | Edit config file | Open file in external editor. | | `` u `` | Check for update | | | `` `` | Switch to a recent repo | | -| `` a `` | Show all branch logs | | +| `` a `` | Show/cycle all branch logs | | ## Sub-commits diff --git a/pkg/commands/git_commands/branch.go b/pkg/commands/git_commands/branch.go index bb065605c4f..6c9aa874016 100644 --- a/pkg/commands/git_commands/branch.go +++ b/pkg/commands/git_commands/branch.go @@ -7,10 +7,12 @@ import ( "github.com/jesseduffield/lazygit/pkg/commands/oscommands" "github.com/jesseduffield/lazygit/pkg/utils" "github.com/mgutz/str" + "github.com/samber/lo" ) type BranchCommands struct { *GitCommon + allBranchesLogCmdIndex uint8 // keeps track of current all branches log command } func NewBranchCommands(gitCommon *GitCommon) *BranchCommands { @@ -244,5 +246,17 @@ func (self *BranchCommands) Merge(branchName string, opts MergeOpts) error { } func (self *BranchCommands) AllBranchesLogCmdObj() oscommands.ICmdObj { - return self.cmd.New(str.ToArgv(self.UserConfig.Git.AllBranchesLogCmd)).DontLog() + // Only choose between non-empty, non-identical commands + candidates := lo.Uniq(lo.WithoutEmpty(append([]string{ + self.UserConfig.Git.AllBranchesLogCmd, + }, + self.UserConfig.Git.AllBranchesLogCmds..., + ))) + + n := len(candidates) + + i := self.allBranchesLogCmdIndex + self.allBranchesLogCmdIndex = uint8((int(i) + 1) % n) + + return self.cmd.New(str.ToArgv(candidates[i])).DontLog() } diff --git a/pkg/config/user_config.go b/pkg/config/user_config.go index c0613865e9f..fbf513ea6f1 100644 --- a/pkg/config/user_config.go +++ b/pkg/config/user_config.go @@ -226,8 +226,11 @@ type GitConfig struct { FetchAll bool `yaml:"fetchAll"` // Command used when displaying the current branch git log in the main window BranchLogCmd string `yaml:"branchLogCmd"` - // Command used to display git log of all branches in the main window + // Command used to display git log of all branches in the main window. + // Deprecated: User `allBranchesLogCmds` instead. AllBranchesLogCmd string `yaml:"allBranchesLogCmd"` + // Commands used to display git log of all branches in the main window, they will be cycled in order of appearance + AllBranchesLogCmds []string `yaml:"allBranchesLogCmds"` // If true, do not spawn a separate process when using GPG OverrideGpg bool `yaml:"overrideGpg"` // If true, do not allow force pushes diff --git a/pkg/i18n/english.go b/pkg/i18n/english.go index 62f429cde63..d4c65620209 100644 --- a/pkg/i18n/english.go +++ b/pkg/i18n/english.go @@ -1208,7 +1208,7 @@ func EnglishTranslationSet() *TranslationSet { MergeBranchTooltip: "View options for merging the selected item into the current branch (regular merge, squash merge)", ConfirmQuit: `Are you sure you want to quit?`, SwitchRepo: `Switch to a recent repo`, - AllBranchesLogGraph: `Show all branch logs`, + AllBranchesLogGraph: `Show/cycle all branch logs`, UnsupportedGitService: `Unsupported git service`, CreatePullRequest: `Create pull request`, CopyPullRequestURL: `Copy pull request URL to clipboard`, diff --git a/pkg/integration/tests/status/log_cmd.go b/pkg/integration/tests/status/log_cmd.go new file mode 100644 index 00000000000..7928cb1b660 --- /dev/null +++ b/pkg/integration/tests/status/log_cmd.go @@ -0,0 +1,33 @@ +package status + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var LogCmd = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Cycle between two different log commands in the Status view", + ExtraCmdArgs: []string{}, + Skip: false, + SetupConfig: func(config *config.AppConfig) { + config.UserConfig.Git.AllBranchesLogCmd = `echo "view1"` + config.UserConfig.Git.AllBranchesLogCmds = []string{`echo "view2"`} + }, + SetupRepo: func(shell *Shell) {}, + Run: func(t *TestDriver, keys config.KeybindingConfig) { + t.Views().Status(). + Focus(). + Press(keys.Status.AllBranchesLogGraph) + t.Views().Main().Content(Contains("view1")) + + t.Views().Status(). + Focus(). + Press(keys.Status.AllBranchesLogGraph) + t.Views().Main().Content(Contains("view2").DoesNotContain("view1")) + + t.Views().Status(). + Focus(). + Press(keys.Status.AllBranchesLogGraph) + t.Views().Main().Content(Contains("view1").DoesNotContain("view2")) + }, +}) diff --git a/pkg/integration/tests/test_list.go b/pkg/integration/tests/test_list.go index bfc0fe786c6..ec24b9f5a18 100644 --- a/pkg/integration/tests/test_list.go +++ b/pkg/integration/tests/test_list.go @@ -286,6 +286,7 @@ var tests = []*components.IntegrationTest{ status.ClickRepoNameToOpenReposMenu, status.ClickToFocus, status.ClickWorkingTreeStateToOpenRebaseOptionsMenu, + status.LogCmd, status.ShowDivergenceFromBaseBranch, submodule.Add, submodule.Enter, diff --git a/schema/config.json b/schema/config.json index cf67f78c8fc..23e052f69b7 100644 --- a/schema/config.json +++ b/schema/config.json @@ -580,9 +580,16 @@ }, "allBranchesLogCmd": { "type": "string", - "description": "Command used to display git log of all branches in the main window", + "description": "Command used to display git log of all branches in the main window.\nDeprecated: User `allBranchesLogCmds` instead.", "default": "git log --graph --all --color=always --abbrev-commit --decorate --date=relative --pretty=medium" }, + "allBranchesLogCmds": { + "items": { + "type": "string" + }, + "type": "array", + "description": "Commands used to display git log of all branches in the main window, they will be cycled in order of appearance" + }, "overrideGpg": { "type": "boolean", "description": "If true, do not spawn a separate process when using GPG", From 31456a8caaed8dc64bc6a6d5767fcb3008d10f0f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 6 Jul 2024 12:08:18 +0000 Subject: [PATCH 144/157] README.md: Update Sponsors --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a600e500c95..f87a31840b0 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,7 @@ A simple terminal UI for git commands

-Mark LussierDean HerbertPeter BjorklundReilly WoodOliver GüntherPawan DhananjayBartłomiej DachDavid KarlssonCarsten GehlingCEUKAkos PutzXeteraHolden LucasChau TranmatejciktheAverageDev (Luca Tumedei)Ivan ZaitsevNicholas CloudLightQuantumGabriel SaillardAliaksandr StelmachonakBurgy BenjaminJoe KlemmerTobias LütkeBen BeaumontHollyJames SantucciJeff ForcierMaciej T. NowakFarzad MajidfayyazYuryAndreas KurthBraden SteffaniakJordan GillardSebastianGeorge SpanosFrantisek StankoAndy SlezakMartin KockIllarion KoperskiJesse AlamaCodacyBrettJan HeijmansKevin Nowaldsem pruijsOmar Luq Ethan LiBrian MacAskillMaxinbrJan ZenknerVictor AremuIgor RamazanovElliott Maguiren8n - Workflow Automationkaleb allmonJosh ThomasJJFrederick MorlockDarren CraineMaximilian LangenfeldRoman DanilinRammiahKai Norman ClasenNurzhanAlejandro MalavetDavis BulsHasan BadranCosmin NicolaescuGrec MarcsainuMarc Güell SegarraChris Olsen +Mark LussierDean HerbertPeter BjorklundReilly WoodOliver GüntherPawan DhananjayBartłomiej DachCarsten GehlingCEUKAkos PutzHolden LucasChau TranmatejciktheAverageDev (Luca Tumedei)Ivan ZaitsevNicholas CloudLightQuantumGabriel SaillardAliaksandr StelmachonakBurgy BenjaminJoe KlemmerTobias LütkeBen BeaumontHollyJeff ForcierMaciej T. NowakFarzad MajidfayyazYuryAndreas KurthBraden SteffaniakJordan GillardSebastianGeorge SpanosFrantisek StankoAndy SlezakMartin KockIllarion KoperskiJesse AlamaCodacyBrettJan HeijmansKevin Nowaldsem pruijsOmar Luq Nicholas MoenEthan LiBrian MacAskillMaxinbrMiguel IbarsJan ZenknerVictor AremuIgor RamazanovElliott Maguiren8n - Workflow AutomationJosh ThomasJJFrederick MorlockDarren CraineMaximilian LangenfeldNurzhanDavis BulsChris OlsenNeil LambertDavid Heinemeier HanssonMarco Aurelio Caldas MirandaEmmanuel NosakhareEthan FischerTerry TaiPhilipp GorczakAdam RoesnerAndy HerdWassim MetallaouiTornike GomareliTim MorganMax ShypulniakMeshan Naidookyu08Felipe PiacsekdimaunxKovács Ádám叶博

## Elevator Pitch From 7a670964cd3951c20e42a7b215f403f8ec4136c2 Mon Sep 17 00:00:00 2001 From: John Whitley Date: Mon, 29 Jan 2024 16:58:35 -0800 Subject: [PATCH 145/157] Optimize number of early calls to GetRepoPaths This change reduces the number of calls during application startup to one, calling GetRepoPaths() earlier than previously and plumbing the repoPaths struct around to achieve this end. --- pkg/app/app.go | 24 ++++++---- pkg/commands/git_commands/repo_paths.go | 35 ++++++++++----- pkg/commands/git_commands/repo_paths_test.go | 47 +++++++++++++++++--- pkg/commands/git_commands/status.go | 18 +------- pkg/gui/dummies.go | 2 +- pkg/gui/recent_repos_panel.go | 7 +-- 6 files changed, 85 insertions(+), 48 deletions(-) diff --git a/pkg/app/app.go b/pkg/app/app.go index a16fbcc1fe7..e12461e2803 100644 --- a/pkg/app/app.go +++ b/pkg/app/app.go @@ -14,7 +14,6 @@ import ( "github.com/spf13/afero" appTypes "github.com/jesseduffield/lazygit/pkg/app/types" - "github.com/jesseduffield/lazygit/pkg/commands" "github.com/jesseduffield/lazygit/pkg/commands/git_commands" "github.com/jesseduffield/lazygit/pkg/commands/oscommands" "github.com/jesseduffield/lazygit/pkg/common" @@ -119,7 +118,14 @@ func NewApp(config config.AppConfigurer, test integrationTypes.IntegrationTest, return app, err } - showRecentRepos, err := app.setupRepo() + // If we're not in a repo, repoPaths will be nil. The error is moot for us + // at this stage, since we'll try to init a new repo in setupRepo(), below + repoPaths, err := git_commands.GetRepoPaths(app.OSCommand.Cmd, gitVersion) + if err != nil { + return app, err + } + + showRecentRepos, err := app.setupRepo(repoPaths) if err != nil { return app, err } @@ -168,14 +174,16 @@ func openRecentRepo(app *App) bool { return false } -func (app *App) setupRepo() (bool, error) { +func (app *App) setupRepo( + repoPaths *git_commands.RepoPaths, +) (bool, error) { if env.GetGitDirEnv() != "" { - // we've been given the git dir directly. We'll verify this dir when initializing our Git object + // we've been given the git dir directly. Skip setup return false, nil } // if we are not in a git repo, we ask if we want to `git init` - if err := commands.VerifyInGitRepo(app.OSCommand); err != nil { + if repoPaths == nil { cwd, err := os.Getwd() if err != nil { return false, err @@ -221,6 +229,7 @@ func (app *App) setupRepo() (bool, error) { if err := app.OSCommand.Cmd.New(args).Run(); err != nil { return false, err } + return false, nil } @@ -238,10 +247,7 @@ func (app *App) setupRepo() (bool, error) { } // Run this afterward so that the previous repo creation steps can run without this interfering - if isBare, err := git_commands.IsBareRepo(app.OSCommand); isBare { - if err != nil { - return false, err - } + if repoPaths.IsBareRepo() { fmt.Print(app.Tr.BareRepo) diff --git a/pkg/commands/git_commands/repo_paths.go b/pkg/commands/git_commands/repo_paths.go index b0e1970dbe8..c2e77d4464a 100644 --- a/pkg/commands/git_commands/repo_paths.go +++ b/pkg/commands/git_commands/repo_paths.go @@ -2,6 +2,7 @@ package git_commands import ( ioFs "io/fs" + "os" "path" "path/filepath" "strings" @@ -18,6 +19,7 @@ type RepoPaths struct { repoPath string repoGitDirPath string repoName string + isBareRepo bool } var gitPathFormatVersion GitVersion = GitVersion{2, 31, 0, ""} @@ -54,6 +56,10 @@ func (self *RepoPaths) RepoName() string { return self.repoName } +func (self *RepoPaths) IsBareRepo() bool { + return self.isBareRepo +} + // Returns the repo paths for a typical repo func MockRepoPaths(currentPath string) *RepoPaths { return &RepoPaths{ @@ -62,6 +68,7 @@ func MockRepoPaths(currentPath string) *RepoPaths { repoPath: currentPath, repoGitDirPath: path.Join(currentPath, ".git"), repoName: "lazygit", + isBareRepo: false, } } @@ -69,7 +76,19 @@ func GetRepoPaths( cmd oscommands.ICmdObjBuilder, version *GitVersion, ) (*RepoPaths, error) { - gitDirOutput, err := callGitRevParse(cmd, version, "--show-toplevel", "--absolute-git-dir", "--git-common-dir", "--show-superproject-working-tree") + cwd, err := os.Getwd() + if err != nil { + return nil, err + } + return GetRepoPathsForDir(cwd, cmd, version) +} + +func GetRepoPathsForDir( + dir string, + cmd oscommands.ICmdObjBuilder, + version *GitVersion, +) (*RepoPaths, error) { + gitDirOutput, err := callGitRevParseWithDir(cmd, version, dir, "--show-toplevel", "--absolute-git-dir", "--git-common-dir", "--is-bare-repository", "--show-superproject-working-tree") if err != nil { return nil, err } @@ -84,13 +103,14 @@ func GetRepoPaths( return nil, err } } + isBareRepo := gitDirResults[3] == "true" // If we're in a submodule, --show-superproject-working-tree will return - // a value, meaning gitDirResults will be length 4. In that case + // a value, meaning gitDirResults will be length 5. In that case // return the worktree path as the repoPath. Otherwise we're in a // normal repo or a worktree so return the parent of the git common // dir (repoGitDirPath) - isSubmodule := len(gitDirResults) == 4 + isSubmodule := len(gitDirResults) == 5 var repoPath string if isSubmodule { @@ -106,17 +126,10 @@ func GetRepoPaths( repoPath: repoPath, repoGitDirPath: repoGitDirPath, repoName: repoName, + isBareRepo: isBareRepo, }, nil } -func callGitRevParse( - cmd oscommands.ICmdObjBuilder, - version *GitVersion, - gitRevArgs ...string, -) (string, error) { - return callGitRevParseWithDir(cmd, version, "", gitRevArgs...) -} - func callGitRevParseWithDir( cmd oscommands.ICmdObjBuilder, version *GitVersion, diff --git a/pkg/commands/git_commands/repo_paths_test.go b/pkg/commands/git_commands/repo_paths_test.go index 97cfc811908..9ee41a3fc8e 100644 --- a/pkg/commands/git_commands/repo_paths_test.go +++ b/pkg/commands/git_commands/repo_paths_test.go @@ -36,10 +36,12 @@ func TestGetRepoPaths(t *testing.T) { "/path/to/repo/.git", // --git-common-dir "/path/to/repo/.git", + // --is-bare-repository + "false", // --show-superproject-working-tree } runner.ExpectGitArgs( - append(getRevParseArgs(), "--show-toplevel", "--absolute-git-dir", "--git-common-dir", "--show-superproject-working-tree"), + append(getRevParseArgs(), "--show-toplevel", "--absolute-git-dir", "--git-common-dir", "--is-bare-repository", "--show-superproject-working-tree"), strings.Join(expectedOutput, "\n"), nil) }, @@ -50,6 +52,38 @@ func TestGetRepoPaths(t *testing.T) { repoPath: "/path/to/repo", repoGitDirPath: "/path/to/repo/.git", repoName: "repo", + isBareRepo: false, + }, + Err: nil, + }, + { + Name: "bare repo", + BeforeFunc: func(runner *oscommands.FakeCmdObjRunner, getRevParseArgs argFn) { + // setup for main worktree + expectedOutput := []string{ + // --show-toplevel + "/path/to/repo", + // --git-dir + "/path/to/bare_repo/bare.git", + // --git-common-dir + "/path/to/bare_repo/bare.git", + // --is-bare-repository + "true", + // --show-superproject-working-tree + } + runner.ExpectGitArgs( + append(getRevParseArgs(), "--show-toplevel", "--absolute-git-dir", "--git-common-dir", "--is-bare-repository", "--show-superproject-working-tree"), + strings.Join(expectedOutput, "\n"), + nil) + }, + Path: "/path/to/repo", + Expected: &RepoPaths{ + worktreePath: "/path/to/repo", + worktreeGitDirPath: "/path/to/bare_repo/bare.git", + repoPath: "/path/to/bare_repo", + repoGitDirPath: "/path/to/bare_repo/bare.git", + repoName: "bare_repo", + isBareRepo: true, }, Err: nil, }, @@ -63,11 +97,13 @@ func TestGetRepoPaths(t *testing.T) { "/path/to/repo/.git/modules/submodule1", // --git-common-dir "/path/to/repo/.git/modules/submodule1", + // --is-bare-repository + "false", // --show-superproject-working-tree "/path/to/repo", } runner.ExpectGitArgs( - append(getRevParseArgs(), "--show-toplevel", "--absolute-git-dir", "--git-common-dir", "--show-superproject-working-tree"), + append(getRevParseArgs(), "--show-toplevel", "--absolute-git-dir", "--git-common-dir", "--is-bare-repository", "--show-superproject-working-tree"), strings.Join(expectedOutput, "\n"), nil) }, @@ -78,6 +114,7 @@ func TestGetRepoPaths(t *testing.T) { repoPath: "/path/to/repo/submodule1", repoGitDirPath: "/path/to/repo/.git/modules/submodule1", repoName: "submodule1", + isBareRepo: false, }, Err: nil, }, @@ -85,7 +122,7 @@ func TestGetRepoPaths(t *testing.T) { Name: "git rev-parse returns an error", BeforeFunc: func(runner *oscommands.FakeCmdObjRunner, getRevParseArgs argFn) { runner.ExpectGitArgs( - append(getRevParseArgs(), "--show-toplevel", "--absolute-git-dir", "--git-common-dir", "--show-superproject-working-tree"), + append(getRevParseArgs(), "--show-toplevel", "--absolute-git-dir", "--git-common-dir", "--is-bare-repository", "--show-superproject-working-tree"), "", errors.New("fatal: invalid gitfile format: /path/to/repo/worktree2/.git")) }, @@ -94,7 +131,7 @@ func TestGetRepoPaths(t *testing.T) { Err: func(getRevParseArgs argFn) error { args := strings.Join(getRevParseArgs(), " ") return errors.New( - fmt.Sprintf("'git %v --show-toplevel --absolute-git-dir --git-common-dir --show-superproject-working-tree' failed: fatal: invalid gitfile format: /path/to/repo/worktree2/.git", args), + fmt.Sprintf("'git %v --show-toplevel --absolute-git-dir --git-common-dir --is-bare-repository --show-superproject-working-tree' failed: fatal: invalid gitfile format: /path/to/repo/worktree2/.git", args), ) }, }, @@ -120,7 +157,7 @@ func TestGetRepoPaths(t *testing.T) { // prepare the filesystem for the scenario s.BeforeFunc(runner, getRevParseArgs) - repoPaths, err := GetRepoPaths(cmd, version) + repoPaths, err := GetRepoPathsForDir("", cmd, version) // check the error and the paths if s.Err != nil { diff --git a/pkg/commands/git_commands/status.go b/pkg/commands/git_commands/status.go index 65b29deef13..0e0ef37fcc5 100644 --- a/pkg/commands/git_commands/status.go +++ b/pkg/commands/git_commands/status.go @@ -3,10 +3,8 @@ package git_commands import ( "os" "path/filepath" - "strconv" "strings" - "github.com/jesseduffield/lazygit/pkg/commands/oscommands" "github.com/jesseduffield/lazygit/pkg/commands/types/enums" ) @@ -49,20 +47,8 @@ func (self *StatusCommands) WorkingTreeState() enums.RebaseMode { return enums.REBASE_MODE_NONE } -func (self *StatusCommands) IsBareRepo() (bool, error) { - return IsBareRepo(self.os) -} - -func IsBareRepo(osCommand *oscommands.OSCommand) (bool, error) { - res, err := osCommand.Cmd.New( - NewGitCmd("rev-parse").Arg("--is-bare-repository").ToArgv(), - ).DontLog().RunWithOutput() - if err != nil { - return false, err - } - - // The command returns output with a newline, so we need to strip - return strconv.ParseBool(strings.TrimSpace(res)) +func (self *StatusCommands) IsBareRepo() bool { + return self.repoPaths.isBareRepo } func (self *StatusCommands) IsInNormalRebase() (bool, error) { diff --git a/pkg/gui/dummies.go b/pkg/gui/dummies.go index 7bc36ff339b..2350d215e94 100644 --- a/pkg/gui/dummies.go +++ b/pkg/gui/dummies.go @@ -17,6 +17,6 @@ func NewDummyUpdater() *updates.Updater { // NewDummyGui creates a new dummy GUI for testing func NewDummyGui() *Gui { newAppConfig := config.NewDummyAppConfig() - dummyGui, _ := NewGui(utils.NewDummyCommon(), newAppConfig, &git_commands.GitVersion{}, NewDummyUpdater(), false, "", nil) + dummyGui, _ := NewGui(utils.NewDummyCommon(), newAppConfig, &git_commands.GitVersion{Major: 2, Minor: 0, Patch: 0}, NewDummyUpdater(), false, "", nil) return dummyGui } diff --git a/pkg/gui/recent_repos_panel.go b/pkg/gui/recent_repos_panel.go index acdb2067220..0f2f2c7049c 100644 --- a/pkg/gui/recent_repos_panel.go +++ b/pkg/gui/recent_repos_panel.go @@ -8,12 +8,7 @@ import ( // updateRecentRepoList registers the fact that we opened lazygit in this repo, // so that we can open the same repo via the 'recent repos' menu func (gui *Gui) updateRecentRepoList() error { - isBareRepo, err := gui.git.Status.IsBareRepo() - if err != nil { - return err - } - - if isBareRepo { + if gui.git.Status.IsBareRepo() { // we could totally do this but it would require storing both the git-dir and the // worktree in our recent repos list, which is a change that would need to be // backwards compatible From 07fe828f60b2c091e038d76075ac7ed08588a9c2 Mon Sep 17 00:00:00 2001 From: Luke Swan Date: Wed, 10 Jul 2024 00:47:22 +0300 Subject: [PATCH 146/157] Add initial test for non-matching branch name --- .../commit_with_non_matching_branch_name.go | 38 +++++++++++++++++++ pkg/integration/tests/test_list.go | 1 + 2 files changed, 39 insertions(+) create mode 100644 pkg/integration/tests/commit/commit_with_non_matching_branch_name.go diff --git a/pkg/integration/tests/commit/commit_with_non_matching_branch_name.go b/pkg/integration/tests/commit/commit_with_non_matching_branch_name.go new file mode 100644 index 00000000000..490bbf9f8e6 --- /dev/null +++ b/pkg/integration/tests/commit/commit_with_non_matching_branch_name.go @@ -0,0 +1,38 @@ +package commit + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var CommitWithNonMatchingBranchName = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Commit with defined config commitPrefixes", + ExtraCmdArgs: []string{}, + Skip: false, + SetupConfig: func(testConfig *config.AppConfig) { + testConfig.UserConfig.Git.CommitPrefix = &config.CommitPrefixConfig{ + Pattern: "^\\w+\\/(\\w+-\\w+).*", + Replace: "[$1]: ", + } + }, + SetupRepo: func(shell *Shell) { + shell.NewBranch("branchnomatch") + shell.CreateFile("test-commit-prefix", "This is foo bar") + }, + Run: func(t *TestDriver, keys config.KeybindingConfig) { + t.Views().Commits(). + IsEmpty() + + t.Views().Files(). + IsFocused(). + PressPrimaryAction(). + Press(keys.Files.CommitChanges) + + t.ExpectPopup().CommitMessagePanel(). + Title(Equals("Commit summary")). + /* EXPECTED: + InitialText(Equals("")) + ACTUAL: */ + InitialText(Equals("branchnomatch")) + }, +}) diff --git a/pkg/integration/tests/test_list.go b/pkg/integration/tests/test_list.go index ec24b9f5a18..fcc0b74bbbf 100644 --- a/pkg/integration/tests/test_list.go +++ b/pkg/integration/tests/test_list.go @@ -80,6 +80,7 @@ var tests = []*components.IntegrationTest{ commit.CommitSwitchToEditor, commit.CommitWipWithPrefix, commit.CommitWithGlobalPrefix, + commit.CommitWithNonMatchingBranchName, commit.CommitWithPrefix, commit.CreateAmendCommit, commit.CreateTag, From 968060a5ec13a7804301a1368899b756bcfb04b3 Mon Sep 17 00:00:00 2001 From: Luke Swan Date: Sun, 30 Jun 2024 01:07:15 +0000 Subject: [PATCH 147/157] Ensure branch name matches pattern before replace Amend test for non-matching branch name --- pkg/gui/controllers/helpers/working_tree_helper.go | 8 ++++++-- .../tests/commit/commit_with_non_matching_branch_name.go | 3 --- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/pkg/gui/controllers/helpers/working_tree_helper.go b/pkg/gui/controllers/helpers/working_tree_helper.go index a97639795d2..51a6bc553a9 100644 --- a/pkg/gui/controllers/helpers/working_tree_helper.go +++ b/pkg/gui/controllers/helpers/working_tree_helper.go @@ -152,12 +152,16 @@ func (self *WorkingTreeHelper) HandleCommitPress() error { if commitPrefixConfig != nil { prefixPattern := commitPrefixConfig.Pattern prefixReplace := commitPrefixConfig.Replace + branchName := self.refHelper.GetCheckedOutRef().Name rgx, err := regexp.Compile(prefixPattern) if err != nil { return fmt.Errorf("%s: %s", self.c.Tr.CommitPrefixPatternError, err.Error()) } - prefix := rgx.ReplaceAllString(self.refHelper.GetCheckedOutRef().Name, prefixReplace) - message = prefix + + if rgx.MatchString(branchName) { + prefix := rgx.ReplaceAllString(branchName, prefixReplace) + message = prefix + } } } diff --git a/pkg/integration/tests/commit/commit_with_non_matching_branch_name.go b/pkg/integration/tests/commit/commit_with_non_matching_branch_name.go index 490bbf9f8e6..1075c7bb168 100644 --- a/pkg/integration/tests/commit/commit_with_non_matching_branch_name.go +++ b/pkg/integration/tests/commit/commit_with_non_matching_branch_name.go @@ -30,9 +30,6 @@ var CommitWithNonMatchingBranchName = NewIntegrationTest(NewIntegrationTestArgs{ t.ExpectPopup().CommitMessagePanel(). Title(Equals("Commit summary")). - /* EXPECTED: InitialText(Equals("")) - ACTUAL: */ - InitialText(Equals("branchnomatch")) }, }) From f0af42270ee86a1587e83e335096587d0e71f636 Mon Sep 17 00:00:00 2001 From: hasecilu Date: Wed, 3 Apr 2024 15:52:35 -0600 Subject: [PATCH 148/157] Update link from unmaintained exa to maintained eza --- pkg/gui/presentation/icons/file_icons.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pkg/gui/presentation/icons/file_icons.go b/pkg/gui/presentation/icons/file_icons.go index fe63cfa29bb..ee6027ffa84 100644 --- a/pkg/gui/presentation/icons/file_icons.go +++ b/pkg/gui/presentation/icons/file_icons.go @@ -4,14 +4,16 @@ import ( "path/filepath" ) -// https://github.com/ogham/exa/blob/master/src/output/icons.rs +// NOTE: Visit next links for inspiration: +// https://github.com/eza-community/eza/blob/main/src/output/icons.rs +// https://github.com/nvim-tree/nvim-web-devicons/blob/master/lua/nvim-web-devicons/icons-default.lua + var ( DEFAULT_FILE_ICON = IconProperties{Icon: "\uf15b", Color: 241} //  DEFAULT_SUBMODULE_ICON = IconProperties{Icon: "\uf1d3", Color: 202} //  DEFAULT_DIRECTORY_ICON = IconProperties{Icon: "\uf07b", Color: 241} //  ) -// See https://github.com/nvim-tree/nvim-web-devicons/blob/master/lua/nvim-web-devicons/icons-default.lua var nameIconMap = map[string]IconProperties{ ".Trash": {Icon: "\uf1f8", Color: 241}, //  ".atom": {Icon: "\ue764", Color: 241}, //  From cad4581d057616032c4cf9a4421a8666b7b8cc5f Mon Sep 17 00:00:00 2001 From: hasecilu Date: Sat, 6 Apr 2024 20:31:25 -0600 Subject: [PATCH 149/157] Add icons for some file names --- pkg/gui/presentation/icons/file_icons.go | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/pkg/gui/presentation/icons/file_icons.go b/pkg/gui/presentation/icons/file_icons.go index ee6027ffa84..db015123917 100644 --- a/pkg/gui/presentation/icons/file_icons.go +++ b/pkg/gui/presentation/icons/file_icons.go @@ -26,24 +26,41 @@ var nameIconMap = map[string]IconProperties{ ".github": {Icon: "\uf408", Color: 241}, //  ".gitignore": {Icon: "\uf1d3", Color: 202}, //  ".gitmodules": {Icon: "\uf1d3", Color: 202}, //  + ".mailmap": {Icon: "\uf1d3", Color: 202}, //  + ".npmrc": {Icon: "\ue71e", Color: 197}, //  + ".prettierrc": {Icon: "\ue6b4", Color: 33}, //  ".rvm": {Icon: "\ue21e", Color: 160}, //  + ".SRCINFO": {Icon: "\uf129", Color: 230}, //  ".vimrc": {Icon: "\ue62b", Color: 28}, //  ".vscode": {Icon: "\ue70c", Color: 39}, //  + ".Xauthority": {Icon: "\uf369", Color: 196}, //  + ".xinitrc": {Icon: "\uf369", Color: 196}, //  + ".Xresources": {Icon: "\uf369", Color: 196}, //  + ".xsession": {Icon: "\uf369", Color: 196}, //  ".zshrc": {Icon: "\ue795", Color: 113}, //  + "bin": {Icon: "\ue5fc", Color: 241}, //  "Cargo.lock": {Icon: "\ue7a8", Color: 216}, //  "Cargo.toml": {Icon: "\ue7a8", Color: 216}, //  - "bin": {Icon: "\ue5fc", Color: 241}, //  + "COMMIT_EDITMSG": {Icon: "\ue702", Color: 239}, //  + "compose.yaml": {Icon: "\uf308", Color: 68}, //  + "compose.yml": {Icon: "\uf308", Color: 68}, //  "config": {Icon: "\ue5fc", Color: 241}, //  "docker-compose.yml": {Icon: "\uf308", Color: 68}, //  + "docker-compose.yaml":{Icon: "\uf308", Color: 68}, //  "Dockerfile": {Icon: "\uf308", Color: 68}, //  "ds_store": {Icon: "\uf179", Color: 15}, //  + "favicon.ico": {Icon: "\ue623", Color: 185}, //  + "fp-info-cache": {Icon: "\uf49b", Color: 231}, //  + "fp-lib-table": {Icon: "\uf34c", Color: 231}, //  "gitignore_global": {Icon: "\uf1d3", Color: 202}, //  + "GNUmakefile": {Icon: "\ue779", Color: 66}, //  "go.mod": {Icon: "\ue627", Color: 74}, //  "go.sum": {Icon: "\ue627", Color: 74}, //  "gradle": {Icon: "\ue256", Color: 168}, //  "gruntfile.coffee": {Icon: "\ue611", Color: 166}, //  "gruntfile.js": {Icon: "\ue611", Color: 166}, //  "gruntfile.ls": {Icon: "\ue611", Color: 166}, //  + "gtkrc": {Icon: "\uf362", Color: 231}, //  "gulpfile.coffee": {Icon: "\ue610", Color: 167}, //  "gulpfile.js": {Icon: "\ue610", Color: 167}, //  "gulpfile.ls": {Icon: "\ue610", Color: 168}, //  @@ -56,6 +73,9 @@ var nameIconMap = map[string]IconProperties{ "npmignore": {Icon: "\ue71e", Color: 197}, //  "PKGBUILD": {Icon: "\uf303", Color: 38}, //  "rubydoc": {Icon: "\ue73b", Color: 160}, //  + "sym-lib-table": {Icon: "\uf34c", Color: 231}, //  + "xorg.conf": {Icon: "\uf369", Color: 196}, //  + "xsettingsd.conf": {Icon: "\uf369", Color: 196}, //  "yarn.lock": {Icon: "\ue6a7", Color: 74}, //  } From 981f1fa7aa980a0a6adf5d89f7a2c141cb3c52dd Mon Sep 17 00:00:00 2001 From: hasecilu Date: Sun, 7 Apr 2024 15:25:59 -0600 Subject: [PATCH 150/157] Add icons for some file extensions --- pkg/gui/presentation/icons/file_icons.go | 132 +++++++++++++++++++++-- 1 file changed, 124 insertions(+), 8 deletions(-) diff --git a/pkg/gui/presentation/icons/file_icons.go b/pkg/gui/presentation/icons/file_icons.go index db015123917..e98bb396143 100644 --- a/pkg/gui/presentation/icons/file_icons.go +++ b/pkg/gui/presentation/icons/file_icons.go @@ -80,32 +80,48 @@ var nameIconMap = map[string]IconProperties{ } var extIconMap = map[string]IconProperties{ + ".3gp": {Icon: "\uf03d", Color: 208}, //  + ".3mf": {Icon: "\U000f01a7", Color: 102}, // 󰆧 + ".aac": {Icon: "\uf001", Color: 45}, //  ".ai": {Icon: "\ue7b4", Color: 185}, //  ".android": {Icon: "\ue70e", Color: 70}, //  ".apk": {Icon: "\ue70e", Color: 70}, //  + ".app": {Icon: "\ueae8", Color: 124}, //  ".apple": {Icon: "\uf179", Color: 15}, //  + ".applescript": {Icon: "\uf179", Color: 66}, //  + ".ass": {Icon: "\U000f0a16", Color: 214}, // 󰨖 ".avi": {Icon: "\uf03d", Color: 140}, //  ".avif": {Icon: "\uf1c5", Color: 140}, //  ".avro": {Icon: "\ue60b", Color: 130}, //  ".awk": {Icon: "\ue795", Color: 140}, //  + ".azcli": {Icon: "\uebe8", Color: 32}, //  + ".bak": {Icon: "\U000f006f", Color: 66}, // 󰁯 ".bash": {Icon: "\ue795", Color: 113}, //  ".bash_history": {Icon: "\ue795", Color: 113}, //  ".bash_profile": {Icon: "\ue795", Color: 113}, //  ".bashrc": {Icon: "\ue795", Color: 113}, //  ".bat": {Icon: "\uf17a", Color: 81}, //  ".bats": {Icon: "\ue795", Color: 241}, //  + ".bazel": {Icon: "\ue63a", Color: 113}, //  + ".bib": {Icon: "\U000f125f", Color: 185}, // 󱉟 + ".blend": {Icon: "\U000f00ab", Color: 208}, // 󰂫 + ".blp": {Icon: "\U000f0ebe", Color: 68}, // 󰺾 ".bmp": {Icon: "\uf1c5", Color: 149}, //  + ".brep": {Icon: "\U000f0eeb", Color: 101}, // 󰻫 ".bz": {Icon: "\uf410", Color: 239}, //  ".bz2": {Icon: "\uf410", Color: 239}, //  + ".bzl": {Icon: "\ue63a", Color: 113}, //  ".c": {Icon: "\ue61e", Color: 111}, //  ".c++": {Icon: "\ue61d", Color: 204}, //  ".cab": {Icon: "\ue70f", Color: 241}, //  + ".cache": {Icon: "\uf49b", Color: 231}, //  + ".cast": {Icon: "\uf03d", Color: 208}, //  ".cc": {Icon: "\ue61d", Color: 204}, //  ".cfg": {Icon: "\ue615", Color: 255}, //  ".class": {Icon: "\ue256", Color: 168}, //  ".clj": {Icon: "\ue768", Color: 113}, //  ".cljs": {Icon: "\ue76a", Color: 74}, //  - ".cls": {Icon: "\uf034", Color: 239}, //  + ".cls": {Icon: "\ue69b", Color: 239}, //  ".cmd": {Icon: "\ue70f", Color: 239}, //  ".coffee": {Icon: "\uf0f4", Color: 185}, //  ".conf": {Icon: "\ue615", Color: 66}, //  @@ -119,25 +135,32 @@ var extIconMap = map[string]IconProperties{ ".css": {Icon: "\ue749", Color: 75}, //  ".csv": {Icon: "\uf1c3", Color: 113}, //  ".csx": {Icon: "\U000f031b", Color: 58}, // 󰌛 + ".cue": {Icon: "\U000f0cb9", Color: 211}, // 󰲹 ".cxx": {Icon: "\ue61d", Color: 74}, //  ".bicep": {Icon: "\ue63b", Color: 32}, //  ".bicepparam": {Icon: "\ue63b", Color: 103}, //  ".d": {Icon: "\ue7af", Color: 28}, //  ".dart": {Icon: "\ue798", Color: 25}, //  + ".dconf": {Icon: "\ue706", Color: 188}, //  ".db": {Icon: "\uf1c0", Color: 188}, //  ".deb": {Icon: "\ue77d", Color: 88}, //  + ".desktop": {Icon: "\uf108", Color: 54}, //  ".diff": {Icon: "\uf440", Color: 241}, //  ".djvu": {Icon: "\uf02d", Color: 241}, //  ".dll": {Icon: "\ue70f", Color: 241}, //  - ".doc": {Icon: "\uf0219", Color: 26}, // 󰈙 - ".docx": {Icon: "\uf0219", Color: 26}, // 󰈙 + ".doc": {Icon: "\U000f0219", Color: 26}, // 󰈙 + ".docx": {Icon: "\U000f0219", Color: 26}, // 󰈙 + ".dot": {Icon: "\U000f1049", Color: 24}, // 󱁉 ".ds_store": {Icon: "\uf179", Color: 15}, //  ".DS_store": {Icon: "\uf179", Color: 15}, //  ".dump": {Icon: "\uf1c0", Color: 188}, //  + ".dwg": {Icon: "\U000f0eeb", Color: 101}, // 󰻫 + ".dxf": {Icon: "\U000f0eeb", Color: 101}, // 󰻫 ".ebook": {Icon: "\ue28b", Color: 241}, //  ".ebuild": {Icon: "\uf30d", Color: 56}, //  ".editorconfig": {Icon: "\ue615", Color: 241}, //  ".ejs": {Icon: "\ue618", Color: 185}, //  + ".elf": {Icon: "\ueae8", Color: 124}, //  ".elm": {Icon: "\ue62c", Color: 74}, //  ".env": {Icon: "\uf462", Color: 227}, //  ".eot": {Icon: "\uf031", Color: 124}, //  @@ -147,13 +170,29 @@ var extIconMap = map[string]IconProperties{ ".ex": {Icon: "\ue62d", Color: 140}, //  ".exe": {Icon: "\uf17a", Color: 81}, //  ".exs": {Icon: "\ue62d", Color: 140}, //  + ".f90": {Icon: "\U000f121a", Color: 97}, // 󱈚 + ".fbx": {Icon: "\U000f01a7", Color: 102}, // 󰆧 + ".fcbak": {Icon: "\uf336", Color: 160}, //  + ".fcmacro": {Icon: "\uf336", Color: 160}, //  + ".fcmat": {Icon: "\uf336", Color: 160}, //  + ".fcparam": {Icon: "\uf336", Color: 160}, //  + ".fcscript": {Icon: "\uf336", Color: 160}, //  + ".fcstd": {Icon: "\uf336", Color: 160}, //  + ".fcstd1": {Icon: "\uf336", Color: 160}, //  + ".fctb": {Icon: "\uf336", Color: 160}, //  + ".fctl": {Icon: "\uf336", Color: 160}, //  ".fish": {Icon: "\ue795", Color: 249}, //  ".flac": {Icon: "\uf001", Color: 241}, //  + ".flc": {Icon: "\uf031", Color: 255}, //  + ".flf": {Icon: "\uf031", Color: 255}, //  ".flv": {Icon: "\uf03d", Color: 241}, //  + ".fnl": {Icon: "\ue6af", Color: 230}, //  ".font": {Icon: "\uf031", Color: 241}, //  ".fs": {Icon: "\ue7a7", Color: 74}, //  ".fsi": {Icon: "\ue7a7", Color: 74}, //  ".fsx": {Icon: "\ue7a7", Color: 74}, //  + ".gcode": {Icon: "\U000f0af4", Color: 234}, // 󰫴 + ".gd": {Icon: "\ue65f", Color: 66}, //  ".gdoc": {Icon: "\uf1c2", Color: 40}, //  ".gem": {Icon: "\ue21e", Color: 160}, //  ".gemfile": {Icon: "\ue21e", Color: 160}, //  @@ -165,23 +204,37 @@ var extIconMap = map[string]IconProperties{ ".gitignore": {Icon: "\uf1d3", Color: 202}, //  ".gitmodules": {Icon: "\uf1d3", Color: 202}, //  ".go": {Icon: "\ue627", Color: 74}, //  + ".godot": {Icon: "\ue65f", Color: 66}, //  + ".gql": {Icon: "\uf20e", Color: 199}, //  + ".graphql": {Icon: "\uf20e", Color: 199}, //  ".gradle": {Icon: "\ue256", Color: 168}, //  + ".gresource": {Icon: "\uf362", Color: 231}, //  ".groovy": {Icon: "\ue775", Color: 24}, //  ".gsheet": {Icon: "\uf1c3", Color: 10}, //  ".gslides": {Icon: "\uf1c4", Color: 226}, //  ".guardfile": {Icon: "\ue21e", Color: 241}, //  + ".gv": {Icon: "\U000f1049", Color: 24}, // 󱁉 ".gz": {Icon: "\uf410", Color: 241}, //  ".h": {Icon: "\uf0fd", Color: 140}, //  ".hbs": {Icon: "\ue60f", Color: 202}, //  + ".hc": {Icon: "\U000f00a2", Color: 227}, // 󰂢 + ".hex": {Icon: "\U000f12a7", Color: 27}, // 󱊧 + ".hh": {Icon: "\uf0fd", Color: 140}, //  ".hpp": {Icon: "\uf0fd", Color: 140}, //  ".hs": {Icon: "\ue777", Color: 140}, //  ".htm": {Icon: "\uf13b", Color: 196}, //  ".html": {Icon: "\uf13b", Color: 196}, //  ".hxx": {Icon: "\uf0fd", Color: 140}, //  ".ico": {Icon: "\uf1c5", Color: 185}, //  + ".ifc": {Icon: "\U000f0eeb", Color: 101}, // 󰻫 + ".ige": {Icon: "\U000f0eeb", Color: 101}, // 󰻫 + ".iges": {Icon: "\U000f0eeb", Color: 101}, // 󰻫 + ".igs": {Icon: "\U000f0eeb", Color: 101}, // 󰻫 ".image": {Icon: "\uf1c5", Color: 185}, //  ".iml": {Icon: "\ue7b5", Color: 239}, //  + ".info": {Icon: "\uf129", Color: 230}, //  ".ini": {Icon: "\uf17a", Color: 81}, //  + ".ino": {Icon: "\uf34b", Color: 73}, //  ".ipynb": {Icon: "\ue606", Color: 214}, //  ".iso": {Icon: "\ue271", Color: 239}, //  ".j2c": {Icon: "\uf1c5", Color: 239}, //  @@ -203,25 +256,46 @@ var extIconMap = map[string]IconProperties{ ".json": {Icon: "\ue60b", Color: 185}, //  ".jsx": {Icon: "\ue7ba", Color: 45}, //  ".jxl": {Icon: "\uf1c5", Color: 241}, //  + ".kdenlive": {Icon: "\uf33c", Color: 110}, //  + ".kdenlivetitle": {Icon: "\uf33c", Color: 110}, //  + ".kicad_dru": {Icon: "\uf34c", Color: 231}, //  + ".kicad_mod": {Icon: "\uf34c", Color: 231}, //  + ".kicad_pcb": {Icon: "\uf34c", Color: 231}, //  + ".kicad_prl": {Icon: "\uf34c", Color: 231}, //  + ".kicad_pro": {Icon: "\uf34c", Color: 231}, //  + ".kicad_sch": {Icon: "\uf34c", Color: 231}, //  + ".kicad_sym": {Icon: "\uf34c", Color: 231}, //  + ".kicad_wks": {Icon: "\uf34c", Color: 231}, //  + ".kpp": {Icon: "\uf33d", Color: 201}, //  + ".kra": {Icon: "\uf33d", Color: 201}, //  + ".krz": {Icon: "\uf33d", Color: 201}, //  ".ksh": {Icon: "\ue795", Color: 241}, //  ".kt": {Icon: "\ue634", Color: 99}, //  ".kts": {Icon: "\ue634", Color: 99}, //  - ".latex": {Icon: "\uf034", Color: 241}, //  + ".latex": {Icon: "\ue69b", Color: 241}, //  + ".lck": {Icon: "\ue672", Color: 250}, //  ".less": {Icon: "\ue758", Color: 54}, //  ".lhs": {Icon: "\ue777", Color: 140}, //  ".license": {Icon: "\U000f0219", Color: 185}, // 󰈙 ".localized": {Icon: "\uf179", Color: 15}, //  ".lock": {Icon: "\uf023", Color: 241}, //  - ".log": {Icon: "\uf18d", Color: 188}, //  + ".log": {Icon: "\uf4ed", Color: 188}, //  + ".lrc": {Icon: "\U000f0a16", Color: 214}, // 󰨖 ".lua": {Icon: "\ue620", Color: 74}, //  + ".luac": {Icon: "\ue620", Color: 74}, //  + ".luau": {Icon: "\ue620", Color: 74}, //  ".lz": {Icon: "\uf410", Color: 241}, //  ".lz4": {Icon: "\uf410", Color: 241}, //  ".lzh": {Icon: "\uf410", Color: 241}, //  ".lzma": {Icon: "\uf410", Color: 241}, //  ".lzo": {Icon: "\uf410", Color: 241}, //  ".m": {Icon: "\ue61e", Color: 111}, //  - ".mm": {Icon: "\ue61d", Color: 111}, //  + ".m3u": {Icon: "\U000f0cb9", Color: 211}, // 󰲹 + ".m3u8": {Icon: "\U000f0cb9", Color: 211}, // 󰲹 ".m4a": {Icon: "\uf001", Color: 239}, //  + ".m4v": {Icon: "\uf03d", Color: 208}, //  + ".magnet": {Icon: "\uf076", Color: 124}, //  + ".makefile": {Icon: "\ue779", Color: 66}, //  ".markdown": {Icon: "\uf48a", Color: 74}, //  ".md": {Icon: "\uf48a", Color: 74}, //  ".mdx": {Icon: "\uf48a", Color: 74}, //  @@ -229,27 +303,37 @@ var extIconMap = map[string]IconProperties{ ".mk": {Icon: "\ue795", Color: 241}, //  ".mkd": {Icon: "\uf48a", Color: 74}, //  ".mkv": {Icon: "\uf03d", Color: 241}, //  + ".mm": {Icon: "\ue61d", Color: 111}, //  ".mobi": {Icon: "\ue28b", Color: 241}, //  ".mov": {Icon: "\uf03d", Color: 241}, //  ".mp3": {Icon: "\uf001", Color: 241}, //  ".mp4": {Icon: "\uf03d", Color: 241}, //  ".msi": {Icon: "\ue70f", Color: 241}, //  ".mustache": {Icon: "\ue60f", Color: 241}, //  + ".nfo": {Icon: "\uf129", Color: 230}, //  ".nix": {Icon: "\uf313", Color: 111}, //  ".node": {Icon: "\U000f0399", Color: 197}, // 󰎙 ".npmignore": {Icon: "\ue71e", Color: 197}, //  + ".obj": {Icon: "\U000f01a7", Color: 102}, // 󰆧 ".odp": {Icon: "\uf1c4", Color: 241}, //  ".ods": {Icon: "\uf1c3", Color: 241}, //  ".odt": {Icon: "\uf1c2", Color: 241}, //  ".ogg": {Icon: "\uf001", Color: 241}, //  ".ogv": {Icon: "\uf03d", Color: 241}, //  + ".opus": {Icon: "\U000f0223", Color: 208}, // 󰈣 + ".org": {Icon: "\ue633", Color: 73}, //  ".otf": {Icon: "\uf031", Color: 241}, //  + ".out": {Icon: "\ueae8", Color: 124}, //  ".part": {Icon: "\uf43a", Color: 241}, //  ".patch": {Icon: "\uf440", Color: 241}, //  ".pdf": {Icon: "\uf1c1", Color: 124}, //  ".php": {Icon: "\ue73d", Color: 61}, //  ".pl": {Icon: "\ue769", Color: 74}, //  + ".pls": {Icon: "\U000f0cb9", Color: 211}, // 󰲹 + ".ply": {Icon: "\U000f01a7", Color: 102}, // 󰆧 ".png": {Icon: "\uf1c5", Color: 241}, //  + ".po": {Icon: "\U000f05ca", Color: 31}, // 󰗊 + ".pot": {Icon: "\U000f05ca", Color: 31}, // 󰗊 ".ppt": {Icon: "\uf1c4", Color: 241}, //  ".pptx": {Icon: "\uf1c4", Color: 241}, //  ".procfile": {Icon: "\ue21e", Color: 241}, //  @@ -259,6 +343,10 @@ var extIconMap = map[string]IconProperties{ ".pxm": {Icon: "\uf1c5", Color: 241}, //  ".py": {Icon: "\ue606", Color: 214}, //  ".pyc": {Icon: "\ue606", Color: 214}, //  + ".qm": {Icon: "\U000f05ca", Color: 31}, // 󰗊 + ".qml": {Icon: "\uf375", Color: 77}, //  + ".qrc": {Icon: "\uf375", Color: 77}, //  + ".qss": {Icon: "\uf375", Color: 77}, //  ".r": {Icon: "\uf25d", Color: 68}, //  ".rakefile": {Icon: "\ue21e", Color: 160}, //  ".rar": {Icon: "\uf410", Color: 241}, //  @@ -281,18 +369,33 @@ var extIconMap = map[string]IconProperties{ ".ru": {Icon: "\ue21e", Color: 160}, //  ".rubydoc": {Icon: "\ue73b", Color: 160}, //  ".sass": {Icon: "\ue603", Color: 169}, //  + ".scad": {Icon: "\uf34e", Color: 220}, //  ".scala": {Icon: "\ue737", Color: 74}, //  ".scss": {Icon: "\ue749", Color: 204}, //  ".sh": {Icon: "\ue795", Color: 239}, //  ".shell": {Icon: "\ue795", Color: 239}, //  + ".skp": {Icon: "\U000f0eeb", Color: 101}, // 󰻫 + ".sldasm": {Icon: "\U000f0eeb", Color: 101}, // 󰻫 + ".sldprt": {Icon: "\U000f0eeb", Color: 101}, // 󰻫 ".slim": {Icon: "\ue73b", Color: 160}, //  + ".slvs": {Icon: "\U000f0eeb", Color: 101}, // 󰻫 ".sln": {Icon: "\ue70c", Color: 39}, //  ".so": {Icon: "\uf17c", Color: 241}, //  ".sql": {Icon: "\uf1c0", Color: 188}, //  + ".sqlite": {Icon: "\ue7c4", Color: 25}, //  ".sqlite3": {Icon: "\ue7c4", Color: 25}, //  - ".sty": {Icon: "\uf034", Color: 239}, //  + ".srt": {Icon: "\U000f0a16", Color: 214}, // 󰨖 + ".ssa": {Icon: "\U000f0a16", Color: 214}, // 󰨖 + ".ste": {Icon: "\U000f0eeb", Color: 101}, // 󰻫 + ".step": {Icon: "\U000f0eeb", Color: 101}, // 󰻫 + ".stl": {Icon: "\U000f01a7", Color: 102}, // 󰆧 + ".sty": {Icon: "\ue69b", Color: 239}, //  ".styl": {Icon: "\ue600", Color: 148}, //  ".stylus": {Icon: "\ue600", Color: 148}, //  + ".stp": {Icon: "\U000f0eeb", Color: 101}, // 󰻫 + ".sub": {Icon: "\U000f0a16", Color: 214}, // 󰨖 + ".sv": {Icon: "\U000f035b", Color: 28}, // 󰍛 + ".svh": {Icon: "\U000f035b", Color: 28}, // 󰍛 ".svelte": {Icon: "\ue697", Color: 208}, //  ".svg": {Icon: "\uf1c5", Color: 241}, //  ".swift": {Icon: "\ue755", Color: 208}, //  @@ -300,12 +403,14 @@ var extIconMap = map[string]IconProperties{ ".taz": {Icon: "\uf410", Color: 241}, //  ".tbz": {Icon: "\uf410", Color: 241}, //  ".tbz2": {Icon: "\uf410", Color: 241}, //  - ".tex": {Icon: "\uf034", Color: 79}, //  + ".tex": {Icon: "\ue69b", Color: 79}, //  ".tgz": {Icon: "\uf410", Color: 241}, //  ".tiff": {Icon: "\uf1c5", Color: 241}, //  ".tlz": {Icon: "\uf410", Color: 241}, //  ".toml": {Icon: "\ue615", Color: 241}, //  ".torrent": {Icon: "\ue275", Color: 76}, //  + ".tres": {Icon: "\ue65f", Color: 66}, //  + ".tscn": {Icon: "\ue65f", Color: 66}, //  ".ts": {Icon: "\ue628", Color: 74}, //  ".tsv": {Icon: "\uf1c3", Color: 241}, //  ".tsx": {Icon: "\ue7ba", Color: 74}, //  @@ -315,8 +420,14 @@ var extIconMap = map[string]IconProperties{ ".txz": {Icon: "\uf410", Color: 241}, //  ".tz": {Icon: "\uf410", Color: 241}, //  ".tzo": {Icon: "\uf410", Color: 241}, //  + ".ui": {Icon: "\uf2d0", Color: 17}, //  + ".v": {Icon: "\U000f035b", Color: 28}, // 󰍛 + ".vh": {Icon: "\U000f035b", Color: 28}, // 󰍛 + ".vhd": {Icon: "\U000f035b", Color: 28}, // 󰍛 + ".vhdl": {Icon: "\U000f035b", Color: 28}, // 󰍛 ".video": {Icon: "\uf03d", Color: 241}, //  ".vim": {Icon: "\ue62b", Color: 28}, //  + ".vsix": {Icon: "\ue70c", Color: 98}, //  ".vue": {Icon: "\U000f0844", Color: 113}, // 󰡄 ".war": {Icon: "\ue256", Color: 168}, //  ".wav": {Icon: "\uf001", Color: 241}, //  @@ -325,14 +436,19 @@ var extIconMap = map[string]IconProperties{ ".windows": {Icon: "\uf17a", Color: 81}, //  ".woff": {Icon: "\uf031", Color: 241}, //  ".woff2": {Icon: "\uf031", Color: 241}, //  + ".wrl": {Icon: "\U000f01a7", Color: 102}, // 󰆧 + ".wrz": {Icon: "\U000f01a7", Color: 102}, // 󰆧 + ".xcf": {Icon: "\uf338", Color: 240}, //  ".xhtml": {Icon: "\uf13b", Color: 196}, //  ".xls": {Icon: "\uf1c3", Color: 34}, //  ".xlsx": {Icon: "\uf1c3", Color: 34}, //  ".xml": {Icon: "\uf121", Color: 160}, //  + ".xpi": {Icon: "\ueae6", Color: 17}, //  ".xul": {Icon: "\uf121", Color: 166}, //  ".xz": {Icon: "\uf410", Color: 241}, //  ".yaml": {Icon: "\uf481", Color: 160}, //  ".yml": {Icon: "\uf481", Color: 160}, //  + ".zig": {Icon: "\ue6a9", Color: 172}, //  ".zip": {Icon: "\uf410", Color: 241}, //  ".zsh": {Icon: "\ue795", Color: 241}, //  ".zsh-theme": {Icon: "\ue795", Color: 241}, //  From 1129e0e4a08648f2c2db4cde550b296fcf8cda2d Mon Sep 17 00:00:00 2001 From: hasecilu Date: Sun, 7 Apr 2024 17:46:13 -0600 Subject: [PATCH 151/157] Add icons for some git remotes --- pkg/gui/presentation/icons/git_icons.go | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/pkg/gui/presentation/icons/git_icons.go b/pkg/gui/presentation/icons/git_icons.go index 5a7c0afc61b..55ada2e512d 100644 --- a/pkg/gui/presentation/icons/git_icons.go +++ b/pkg/gui/presentation/icons/git_icons.go @@ -19,10 +19,20 @@ var ( ) var remoteIcons = map[string]string{ - "github.com": "\ue709", //  - "bitbucket.org": "\ue703", //  - "gitlab.com": "\uf296", //  - "dev.azure.com": "\U000f0805", // 󰠅 + "github.com": "\ue709", //  + "bitbucket.org": "\ue703", //  + "gitlab.com": "\uf296", //  + "dev.azure.com": "\U000f0805", // 󰠅 + "codeberg.org": "\uf330", //  + "git.FreeBSD.org": "\uf30c", //  + "gitlab.archlinux.org": "\uf303", //  + "gitlab.freedesktop.org": "\uf360", //  + "gitlab.gnome.org": "\uf361", //  + "gnu.org": "\ue779", //  + "invent.kde.org": "\uf373", //  + "kernel.org": "\uf31a", //  + "salsa.debian.org": "\uf306", //  + "sr.ht": "\uf1db", //  } func patchGitIconsForNerdFontsV2() { From c5de9cfd8e869e993fd1e795936da49cdded38d8 Mon Sep 17 00:00:00 2001 From: hasecilu Date: Mon, 8 Jul 2024 11:03:28 -0600 Subject: [PATCH 152/157] fixup! Add icons for some file extensions --- pkg/gui/presentation/icons/file_icons.go | 228 ++++++++++++++++++----- 1 file changed, 186 insertions(+), 42 deletions(-) diff --git a/pkg/gui/presentation/icons/file_icons.go b/pkg/gui/presentation/icons/file_icons.go index e98bb396143..f0fcb69e664 100644 --- a/pkg/gui/presentation/icons/file_icons.go +++ b/pkg/gui/presentation/icons/file_icons.go @@ -82,94 +82,132 @@ var nameIconMap = map[string]IconProperties{ var extIconMap = map[string]IconProperties{ ".3gp": {Icon: "\uf03d", Color: 208}, //  ".3mf": {Icon: "\U000f01a7", Color: 102}, // 󰆧 + ".7z": {Icon: "\uf410", Color: 214}, //  ".aac": {Icon: "\uf001", Color: 45}, //  + ".a": {Icon: "\ueb9c", Color: 253}, //  + ".aiff": {Icon: "\uf001", Color: 39}, //  + ".aif": {Icon: "\uf001", Color: 39}, //  ".ai": {Icon: "\ue7b4", Color: 185}, //  ".android": {Icon: "\ue70e", Color: 70}, //  + ".ape": {Icon: "\uf001", Color: 39}, //  ".apk": {Icon: "\ue70e", Color: 70}, //  ".app": {Icon: "\ueae8", Color: 124}, //  ".apple": {Icon: "\uf179", Color: 15}, //  ".applescript": {Icon: "\uf179", Color: 66}, //  + ".asc": {Icon: "\uf099d", Color: 242}, // 󰦝 ".ass": {Icon: "\U000f0a16", Color: 214}, // 󰨖 - ".avi": {Icon: "\uf03d", Color: 140}, //  + ".astro": {Icon: "\ue6b3", Color: 197}, //  ".avif": {Icon: "\uf1c5", Color: 140}, //  + ".avi": {Icon: "\uf03d", Color: 140}, //  ".avro": {Icon: "\ue60b", Color: 130}, //  ".awk": {Icon: "\ue795", Color: 140}, //  ".azcli": {Icon: "\uebe8", Color: 32}, //  ".bak": {Icon: "\U000f006f", Color: 66}, // 󰁯 - ".bash": {Icon: "\ue795", Color: 113}, //  ".bash_history": {Icon: "\ue795", Color: 113}, //  + ".bash": {Icon: "\ue795", Color: 113}, //  ".bash_profile": {Icon: "\ue795", Color: 113}, //  ".bashrc": {Icon: "\ue795", Color: 113}, //  ".bat": {Icon: "\uf17a", Color: 81}, //  ".bats": {Icon: "\ue795", Color: 241}, //  ".bazel": {Icon: "\ue63a", Color: 113}, //  ".bib": {Icon: "\U000f125f", Color: 185}, // 󱉟 + ".bicep": {Icon: "\ue63b", Color: 32}, //  + ".bicepparam": {Icon: "\ue63b", Color: 103}, //  + ".blade.php": {Icon: "\uf2f7", Color: 203}, //  ".blend": {Icon: "\U000f00ab", Color: 208}, // 󰂫 ".blp": {Icon: "\U000f0ebe", Color: 68}, // 󰺾 ".bmp": {Icon: "\uf1c5", Color: 149}, //  ".brep": {Icon: "\U000f0eeb", Color: 101}, // 󰻫 - ".bz": {Icon: "\uf410", Color: 239}, //  ".bz2": {Icon: "\uf410", Color: 239}, //  + ".bz3": {Icon: "\uf410", Color: 214}, //  + ".bz": {Icon: "\uf410", Color: 239}, //  ".bzl": {Icon: "\ue63a", Color: 113}, //  - ".c": {Icon: "\ue61e", Color: 111}, //  - ".c++": {Icon: "\ue61d", Color: 204}, //  ".cab": {Icon: "\ue70f", Color: 241}, //  ".cache": {Icon: "\uf49b", Color: 231}, //  ".cast": {Icon: "\uf03d", Color: 208}, //  + ".cbl": {Icon: "\u2699", Color: 25}, // ⚙ ".cc": {Icon: "\ue61d", Color: 204}, //  + ".ccm": {Icon: "\ue61d", Color: 204}, //  ".cfg": {Icon: "\ue615", Color: 255}, //  + ".c++": {Icon: "\ue61d", Color: 204}, //  + ".c": {Icon: "\ue61e", Color: 111}, //  + ".cjs": {Icon: "\ue60c", Color: 185}, //  ".class": {Icon: "\ue256", Color: 168}, //  + ".cljc": {Icon: "\ue768", Color: 113}, //  + ".cljd": {Icon: "\ue76a", Color: 74}, //  ".clj": {Icon: "\ue768", Color: 113}, //  ".cljs": {Icon: "\ue76a", Color: 74}, //  ".cls": {Icon: "\ue69b", Color: 239}, //  + ".cmake": {Icon: "\ue615", Color: 66}, //  ".cmd": {Icon: "\ue70f", Color: 239}, //  + ".cob": {Icon: "\u2699", Color: 25}, // ⚙ + ".cobol": {Icon: "\u2699", Color: 25}, // ⚙ ".coffee": {Icon: "\uf0f4", Color: 185}, //  ".conf": {Icon: "\ue615", Color: 66}, //  + ".config.ru": {Icon: "\ue791", Color: 52}, //  ".cp": {Icon: "\ue61d", Color: 74}, //  ".cpio": {Icon: "\uf410", Color: 239}, //  ".cpp": {Icon: "\ue61d", Color: 74}, //  - ".cs": {Icon: "\U000f031b", Color: 58}, // 󰌛 + ".cppm": {Icon: "\ue61d", Color: 74}, //  + ".cpy": {Icon: "\u2699", Color: 25}, // ⚙ + ".crdownload": {Icon: "\uf019", Color: 43}, //  + ".cr": {Icon: "\ue62f", Color: 251}, //  ".csh": {Icon: "\ue795", Color: 240}, //  ".cshtml": {Icon: "\uf1fa", Color: 239}, //  + ".cs": {Icon: "\U000f031b", Color: 58}, // 󰌛 + ".cson": {Icon: "\ue60b", Color: 185}, //  ".csproj": {Icon: "\U000f031b", Color: 58}, // 󰌛 ".css": {Icon: "\ue749", Color: 75}, //  ".csv": {Icon: "\uf1c3", Color: 113}, //  ".csx": {Icon: "\U000f031b", Color: 58}, // 󰌛 + ".cts": {Icon: "\ue628", Color: 74}, //  ".cue": {Icon: "\U000f0cb9", Color: 211}, // 󰲹 + ".cuh": {Icon: "\ue64b", Color: 140}, //  + ".cu": {Icon: "\ue64b", Color: 113}, //  ".cxx": {Icon: "\ue61d", Color: 74}, //  - ".bicep": {Icon: "\ue63b", Color: 32}, //  - ".bicepparam": {Icon: "\ue63b", Color: 103}, //  - ".d": {Icon: "\ue7af", Color: 28}, //  + ".cxxm": {Icon: "\ue61d", Color: 74}, //  ".dart": {Icon: "\ue798", Color: 25}, //  - ".dconf": {Icon: "\ue706", Color: 188}, //  ".db": {Icon: "\uf1c0", Color: 188}, //  + ".dconf": {Icon: "\ue706", Color: 188}, //  ".deb": {Icon: "\ue77d", Color: 88}, //  ".desktop": {Icon: "\uf108", Color: 54}, //  + ".d": {Icon: "\ue7af", Color: 28}, //  ".diff": {Icon: "\uf440", Color: 241}, //  ".djvu": {Icon: "\uf02d", Color: 241}, //  ".dll": {Icon: "\ue70f", Color: 241}, //  ".doc": {Icon: "\U000f0219", Color: 26}, // 󰈙 ".docx": {Icon: "\U000f0219", Color: 26}, // 󰈙 ".dot": {Icon: "\U000f1049", Color: 24}, // 󱁉 + ".download": {Icon: "\uf019", Color: 43}, //  + ".drl": {Icon: "\ue28c", Color: 217}, //  + ".dropbox": {Icon: "\ue707", Color: 27}, //  ".ds_store": {Icon: "\uf179", Color: 15}, //  ".DS_store": {Icon: "\uf179", Color: 15}, //  + ".d.ts": {Icon: "\ue628", Color: 172}, //  ".dump": {Icon: "\uf1c0", Color: 188}, //  ".dwg": {Icon: "\U000f0eeb", Color: 101}, // 󰻫 ".dxf": {Icon: "\U000f0eeb", Color: 101}, // 󰻫 ".ebook": {Icon: "\ue28b", Color: 241}, //  ".ebuild": {Icon: "\uf30d", Color: 56}, //  ".editorconfig": {Icon: "\ue615", Color: 241}, //  + ".edn": {Icon: "\ue76a", Color: 74}, //  + ".eex": {Icon: "\ue62d", Color: 140}, //  ".ejs": {Icon: "\ue618", Color: 185}, //  + ".elc": {Icon: "\ue632", Color: 97}, //  ".elf": {Icon: "\ueae8", Color: 124}, //  + ".el": {Icon: "\ue632", Color: 97}, //  ".elm": {Icon: "\ue62c", Color: 74}, //  + ".eln": {Icon: "\ue632", Color: 97}, //  ".env": {Icon: "\uf462", Color: 227}, //  ".eot": {Icon: "\uf031", Color: 124}, //  + ".epp": {Icon: "\ue631", Color: 214}, //  ".epub": {Icon: "\ue28a", Color: 241}, //  ".erb": {Icon: "\ue73b", Color: 160}, //  ".erl": {Icon: "\ue7b1", Color: 163}, //  - ".ex": {Icon: "\ue62d", Color: 140}, //  ".exe": {Icon: "\uf17a", Color: 81}, //  + ".ex": {Icon: "\ue62d", Color: 140}, //  ".exs": {Icon: "\ue62d", Color: 140}, //  + ".f3d": {Icon: "\uf0eeb", Color: 101}, // 󰻫 ".f90": {Icon: "\U000f121a", Color: 97}, // 󱈚 ".fbx": {Icon: "\U000f01a7", Color: 102}, // 󰆧 ".fcbak": {Icon: "\uf336", Color: 160}, //  @@ -177,10 +215,12 @@ var extIconMap = map[string]IconProperties{ ".fcmat": {Icon: "\uf336", Color: 160}, //  ".fcparam": {Icon: "\uf336", Color: 160}, //  ".fcscript": {Icon: "\uf336", Color: 160}, //  - ".fcstd": {Icon: "\uf336", Color: 160}, //  ".fcstd1": {Icon: "\uf336", Color: 160}, //  + ".fcstd": {Icon: "\uf336", Color: 160}, //  ".fctb": {Icon: "\uf336", Color: 160}, //  ".fctl": {Icon: "\uf336", Color: 160}, //  + ".fdmdownload": {Icon: "\uf019", Color: 43}, //  + ".f#": {Icon: "\ue7a7", Color: 74}, //  ".fish": {Icon: "\ue795", Color: 249}, //  ".flac": {Icon: "\uf001", Color: 241}, //  ".flc": {Icon: "\uf031", Color: 255}, //  @@ -190,24 +230,24 @@ var extIconMap = map[string]IconProperties{ ".font": {Icon: "\uf031", Color: 241}, //  ".fs": {Icon: "\ue7a7", Color: 74}, //  ".fsi": {Icon: "\ue7a7", Color: 74}, //  + ".fsscript": {Icon: "\ue7a7", Color: 74}, //  ".fsx": {Icon: "\ue7a7", Color: 74}, //  ".gcode": {Icon: "\U000f0af4", Color: 234}, // 󰫴 ".gd": {Icon: "\ue65f", Color: 66}, //  ".gdoc": {Icon: "\uf1c2", Color: 40}, //  - ".gem": {Icon: "\ue21e", Color: 160}, //  ".gemfile": {Icon: "\ue21e", Color: 160}, //  + ".gem": {Icon: "\ue21e", Color: 160}, //  ".gemspec": {Icon: "\ue21e", Color: 160}, //  ".gform": {Icon: "\uf298", Color: 40}, //  ".gif": {Icon: "\uf1c5", Color: 140}, //  - ".git": {Icon: "\uf1d3", Color: 202}, //  - ".gitattributes": {Icon: "\uf1d3", Color: 202}, //  - ".gitignore": {Icon: "\uf1d3", Color: 202}, //  - ".gitmodules": {Icon: "\uf1d3", Color: 202}, //  - ".go": {Icon: "\ue627", Color: 74}, //  + ".git": {Icon: "\U000f02a2", Color: 202}, // 󰊢 + ".glb": {Icon: "\uf1b2", Color: 214}, //  + ".gnumakefile": {Icon: "\ue779", Color: 66}, //  ".godot": {Icon: "\ue65f", Color: 66}, //  + ".go": {Icon: "\ue627", Color: 74}, //  ".gql": {Icon: "\uf20e", Color: 199}, //  - ".graphql": {Icon: "\uf20e", Color: 199}, //  ".gradle": {Icon: "\ue256", Color: 168}, //  + ".graphql": {Icon: "\uf20e", Color: 199}, //  ".gresource": {Icon: "\uf362", Color: 231}, //  ".groovy": {Icon: "\ue775", Color: 24}, //  ".gsheet": {Icon: "\uf1c3", Color: 10}, //  @@ -215,47 +255,66 @@ var extIconMap = map[string]IconProperties{ ".guardfile": {Icon: "\ue21e", Color: 241}, //  ".gv": {Icon: "\U000f1049", Color: 24}, // 󱁉 ".gz": {Icon: "\uf410", Color: 241}, //  - ".h": {Icon: "\uf0fd", Color: 140}, //  + ".haml": {Icon: "\ue60e", Color: 255}, //  ".hbs": {Icon: "\ue60f", Color: 202}, //  ".hc": {Icon: "\U000f00a2", Color: 227}, // 󰂢 + ".heex": {Icon: "\ue62d", Color: 140}, //  ".hex": {Icon: "\U000f12a7", Color: 27}, // 󱊧 ".hh": {Icon: "\uf0fd", Color: 140}, //  + ".h": {Icon: "\uf0fd", Color: 140}, //  ".hpp": {Icon: "\uf0fd", Color: 140}, //  + ".hrl": {Icon: "\ue7b1", Color: 163}, //  ".hs": {Icon: "\ue777", Color: 140}, //  ".htm": {Icon: "\uf13b", Color: 196}, //  ".html": {Icon: "\uf13b", Color: 196}, //  + ".huff": {Icon: "\uf0858", Color: 56}, // 󰡘 + ".hurl": {Icon: "\uf0ec", Color: 198}, //  + ".hx": {Icon: "\ue666", Color: 208}, //  ".hxx": {Icon: "\uf0fd", Color: 140}, //  + ".icalendar": {Icon: "\uf073", Color: 18}, //  + ".ical": {Icon: "\uf073", Color: 18}, //  ".ico": {Icon: "\uf1c5", Color: 185}, //  + ".ics": {Icon: "\uf073", Color: 18}, //  + ".ifb": {Icon: "\uf073", Color: 18}, //  ".ifc": {Icon: "\U000f0eeb", Color: 101}, // 󰻫 ".ige": {Icon: "\U000f0eeb", Color: 101}, // 󰻫 ".iges": {Icon: "\U000f0eeb", Color: 101}, // 󰻫 ".igs": {Icon: "\U000f0eeb", Color: 101}, // 󰻫 ".image": {Icon: "\uf1c5", Color: 185}, //  + ".img": {Icon: "\ue271", Color: 181}, //  ".iml": {Icon: "\ue7b5", Color: 239}, //  + ".import": {Icon: "\uf0c6", Color: 255}, //  ".info": {Icon: "\uf129", Color: 230}, //  ".ini": {Icon: "\uf17a", Color: 81}, //  ".ino": {Icon: "\uf34b", Color: 73}, //  ".ipynb": {Icon: "\ue606", Color: 214}, //  ".iso": {Icon: "\ue271", Color: 239}, //  + ".ixx": {Icon: "\ue61d", Color: 74}, //  ".j2c": {Icon: "\uf1c5", Color: 239}, //  ".j2k": {Icon: "\uf1c5", Color: 239}, //  ".jad": {Icon: "\ue256", Color: 168}, //  ".jar": {Icon: "\ue256", Color: 168}, //  ".java": {Icon: "\ue256", Color: 168}, //  - ".jfi": {Icon: "\uf1c5", Color: 241}, //  ".jfif": {Icon: "\uf1c5", Color: 241}, //  + ".jfi": {Icon: "\uf1c5", Color: 241}, //  ".jif": {Icon: "\uf1c5", Color: 241}, //  ".jl": {Icon: "\ue624", Color: 241}, //  ".jmd": {Icon: "\uf48a", Color: 74}, //  ".jp2": {Icon: "\uf1c5", Color: 241}, //  - ".jpe": {Icon: "\uf1c5", Color: 241}, //  ".jpeg": {Icon: "\uf1c5", Color: 241}, //  + ".jpe": {Icon: "\uf1c5", Color: 241}, //  ".jpg": {Icon: "\uf1c5", Color: 241}, //  ".jpx": {Icon: "\uf1c5", Color: 241}, //  ".js": {Icon: "\ue74e", Color: 185}, //  + ".json5": {Icon: "\ue60b", Color: 185}, //  + ".jsonc": {Icon: "\ue60b", Color: 185}, //  ".json": {Icon: "\ue60b", Color: 185}, //  ".jsx": {Icon: "\ue7ba", Color: 45}, //  + ".jwmrc": {Icon: "\uf35b", Color: 32}, //  ".jxl": {Icon: "\uf1c5", Color: 241}, //  + ".kbx": {Icon: "\uf0bc4", Color: 243}, // 󰯄 + ".kdb": {Icon: "\uf23e", Color: 71}, //  + ".kdbx": {Icon: "\uf23e", Color: 71}, //  ".kdenlive": {Icon: "\uf33c", Color: 110}, //  ".kdenlivetitle": {Icon: "\uf33c", Color: 110}, //  ".kicad_dru": {Icon: "\uf34c", Color: 231}, //  @@ -266,6 +325,7 @@ var extIconMap = map[string]IconProperties{ ".kicad_sch": {Icon: "\uf34c", Color: 231}, //  ".kicad_sym": {Icon: "\uf34c", Color: 231}, //  ".kicad_wks": {Icon: "\uf34c", Color: 231}, //  + ".ko": {Icon: "\uf17c", Color: 253}, //  ".kpp": {Icon: "\uf33d", Color: 201}, //  ".kra": {Icon: "\uf33d", Color: 201}, //  ".krz": {Icon: "\uf33d", Color: 201}, //  @@ -274,81 +334,115 @@ var extIconMap = map[string]IconProperties{ ".kts": {Icon: "\ue634", Color: 99}, //  ".latex": {Icon: "\ue69b", Color: 241}, //  ".lck": {Icon: "\ue672", Color: 250}, //  + ".leex": {Icon: "\ue62d", Color: 140}, //  ".less": {Icon: "\ue758", Color: 54}, //  + ".lff": {Icon: "\uf031", Color: 255}, //  ".lhs": {Icon: "\ue777", Color: 140}, //  ".license": {Icon: "\U000f0219", Color: 185}, // 󰈙 + ".liquid": {Icon: "\ue670", Color: 106}, //  ".localized": {Icon: "\uf179", Color: 15}, //  ".lock": {Icon: "\uf023", Color: 241}, //  ".log": {Icon: "\uf4ed", Color: 188}, //  ".lrc": {Icon: "\U000f0a16", Color: 214}, // 󰨖 - ".lua": {Icon: "\ue620", Color: 74}, //  ".luac": {Icon: "\ue620", Color: 74}, //  + ".lua": {Icon: "\ue620", Color: 74}, //  ".luau": {Icon: "\ue620", Color: 74}, //  - ".lz": {Icon: "\uf410", Color: 241}, //  ".lz4": {Icon: "\uf410", Color: 241}, //  ".lzh": {Icon: "\uf410", Color: 241}, //  + ".lz": {Icon: "\uf410", Color: 241}, //  ".lzma": {Icon: "\uf410", Color: 241}, //  ".lzo": {Icon: "\uf410", Color: 241}, //  - ".m": {Icon: "\ue61e", Color: 111}, //  - ".m3u": {Icon: "\U000f0cb9", Color: 211}, // 󰲹 ".m3u8": {Icon: "\U000f0cb9", Color: 211}, // 󰲹 + ".m3u": {Icon: "\U000f0cb9", Color: 211}, // 󰲹 ".m4a": {Icon: "\uf001", Color: 239}, //  ".m4v": {Icon: "\uf03d", Color: 208}, //  ".magnet": {Icon: "\uf076", Color: 124}, //  ".makefile": {Icon: "\ue779", Color: 66}, //  ".markdown": {Icon: "\uf48a", Color: 74}, //  + ".material": {Icon: "\uf0509", Color: 163}, // 󰔉 + ".md5": {Icon: "\uf0565", Color: 103}, // 󰕥 ".md": {Icon: "\uf48a", Color: 74}, //  ".mdx": {Icon: "\uf48a", Color: 74}, //  + ".m": {Icon: "\ue61e", Color: 111}, //  + ".mint": {Icon: "\uf032a", Color: 108}, // 󰌪 ".mjs": {Icon: "\ue74e", Color: 185}, //  - ".mk": {Icon: "\ue795", Color: 241}, //  ".mkd": {Icon: "\uf48a", Color: 74}, //  + ".mk": {Icon: "\ue795", Color: 241}, //  ".mkv": {Icon: "\uf03d", Color: 241}, //  + ".ml": {Icon: "\ue67a", Color: 166}, //  + ".mli": {Icon: "\ue67a", Color: 166}, //  ".mm": {Icon: "\ue61d", Color: 111}, //  ".mobi": {Icon: "\ue28b", Color: 241}, //  + ".mo": {Icon: "\u221e", Color: 135}, // ∞ + ".mojo": {Icon: "\uf06d", Color: 196}, //  ".mov": {Icon: "\uf03d", Color: 241}, //  ".mp3": {Icon: "\uf001", Color: 241}, //  ".mp4": {Icon: "\uf03d", Color: 241}, //  + ".mpp": {Icon: "\ue61d", Color: 74}, //  + ".msf": {Icon: "\uf370", Color: 33}, //  ".msi": {Icon: "\ue70f", Color: 241}, //  + ".mts": {Icon: "\ue628", Color: 74}, //  ".mustache": {Icon: "\ue60f", Color: 241}, //  ".nfo": {Icon: "\uf129", Color: 230}, //  + ".nim": {Icon: "\ue677", Color: 220}, //  ".nix": {Icon: "\uf313", Color: 111}, //  ".node": {Icon: "\U000f0399", Color: 197}, // 󰎙 ".npmignore": {Icon: "\ue71e", Color: 197}, //  + ".nswag": {Icon: "\ue60b", Color: 112}, //  + ".nu": {Icon: "\u003e", Color: 36}, // > ".obj": {Icon: "\U000f01a7", Color: 102}, // 󰆧 ".odp": {Icon: "\uf1c4", Color: 241}, //  ".ods": {Icon: "\uf1c3", Color: 241}, //  ".odt": {Icon: "\uf1c2", Color: 241}, //  ".ogg": {Icon: "\uf001", Color: 241}, //  ".ogv": {Icon: "\uf03d", Color: 241}, //  + ".o": {Icon: "\ueae8", Color: 124}, //  ".opus": {Icon: "\U000f0223", Color: 208}, // 󰈣 ".org": {Icon: "\ue633", Color: 73}, //  ".otf": {Icon: "\uf031", Color: 241}, //  ".out": {Icon: "\ueae8", Color: 124}, //  ".part": {Icon: "\uf43a", Color: 241}, //  ".patch": {Icon: "\uf440", Color: 241}, //  + ".pck": {Icon: "\uf487", Color: 66}, //  ".pdf": {Icon: "\uf1c1", Color: 124}, //  ".php": {Icon: "\ue73d", Color: 61}, //  ".pl": {Icon: "\ue769", Color: 74}, //  ".pls": {Icon: "\U000f0cb9", Color: 211}, // 󰲹 ".ply": {Icon: "\U000f01a7", Color: 102}, // 󰆧 + ".pm": {Icon: "\ue769", Color: 74}, //  ".png": {Icon: "\uf1c5", Color: 241}, //  ".po": {Icon: "\U000f05ca", Color: 31}, // 󰗊 ".pot": {Icon: "\U000f05ca", Color: 31}, // 󰗊 + ".pp": {Icon: "\ue631", Color: 214}, //  ".ppt": {Icon: "\uf1c4", Color: 241}, //  ".pptx": {Icon: "\uf1c4", Color: 241}, //  + ".prisma": {Icon: "\ue684", Color: 62}, //  ".procfile": {Icon: "\ue21e", Color: 241}, //  + ".pro": {Icon: "\ue7a1", Color: 179}, //  ".properties": {Icon: "\ue60b", Color: 185}, //  ".ps1": {Icon: "\ue795", Color: 241}, //  + ".psb": {Icon: "\ue7b8", Color: 74}, //  + ".psd1": {Icon: "\uf0a0a", Color: 68}, // 󰨊 ".psd": {Icon: "\ue7b8", Color: 241}, //  + ".psm1": {Icon: "\uf0a0a", Color: 68}, // 󰨊 + ".pub": {Icon: "\uf0dd6", Color: 222}, // 󰷖 + ".pxd": {Icon: "\ue606", Color: 39}, //  + ".pxi": {Icon: "\ue606", Color: 39}, //  ".pxm": {Icon: "\uf1c5", Color: 241}, //  - ".py": {Icon: "\ue606", Color: 214}, //  ".pyc": {Icon: "\ue606", Color: 214}, //  + ".pyd": {Icon: "\ue606", Color: 222}, //  + ".py": {Icon: "\ue606", Color: 214}, //  + ".pyi": {Icon: "\ue606", Color: 214}, //  + ".pyo": {Icon: "\ue606", Color: 222}, //  + ".pyw": {Icon: "\ue606", Color: 39}, //  + ".pyx": {Icon: "\ue606", Color: 39}, //  ".qm": {Icon: "\U000f05ca", Color: 31}, // 󰗊 ".qml": {Icon: "\uf375", Color: 77}, //  ".qrc": {Icon: "\uf375", Color: 77}, //  ".qss": {Icon: "\uf375", Color: 77}, //  - ".r": {Icon: "\uf25d", Color: 68}, //  + ".query": {Icon: "\ue21c", Color: 107}, //  ".rakefile": {Icon: "\ue21e", Color: 160}, //  + ".rake": {Icon: "\ue791", Color: 52}, //  ".rar": {Icon: "\uf410", Color: 241}, //  ".razor": {Icon: "\uf1fa", Color: 81}, //  ".rb": {Icon: "\ue21e", Color: 160}, //  @@ -357,60 +451,96 @@ var extIconMap = map[string]IconProperties{ ".rdoc": {Icon: "\uf48a", Color: 74}, //  ".rds": {Icon: "\uf25d", Color: 68}, //  ".readme": {Icon: "\uf48a", Color: 74}, //  + ".res": {Icon: "\ue688", Color: 167}, //  + ".resi": {Icon: "\ue688", Color: 204}, //  + ".r": {Icon: "\uf25d", Color: 68}, //  ".rlib": {Icon: "\ue7a8", Color: 216}, //  ".rmd": {Icon: "\uf48a", Color: 74}, //  ".rpm": {Icon: "\ue7bb", Color: 52}, //  + ".rproj": {Icon: "\uf05c6", Color: 29}, // 󰗆 ".rs": {Icon: "\ue7a8", Color: 216}, //  ".rspec": {Icon: "\ue21e", Color: 160}, //  ".rspec_parallel": {Icon: "\ue21e", Color: 160}, //  ".rspec_status": {Icon: "\ue21e", Color: 160}, //  ".rss": {Icon: "\uf09e", Color: 130}, //  ".rtf": {Icon: "\U000f0219", Color: 241}, // 󰈙 - ".ru": {Icon: "\ue21e", Color: 160}, //  ".rubydoc": {Icon: "\ue73b", Color: 160}, //  + ".ru": {Icon: "\ue21e", Color: 160}, //  ".sass": {Icon: "\ue603", Color: 169}, //  + ".sbt": {Icon: "\ue737", Color: 167}, //  ".scad": {Icon: "\uf34e", Color: 220}, //  ".scala": {Icon: "\ue737", Color: 74}, //  + ".sc": {Icon: "\ue737", Color: 167}, //  + ".scm": {Icon: "\uf0627", Color: 255}, // 󰘧 ".scss": {Icon: "\ue749", Color: 204}, //  - ".sh": {Icon: "\ue795", Color: 239}, //  + ".sha1": {Icon: "\uf0565", Color: 103}, // 󰕥 + ".sha224": {Icon: "\uf0565", Color: 103}, // 󰕥 + ".sha256": {Icon: "\uf0565", Color: 103}, // 󰕥 + ".sha384": {Icon: "\uf0565", Color: 103}, // 󰕥 + ".sha512": {Icon: "\uf0565", Color: 103}, // 󰕥 ".shell": {Icon: "\ue795", Color: 239}, //  + ".sh": {Icon: "\ue795", Color: 239}, //  + ".sig": {Icon: "\u03bb", Color: 166}, // λ + ".signature": {Icon: "\u03bb", Color: 166}, // λ ".skp": {Icon: "\U000f0eeb", Color: 101}, // 󰻫 ".sldasm": {Icon: "\U000f0eeb", Color: 101}, // 󰻫 ".sldprt": {Icon: "\U000f0eeb", Color: 101}, // 󰻫 ".slim": {Icon: "\ue73b", Color: 160}, //  - ".slvs": {Icon: "\U000f0eeb", Color: 101}, // 󰻫 ".sln": {Icon: "\ue70c", Color: 39}, //  + ".slvs": {Icon: "\U000f0eeb", Color: 101}, // 󰻫 + ".sml": {Icon: "\u03bb", Color: 166}, // λ ".so": {Icon: "\uf17c", Color: 241}, //  + ".sol": {Icon: "\ue656", Color: 74}, //  + ".spec.js": {Icon: "\uf499", Color: 185}, //  + ".spec.jsx": {Icon: "\uf499", Color: 45}, //  + ".spec.ts": {Icon: "\uf499", Color: 74}, //  + ".spec.tsx": {Icon: "\uf499", Color: 26}, //  ".sql": {Icon: "\uf1c0", Color: 188}, //  - ".sqlite": {Icon: "\ue7c4", Color: 25}, //  ".sqlite3": {Icon: "\ue7c4", Color: 25}, //  + ".sqlite": {Icon: "\ue7c4", Color: 25}, //  ".srt": {Icon: "\U000f0a16", Color: 214}, // 󰨖 ".ssa": {Icon: "\U000f0a16", Color: 214}, // 󰨖 ".ste": {Icon: "\U000f0eeb", Color: 101}, // 󰻫 ".step": {Icon: "\U000f0eeb", Color: 101}, // 󰻫 ".stl": {Icon: "\U000f01a7", Color: 102}, // 󰆧 + ".stp": {Icon: "\U000f0eeb", Color: 101}, // 󰻫 + ".strings": {Icon: "\U000f05ca", Color: 31}, // 󰗊 ".sty": {Icon: "\ue69b", Color: 239}, //  ".styl": {Icon: "\ue600", Color: 148}, //  ".stylus": {Icon: "\ue600", Color: 148}, //  - ".stp": {Icon: "\U000f0eeb", Color: 101}, // 󰻫 ".sub": {Icon: "\U000f0a16", Color: 214}, // 󰨖 - ".sv": {Icon: "\U000f035b", Color: 28}, // 󰍛 - ".svh": {Icon: "\U000f035b", Color: 28}, // 󰍛 + ".sublime": {Icon: "\ue7aa", Color: 166}, //  + ".suo": {Icon: "\ue70c", Color: 98}, //  ".svelte": {Icon: "\ue697", Color: 208}, //  ".svg": {Icon: "\uf1c5", Color: 241}, //  + ".svh": {Icon: "\U000f035b", Color: 28}, // 󰍛 + ".sv": {Icon: "\U000f035b", Color: 28}, // 󰍛 ".swift": {Icon: "\ue755", Color: 208}, //  ".tar": {Icon: "\uf410", Color: 241}, //  ".taz": {Icon: "\uf410", Color: 241}, //  - ".tbz": {Icon: "\uf410", Color: 241}, //  + ".tbc": {Icon: "\uf06d3", Color: 25}, // 󰛓 ".tbz2": {Icon: "\uf410", Color: 241}, //  + ".tbz": {Icon: "\uf410", Color: 241}, //  + ".tcl": {Icon: "\uf06d3", Color: 25}, // 󰛓 + ".templ": {Icon: "\ueac4", Color: 178}, //  + ".terminal": {Icon: "\uf489", Color: 34}, //  + ".test.js": {Icon: "\uf499", Color: 185}, //  + ".test.jsx": {Icon: "\uf499", Color: 45}, //  + ".test.ts": {Icon: "\uf499", Color: 74}, //  + ".test.tsx": {Icon: "\uf499", Color: 26}, //  ".tex": {Icon: "\ue69b", Color: 79}, //  + ".tf": {Icon: "\ue69a", Color: 93}, //  + ".tfvars": {Icon: "\uf15b", Color: 93}, //  ".tgz": {Icon: "\uf410", Color: 241}, //  + ".t": {Icon: "\ue769", Color: 74}, //  ".tiff": {Icon: "\uf1c5", Color: 241}, //  ".tlz": {Icon: "\uf410", Color: 241}, //  - ".toml": {Icon: "\ue615", Color: 241}, //  + ".tmux": {Icon: "\uebc8", Color: 34}, //  + ".toml": {Icon: "\ue6b2", Color: 241}, //  ".torrent": {Icon: "\ue275", Color: 76}, //  ".tres": {Icon: "\ue65f", Color: 66}, //  ".tscn": {Icon: "\ue65f", Color: 66}, //  + ".tsconfig": {Icon: "\ue772", Color: 208}, //  ".ts": {Icon: "\ue628", Color: 74}, //  ".tsv": {Icon: "\uf1c3", Color: 241}, //  ".tsx": {Icon: "\ue7ba", Color: 74}, //  @@ -418,30 +548,44 @@ var extIconMap = map[string]IconProperties{ ".twig": {Icon: "\ue61c", Color: 241}, //  ".txt": {Icon: "\uf15c", Color: 241}, //  ".txz": {Icon: "\uf410", Color: 241}, //  + ".typoscript": {Icon: "\ue772", Color: 208}, //  ".tz": {Icon: "\uf410", Color: 241}, //  ".tzo": {Icon: "\uf410", Color: 241}, //  ".ui": {Icon: "\uf2d0", Color: 17}, //  - ".v": {Icon: "\U000f035b", Color: 28}, // 󰍛 - ".vh": {Icon: "\U000f035b", Color: 28}, // 󰍛 + ".vala": {Icon: "\ue69e", Color: 91}, //  ".vhd": {Icon: "\U000f035b", Color: 28}, // 󰍛 ".vhdl": {Icon: "\U000f035b", Color: 28}, // 󰍛 + ".vh": {Icon: "\U000f035b", Color: 28}, // 󰍛 + ".v": {Icon: "\U000f035b", Color: 28}, // 󰍛 ".video": {Icon: "\uf03d", Color: 241}, //  ".vim": {Icon: "\ue62b", Color: 28}, //  + ".vsh": {Icon: "\ue6ac", Color: 67}, //  ".vsix": {Icon: "\ue70c", Color: 98}, //  ".vue": {Icon: "\U000f0844", Color: 113}, // 󰡄 ".war": {Icon: "\ue256", Color: 168}, //  + ".wasm": {Icon: "\ue6a1", Color: 62}, //  ".wav": {Icon: "\uf001", Color: 241}, //  + ".webmanifest": {Icon: "\ue60b", Color: 185}, //  ".webm": {Icon: "\uf03d", Color: 241}, //  + ".webpack": {Icon: "\uf072b", Color: 74}, // 󰜫 ".webp": {Icon: "\uf1c5", Color: 241}, //  ".windows": {Icon: "\uf17a", Color: 81}, //  - ".woff": {Icon: "\uf031", Color: 241}, //  + ".wma": {Icon: "\uf001", Color: 39}, //  ".woff2": {Icon: "\uf031", Color: 241}, //  + ".woff": {Icon: "\uf031", Color: 241}, //  ".wrl": {Icon: "\U000f01a7", Color: 102}, // 󰆧 ".wrz": {Icon: "\U000f01a7", Color: 102}, // 󰆧 + ".wvc": {Icon: "\uf001", Color: 39}, //  + ".wv": {Icon: "\uf001", Color: 39}, //  + ".xaml": {Icon: "\uf0673", Color: 56}, // 󰙳 ".xcf": {Icon: "\uf338", Color: 240}, //  + ".xcplayground": {Icon: "\ue755", Color: 166}, //  + ".xcstrings": {Icon: "\U000f05ca", Color: 31}, // 󰗊 ".xhtml": {Icon: "\uf13b", Color: 196}, //  + ".x": {Icon: "\ue691", Color: 111}, //  ".xls": {Icon: "\uf1c3", Color: 34}, //  ".xlsx": {Icon: "\uf1c3", Color: 34}, //  + ".xm": {Icon: "\ue691", Color: 74}, //  ".xml": {Icon: "\uf121", Color: 160}, //  ".xpi": {Icon: "\ueae6", Color: 17}, //  ".xul": {Icon: "\uf121", Color: 166}, //  @@ -451,8 +595,8 @@ var extIconMap = map[string]IconProperties{ ".zig": {Icon: "\ue6a9", Color: 172}, //  ".zip": {Icon: "\uf410", Color: 241}, //  ".zsh": {Icon: "\ue795", Color: 241}, //  - ".zsh-theme": {Icon: "\ue795", Color: 241}, //  ".zshrc": {Icon: "\ue795", Color: 241}, //  + ".zsh-theme": {Icon: "\ue795", Color: 241}, //  ".zst": {Icon: "\uf410", Color: 241}, //  } From cd01e4e7c2639c061e319df024917ca469690172 Mon Sep 17 00:00:00 2001 From: hasecilu Date: Mon, 8 Jul 2024 11:46:20 -0600 Subject: [PATCH 153/157] fixup! Add icons for some file names --- pkg/gui/presentation/icons/file_icons.go | 236 +++++++++++++++++------ 1 file changed, 174 insertions(+), 62 deletions(-) diff --git a/pkg/gui/presentation/icons/file_icons.go b/pkg/gui/presentation/icons/file_icons.go index f0fcb69e664..8f639a4eead 100644 --- a/pkg/gui/presentation/icons/file_icons.go +++ b/pkg/gui/presentation/icons/file_icons.go @@ -15,68 +15,180 @@ var ( ) var nameIconMap = map[string]IconProperties{ - ".Trash": {Icon: "\uf1f8", Color: 241}, //  - ".atom": {Icon: "\ue764", Color: 241}, //  - ".bashprofile": {Icon: "\ue615", Color: 113}, //  - ".bashrc": {Icon: "\ue795", Color: 113}, //  - ".idea": {Icon: "\ue7b5", Color: 241}, //  - ".git": {Icon: "\uf1d3", Color: 202}, //  - ".gitattributes": {Icon: "\uf1d3", Color: 202}, //  - ".gitconfig": {Icon: "\uf1d3", Color: 202}, //  - ".github": {Icon: "\uf408", Color: 241}, //  - ".gitignore": {Icon: "\uf1d3", Color: 202}, //  - ".gitmodules": {Icon: "\uf1d3", Color: 202}, //  - ".mailmap": {Icon: "\uf1d3", Color: 202}, //  - ".npmrc": {Icon: "\ue71e", Color: 197}, //  - ".prettierrc": {Icon: "\ue6b4", Color: 33}, //  - ".rvm": {Icon: "\ue21e", Color: 160}, //  - ".SRCINFO": {Icon: "\uf129", Color: 230}, //  - ".vimrc": {Icon: "\ue62b", Color: 28}, //  - ".vscode": {Icon: "\ue70c", Color: 39}, //  - ".Xauthority": {Icon: "\uf369", Color: 196}, //  - ".xinitrc": {Icon: "\uf369", Color: 196}, //  - ".Xresources": {Icon: "\uf369", Color: 196}, //  - ".xsession": {Icon: "\uf369", Color: 196}, //  - ".zshrc": {Icon: "\ue795", Color: 113}, //  - "bin": {Icon: "\ue5fc", Color: 241}, //  - "Cargo.lock": {Icon: "\ue7a8", Color: 216}, //  - "Cargo.toml": {Icon: "\ue7a8", Color: 216}, //  - "COMMIT_EDITMSG": {Icon: "\ue702", Color: 239}, //  - "compose.yaml": {Icon: "\uf308", Color: 68}, //  - "compose.yml": {Icon: "\uf308", Color: 68}, //  - "config": {Icon: "\ue5fc", Color: 241}, //  - "docker-compose.yml": {Icon: "\uf308", Color: 68}, //  - "docker-compose.yaml":{Icon: "\uf308", Color: 68}, //  - "Dockerfile": {Icon: "\uf308", Color: 68}, //  - "ds_store": {Icon: "\uf179", Color: 15}, //  - "favicon.ico": {Icon: "\ue623", Color: 185}, //  - "fp-info-cache": {Icon: "\uf49b", Color: 231}, //  - "fp-lib-table": {Icon: "\uf34c", Color: 231}, //  - "gitignore_global": {Icon: "\uf1d3", Color: 202}, //  - "GNUmakefile": {Icon: "\ue779", Color: 66}, //  - "go.mod": {Icon: "\ue627", Color: 74}, //  - "go.sum": {Icon: "\ue627", Color: 74}, //  - "gradle": {Icon: "\ue256", Color: 168}, //  - "gruntfile.coffee": {Icon: "\ue611", Color: 166}, //  - "gruntfile.js": {Icon: "\ue611", Color: 166}, //  - "gruntfile.ls": {Icon: "\ue611", Color: 166}, //  - "gtkrc": {Icon: "\uf362", Color: 231}, //  - "gulpfile.coffee": {Icon: "\ue610", Color: 167}, //  - "gulpfile.js": {Icon: "\ue610", Color: 167}, //  - "gulpfile.ls": {Icon: "\ue610", Color: 168}, //  - "hidden": {Icon: "\uf023", Color: 241}, //  - "include": {Icon: "\ue5fc", Color: 241}, //  - "lib": {Icon: "\uf121", Color: 241}, //  - "localized": {Icon: "\uf179", Color: 15}, //  - "Makefile": {Icon: "\ue975", Color: 241}, //  - "node_modules": {Icon: "\ue718", Color: 197}, //  - "npmignore": {Icon: "\ue71e", Color: 197}, //  - "PKGBUILD": {Icon: "\uf303", Color: 38}, //  - "rubydoc": {Icon: "\ue73b", Color: 160}, //  - "sym-lib-table": {Icon: "\uf34c", Color: 231}, //  - "xorg.conf": {Icon: "\uf369", Color: 196}, //  - "xsettingsd.conf": {Icon: "\uf369", Color: 196}, //  - "yarn.lock": {Icon: "\ue6a7", Color: 74}, //  + ".atom": {Icon: "\ue764", Color: 241}, //  + ".babelrc": {Icon: "\ue639", Color: 185}, //  + ".bash_profile": {Icon: "\ue615", Color: 113}, //  + ".bashprofile": {Icon: "\ue615", Color: 113}, //  + ".bashrc": {Icon: "\ue795", Color: 113}, //  + ".dockerignore": {Icon: "\uf0868", Color: 68}, // 󰡨 + ".ds_store": {Icon: "\ue615", Color: 239}, //  + ".editorconfig": {Icon: "\ue652", Color: 255}, //  + ".env": {Icon: "\uf462", Color: 227}, //  + ".eslintignore": {Icon: "\ue655", Color: 56}, //  + ".eslintrc": {Icon: "\ue655", Color: 56}, //  + ".gitattributes": {Icon: "\U000f02a2", Color: 202}, // 󰊢 + ".git-blame-ignore-revs": {Icon: "\ue702", Color: 196}, //  + ".gitconfig": {Icon: "\U000f02a2", Color: 202}, // 󰊢 + ".github": {Icon: "\uf408", Color: 241}, //  + ".git": {Icon: "\U000f02a2", Color: 202}, // 󰊢 + ".gitignore": {Icon: "\U000f02a2", Color: 202}, // 󰊢 + ".gitlab-ci.yml": {Icon: "\uf296", Color: 196}, //  + ".gitmodules": {Icon: "\U000f02a2", Color: 202}, // 󰊢 + ".gtkrc-2.0": {Icon: "\uf362", Color: 231}, //  + ".gvimrc": {Icon: "\ue62b", Color: 28}, //  + "_gvimrc": {Icon: "\ue62b", Color: 28}, //  + ".idea": {Icon: "\ue7b5", Color: 241}, //  + ".justfile": {Icon: "\uf0ad", Color: 66}, //  + ".luaurc": {Icon: "\ue615", Color: 75}, //  + ".mailmap": {Icon: "\U000f02a2", Color: 202}, // 󰊢 + ".npmignore": {Icon: "\ue71e", Color: 197}, //  + ".npmrc": {Icon: "\ue71e", Color: 197}, //  + ".nuxtrc": {Icon: "\uf1106", Color: 42}, // 󱄆 + ".nvmrc": {Icon: "\ue718", Color: 71}, //  + ".prettierignore": {Icon: "\ue6b4", Color: 33}, //  + ".prettierrc": {Icon: "\ue6b4", Color: 33}, //  + ".prettierrc.json5": {Icon: "\ue6b4", Color: 33}, //  + ".prettierrc.json": {Icon: "\ue6b4", Color: 33}, //  + ".prettierrc.toml": {Icon: "\ue6b4", Color: 33}, //  + ".prettierrc.yaml": {Icon: "\ue6b4", Color: 33}, //  + ".prettierrc.yml": {Icon: "\ue6b4", Color: 33}, //  + ".rvm": {Icon: "\ue21e", Color: 160}, //  + ".settings.json": {Icon: "\ue70c", Color: 98}, //  + ".SRCINFO": {Icon: "\uf129", Color: 230}, //  + ".Trash": {Icon: "\uf1f8", Color: 241}, //  + ".vimrc": {Icon: "\ue62b", Color: 28}, //  + "_vimrc": {Icon: "\ue62b", Color: 28}, //  + ".vscode": {Icon: "\ue70c", Color: 39}, //  + ".Xauthority": {Icon: "\uf369", Color: 196}, //  + ".xinitrc": {Icon: "\uf369", Color: 196}, //  + ".Xresources": {Icon: "\uf369", Color: 196}, //  + ".xsession": {Icon: "\uf369", Color: 196}, //  + ".zprofile": {Icon: "\ue615", Color: 113}, //  + ".zshenv": {Icon: "\ue615", Color: 113}, //  + ".zshrc": {Icon: "\ue795", Color: 113}, //  + "bin": {Icon: "\ue5fc", Color: 241}, //  + "brewfile": {Icon: "\ue791", Color: 52}, //  + "bspwmrc": {Icon: "\uf355", Color: 236}, //  + "build.gradle": {Icon: "\ue660", Color: 24}, //  + "build": {Icon: "\ue63a", Color: 113}, //  + "build.zig.zon": {Icon: "\ue6a9", Color: 172}, //  + "cantorrc": {Icon: "\uf373", Color: 32}, //  + "Cargo.lock": {Icon: "\ue7a8", Color: 216}, //  + "Cargo.toml": {Icon: "\ue7a8", Color: 216}, //  + "checkhealth": {Icon: "\uf04d9", Color: 75}, // 󰓙 + "cmakelists.txt": {Icon: "\ue615", Color: 66}, //  + "commit_editmsg": {Icon: "\ue702", Color: 196}, //  + "COMMIT_EDITMSG": {Icon: "\ue702", Color: 239}, //  + "commitlint.config.js": {Icon: "\uf0718", Color: 30}, // 󰜘 + "commitlint.config.ts": {Icon: "\uf0718", Color: 30}, // 󰜘 + "compose.yaml": {Icon: "\uf308", Color: 68}, //  + "compose.yml": {Icon: "\uf308", Color: 68}, //  + "config": {Icon: "\ue5fc", Color: 241}, //  + "containerfile": {Icon: "\uf0868", Color: 68}, // 󰡨 + "copying": {Icon: "\ue60a", Color: 185}, //  + "copying.lesser": {Icon: "\ue60a", Color: 185}, //  + "docker-compose.yaml": {Icon: "\uf308", Color: 68}, //  + "docker-compose.yml": {Icon: "\uf308", Color: 68}, //  + "dockerfile": {Icon: "\uf0868", Color: 68}, // 󰡨 + "Dockerfile": {Icon: "\uf308", Color: 68}, //  + "ds_store": {Icon: "\uf179", Color: 15}, //  + "eslint.config.cjs": {Icon: "\ue655", Color: 56}, //  + "eslint.config.js": {Icon: "\ue655", Color: 56}, //  + "eslint.config.mjs": {Icon: "\ue655", Color: 56}, //  + "eslint.config.ts": {Icon: "\ue655", Color: 56}, //  + "ext_typoscript_setup.txt": {Icon: "\ue772", Color: 208}, //  + "favicon.ico": {Icon: "\ue623", Color: 185}, //  + "fp-info-cache": {Icon: "\uf49b", Color: 231}, //  + "fp-lib-table": {Icon: "\uf34c", Color: 231}, //  + "FreeCAD.conf": {Icon: "\uf336", Color: 160}, //  + "gemfile$": {Icon: "\ue791", Color: 52}, //  + "gitignore_global": {Icon: "\U000f02a2", Color: 202}, // 󰊢 + "gnumakefile": {Icon: "\ue779", Color: 66}, //  + "GNUmakefile": {Icon: "\ue779", Color: 66}, //  + "go.mod": {Icon: "\ue627", Color: 74}, //  + "go.sum": {Icon: "\ue627", Color: 74}, //  + "go.work": {Icon: "\ue627", Color: 74}, //  + "gradle": {Icon: "\ue256", Color: 168}, //  + "gradle.properties": {Icon: "\ue660", Color: 24}, //  + "gradlew": {Icon: "\ue660", Color: 24}, //  + "gradle-wrapper.properties": {Icon: "\ue660", Color: 24}, //  + "gruntfile.babel.js": {Icon: "\ue611", Color: 166}, //  + "gruntfile.coffee": {Icon: "\ue611", Color: 166}, //  + "gruntfile.js": {Icon: "\ue611", Color: 166}, //  + "gruntfile.ls": {Icon: "\ue611", Color: 166}, //  + "gruntfile.ts": {Icon: "\ue611", Color: 166}, //  + "gtkrc": {Icon: "\uf362", Color: 231}, //  + "gulpfile.babel.js": {Icon: "\ue610", Color: 167}, //  + "gulpfile.coffee": {Icon: "\ue610", Color: 167}, //  + "gulpfile.js": {Icon: "\ue610", Color: 167}, //  + "gulpfile.ls": {Icon: "\ue610", Color: 168}, //  + "gulpfile.ts": {Icon: "\ue610", Color: 167}, //  + "hidden": {Icon: "\uf023", Color: 241}, //  + "hypridle.conf": {Icon: "\uf359", Color: 37}, //  + "hyprland.conf": {Icon: "\uf359", Color: 37}, //  + "hyprlock.conf": {Icon: "\uf359", Color: 37}, //  + "i3blocks.conf": {Icon: "\uf35a", Color: 255}, //  + "i3status.conf": {Icon: "\uf35a", Color: 255}, //  + "include": {Icon: "\ue5fc", Color: 241}, //  + "ionic.config.json": {Icon: "\ue7a9", Color: 33}, //  + "justfile": {Icon: "\uf0ad", Color: 66}, //  + "kalgebrarc": {Icon: "\uf373", Color: 32}, //  + "kdeglobals": {Icon: "\uf373", Color: 32}, //  + "kdenlive-layoutsrc": {Icon: "\uf33c", Color: 110}, //  + "kdenliverc": {Icon: "\uf33c", Color: 110}, //  + "kritadisplayrc": {Icon: "\uf33d", Color: 201}, //  + "kritarc": {Icon: "\uf33d", Color: 201}, //  + "lib": {Icon: "\uf121", Color: 241}, //  + "localized": {Icon: "\uf179", Color: 15}, //  + "lxde-rc.xml": {Icon: "\uf363", Color: 246}, //  + "lxqt.conf": {Icon: "\uf364", Color: 32}, //  + "Makefile": {Icon: "\ue975", Color: 241}, //  + "mix.lock": {Icon: "\ue62d", Color: 140}, //  + "mpv.conf": {Icon: "\uf36e", Color: 53}, //  + "node_modules": {Icon: "\ue718", Color: 197}, //  + "npmignore": {Icon: "\ue71e", Color: 197}, //  + "nuxt.config.cjs": {Icon: "\uf1106", Color: 42}, // 󱄆 + "nuxt.config.js": {Icon: "\uf1106", Color: 42}, // 󱄆 + "nuxt.config.mjs": {Icon: "\uf1106", Color: 42}, // 󱄆 + "nuxt.config.ts": {Icon: "\uf1106", Color: 42}, // 󱄆 + "package.json": {Icon: "\ue71e", Color: 197}, //  + "package-lock.json": {Icon: "\ue71e", Color: 52}, //  + "PKGBUILD": {Icon: "\uf303", Color: 38}, //  + "platformio.ini": {Icon: "\ue682", Color: 208}, //  + "pom.xml": {Icon: "\ue674", Color: 52}, //  + "prettier.config.cjs": {Icon: "\ue6b4", Color: 33}, //  + "prettier.config.js": {Icon: "\ue6b4", Color: 33}, //  + "prettier.config.mjs": {Icon: "\ue6b4", Color: 33}, //  + "prettier.config.ts": {Icon: "\ue6b4", Color: 33}, //  + "PrusaSlicerGcodeViewer.ini": {Icon: "\uf351", Color: 202}, //  + "PrusaSlicer.ini": {Icon: "\uf351", Color: 202}, //  + "py.typed": {Icon: "\ue606", Color: 214}, //  + "QtProject.conf": {Icon: "\uf375", Color: 77}, //  + "R": {Icon: "\uf07d4", Color: 25}, // 󰟔 + "robots.txt": {Icon: "\uf06a9", Color: 60}, // 󰚩 + "rubydoc": {Icon: "\ue73b", Color: 160}, //  + "settings.gradle": {Icon: "\ue660", Color: 24}, //  + "svelte.config.js": {Icon: "\ue697", Color: 196}, //  + "sxhkdrc": {Icon: "\uf355", Color: 236}, //  + "sym-lib-table": {Icon: "\uf34c", Color: 231}, //  + "tailwind.config.js": {Icon: "\uf13ff", Color: 45}, // 󱏿 + "tailwind.config.mjs": {Icon: "\uf13ff", Color: 45}, // 󱏿 + "tailwind.config.ts": {Icon: "\uf13ff", Color: 45}, // 󱏿 + "tmux.conf": {Icon: "\uebc8", Color: 34}, //  + "tmux.conf.local": {Icon: "\uebc8", Color: 34}, //  + "tsconfig.json": {Icon: "\ue69d", Color: 74}, //  + "unlicense": {Icon: "\ue60a", Color: 185}, //  + "vagrantfile$": {Icon: "\uf2b8", Color: 27}, //  + "vlcrc": {Icon: "\uf057c", Color: 208}, // 󰕼 + "webpack": {Icon: "\uf072b", Color: 74}, // 󰜫 + "weston.ini": {Icon: "\uf367", Color: 214}, //  + "workspace": {Icon: "\ue63a", Color: 113}, //  + "xmobarrc.hs": {Icon: "\uf35e", Color: 203}, //  + "xmobarrc": {Icon: "\uf35e", Color: 203}, //  + "xmonad.hs": {Icon: "\uf35e", Color: 203}, //  + "xorg.conf": {Icon: "\uf369", Color: 196}, //  + "xsettingsd.conf": {Icon: "\uf369", Color: 196}, //  + "yarn.lock": {Icon: "\ue6a7", Color: 74}, //  } var extIconMap = map[string]IconProperties{ From 7652d579f587c3202d1d80464557cfaa8005b3de Mon Sep 17 00:00:00 2001 From: Jesse Duffield Date: Sat, 13 Jul 2024 13:34:35 +1000 Subject: [PATCH 154/157] Check for fixup commits on CI I keep merging PRs that still have fixup commits on them! This will make it impossible to do so --- .github/workflows/ci.yml | 22 ++++++++++++++++++++++ scripts/check_for_fixups.sh | 25 +++++++++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100755 scripts/check_for_fixups.sh diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 64c890894c8..9b0a04938d5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -219,3 +219,25 @@ jobs: CODACY_PROJECT_TOKEN=${{ secrets.CODACY_PROJECT_TOKEN }} \ bash <(curl -Ls https://coverage.codacy.com/get.sh) report \ --force-coverage-parser go -r coverage.out + + check-for-fixups: + runs-on: ubuntu-latest + if: github.ref != 'refs/heads/master' + steps: + # See https://github.com/actions/checkout/issues/552#issuecomment-1167086216 + - name: "PR commits + 1" + run: echo "PR_FETCH_DEPTH=$(( ${{ github.event.pull_request.commits }} + 1 ))" >> "${GITHUB_ENV}" + + - name: "Checkout PR branch and all PR commits" + uses: actions/checkout@v4 + with: + ref: ${{ github.event.pull_request.head.ref }} + fetch-depth: ${{ env.PR_FETCH_DEPTH }} + + - name: "Fetch the other branch with enough history for a common merge-base commit" + run: | + git fetch origin ${{ github.event.pull_request.base.ref }} + + - name: Check for fixups + run: | + ./scripts/check_for_fixups.sh ${{ github.event.pull_request.base.ref }} diff --git a/scripts/check_for_fixups.sh b/scripts/check_for_fixups.sh new file mode 100755 index 00000000000..c2c2e1a21ba --- /dev/null +++ b/scripts/check_for_fixups.sh @@ -0,0 +1,25 @@ +#!/bin/sh + +base_ref=$1 + +# Determine the base commit +base_commit=$(git merge-base HEAD origin/"$base_ref") + +# Check if base_commit is set correctly +if [ -z "$base_commit" ]; then + echo "Failed to determine base commit." + exit 1 +fi +echo "Base commit: $base_commit" + +# Get commits with "fixup!" in the message from base_commit to HEAD +commits=$(git log -i -P --grep "fixup\!" --format="%h %s" "$base_commit..HEAD") + +if [ -z "$commits" ]; then + echo "No fixup commits found." + exit 0 +else + echo "Fixup commits found:" + echo "$commits" + exit 1 +fi From b9107d5fc8ff941456b26accfefeffe0f81e8d11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Istv=C3=A1n=20Donk=C3=B3?= Date: Mon, 25 Sep 2023 17:32:12 +0200 Subject: [PATCH 155/157] Support setting the similarity threshold for detecting renames --- docs/Config.md | 2 + docs/keybindings/Keybindings_en.md | 2 + docs/keybindings/Keybindings_ja.md | 2 + docs/keybindings/Keybindings_ko.md | 2 + docs/keybindings/Keybindings_nl.md | 2 + docs/keybindings/Keybindings_pl.md | 2 + docs/keybindings/Keybindings_ru.md | 2 + docs/keybindings/Keybindings_zh-CN.md | 2 + docs/keybindings/Keybindings_zh-TW.md | 2 + pkg/commands/git_commands/commit.go | 1 + pkg/commands/git_commands/commit_test.go | 88 +- pkg/commands/git_commands/file_loader.go | 10 +- pkg/commands/git_commands/file_loader_test.go | 28 +- pkg/commands/git_commands/stash.go | 1 + pkg/commands/git_commands/stash_test.go | 53 +- pkg/commands/git_commands/working_tree.go | 1 + .../git_commands/working_tree_test.go | 97 ++- pkg/config/app_config.go | 20 +- pkg/config/user_config.go | 272 +++---- pkg/gui/controllers.go | 2 + .../rename_similarity_threshold_controller.go | 100 +++ pkg/i18n/english.go | 750 +++++++++--------- .../rename_similarity_threshold_change.go | 41 + .../rename_similarity_threshold_change.go | 35 + pkg/integration/tests/test_list.go | 2 + schema/config.json | 8 + 26 files changed, 909 insertions(+), 618 deletions(-) create mode 100644 pkg/gui/controllers/rename_similarity_threshold_controller.go create mode 100644 pkg/integration/tests/diff/rename_similarity_threshold_change.go create mode 100644 pkg/integration/tests/file/rename_similarity_threshold_change.go diff --git a/docs/Config.md b/docs/Config.md index 03501e8c2fe..be579ae8bda 100644 --- a/docs/Config.md +++ b/docs/Config.md @@ -521,6 +521,8 @@ keybinding: toggleWhitespaceInDiffView: increaseContextInDiffView: '}' decreaseContextInDiffView: '{' + increaseRenameSimilarityThreshold: ) + decreaseRenameSimilarityThreshold: ( openDiffTool: status: checkForUpdate: u diff --git a/docs/keybindings/Keybindings_en.md b/docs/keybindings/Keybindings_en.md index eb88cb1829c..47ae9cfb5d7 100644 --- a/docs/keybindings/Keybindings_en.md +++ b/docs/keybindings/Keybindings_en.md @@ -14,6 +14,8 @@ _Legend: `` means ctrl+b, `` means alt+b, `B` means shift+b_ | `` @ `` | View command log options | View options for the command log e.g. show/hide the command log and focus the command log. | | `` P `` | Push | Push the current branch to its upstream branch. If no upstream is configured, you will be prompted to configure an upstream branch. | | `` p `` | Pull | Pull changes from the remote for the current branch. If no upstream is configured, you will be prompted to configure an upstream branch. | +| `` ) `` | Increase rename similarity threshold | Increase the similarity threshold for a deletion and addition pair to be treated as a rename. | +| `` ( `` | Decrease rename similarity threshold | Decrease the similarity threshold for a deletion and addition pair to be treated as a rename. | | `` } `` | Increase diff context size | Increase the amount of the context shown around changes in the diff view. | | `` { `` | Decrease diff context size | Decrease the amount of the context shown around changes in the diff view. | | `` : `` | Execute custom command | Bring up a prompt where you can enter a shell command to execute. Not to be confused with pre-configured custom commands. | diff --git a/docs/keybindings/Keybindings_ja.md b/docs/keybindings/Keybindings_ja.md index 9a146261b9a..d72096f62cd 100644 --- a/docs/keybindings/Keybindings_ja.md +++ b/docs/keybindings/Keybindings_ja.md @@ -14,6 +14,8 @@ _Legend: `` means ctrl+b, `` means alt+b, `B` means shift+b_ | `` @ `` | コマンドログメニューを開く | View options for the command log e.g. show/hide the command log and focus the command log. | | `` P `` | Push | Push the current branch to its upstream branch. If no upstream is configured, you will be prompted to configure an upstream branch. | | `` p `` | Pull | Pull changes from the remote for the current branch. If no upstream is configured, you will be prompted to configure an upstream branch. | +| `` ) `` | Increase rename similarity threshold | Increase the similarity threshold for a deletion and addition pair to be treated as a rename. | +| `` ( `` | Decrease rename similarity threshold | Decrease the similarity threshold for a deletion and addition pair to be treated as a rename. | | `` } `` | Increase diff context size | Increase the amount of the context shown around changes in the diff view. | | `` { `` | Decrease diff context size | Decrease the amount of the context shown around changes in the diff view. | | `` : `` | カスタムコマンドを実行 | Bring up a prompt where you can enter a shell command to execute. Not to be confused with pre-configured custom commands. | diff --git a/docs/keybindings/Keybindings_ko.md b/docs/keybindings/Keybindings_ko.md index 289f6931ff1..7c4e9c9f458 100644 --- a/docs/keybindings/Keybindings_ko.md +++ b/docs/keybindings/Keybindings_ko.md @@ -14,6 +14,8 @@ _Legend: `` means ctrl+b, `` means alt+b, `B` means shift+b_ | `` @ `` | 명령어 로그 메뉴 열기 | View options for the command log e.g. show/hide the command log and focus the command log. | | `` P `` | 푸시 | Push the current branch to its upstream branch. If no upstream is configured, you will be prompted to configure an upstream branch. | | `` p `` | 업데이트 | Pull changes from the remote for the current branch. If no upstream is configured, you will be prompted to configure an upstream branch. | +| `` ) `` | Increase rename similarity threshold | Increase the similarity threshold for a deletion and addition pair to be treated as a rename. | +| `` ( `` | Decrease rename similarity threshold | Decrease the similarity threshold for a deletion and addition pair to be treated as a rename. | | `` } `` | Diff 보기의 변경 사항 주위에 표시되는 컨텍스트의 크기를 늘리기 | Increase the amount of the context shown around changes in the diff view. | | `` { `` | Diff 보기의 변경 사항 주위에 표시되는 컨텍스트 크기 줄이기 | Decrease the amount of the context shown around changes in the diff view. | | `` : `` | Execute custom command | Bring up a prompt where you can enter a shell command to execute. Not to be confused with pre-configured custom commands. | diff --git a/docs/keybindings/Keybindings_nl.md b/docs/keybindings/Keybindings_nl.md index 03bf0214c6c..60cbf54e9b9 100644 --- a/docs/keybindings/Keybindings_nl.md +++ b/docs/keybindings/Keybindings_nl.md @@ -14,6 +14,8 @@ _Legend: `` means ctrl+b, `` means alt+b, `B` means shift+b_ | `` @ `` | View command log options | View options for the command log e.g. show/hide the command log and focus the command log. | | `` P `` | Push | Push the current branch to its upstream branch. If no upstream is configured, you will be prompted to configure an upstream branch. | | `` p `` | Pull | Pull changes from the remote for the current branch. If no upstream is configured, you will be prompted to configure an upstream branch. | +| `` ) `` | Increase rename similarity threshold | Increase the similarity threshold for a deletion and addition pair to be treated as a rename. | +| `` ( `` | Decrease rename similarity threshold | Decrease the similarity threshold for a deletion and addition pair to be treated as a rename. | | `` } `` | Increase diff context size | Increase the amount of the context shown around changes in the diff view. | | `` { `` | Decrease diff context size | Decrease the amount of the context shown around changes in the diff view. | | `` : `` | Voer aangepaste commando uit | Bring up a prompt where you can enter a shell command to execute. Not to be confused with pre-configured custom commands. | diff --git a/docs/keybindings/Keybindings_pl.md b/docs/keybindings/Keybindings_pl.md index 0336419c1e4..7d2d7e5617c 100644 --- a/docs/keybindings/Keybindings_pl.md +++ b/docs/keybindings/Keybindings_pl.md @@ -14,6 +14,8 @@ _Legenda: `` oznacza ctrl+b, `` oznacza alt+b, `B` oznacza shift+b_ | `` @ `` | Pokaż opcje dziennika poleceń | Pokaż opcje dla dziennika poleceń, np. pokazywanie/ukrywanie dziennika poleceń i skupienie na dzienniku poleceń. | | `` P `` | Wypchnij | Wypchnij bieżącą gałąź do jej gałęzi nadrzędnej. Jeśli nie skonfigurowano gałęzi nadrzędnej, zostaniesz poproszony o skonfigurowanie gałęzi nadrzędnej. | | `` p `` | Pociągnij | Pociągnij zmiany z zdalnego dla bieżącej gałęzi. Jeśli nie skonfigurowano gałęzi nadrzędnej, zostaniesz poproszony o skonfigurowanie gałęzi nadrzędnej. | +| `` ) `` | Increase rename similarity threshold | Increase the similarity threshold for a deletion and addition pair to be treated as a rename. | +| `` ( `` | Decrease rename similarity threshold | Decrease the similarity threshold for a deletion and addition pair to be treated as a rename. | | `` } `` | Zwiększ rozmiar kontekstu w widoku różnic | Zwiększ ilość kontekstu pokazywanego wokół zmian w widoku różnic. | | `` { `` | Zmniejsz rozmiar kontekstu w widoku różnic | Zmniejsz ilość kontekstu pokazywanego wokół zmian w widoku różnic. | | `` : `` | Wykonaj polecenie niestandardowe | Wyświetl monit, w którym możesz wprowadzić polecenie powłoki do wykonania. Nie należy mylić z wcześniej skonfigurowanymi poleceniami niestandardowymi. | diff --git a/docs/keybindings/Keybindings_ru.md b/docs/keybindings/Keybindings_ru.md index c6a784b7223..ab49f2ab370 100644 --- a/docs/keybindings/Keybindings_ru.md +++ b/docs/keybindings/Keybindings_ru.md @@ -14,6 +14,8 @@ _Связки клавиш_ | `` @ `` | Открыть меню журнала команд | View options for the command log e.g. show/hide the command log and focus the command log. | | `` P `` | Отправить изменения | Push the current branch to its upstream branch. If no upstream is configured, you will be prompted to configure an upstream branch. | | `` p `` | Получить и слить изменения | Pull changes from the remote for the current branch. If no upstream is configured, you will be prompted to configure an upstream branch. | +| `` ) `` | Increase rename similarity threshold | Increase the similarity threshold for a deletion and addition pair to be treated as a rename. | +| `` ( `` | Decrease rename similarity threshold | Decrease the similarity threshold for a deletion and addition pair to be treated as a rename. | | `` } `` | Увеличить размер контекста, отображаемого вокруг изменений в просмотрщике сравнении | Increase the amount of the context shown around changes in the diff view. | | `` { `` | Уменьшите размер контекста, отображаемого вокруг изменений в просмотрщике сравнении | Decrease the amount of the context shown around changes in the diff view. | | `` : `` | Выполнить пользовательскую команду | Bring up a prompt where you can enter a shell command to execute. Not to be confused with pre-configured custom commands. | diff --git a/docs/keybindings/Keybindings_zh-CN.md b/docs/keybindings/Keybindings_zh-CN.md index 8cb93e519e7..c91cdc8e874 100644 --- a/docs/keybindings/Keybindings_zh-CN.md +++ b/docs/keybindings/Keybindings_zh-CN.md @@ -14,6 +14,8 @@ _Legend: `` means ctrl+b, `` means alt+b, `B` means shift+b_ | `` @ `` | 打开命令日志菜单 | View options for the command log e.g. show/hide the command log and focus the command log. | | `` P `` | 推送 | Push the current branch to its upstream branch. If no upstream is configured, you will be prompted to configure an upstream branch. | | `` p `` | 拉取 | Pull changes from the remote for the current branch. If no upstream is configured, you will be prompted to configure an upstream branch. | +| `` ) `` | Increase rename similarity threshold | Increase the similarity threshold for a deletion and addition pair to be treated as a rename. | +| `` ( `` | Decrease rename similarity threshold | Decrease the similarity threshold for a deletion and addition pair to be treated as a rename. | | `` } `` | 扩大差异视图中显示的上下文范围 | Increase the amount of the context shown around changes in the diff view. | | `` { `` | 缩小差异视图中显示的上下文范围 | Decrease the amount of the context shown around changes in the diff view. | | `` : `` | 执行自定义命令 | Bring up a prompt where you can enter a shell command to execute. Not to be confused with pre-configured custom commands. | diff --git a/docs/keybindings/Keybindings_zh-TW.md b/docs/keybindings/Keybindings_zh-TW.md index d82e3361d4f..dccba00dccf 100644 --- a/docs/keybindings/Keybindings_zh-TW.md +++ b/docs/keybindings/Keybindings_zh-TW.md @@ -14,6 +14,8 @@ _說明:`` 表示 Ctrl+B、`` 表示 Alt+B,`B`表示 Shift+B | `` @ `` | 開啟命令記錄選單 | View options for the command log e.g. show/hide the command log and focus the command log. | | `` P `` | 推送 | Push the current branch to its upstream branch. If no upstream is configured, you will be prompted to configure an upstream branch. | | `` p `` | 拉取 | Pull changes from the remote for the current branch. If no upstream is configured, you will be prompted to configure an upstream branch. | +| `` ) `` | Increase rename similarity threshold | Increase the similarity threshold for a deletion and addition pair to be treated as a rename. | +| `` ( `` | Decrease rename similarity threshold | Decrease the similarity threshold for a deletion and addition pair to be treated as a rename. | | `` } `` | 增加差異檢視中顯示變更周圍上下文的大小 | Increase the amount of the context shown around changes in the diff view. | | `` { `` | 減小差異檢視中顯示變更周圍上下文的大小 | Decrease the amount of the context shown around changes in the diff view. | | `` : `` | 執行自訂命令 | Bring up a prompt where you can enter a shell command to execute. Not to be confused with pre-configured custom commands. | diff --git a/pkg/commands/git_commands/commit.go b/pkg/commands/git_commands/commit.go index 517be276e88..4153dfeb909 100644 --- a/pkg/commands/git_commands/commit.go +++ b/pkg/commands/git_commands/commit.go @@ -271,6 +271,7 @@ func (self *CommitCommands) ShowCmdObj(hash string, filterPath string) oscommand Arg("-p"). Arg(hash). ArgIf(self.AppState.IgnoreWhitespaceInDiffView, "--ignore-all-space"). + Arg(fmt.Sprintf("--find-renames=%d%%", self.AppState.RenameSimilarityThreshold)). ArgIf(filterPath != "", "--", filterPath). Dir(self.repoPaths.worktreePath). ToArgv() diff --git a/pkg/commands/git_commands/commit_test.go b/pkg/commands/git_commands/commit_test.go index c3708422ecb..239d7fa8f4c 100644 --- a/pkg/commands/git_commands/commit_test.go +++ b/pkg/commands/git_commands/commit_test.go @@ -228,54 +228,69 @@ func TestCommitCreateAmendCommit(t *testing.T) { func TestCommitShowCmdObj(t *testing.T) { type scenario struct { - testName string - filterPath string - contextSize int - ignoreWhitespace bool - extDiffCmd string - expected []string + testName string + filterPath string + contextSize int + similarityThreshold int + ignoreWhitespace bool + extDiffCmd string + expected []string } scenarios := []scenario{ { - testName: "Default case without filter path", - filterPath: "", - contextSize: 3, - ignoreWhitespace: false, - extDiffCmd: "", - expected: []string{"-C", "/path/to/worktree", "-c", "diff.noprefix=false", "show", "--no-ext-diff", "--submodule", "--color=always", "--unified=3", "--stat", "--decorate", "-p", "1234567890"}, + testName: "Default case without filter path", + filterPath: "", + contextSize: 3, + similarityThreshold: 50, + ignoreWhitespace: false, + extDiffCmd: "", + expected: []string{"-C", "/path/to/worktree", "-c", "diff.noprefix=false", "show", "--no-ext-diff", "--submodule", "--color=always", "--unified=3", "--stat", "--decorate", "-p", "1234567890", "--find-renames=50%"}, }, { - testName: "Default case with filter path", - filterPath: "file.txt", - contextSize: 3, - ignoreWhitespace: false, - extDiffCmd: "", - expected: []string{"-C", "/path/to/worktree", "-c", "diff.noprefix=false", "show", "--no-ext-diff", "--submodule", "--color=always", "--unified=3", "--stat", "--decorate", "-p", "1234567890", "--", "file.txt"}, + testName: "Default case with filter path", + filterPath: "file.txt", + contextSize: 3, + similarityThreshold: 50, + ignoreWhitespace: false, + extDiffCmd: "", + expected: []string{"-C", "/path/to/worktree", "-c", "diff.noprefix=false", "show", "--no-ext-diff", "--submodule", "--color=always", "--unified=3", "--stat", "--decorate", "-p", "1234567890", "--find-renames=50%", "--", "file.txt"}, }, { - testName: "Show diff with custom context size", - filterPath: "", - contextSize: 77, - ignoreWhitespace: false, - extDiffCmd: "", - expected: []string{"-C", "/path/to/worktree", "-c", "diff.noprefix=false", "show", "--no-ext-diff", "--submodule", "--color=always", "--unified=77", "--stat", "--decorate", "-p", "1234567890"}, + testName: "Show diff with custom context size", + filterPath: "", + contextSize: 77, + similarityThreshold: 50, + ignoreWhitespace: false, + extDiffCmd: "", + expected: []string{"-C", "/path/to/worktree", "-c", "diff.noprefix=false", "show", "--no-ext-diff", "--submodule", "--color=always", "--unified=77", "--stat", "--decorate", "-p", "1234567890", "--find-renames=50%"}, }, { - testName: "Show diff, ignoring whitespace", - filterPath: "", - contextSize: 77, - ignoreWhitespace: true, - extDiffCmd: "", - expected: []string{"-C", "/path/to/worktree", "-c", "diff.noprefix=false", "show", "--no-ext-diff", "--submodule", "--color=always", "--unified=77", "--stat", "--decorate", "-p", "1234567890", "--ignore-all-space"}, + testName: "Show diff with custom similarity threshold", + filterPath: "", + contextSize: 3, + similarityThreshold: 33, + ignoreWhitespace: false, + extDiffCmd: "", + expected: []string{"-C", "/path/to/worktree", "-c", "diff.noprefix=false", "show", "--no-ext-diff", "--submodule", "--color=always", "--unified=3", "--stat", "--decorate", "-p", "1234567890", "--find-renames=33%"}, }, { - testName: "Show diff with external diff command", - filterPath: "", - contextSize: 3, - ignoreWhitespace: false, - extDiffCmd: "difft --color=always", - expected: []string{"-C", "/path/to/worktree", "-c", "diff.external=difft --color=always", "-c", "diff.noprefix=false", "show", "--ext-diff", "--submodule", "--color=always", "--unified=3", "--stat", "--decorate", "-p", "1234567890"}, + testName: "Show diff, ignoring whitespace", + filterPath: "", + contextSize: 77, + similarityThreshold: 50, + ignoreWhitespace: true, + extDiffCmd: "", + expected: []string{"-C", "/path/to/worktree", "-c", "diff.noprefix=false", "show", "--no-ext-diff", "--submodule", "--color=always", "--unified=77", "--stat", "--decorate", "-p", "1234567890", "--ignore-all-space", "--find-renames=50%"}, + }, + { + testName: "Show diff with external diff command", + filterPath: "", + contextSize: 3, + similarityThreshold: 50, + ignoreWhitespace: false, + extDiffCmd: "difft --color=always", + expected: []string{"-C", "/path/to/worktree", "-c", "diff.external=difft --color=always", "-c", "diff.noprefix=false", "show", "--ext-diff", "--submodule", "--color=always", "--unified=3", "--stat", "--decorate", "-p", "1234567890", "--find-renames=50%"}, }, } @@ -286,6 +301,7 @@ func TestCommitShowCmdObj(t *testing.T) { appState := &config.AppState{} appState.IgnoreWhitespaceInDiffView = s.ignoreWhitespace appState.DiffContextSize = s.contextSize + appState.RenameSimilarityThreshold = s.similarityThreshold runner := oscommands.NewFakeRunner(t).ExpectGitArgs(s.expected, "", nil) repoPaths := RepoPaths{ diff --git a/pkg/commands/git_commands/file_loader.go b/pkg/commands/git_commands/file_loader.go index 73d7fdc6482..72329543a77 100644 --- a/pkg/commands/git_commands/file_loader.go +++ b/pkg/commands/git_commands/file_loader.go @@ -100,15 +100,19 @@ type FileStatus struct { PreviousName string } -func (c *FileLoader) gitStatus(opts GitStatusOptions) ([]FileStatus, error) { +func (self *FileLoader) gitStatus(opts GitStatusOptions) ([]FileStatus, error) { cmdArgs := NewGitCmd("status"). Arg(opts.UntrackedFilesArg). Arg("--porcelain"). Arg("-z"). - ArgIf(opts.NoRenames, "--no-renames"). + ArgIfElse( + opts.NoRenames, + "--no-renames", + fmt.Sprintf("--find-renames=%d%%", self.AppState.RenameSimilarityThreshold), + ). ToArgv() - statusLines, _, err := c.cmd.New(cmdArgs).DontLog().RunWithOutputs() + statusLines, _, err := self.cmd.New(cmdArgs).DontLog().RunWithOutputs() if err != nil { return []FileStatus{}, err } diff --git a/pkg/commands/git_commands/file_loader_test.go b/pkg/commands/git_commands/file_loader_test.go index 73fac7ef4e7..5a9f15700ed 100644 --- a/pkg/commands/git_commands/file_loader_test.go +++ b/pkg/commands/git_commands/file_loader_test.go @@ -5,27 +5,31 @@ import ( "github.com/jesseduffield/lazygit/pkg/commands/models" "github.com/jesseduffield/lazygit/pkg/commands/oscommands" + "github.com/jesseduffield/lazygit/pkg/config" "github.com/stretchr/testify/assert" ) func TestFileGetStatusFiles(t *testing.T) { type scenario struct { - testName string - runner oscommands.ICmdObjRunner - expectedFiles []*models.File + testName string + similarityThreshold int + runner oscommands.ICmdObjRunner + expectedFiles []*models.File } scenarios := []scenario{ { "No files found", + 50, oscommands.NewFakeRunner(t). - ExpectGitArgs([]string{"status", "--untracked-files=yes", "--porcelain", "-z"}, "", nil), + ExpectGitArgs([]string{"status", "--untracked-files=yes", "--porcelain", "-z", "--find-renames=50%"}, "", nil), []*models.File{}, }, { "Several files found", + 50, oscommands.NewFakeRunner(t). - ExpectGitArgs([]string{"status", "--untracked-files=yes", "--porcelain", "-z"}, + ExpectGitArgs([]string{"status", "--untracked-files=yes", "--porcelain", "-z", "--find-renames=50%"}, "MM file1.txt\x00A file3.txt\x00AM file2.txt\x00?? file4.txt\x00UU file5.txt", nil, ), @@ -94,8 +98,9 @@ func TestFileGetStatusFiles(t *testing.T) { }, { "File with new line char", + 50, oscommands.NewFakeRunner(t). - ExpectGitArgs([]string{"status", "--untracked-files=yes", "--porcelain", "-z"}, "MM a\nb.txt", nil), + ExpectGitArgs([]string{"status", "--untracked-files=yes", "--porcelain", "-z", "--find-renames=50%"}, "MM a\nb.txt", nil), []*models.File{ { Name: "a\nb.txt", @@ -113,8 +118,9 @@ func TestFileGetStatusFiles(t *testing.T) { }, { "Renamed files", + 50, oscommands.NewFakeRunner(t). - ExpectGitArgs([]string{"status", "--untracked-files=yes", "--porcelain", "-z"}, + ExpectGitArgs([]string{"status", "--untracked-files=yes", "--porcelain", "-z", "--find-renames=50%"}, "R after1.txt\x00before1.txt\x00RM after2.txt\x00before2.txt", nil, ), @@ -149,8 +155,9 @@ func TestFileGetStatusFiles(t *testing.T) { }, { "File with arrow in name", + 50, oscommands.NewFakeRunner(t). - ExpectGitArgs([]string{"status", "--untracked-files=yes", "--porcelain", "-z"}, + ExpectGitArgs([]string{"status", "--untracked-files=yes", "--porcelain", "-z", "--find-renames=50%"}, `?? a -> b.txt`, nil, ), @@ -175,8 +182,11 @@ func TestFileGetStatusFiles(t *testing.T) { t.Run(s.testName, func(t *testing.T) { cmd := oscommands.NewDummyCmdObjBuilder(s.runner) + appState := &config.AppState{} + appState.RenameSimilarityThreshold = s.similarityThreshold + loader := &FileLoader{ - GitCommon: buildGitCommon(commonDeps{}), + GitCommon: buildGitCommon(commonDeps{appState: appState}), cmd: cmd, config: &FakeFileLoaderConfig{showUntrackedFiles: "yes"}, getFileType: func(string) string { return "file" }, diff --git a/pkg/commands/git_commands/stash.go b/pkg/commands/git_commands/stash.go index 5eeaa6a68c9..047985e38ed 100644 --- a/pkg/commands/git_commands/stash.go +++ b/pkg/commands/git_commands/stash.go @@ -87,6 +87,7 @@ func (self *StashCommands) ShowStashEntryCmdObj(index int) oscommands.ICmdObj { Arg(fmt.Sprintf("--color=%s", self.UserConfig.Git.Paging.ColorArg)). Arg(fmt.Sprintf("--unified=%d", self.AppState.DiffContextSize)). ArgIf(self.AppState.IgnoreWhitespaceInDiffView, "--ignore-all-space"). + Arg(fmt.Sprintf("--find-renames=%d%%", self.AppState.RenameSimilarityThreshold)). Arg(fmt.Sprintf("stash@{%d}", index)). Dir(self.repoPaths.worktreePath). ToArgv() diff --git a/pkg/commands/git_commands/stash_test.go b/pkg/commands/git_commands/stash_test.go index accd0589075..207ddb1265f 100644 --- a/pkg/commands/git_commands/stash_test.go +++ b/pkg/commands/git_commands/stash_test.go @@ -98,34 +98,46 @@ func TestStashHash(t *testing.T) { func TestStashStashEntryCmdObj(t *testing.T) { type scenario struct { - testName string - index int - contextSize int - ignoreWhitespace bool - expected []string + testName string + index int + contextSize int + similarityThreshold int + ignoreWhitespace bool + expected []string } scenarios := []scenario{ { - testName: "Default case", - index: 5, - contextSize: 3, - ignoreWhitespace: false, - expected: []string{"git", "-C", "/path/to/worktree", "stash", "show", "-p", "--stat", "--color=always", "--unified=3", "stash@{5}"}, + testName: "Default case", + index: 5, + contextSize: 3, + similarityThreshold: 50, + ignoreWhitespace: false, + expected: []string{"git", "-C", "/path/to/worktree", "stash", "show", "-p", "--stat", "--color=always", "--unified=3", "--find-renames=50%", "stash@{5}"}, }, { - testName: "Show diff with custom context size", - index: 5, - contextSize: 77, - ignoreWhitespace: false, - expected: []string{"git", "-C", "/path/to/worktree", "stash", "show", "-p", "--stat", "--color=always", "--unified=77", "stash@{5}"}, + testName: "Show diff with custom context size", + index: 5, + contextSize: 77, + similarityThreshold: 50, + ignoreWhitespace: false, + expected: []string{"git", "-C", "/path/to/worktree", "stash", "show", "-p", "--stat", "--color=always", "--unified=77", "--find-renames=50%", "stash@{5}"}, }, { - testName: "Default case", - index: 5, - contextSize: 3, - ignoreWhitespace: true, - expected: []string{"git", "-C", "/path/to/worktree", "stash", "show", "-p", "--stat", "--color=always", "--unified=3", "--ignore-all-space", "stash@{5}"}, + testName: "Show diff with custom similarity threshold", + index: 5, + contextSize: 3, + similarityThreshold: 33, + ignoreWhitespace: false, + expected: []string{"git", "-C", "/path/to/worktree", "stash", "show", "-p", "--stat", "--color=always", "--unified=3", "--find-renames=33%", "stash@{5}"}, + }, + { + testName: "Default case", + index: 5, + contextSize: 3, + similarityThreshold: 50, + ignoreWhitespace: true, + expected: []string{"git", "-C", "/path/to/worktree", "stash", "show", "-p", "--stat", "--color=always", "--unified=3", "--ignore-all-space", "--find-renames=50%", "stash@{5}"}, }, } @@ -135,6 +147,7 @@ func TestStashStashEntryCmdObj(t *testing.T) { appState := &config.AppState{} appState.IgnoreWhitespaceInDiffView = s.ignoreWhitespace appState.DiffContextSize = s.contextSize + appState.RenameSimilarityThreshold = s.similarityThreshold repoPaths := RepoPaths{ worktreePath: "/path/to/worktree", } diff --git a/pkg/commands/git_commands/working_tree.go b/pkg/commands/git_commands/working_tree.go index 7639dbad8ca..2364f2a68e5 100644 --- a/pkg/commands/git_commands/working_tree.go +++ b/pkg/commands/git_commands/working_tree.go @@ -263,6 +263,7 @@ func (self *WorkingTreeCommands) WorktreeFileDiffCmdObj(node models.IFile, plain Arg(fmt.Sprintf("--unified=%d", contextSize)). Arg(fmt.Sprintf("--color=%s", colorArg)). ArgIf(!plain && self.AppState.IgnoreWhitespaceInDiffView, "--ignore-all-space"). + Arg(fmt.Sprintf("--find-renames=%d%%", self.AppState.RenameSimilarityThreshold)). ArgIf(cached, "--cached"). ArgIf(noIndex, "--no-index"). Arg("--"). diff --git a/pkg/commands/git_commands/working_tree_test.go b/pkg/commands/git_commands/working_tree_test.go index cc0ad55f5f3..a4270e732c5 100644 --- a/pkg/commands/git_commands/working_tree_test.go +++ b/pkg/commands/git_commands/working_tree_test.go @@ -205,13 +205,14 @@ func TestWorkingTreeDiscardAllFileChanges(t *testing.T) { func TestWorkingTreeDiff(t *testing.T) { type scenario struct { - testName string - file *models.File - plain bool - cached bool - ignoreWhitespace bool - contextSize int - runner *oscommands.FakeCmdObjRunner + testName string + file *models.File + plain bool + cached bool + ignoreWhitespace bool + contextSize int + similarityThreshold int + runner *oscommands.FakeCmdObjRunner } const expectedResult = "pretend this is an actual git diff" @@ -224,12 +225,13 @@ func TestWorkingTreeDiff(t *testing.T) { HasStagedChanges: false, Tracked: true, }, - plain: false, - cached: false, - ignoreWhitespace: false, - contextSize: 3, + plain: false, + cached: false, + ignoreWhitespace: false, + contextSize: 3, + similarityThreshold: 50, runner: oscommands.NewFakeRunner(t). - ExpectGitArgs([]string{"-C", "/path/to/worktree", "diff", "--no-ext-diff", "--submodule", "--unified=3", "--color=always", "--", "test.txt"}, expectedResult, nil), + ExpectGitArgs([]string{"-C", "/path/to/worktree", "diff", "--no-ext-diff", "--submodule", "--unified=3", "--color=always", "--find-renames=50%", "--", "test.txt"}, expectedResult, nil), }, { testName: "cached", @@ -238,12 +240,13 @@ func TestWorkingTreeDiff(t *testing.T) { HasStagedChanges: false, Tracked: true, }, - plain: false, - cached: true, - ignoreWhitespace: false, - contextSize: 3, + plain: false, + cached: true, + ignoreWhitespace: false, + contextSize: 3, + similarityThreshold: 50, runner: oscommands.NewFakeRunner(t). - ExpectGitArgs([]string{"-C", "/path/to/worktree", "diff", "--no-ext-diff", "--submodule", "--unified=3", "--color=always", "--cached", "--", "test.txt"}, expectedResult, nil), + ExpectGitArgs([]string{"-C", "/path/to/worktree", "diff", "--no-ext-diff", "--submodule", "--unified=3", "--color=always", "--find-renames=50%", "--cached", "--", "test.txt"}, expectedResult, nil), }, { testName: "plain", @@ -252,12 +255,13 @@ func TestWorkingTreeDiff(t *testing.T) { HasStagedChanges: false, Tracked: true, }, - plain: true, - cached: false, - ignoreWhitespace: false, - contextSize: 3, + plain: true, + cached: false, + ignoreWhitespace: false, + contextSize: 3, + similarityThreshold: 50, runner: oscommands.NewFakeRunner(t). - ExpectGitArgs([]string{"-C", "/path/to/worktree", "diff", "--no-ext-diff", "--submodule", "--unified=3", "--color=never", "--", "test.txt"}, expectedResult, nil), + ExpectGitArgs([]string{"-C", "/path/to/worktree", "diff", "--no-ext-diff", "--submodule", "--unified=3", "--color=never", "--find-renames=50%", "--", "test.txt"}, expectedResult, nil), }, { testName: "File not tracked and file has no staged changes", @@ -266,12 +270,13 @@ func TestWorkingTreeDiff(t *testing.T) { HasStagedChanges: false, Tracked: false, }, - plain: false, - cached: false, - ignoreWhitespace: false, - contextSize: 3, + plain: false, + cached: false, + ignoreWhitespace: false, + contextSize: 3, + similarityThreshold: 50, runner: oscommands.NewFakeRunner(t). - ExpectGitArgs([]string{"-C", "/path/to/worktree", "diff", "--no-ext-diff", "--submodule", "--unified=3", "--color=always", "--no-index", "--", "/dev/null", "test.txt"}, expectedResult, nil), + ExpectGitArgs([]string{"-C", "/path/to/worktree", "diff", "--no-ext-diff", "--submodule", "--unified=3", "--color=always", "--find-renames=50%", "--no-index", "--", "/dev/null", "test.txt"}, expectedResult, nil), }, { testName: "Default case (ignore whitespace)", @@ -280,12 +285,13 @@ func TestWorkingTreeDiff(t *testing.T) { HasStagedChanges: false, Tracked: true, }, - plain: false, - cached: false, - ignoreWhitespace: true, - contextSize: 3, + plain: false, + cached: false, + ignoreWhitespace: true, + contextSize: 3, + similarityThreshold: 50, runner: oscommands.NewFakeRunner(t). - ExpectGitArgs([]string{"-C", "/path/to/worktree", "diff", "--no-ext-diff", "--submodule", "--unified=3", "--color=always", "--ignore-all-space", "--", "test.txt"}, expectedResult, nil), + ExpectGitArgs([]string{"-C", "/path/to/worktree", "diff", "--no-ext-diff", "--submodule", "--unified=3", "--color=always", "--ignore-all-space", "--find-renames=50%", "--", "test.txt"}, expectedResult, nil), }, { testName: "Show diff with custom context size", @@ -294,12 +300,28 @@ func TestWorkingTreeDiff(t *testing.T) { HasStagedChanges: false, Tracked: true, }, - plain: false, - cached: false, - ignoreWhitespace: false, - contextSize: 17, + plain: false, + cached: false, + ignoreWhitespace: false, + contextSize: 17, + similarityThreshold: 50, + runner: oscommands.NewFakeRunner(t). + ExpectGitArgs([]string{"-C", "/path/to/worktree", "diff", "--no-ext-diff", "--submodule", "--unified=17", "--color=always", "--find-renames=50%", "--", "test.txt"}, expectedResult, nil), + }, + { + testName: "Show diff with custom similarity threshold", + file: &models.File{ + Name: "test.txt", + HasStagedChanges: false, + Tracked: true, + }, + plain: false, + cached: false, + ignoreWhitespace: false, + contextSize: 3, + similarityThreshold: 33, runner: oscommands.NewFakeRunner(t). - ExpectGitArgs([]string{"-C", "/path/to/worktree", "diff", "--no-ext-diff", "--submodule", "--unified=17", "--color=always", "--", "test.txt"}, expectedResult, nil), + ExpectGitArgs([]string{"-C", "/path/to/worktree", "diff", "--no-ext-diff", "--submodule", "--unified=3", "--color=always", "--find-renames=33%", "--", "test.txt"}, expectedResult, nil), }, } @@ -309,6 +331,7 @@ func TestWorkingTreeDiff(t *testing.T) { appState := &config.AppState{} appState.IgnoreWhitespaceInDiffView = s.ignoreWhitespace appState.DiffContextSize = s.contextSize + appState.RenameSimilarityThreshold = s.similarityThreshold repoPaths := RepoPaths{ worktreePath: "/path/to/worktree", } diff --git a/pkg/config/app_config.go b/pkg/config/app_config.go index 97f32688ec9..19febf9a637 100644 --- a/pkg/config/app_config.go +++ b/pkg/config/app_config.go @@ -370,6 +370,7 @@ type AppState struct { HideCommandLog bool IgnoreWhitespaceInDiffView bool DiffContextSize int + RenameSimilarityThreshold int LocalBranchSortOrder string RemoteBranchSortOrder string @@ -385,15 +386,16 @@ type AppState struct { func getDefaultAppState() *AppState { return &AppState{ - LastUpdateCheck: 0, - RecentRepos: []string{}, - StartupPopupVersion: 0, - LastVersion: "", - DiffContextSize: 3, - LocalBranchSortOrder: "recency", - RemoteBranchSortOrder: "alphabetical", - GitLogOrder: "", // should be "topo-order" eventually - GitLogShowGraph: "", // should be "always" eventually + LastUpdateCheck: 0, + RecentRepos: []string{}, + StartupPopupVersion: 0, + LastVersion: "", + DiffContextSize: 3, + RenameSimilarityThreshold: 50, + LocalBranchSortOrder: "recency", + RemoteBranchSortOrder: "alphabetical", + GitLogOrder: "", // should be "topo-order" eventually + GitLogShowGraph: "", // should be "always" eventually } } diff --git a/pkg/config/user_config.go b/pkg/config/user_config.go index fbf513ea6f1..d08e4fda476 100644 --- a/pkg/config/user_config.go +++ b/pkg/config/user_config.go @@ -341,73 +341,75 @@ type KeybindingConfig struct { // damn looks like we have some inconsistencies here with -alt and -alt1 type KeybindingUniversalConfig struct { - Quit string `yaml:"quit"` - QuitAlt1 string `yaml:"quit-alt1"` - Return string `yaml:"return"` - QuitWithoutChangingDirectory string `yaml:"quitWithoutChangingDirectory"` - TogglePanel string `yaml:"togglePanel"` - PrevItem string `yaml:"prevItem"` - NextItem string `yaml:"nextItem"` - PrevItemAlt string `yaml:"prevItem-alt"` - NextItemAlt string `yaml:"nextItem-alt"` - PrevPage string `yaml:"prevPage"` - NextPage string `yaml:"nextPage"` - ScrollLeft string `yaml:"scrollLeft"` - ScrollRight string `yaml:"scrollRight"` - GotoTop string `yaml:"gotoTop"` - GotoBottom string `yaml:"gotoBottom"` - ToggleRangeSelect string `yaml:"toggleRangeSelect"` - RangeSelectDown string `yaml:"rangeSelectDown"` - RangeSelectUp string `yaml:"rangeSelectUp"` - PrevBlock string `yaml:"prevBlock"` - NextBlock string `yaml:"nextBlock"` - PrevBlockAlt string `yaml:"prevBlock-alt"` - NextBlockAlt string `yaml:"nextBlock-alt"` - NextBlockAlt2 string `yaml:"nextBlock-alt2"` - PrevBlockAlt2 string `yaml:"prevBlock-alt2"` - JumpToBlock []string `yaml:"jumpToBlock"` - NextMatch string `yaml:"nextMatch"` - PrevMatch string `yaml:"prevMatch"` - StartSearch string `yaml:"startSearch"` - OptionMenu string `yaml:"optionMenu"` - OptionMenuAlt1 string `yaml:"optionMenu-alt1"` - Select string `yaml:"select"` - GoInto string `yaml:"goInto"` - Confirm string `yaml:"confirm"` - ConfirmInEditor string `yaml:"confirmInEditor"` - Remove string `yaml:"remove"` - New string `yaml:"new"` - Edit string `yaml:"edit"` - OpenFile string `yaml:"openFile"` - ScrollUpMain string `yaml:"scrollUpMain"` - ScrollDownMain string `yaml:"scrollDownMain"` - ScrollUpMainAlt1 string `yaml:"scrollUpMain-alt1"` - ScrollDownMainAlt1 string `yaml:"scrollDownMain-alt1"` - ScrollUpMainAlt2 string `yaml:"scrollUpMain-alt2"` - ScrollDownMainAlt2 string `yaml:"scrollDownMain-alt2"` - ExecuteCustomCommand string `yaml:"executeCustomCommand"` - CreateRebaseOptionsMenu string `yaml:"createRebaseOptionsMenu"` - Push string `yaml:"pushFiles"` // 'Files' appended for legacy reasons - Pull string `yaml:"pullFiles"` // 'Files' appended for legacy reasons - Refresh string `yaml:"refresh"` - CreatePatchOptionsMenu string `yaml:"createPatchOptionsMenu"` - NextTab string `yaml:"nextTab"` - PrevTab string `yaml:"prevTab"` - NextScreenMode string `yaml:"nextScreenMode"` - PrevScreenMode string `yaml:"prevScreenMode"` - Undo string `yaml:"undo"` - Redo string `yaml:"redo"` - FilteringMenu string `yaml:"filteringMenu"` - DiffingMenu string `yaml:"diffingMenu"` - DiffingMenuAlt string `yaml:"diffingMenu-alt"` - CopyToClipboard string `yaml:"copyToClipboard"` - OpenRecentRepos string `yaml:"openRecentRepos"` - SubmitEditorText string `yaml:"submitEditorText"` - ExtrasMenu string `yaml:"extrasMenu"` - ToggleWhitespaceInDiffView string `yaml:"toggleWhitespaceInDiffView"` - IncreaseContextInDiffView string `yaml:"increaseContextInDiffView"` - DecreaseContextInDiffView string `yaml:"decreaseContextInDiffView"` - OpenDiffTool string `yaml:"openDiffTool"` + Quit string `yaml:"quit"` + QuitAlt1 string `yaml:"quit-alt1"` + Return string `yaml:"return"` + QuitWithoutChangingDirectory string `yaml:"quitWithoutChangingDirectory"` + TogglePanel string `yaml:"togglePanel"` + PrevItem string `yaml:"prevItem"` + NextItem string `yaml:"nextItem"` + PrevItemAlt string `yaml:"prevItem-alt"` + NextItemAlt string `yaml:"nextItem-alt"` + PrevPage string `yaml:"prevPage"` + NextPage string `yaml:"nextPage"` + ScrollLeft string `yaml:"scrollLeft"` + ScrollRight string `yaml:"scrollRight"` + GotoTop string `yaml:"gotoTop"` + GotoBottom string `yaml:"gotoBottom"` + ToggleRangeSelect string `yaml:"toggleRangeSelect"` + RangeSelectDown string `yaml:"rangeSelectDown"` + RangeSelectUp string `yaml:"rangeSelectUp"` + PrevBlock string `yaml:"prevBlock"` + NextBlock string `yaml:"nextBlock"` + PrevBlockAlt string `yaml:"prevBlock-alt"` + NextBlockAlt string `yaml:"nextBlock-alt"` + NextBlockAlt2 string `yaml:"nextBlock-alt2"` + PrevBlockAlt2 string `yaml:"prevBlock-alt2"` + JumpToBlock []string `yaml:"jumpToBlock"` + NextMatch string `yaml:"nextMatch"` + PrevMatch string `yaml:"prevMatch"` + StartSearch string `yaml:"startSearch"` + OptionMenu string `yaml:"optionMenu"` + OptionMenuAlt1 string `yaml:"optionMenu-alt1"` + Select string `yaml:"select"` + GoInto string `yaml:"goInto"` + Confirm string `yaml:"confirm"` + ConfirmInEditor string `yaml:"confirmInEditor"` + Remove string `yaml:"remove"` + New string `yaml:"new"` + Edit string `yaml:"edit"` + OpenFile string `yaml:"openFile"` + ScrollUpMain string `yaml:"scrollUpMain"` + ScrollDownMain string `yaml:"scrollDownMain"` + ScrollUpMainAlt1 string `yaml:"scrollUpMain-alt1"` + ScrollDownMainAlt1 string `yaml:"scrollDownMain-alt1"` + ScrollUpMainAlt2 string `yaml:"scrollUpMain-alt2"` + ScrollDownMainAlt2 string `yaml:"scrollDownMain-alt2"` + ExecuteCustomCommand string `yaml:"executeCustomCommand"` + CreateRebaseOptionsMenu string `yaml:"createRebaseOptionsMenu"` + Push string `yaml:"pushFiles"` // 'Files' appended for legacy reasons + Pull string `yaml:"pullFiles"` // 'Files' appended for legacy reasons + Refresh string `yaml:"refresh"` + CreatePatchOptionsMenu string `yaml:"createPatchOptionsMenu"` + NextTab string `yaml:"nextTab"` + PrevTab string `yaml:"prevTab"` + NextScreenMode string `yaml:"nextScreenMode"` + PrevScreenMode string `yaml:"prevScreenMode"` + Undo string `yaml:"undo"` + Redo string `yaml:"redo"` + FilteringMenu string `yaml:"filteringMenu"` + DiffingMenu string `yaml:"diffingMenu"` + DiffingMenuAlt string `yaml:"diffingMenu-alt"` + CopyToClipboard string `yaml:"copyToClipboard"` + OpenRecentRepos string `yaml:"openRecentRepos"` + SubmitEditorText string `yaml:"submitEditorText"` + ExtrasMenu string `yaml:"extrasMenu"` + ToggleWhitespaceInDiffView string `yaml:"toggleWhitespaceInDiffView"` + IncreaseContextInDiffView string `yaml:"increaseContextInDiffView"` + DecreaseContextInDiffView string `yaml:"decreaseContextInDiffView"` + IncreaseRenameSimilarityThreshold string `yaml:"increaseRenameSimilarityThreshold"` + DecreaseRenameSimilarityThreshold string `yaml:"decreaseRenameSimilarityThreshold"` + OpenDiffTool string `yaml:"openDiffTool"` } type KeybindingStatusConfig struct { @@ -777,73 +779,75 @@ func GetDefaultConfig() *UserConfig { PromptToReturnFromSubprocess: true, Keybinding: KeybindingConfig{ Universal: KeybindingUniversalConfig{ - Quit: "q", - QuitAlt1: "", - Return: "", - QuitWithoutChangingDirectory: "Q", - TogglePanel: "", - PrevItem: "", - NextItem: "", - PrevItemAlt: "k", - NextItemAlt: "j", - PrevPage: ",", - NextPage: ".", - ScrollLeft: "H", - ScrollRight: "L", - GotoTop: "<", - GotoBottom: ">", - ToggleRangeSelect: "v", - RangeSelectDown: "", - RangeSelectUp: "", - PrevBlock: "", - NextBlock: "", - PrevBlockAlt: "h", - NextBlockAlt: "l", - PrevBlockAlt2: "", - NextBlockAlt2: "", - JumpToBlock: []string{"1", "2", "3", "4", "5"}, - NextMatch: "n", - PrevMatch: "N", - StartSearch: "/", - OptionMenu: "", - OptionMenuAlt1: "?", - Select: "", - GoInto: "", - Confirm: "", - ConfirmInEditor: "", - Remove: "d", - New: "n", - Edit: "e", - OpenFile: "o", - OpenRecentRepos: "", - ScrollUpMain: "", - ScrollDownMain: "", - ScrollUpMainAlt1: "K", - ScrollDownMainAlt1: "J", - ScrollUpMainAlt2: "", - ScrollDownMainAlt2: "", - ExecuteCustomCommand: ":", - CreateRebaseOptionsMenu: "m", - Push: "P", - Pull: "p", - Refresh: "R", - CreatePatchOptionsMenu: "", - NextTab: "]", - PrevTab: "[", - NextScreenMode: "+", - PrevScreenMode: "_", - Undo: "z", - Redo: "", - FilteringMenu: "", - DiffingMenu: "W", - DiffingMenuAlt: "", - CopyToClipboard: "", - SubmitEditorText: "", - ExtrasMenu: "@", - ToggleWhitespaceInDiffView: "", - IncreaseContextInDiffView: "}", - DecreaseContextInDiffView: "{", - OpenDiffTool: "", + Quit: "q", + QuitAlt1: "", + Return: "", + QuitWithoutChangingDirectory: "Q", + TogglePanel: "", + PrevItem: "", + NextItem: "", + PrevItemAlt: "k", + NextItemAlt: "j", + PrevPage: ",", + NextPage: ".", + ScrollLeft: "H", + ScrollRight: "L", + GotoTop: "<", + GotoBottom: ">", + ToggleRangeSelect: "v", + RangeSelectDown: "", + RangeSelectUp: "", + PrevBlock: "", + NextBlock: "", + PrevBlockAlt: "h", + NextBlockAlt: "l", + PrevBlockAlt2: "", + NextBlockAlt2: "", + JumpToBlock: []string{"1", "2", "3", "4", "5"}, + NextMatch: "n", + PrevMatch: "N", + StartSearch: "/", + OptionMenu: "", + OptionMenuAlt1: "?", + Select: "", + GoInto: "", + Confirm: "", + ConfirmInEditor: "", + Remove: "d", + New: "n", + Edit: "e", + OpenFile: "o", + OpenRecentRepos: "", + ScrollUpMain: "", + ScrollDownMain: "", + ScrollUpMainAlt1: "K", + ScrollDownMainAlt1: "J", + ScrollUpMainAlt2: "", + ScrollDownMainAlt2: "", + ExecuteCustomCommand: ":", + CreateRebaseOptionsMenu: "m", + Push: "P", + Pull: "p", + Refresh: "R", + CreatePatchOptionsMenu: "", + NextTab: "]", + PrevTab: "[", + NextScreenMode: "+", + PrevScreenMode: "_", + Undo: "z", + Redo: "", + FilteringMenu: "", + DiffingMenu: "W", + DiffingMenuAlt: "", + CopyToClipboard: "", + SubmitEditorText: "", + ExtrasMenu: "@", + ToggleWhitespaceInDiffView: "", + IncreaseContextInDiffView: "}", + DecreaseContextInDiffView: "{", + IncreaseRenameSimilarityThreshold: ")", + DecreaseRenameSimilarityThreshold: "(", + OpenDiffTool: "", }, Status: KeybindingStatusConfig{ CheckForUpdate: "u", diff --git a/pkg/gui/controllers.go b/pkg/gui/controllers.go index ba39fef5a45..277098f3789 100644 --- a/pkg/gui/controllers.go +++ b/pkg/gui/controllers.go @@ -179,6 +179,7 @@ func (gui *Gui) resetHelpersAndControllers() { undoController := controllers.NewUndoController(common) globalController := controllers.NewGlobalController(common) contextLinesController := controllers.NewContextLinesController(common) + renameSimilarityThresholdController := controllers.NewRenameSimilarityThresholdController(common) verticalScrollControllerFactory := controllers.NewVerticalScrollControllerFactory(common, &gui.viewBufferManagerMap) branchesController := controllers.NewBranchesController(common) @@ -383,6 +384,7 @@ func (gui *Gui) resetHelpersAndControllers() { undoController, globalController, contextLinesController, + renameSimilarityThresholdController, jumpToSideWindowController, syncController, ) diff --git a/pkg/gui/controllers/rename_similarity_threshold_controller.go b/pkg/gui/controllers/rename_similarity_threshold_controller.go new file mode 100644 index 00000000000..0b154aa3665 --- /dev/null +++ b/pkg/gui/controllers/rename_similarity_threshold_controller.go @@ -0,0 +1,100 @@ +package controllers + +import ( + "fmt" + + "github.com/jesseduffield/lazygit/pkg/gui/context" + "github.com/jesseduffield/lazygit/pkg/gui/types" + "github.com/samber/lo" +) + +// This controller lets you change the similarity threshold for detecting renames. + +var CONTEXT_KEYS_SHOWING_RENAMES = []types.ContextKey{ + context.FILES_CONTEXT_KEY, + context.SUB_COMMITS_CONTEXT_KEY, + context.LOCAL_COMMITS_CONTEXT_KEY, + context.STASH_CONTEXT_KEY, +} + +type RenameSimilarityThresholdController struct { + baseController + c *ControllerCommon +} + +var _ types.IController = &RenameSimilarityThresholdController{} + +func NewRenameSimilarityThresholdController( + common *ControllerCommon, +) *RenameSimilarityThresholdController { + return &RenameSimilarityThresholdController{ + baseController: baseController{}, + c: common, + } +} + +func (self *RenameSimilarityThresholdController) GetKeybindings(opts types.KeybindingsOpts) []*types.Binding { + bindings := []*types.Binding{ + { + Key: opts.GetKey(opts.Config.Universal.IncreaseRenameSimilarityThreshold), + Handler: self.Increase, + Description: self.c.Tr.IncreaseRenameSimilarityThreshold, + Tooltip: self.c.Tr.IncreaseRenameSimilarityThresholdTooltip, + }, + { + Key: opts.GetKey(opts.Config.Universal.DecreaseRenameSimilarityThreshold), + Handler: self.Decrease, + Description: self.c.Tr.DecreaseRenameSimilarityThreshold, + Tooltip: self.c.Tr.DecreaseRenameSimilarityThresholdTooltip, + }, + } + + return bindings +} + +func (self *RenameSimilarityThresholdController) Context() types.Context { + return nil +} + +func (self *RenameSimilarityThresholdController) Increase() error { + old_size := self.c.AppState.RenameSimilarityThreshold + + if self.isShowingRenames() && old_size < 100 { + self.c.AppState.RenameSimilarityThreshold = min(100, old_size+5) + return self.applyChange() + } + + return nil +} + +func (self *RenameSimilarityThresholdController) Decrease() error { + old_size := self.c.AppState.RenameSimilarityThreshold + + if self.isShowingRenames() && old_size > 5 { + self.c.AppState.RenameSimilarityThreshold = max(5, old_size-5) + return self.applyChange() + } + + return nil +} + +func (self *RenameSimilarityThresholdController) applyChange() error { + self.c.Toast(fmt.Sprintf(self.c.Tr.RenameSimilarityThresholdChanged, self.c.AppState.RenameSimilarityThreshold)) + self.c.SaveAppStateAndLogError() + + currentContext := self.c.CurrentStaticContext() + switch currentContext.GetKey() { + // we make an exception for our files context, because it actually need to refresh its state afterwards. + case context.FILES_CONTEXT_KEY: + return self.c.Refresh(types.RefreshOptions{Scope: []types.RefreshableView{types.FILES}}) + default: + return currentContext.HandleRenderToMain() + } +} + +func (self *RenameSimilarityThresholdController) isShowingRenames() bool { + return lo.Contains( + CONTEXT_KEYS_SHOWING_RENAMES, + self.c.CurrentStaticContext().GetKey(), + ) +} diff --git a/pkg/i18n/english.go b/pkg/i18n/english.go index d4c65620209..296239ddecd 100644 --- a/pkg/i18n/english.go +++ b/pkg/i18n/english.go @@ -642,163 +642,168 @@ type TranslationSet struct { NavigationTitle string SuggestionsCheatsheetTitle string // Unlike the cheatsheet title above, the real suggestions title has a little message saying press tab to focus - SuggestionsTitle string - SuggestionsSubtitle string - ExtrasTitle string - PushingTagStatus string - PullRequestURLCopiedToClipboard string - CommitDiffCopiedToClipboard string - CommitURLCopiedToClipboard string - CommitMessageCopiedToClipboard string - CommitSubjectCopiedToClipboard string - CommitAuthorCopiedToClipboard string - PatchCopiedToClipboard string - CopiedToClipboard string - ErrCannotEditDirectory string - ErrStageDirWithInlineMergeConflicts string - ErrRepositoryMovedOrDeleted string - ErrWorktreeMovedOrRemoved string - CommandLog string - ToggleShowCommandLog string - FocusCommandLog string - CommandLogHeader string - RandomTip string - SelectParentCommitForMerge string - ToggleWhitespaceInDiffView string - ToggleWhitespaceInDiffViewTooltip string - IgnoreWhitespaceDiffViewSubTitle string - IgnoreWhitespaceNotSupportedHere string - IncreaseContextInDiffView string - IncreaseContextInDiffViewTooltip string - DecreaseContextInDiffView string - DecreaseContextInDiffViewTooltip string - DiffContextSizeChanged string - CreatePullRequestOptions string - DefaultBranch string - SelectBranch string - CreatePullRequest string - SelectConfigFile string - NoConfigFileFoundErr string - LoadingFileSuggestions string - LoadingCommits string - MustSpecifyOriginError string - GitOutput string - GitCommandFailed string - AbortTitle string - AbortPrompt string - OpenLogMenu string - OpenLogMenuTooltip string - LogMenuTitle string - ToggleShowGitGraphAll string - ShowGitGraph string - SortOrder string - SortAlphabetical string - SortByDate string - SortByRecency string - SortBasedOnReflog string - SortCommits string - CantChangeContextSizeError string - OpenCommitInBrowser string - ViewBisectOptions string - ConfirmRevertCommit string - RewordInEditorTitle string - RewordInEditorPrompt string - CheckoutPrompt string - HardResetAutostashPrompt string - UpstreamGone string - NukeDescription string - DiscardStagedChangesDescription string - EmptyOutput string - Patch string - CustomPatch string - CommitsCopied string - CommitCopied string - ResetPatch string - ResetPatchTooltip string - ApplyPatch string - ApplyPatchTooltip string - ApplyPatchInReverse string - ApplyPatchInReverseTooltip string - RemovePatchFromOriginalCommit string - RemovePatchFromOriginalCommitTooltip string - MovePatchOutIntoIndex string - MovePatchOutIntoIndexTooltip string - MovePatchIntoNewCommit string - MovePatchIntoNewCommitTooltip string - MovePatchToSelectedCommit string - MovePatchToSelectedCommitTooltip string - CopyPatchToClipboard string - NoMatchesFor string - MatchesFor string - SearchKeybindings string - SearchPrefix string - FilterPrefix string - ExitSearchMode string - ExitTextFilterMode string - Switch string - SwitchToWorktree string - SwitchToWorktreeTooltip string - AlreadyCheckedOutByWorktree string - BranchCheckedOutByWorktree string - DetachWorktreeTooltip string - Switching string - RemoveWorktree string - RemoveWorktreeTitle string - DetachWorktree string - DetachingWorktree string - WorktreesTitle string - WorktreeTitle string - RemoveWorktreePrompt string - ForceRemoveWorktreePrompt string - RemovingWorktree string - AddingWorktree string - CantDeleteCurrentWorktree string - AlreadyInWorktree string - CantDeleteMainWorktree string - NoWorktreesThisRepo string - MissingWorktree string - MainWorktree string - NewWorktree string - NewWorktreePath string - NewWorktreeBase string - RemoveWorktreeTooltip string - BranchNameCannotBeBlank string - NewBranchName string - NewBranchNameLeaveBlank string - ViewWorktreeOptions string - CreateWorktreeFrom string - CreateWorktreeFromDetached string - LcWorktree string - ChangingDirectoryTo string - Name string - Branch string - Path string - MarkedBaseCommitStatus string - MarkAsBaseCommit string - MarkAsBaseCommitTooltip string - MarkedCommitMarker string - PleaseGoToURL string - NoCopiedCommits string - DisabledMenuItemPrefix string - QuickStartInteractiveRebase string - QuickStartInteractiveRebaseTooltip string - CannotQuickStartInteractiveRebase string - ToggleRangeSelect string - RangeSelectUp string - RangeSelectDown string - RangeSelectNotSupported string - NoItemSelected string - SelectedItemIsNotABranch string - SelectedItemDoesNotHaveFiles string - RangeSelectNotSupportedForSubmodules string - OldCherryPickKeyWarning string - CommandDoesNotSupportOpeningInEditor string - Actions Actions - Bisect Bisect - Log Log - BreakingChangesTitle string - BreakingChangesMessage string - BreakingChangesByVersion map[string]string + SuggestionsTitle string + SuggestionsSubtitle string + ExtrasTitle string + PushingTagStatus string + PullRequestURLCopiedToClipboard string + CommitDiffCopiedToClipboard string + CommitURLCopiedToClipboard string + CommitMessageCopiedToClipboard string + CommitSubjectCopiedToClipboard string + CommitAuthorCopiedToClipboard string + PatchCopiedToClipboard string + CopiedToClipboard string + ErrCannotEditDirectory string + ErrStageDirWithInlineMergeConflicts string + ErrRepositoryMovedOrDeleted string + ErrWorktreeMovedOrRemoved string + CommandLog string + ToggleShowCommandLog string + FocusCommandLog string + CommandLogHeader string + RandomTip string + SelectParentCommitForMerge string + ToggleWhitespaceInDiffView string + ToggleWhitespaceInDiffViewTooltip string + IgnoreWhitespaceDiffViewSubTitle string + IgnoreWhitespaceNotSupportedHere string + IncreaseContextInDiffView string + IncreaseContextInDiffViewTooltip string + DecreaseContextInDiffView string + DecreaseContextInDiffViewTooltip string + DiffContextSizeChanged string + IncreaseRenameSimilarityThreshold string + IncreaseRenameSimilarityThresholdTooltip string + DecreaseRenameSimilarityThreshold string + DecreaseRenameSimilarityThresholdTooltip string + RenameSimilarityThresholdChanged string + CreatePullRequestOptions string + DefaultBranch string + SelectBranch string + CreatePullRequest string + SelectConfigFile string + NoConfigFileFoundErr string + LoadingFileSuggestions string + LoadingCommits string + MustSpecifyOriginError string + GitOutput string + GitCommandFailed string + AbortTitle string + AbortPrompt string + OpenLogMenu string + OpenLogMenuTooltip string + LogMenuTitle string + ToggleShowGitGraphAll string + ShowGitGraph string + SortOrder string + SortAlphabetical string + SortByDate string + SortByRecency string + SortBasedOnReflog string + SortCommits string + CantChangeContextSizeError string + OpenCommitInBrowser string + ViewBisectOptions string + ConfirmRevertCommit string + RewordInEditorTitle string + RewordInEditorPrompt string + CheckoutPrompt string + HardResetAutostashPrompt string + UpstreamGone string + NukeDescription string + DiscardStagedChangesDescription string + EmptyOutput string + Patch string + CustomPatch string + CommitsCopied string + CommitCopied string + ResetPatch string + ResetPatchTooltip string + ApplyPatch string + ApplyPatchTooltip string + ApplyPatchInReverse string + ApplyPatchInReverseTooltip string + RemovePatchFromOriginalCommit string + RemovePatchFromOriginalCommitTooltip string + MovePatchOutIntoIndex string + MovePatchOutIntoIndexTooltip string + MovePatchIntoNewCommit string + MovePatchIntoNewCommitTooltip string + MovePatchToSelectedCommit string + MovePatchToSelectedCommitTooltip string + CopyPatchToClipboard string + NoMatchesFor string + MatchesFor string + SearchKeybindings string + SearchPrefix string + FilterPrefix string + ExitSearchMode string + ExitTextFilterMode string + Switch string + SwitchToWorktree string + SwitchToWorktreeTooltip string + AlreadyCheckedOutByWorktree string + BranchCheckedOutByWorktree string + DetachWorktreeTooltip string + Switching string + RemoveWorktree string + RemoveWorktreeTitle string + DetachWorktree string + DetachingWorktree string + WorktreesTitle string + WorktreeTitle string + RemoveWorktreePrompt string + ForceRemoveWorktreePrompt string + RemovingWorktree string + AddingWorktree string + CantDeleteCurrentWorktree string + AlreadyInWorktree string + CantDeleteMainWorktree string + NoWorktreesThisRepo string + MissingWorktree string + MainWorktree string + NewWorktree string + NewWorktreePath string + NewWorktreeBase string + RemoveWorktreeTooltip string + BranchNameCannotBeBlank string + NewBranchName string + NewBranchNameLeaveBlank string + ViewWorktreeOptions string + CreateWorktreeFrom string + CreateWorktreeFromDetached string + LcWorktree string + ChangingDirectoryTo string + Name string + Branch string + Path string + MarkedBaseCommitStatus string + MarkAsBaseCommit string + MarkAsBaseCommitTooltip string + MarkedCommitMarker string + PleaseGoToURL string + NoCopiedCommits string + DisabledMenuItemPrefix string + QuickStartInteractiveRebase string + QuickStartInteractiveRebaseTooltip string + CannotQuickStartInteractiveRebase string + ToggleRangeSelect string + RangeSelectUp string + RangeSelectDown string + RangeSelectNotSupported string + NoItemSelected string + SelectedItemIsNotABranch string + SelectedItemDoesNotHaveFiles string + RangeSelectNotSupportedForSubmodules string + OldCherryPickKeyWarning string + CommandDoesNotSupportOpeningInEditor string + Actions Actions + Bisect Bisect + Log Log + BreakingChangesTitle string + BreakingChangesMessage string + BreakingChangesByVersion map[string]string } type Bisect struct { @@ -1554,219 +1559,224 @@ func EnglishTranslationSet() *TranslationSet { ViewDiffingOptions: "View diffing options", ViewDiffingOptionsTooltip: "View options relating to diffing two refs e.g. diffing against selected ref, entering ref to diff against, and reversing the diff direction.", // the actual view is the extras view which I intend to give more tabs in future but for now we'll only mention the command log part - OpenCommandLogMenu: "View command log options", - OpenCommandLogMenuTooltip: "View options for the command log e.g. show/hide the command log and focus the command log.", - ShowingGitDiff: "Showing output for:", - CommitDiff: "Commit diff", - CopyCommitHashToClipboard: "Copy commit hash to clipboard", - CommitHash: "Commit hash", - CommitURL: "Commit URL", - CopyCommitMessageToClipboard: "Copy commit message to clipboard", - PasteCommitMessageFromClipboard: "Paste commit message from clipboard", - SurePasteCommitMessage: "Pasting will overwrite the current commit message, continue?", - CommitMessage: "Commit message", - CommitSubject: "Commit subject", - CommitAuthor: "Commit author", - CopyCommitAttributeToClipboard: "Copy commit attribute to clipboard", - CopyCommitAttributeToClipboardTooltip: "Copy commit attribute to clipboard (e.g. hash, URL, diff, message, author).", - CopyBranchNameToClipboard: "Copy branch name to clipboard", - CopyPathToClipboard: "Copy path to clipboard", - CopySelectedTextToClipboard: "Copy selected text to clipboard", - CommitPrefixPatternError: "Error in commitPrefix pattern", - NoFilesStagedTitle: "No files staged", - NoFilesStagedPrompt: "You have not staged any files. Commit all files?", - BranchNotFoundTitle: "Branch not found", - BranchNotFoundPrompt: "Branch not found. Create a new branch named", - BranchUnknown: "Branch unknown", - DiscardChangeTitle: "Discard change", - DiscardChangePrompt: "Are you sure you want to discard this change (git reset)? It is irreversible.\nTo disable this dialogue set the config key of 'gui.skipDiscardChangeWarning' to true", - CreateNewBranchFromCommit: "Create new branch off of commit", - BuildingPatch: "Building patch", - ViewCommits: "View commits", - MinGitVersionError: "Git version must be at least 2.20 (i.e. from 2018 onwards). Please upgrade your git version. Alternatively raise an issue at https://github.com/jesseduffield/lazygit/issues for lazygit to be more backwards compatible.", - RunningCustomCommandStatus: "Running custom command", - SubmoduleStashAndReset: "Stash uncommitted submodule changes and update", - AndResetSubmodules: "And reset submodules", - Enter: "Enter", - EnterSubmoduleTooltip: "Enter submodule. After entering the submodule, you can press `{{.escape}}` to escape back to the parent repo.", - CopySubmoduleNameToClipboard: "Copy submodule name to clipboard", - RemoveSubmodule: "Remove submodule", - RemoveSubmodulePrompt: "Are you sure you want to remove submodule '%s' and its corresponding directory? This is irreversible.", - RemoveSubmoduleTooltip: "Remove the selected submodule and its corresponding directory.", - ResettingSubmoduleStatus: "Resetting submodule", - NewSubmoduleName: "New submodule name:", - NewSubmoduleUrl: "New submodule URL:", - NewSubmodulePath: "New submodule path:", - NewSubmodule: "New submodule", - AddingSubmoduleStatus: "Adding submodule", - UpdateSubmoduleUrl: "Update URL for submodule '%s'", - UpdatingSubmoduleUrlStatus: "Updating URL", - EditSubmoduleUrl: "Update submodule URL", - InitializingSubmoduleStatus: "Initializing submodule", - InitSubmoduleTooltip: "Initialize the selected submodule to prepare for fetching. You probably want to follow this up by invoking the 'update' action to fetch the submodule.", - Update: "Update", - Initialize: "Initialize", - SubmoduleUpdateTooltip: "Update selected submodule.", - UpdatingSubmoduleStatus: "Updating submodule", - BulkInitSubmodules: "Bulk init submodules", - BulkUpdateSubmodules: "Bulk update submodules", - BulkDeinitSubmodules: "Bulk deinit submodules", - ViewBulkSubmoduleOptions: "View bulk submodule options", - BulkSubmoduleOptions: "Bulk submodule options", - RunningCommand: "Running command", - SubCommitsTitle: "Sub-commits", - SubmodulesTitle: "Submodules", - NavigationTitle: "List panel navigation", - SuggestionsCheatsheetTitle: "Suggestions", - SuggestionsTitle: "Suggestions (press %s to focus)", - SuggestionsSubtitle: "(press %s to delete, %s to edit)", - ExtrasTitle: "Command log", - PushingTagStatus: "Pushing tag", - PullRequestURLCopiedToClipboard: "Pull request URL copied to clipboard", - CommitDiffCopiedToClipboard: "Commit diff copied to clipboard", - CommitURLCopiedToClipboard: "Commit URL copied to clipboard", - CommitMessageCopiedToClipboard: "Commit message copied to clipboard", - CommitSubjectCopiedToClipboard: "Commit subject copied to clipboard", - CommitAuthorCopiedToClipboard: "Commit author copied to clipboard", - PatchCopiedToClipboard: "Patch copied to clipboard", - CopiedToClipboard: "copied to clipboard", - ErrCannotEditDirectory: "Cannot edit directories: you can only edit individual files", - ErrStageDirWithInlineMergeConflicts: "Cannot stage/unstage directory containing files with inline merge conflicts. Please fix up the merge conflicts first", - ErrRepositoryMovedOrDeleted: "Cannot find repo. It might have been moved or deleted ¯\\_(ツ)_/¯", - CommandLog: "Command log", - ErrWorktreeMovedOrRemoved: "Cannot find worktree. It might have been moved or removed ¯\\_(ツ)_/¯", - ToggleShowCommandLog: "Toggle show/hide command log", - FocusCommandLog: "Focus command log", - CommandLogHeader: "You can hide/focus this panel by pressing '%s'\n", - RandomTip: "Random tip", - SelectParentCommitForMerge: "Select parent commit for merge", - ToggleWhitespaceInDiffView: "Toggle whitespace", - ToggleWhitespaceInDiffViewTooltip: "Toggle whether or not whitespace changes are shown in the diff view.", - IgnoreWhitespaceDiffViewSubTitle: "(ignoring whitespace)", - IgnoreWhitespaceNotSupportedHere: "Ignoring whitespace is not supported in this view", - IncreaseContextInDiffView: "Increase diff context size", - IncreaseContextInDiffViewTooltip: "Increase the amount of the context shown around changes in the diff view.", - DecreaseContextInDiffView: "Decrease diff context size", - DecreaseContextInDiffViewTooltip: "Decrease the amount of the context shown around changes in the diff view.", - DiffContextSizeChanged: "Changed diff context size to %d", - CreatePullRequestOptions: "View create pull request options", - DefaultBranch: "Default branch", - SelectBranch: "Select branch", - SelectConfigFile: "Select config file", - NoConfigFileFoundErr: "No config file found", - LoadingFileSuggestions: "Loading file suggestions", - LoadingCommits: "Loading commits", - MustSpecifyOriginError: "Must specify a remote if specifying a branch", - GitOutput: "Git output:", - GitCommandFailed: "Git command failed. Check command log for details (open with %s)", - AbortTitle: "Abort %s", - AbortPrompt: "Are you sure you want to abort the current %s?", - OpenLogMenu: "View log options", - OpenLogMenuTooltip: "View options for commit log e.g. changing sort order, hiding the git graph, showing the whole git graph.", - LogMenuTitle: "Commit Log Options", - ToggleShowGitGraphAll: "Toggle show whole git graph (pass the `--all` flag to `git log`)", - ShowGitGraph: "Show git graph", - SortOrder: "Sort order", - SortAlphabetical: "Alphabetical", - SortByDate: "Date", - SortByRecency: "Recency", - SortBasedOnReflog: "(based on reflog)", - SortCommits: "Commit sort order", - CantChangeContextSizeError: "Cannot change context while in patch building mode because we were too lazy to support it when releasing the feature. If you really want it, please let us know!", - OpenCommitInBrowser: "Open commit in browser", - ViewBisectOptions: "View bisect options", - ConfirmRevertCommit: "Are you sure you want to revert {{.selectedCommit}}?", - RewordInEditorTitle: "Reword in editor", - RewordInEditorPrompt: "Are you sure you want to reword this commit in your editor?", - HardResetAutostashPrompt: "Are you sure you want to hard reset to '%s'? An auto-stash will be performed if necessary.", - CheckoutPrompt: "Are you sure you want to checkout '%s'?", - UpstreamGone: "(upstream gone)", - NukeDescription: "If you want to make all the changes in the worktree go away, this is the way to do it. If there are dirty submodule changes this will stash those changes in the submodule(s).", - DiscardStagedChangesDescription: "This will create a new stash entry containing only staged files and then drop it, so that the working tree is left with only unstaged changes", - EmptyOutput: "", - Patch: "Patch", - CustomPatch: "Custom patch", - CommitsCopied: "commits copied", // lowercase because it's used in a sentence - CommitCopied: "commit copied", // lowercase because it's used in a sentence - ResetPatch: "Reset patch", - ResetPatchTooltip: "Clear the current patch.", - ApplyPatch: "Apply patch", - ApplyPatchTooltip: "Apply the current patch to the working tree.", - ApplyPatchInReverse: "Apply patch in reverse", - ApplyPatchInReverseTooltip: "Apply the current patch in reverse to the working tree.", - RemovePatchFromOriginalCommit: "Remove patch from original commit (%s)", - RemovePatchFromOriginalCommitTooltip: "Remove the current patch from its commit. This is achieved by starting an interactive rebase at the commit, applying the patch in reverse, and then continuing the rebase. If later commits depend on the patch, you may need to resolve conflicts.", - MovePatchOutIntoIndex: "Move patch out into index", - MovePatchOutIntoIndexTooltip: "Move the patch out of its commit and into the index. This is achieved by starting an interactive rebase at the commit, applying the patch in reverse, continuing the rebase to completion, and then applying the patch to the index. If later commits depend on the patch, you may need to resolve conflicts.", - MovePatchIntoNewCommit: "Move patch into new commit", - MovePatchIntoNewCommitTooltip: "Move the patch out of its commit and into a new commit sitting on top of the original commit. This is achieved by starting an interactive rebase at the original commit, applying the patch in reverse, then applying the patch to the index and committing it as a new commit, before continuing the rebase to completion. If later commits depend on the patch, you may need to resolve conflicts.", - MovePatchToSelectedCommit: "Move patch to selected commit (%s)", - MovePatchToSelectedCommitTooltip: "Move the patch out of its original commit and into the selected commit. This is achieved by starting an interactive rebase at the original commit, applying the patch in reverse, then continuing the rebase up to the selected commit, before applying the patch forward and amending the seleced commit. The rebase is then continued to completion. If commits between the source and destination commit depend on the patch, you may need to resolve conflicts.", - CopyPatchToClipboard: "Copy patch to clipboard", - NoMatchesFor: "No matches for '%s' %s", - ExitSearchMode: "%s: Exit search mode", - ExitTextFilterMode: "%s: Exit filter mode", - MatchesFor: "matches for '%s' (%d of %d) %s", // lowercase because it's after other text - SearchKeybindings: "%s: Next match, %s: Previous match, %s: Exit search mode", - SearchPrefix: "Search: ", - FilterPrefix: "Filter: ", - WorktreesTitle: "Worktrees", - WorktreeTitle: "Worktree", - Switch: "Switch", - SwitchToWorktree: "Switch to worktree", - SwitchToWorktreeTooltip: "Switch to the selected worktree.", - AlreadyCheckedOutByWorktree: "This branch is checked out by worktree {{.worktreeName}}. Do you want to switch to that worktree?", - BranchCheckedOutByWorktree: "Branch {{.branchName}} is checked out by worktree {{.worktreeName}}", - DetachWorktreeTooltip: "This will run `git checkout --detach` on the worktree so that it stops hogging the branch, but the worktree's working tree will be left alone.", - Switching: "Switching", - RemoveWorktree: "Remove worktree", - RemoveWorktreeTitle: "Remove worktree", - RemoveWorktreePrompt: "Are you sure you want to remove worktree '{{.worktreeName}}'?", - ForceRemoveWorktreePrompt: "'{{.worktreeName}}' contains modified or untracked files (to be honest, it could contain both). Are you sure you want to remove it?", - RemovingWorktree: "Deleting worktree", - DetachWorktree: "Detach worktree", - DetachingWorktree: "Detaching worktree", - AddingWorktree: "Adding worktree", - CantDeleteCurrentWorktree: "You cannot remove the current worktree!", - AlreadyInWorktree: "You are already in the selected worktree", - CantDeleteMainWorktree: "You cannot remove the main worktree!", - NoWorktreesThisRepo: "No worktrees", - MissingWorktree: "(missing)", - MainWorktree: "(main)", - NewWorktree: "New worktree", - NewWorktreePath: "New worktree path", - NewWorktreeBase: "New worktree base ref", - RemoveWorktreeTooltip: "Remove the selected worktree. This will both delete the worktree's directory, as well as metadata about the worktree in the .git directory.", - BranchNameCannotBeBlank: "Branch name cannot be blank", - NewBranchName: "New branch name", - NewBranchNameLeaveBlank: "New branch name (leave blank to checkout {{.default}})", - ViewWorktreeOptions: "View worktree options", - CreateWorktreeFrom: "Create worktree from {{.ref}}", - CreateWorktreeFromDetached: "Create worktree from {{.ref}} (detached)", - LcWorktree: "worktree", - ChangingDirectoryTo: "Changing directory to {{.path}}", - Name: "Name", - Branch: "Branch", - Path: "Path", - MarkedBaseCommitStatus: "Marked a base commit for rebase", - MarkAsBaseCommit: "Mark as base commit for rebase", - MarkAsBaseCommitTooltip: "Select a base commit for the next rebase. When you rebase onto a branch, only commits above the base commit will be brought across. This uses the `git rebase --onto` command.", - MarkedCommitMarker: "↑↑↑ Will rebase from here ↑↑↑", - PleaseGoToURL: "Please go to {{.url}}", - DisabledMenuItemPrefix: "Disabled: ", - NoCopiedCommits: "No copied commits", - QuickStartInteractiveRebase: "Start interactive rebase", - QuickStartInteractiveRebaseTooltip: "Start an interactive rebase for the commits on your branch. This will include all commits from the HEAD commit down to the first merge commit or main branch commit.\nIf you would instead like to start an interactive rebase from the selected commit, press `{{.editKey}}`.", - CannotQuickStartInteractiveRebase: "Cannot start interactive rebase: the HEAD commit is a merge commit or is present on the main branch, so there is no appropriate base commit to start the rebase from. You can start an interactive rebase from a specific commit by selecting the commit and pressing `{{.editKey}}`.", - RangeSelectUp: "Range select up", - RangeSelectDown: "Range select down", - RangeSelectNotSupported: "Action does not support range selection, please select a single item", - NoItemSelected: "No item selected", - SelectedItemIsNotABranch: "Selected item is not a branch", - SelectedItemDoesNotHaveFiles: "Selected item does not have files to view", - RangeSelectNotSupportedForSubmodules: "Range select not supported for submodules", - OldCherryPickKeyWarning: "The 'c' key is no longer the default key for copying commits to cherry pick. Please use `{{.copy}}` instead (and `{{.paste}}` to paste). The reason for this change is that the 'v' key for selecting a range of lines when staging is now also used for selecting a range of lines in any list view, meaning that we needed to find a new key for pasting commits, and if we're going to now use `{{.paste}}` for pasting commits, we may as well use `{{.copy}}` for copying them. If you want to configure the keybindings to get the old behaviour, set the following in your config:\n\nkeybinding:\n universal:\n toggleRangeSelect: \n commits:\n cherryPickCopy: 'c'\n pasteCommits: 'v'", - CommandDoesNotSupportOpeningInEditor: "This command doesn't support switching to the editor", + OpenCommandLogMenu: "View command log options", + OpenCommandLogMenuTooltip: "View options for the command log e.g. show/hide the command log and focus the command log.", + ShowingGitDiff: "Showing output for:", + CommitDiff: "Commit diff", + CopyCommitHashToClipboard: "Copy commit hash to clipboard", + CommitHash: "Commit hash", + CommitURL: "Commit URL", + CopyCommitMessageToClipboard: "Copy commit message to clipboard", + PasteCommitMessageFromClipboard: "Paste commit message from clipboard", + SurePasteCommitMessage: "Pasting will overwrite the current commit message, continue?", + CommitMessage: "Commit message", + CommitSubject: "Commit subject", + CommitAuthor: "Commit author", + CopyCommitAttributeToClipboard: "Copy commit attribute to clipboard", + CopyCommitAttributeToClipboardTooltip: "Copy commit attribute to clipboard (e.g. hash, URL, diff, message, author).", + CopyBranchNameToClipboard: "Copy branch name to clipboard", + CopyPathToClipboard: "Copy path to clipboard", + CopySelectedTextToClipboard: "Copy selected text to clipboard", + CommitPrefixPatternError: "Error in commitPrefix pattern", + NoFilesStagedTitle: "No files staged", + NoFilesStagedPrompt: "You have not staged any files. Commit all files?", + BranchNotFoundTitle: "Branch not found", + BranchNotFoundPrompt: "Branch not found. Create a new branch named", + BranchUnknown: "Branch unknown", + DiscardChangeTitle: "Discard change", + DiscardChangePrompt: "Are you sure you want to discard this change (git reset)? It is irreversible.\nTo disable this dialogue set the config key of 'gui.skipDiscardChangeWarning' to true", + CreateNewBranchFromCommit: "Create new branch off of commit", + BuildingPatch: "Building patch", + ViewCommits: "View commits", + MinGitVersionError: "Git version must be at least 2.20 (i.e. from 2018 onwards). Please upgrade your git version. Alternatively raise an issue at https://github.com/jesseduffield/lazygit/issues for lazygit to be more backwards compatible.", + RunningCustomCommandStatus: "Running custom command", + SubmoduleStashAndReset: "Stash uncommitted submodule changes and update", + AndResetSubmodules: "And reset submodules", + Enter: "Enter", + EnterSubmoduleTooltip: "Enter submodule. After entering the submodule, you can press `{{.escape}}` to escape back to the parent repo.", + CopySubmoduleNameToClipboard: "Copy submodule name to clipboard", + RemoveSubmodule: "Remove submodule", + RemoveSubmodulePrompt: "Are you sure you want to remove submodule '%s' and its corresponding directory? This is irreversible.", + RemoveSubmoduleTooltip: "Remove the selected submodule and its corresponding directory.", + ResettingSubmoduleStatus: "Resetting submodule", + NewSubmoduleName: "New submodule name:", + NewSubmoduleUrl: "New submodule URL:", + NewSubmodulePath: "New submodule path:", + NewSubmodule: "New submodule", + AddingSubmoduleStatus: "Adding submodule", + UpdateSubmoduleUrl: "Update URL for submodule '%s'", + UpdatingSubmoduleUrlStatus: "Updating URL", + EditSubmoduleUrl: "Update submodule URL", + InitializingSubmoduleStatus: "Initializing submodule", + InitSubmoduleTooltip: "Initialize the selected submodule to prepare for fetching. You probably want to follow this up by invoking the 'update' action to fetch the submodule.", + Update: "Update", + Initialize: "Initialize", + SubmoduleUpdateTooltip: "Update selected submodule.", + UpdatingSubmoduleStatus: "Updating submodule", + BulkInitSubmodules: "Bulk init submodules", + BulkUpdateSubmodules: "Bulk update submodules", + BulkDeinitSubmodules: "Bulk deinit submodules", + ViewBulkSubmoduleOptions: "View bulk submodule options", + BulkSubmoduleOptions: "Bulk submodule options", + RunningCommand: "Running command", + SubCommitsTitle: "Sub-commits", + SubmodulesTitle: "Submodules", + NavigationTitle: "List panel navigation", + SuggestionsCheatsheetTitle: "Suggestions", + SuggestionsTitle: "Suggestions (press %s to focus)", + SuggestionsSubtitle: "(press %s to delete, %s to edit)", + ExtrasTitle: "Command log", + PushingTagStatus: "Pushing tag", + PullRequestURLCopiedToClipboard: "Pull request URL copied to clipboard", + CommitDiffCopiedToClipboard: "Commit diff copied to clipboard", + CommitURLCopiedToClipboard: "Commit URL copied to clipboard", + CommitMessageCopiedToClipboard: "Commit message copied to clipboard", + CommitSubjectCopiedToClipboard: "Commit subject copied to clipboard", + CommitAuthorCopiedToClipboard: "Commit author copied to clipboard", + PatchCopiedToClipboard: "Patch copied to clipboard", + CopiedToClipboard: "copied to clipboard", + ErrCannotEditDirectory: "Cannot edit directories: you can only edit individual files", + ErrStageDirWithInlineMergeConflicts: "Cannot stage/unstage directory containing files with inline merge conflicts. Please fix up the merge conflicts first", + ErrRepositoryMovedOrDeleted: "Cannot find repo. It might have been moved or deleted ¯\\_(ツ)_/¯", + CommandLog: "Command log", + ErrWorktreeMovedOrRemoved: "Cannot find worktree. It might have been moved or removed ¯\\_(ツ)_/¯", + ToggleShowCommandLog: "Toggle show/hide command log", + FocusCommandLog: "Focus command log", + CommandLogHeader: "You can hide/focus this panel by pressing '%s'\n", + RandomTip: "Random tip", + SelectParentCommitForMerge: "Select parent commit for merge", + ToggleWhitespaceInDiffView: "Toggle whitespace", + ToggleWhitespaceInDiffViewTooltip: "Toggle whether or not whitespace changes are shown in the diff view.", + IgnoreWhitespaceDiffViewSubTitle: "(ignoring whitespace)", + IgnoreWhitespaceNotSupportedHere: "Ignoring whitespace is not supported in this view", + IncreaseContextInDiffView: "Increase diff context size", + IncreaseContextInDiffViewTooltip: "Increase the amount of the context shown around changes in the diff view.", + DecreaseContextInDiffView: "Decrease diff context size", + DecreaseContextInDiffViewTooltip: "Decrease the amount of the context shown around changes in the diff view.", + DiffContextSizeChanged: "Changed diff context size to %d", + IncreaseRenameSimilarityThresholdTooltip: "Increase the similarity threshold for a deletion and addition pair to be treated as a rename.", + IncreaseRenameSimilarityThreshold: "Increase rename similarity threshold", + DecreaseRenameSimilarityThresholdTooltip: "Decrease the similarity threshold for a deletion and addition pair to be treated as a rename.", + DecreaseRenameSimilarityThreshold: "Decrease rename similarity threshold", + RenameSimilarityThresholdChanged: "Changed rename similarity threshold to %d%%", + CreatePullRequestOptions: "View create pull request options", + DefaultBranch: "Default branch", + SelectBranch: "Select branch", + SelectConfigFile: "Select config file", + NoConfigFileFoundErr: "No config file found", + LoadingFileSuggestions: "Loading file suggestions", + LoadingCommits: "Loading commits", + MustSpecifyOriginError: "Must specify a remote if specifying a branch", + GitOutput: "Git output:", + GitCommandFailed: "Git command failed. Check command log for details (open with %s)", + AbortTitle: "Abort %s", + AbortPrompt: "Are you sure you want to abort the current %s?", + OpenLogMenu: "View log options", + OpenLogMenuTooltip: "View options for commit log e.g. changing sort order, hiding the git graph, showing the whole git graph.", + LogMenuTitle: "Commit Log Options", + ToggleShowGitGraphAll: "Toggle show whole git graph (pass the `--all` flag to `git log`)", + ShowGitGraph: "Show git graph", + SortOrder: "Sort order", + SortAlphabetical: "Alphabetical", + SortByDate: "Date", + SortByRecency: "Recency", + SortBasedOnReflog: "(based on reflog)", + SortCommits: "Commit sort order", + CantChangeContextSizeError: "Cannot change context while in patch building mode because we were too lazy to support it when releasing the feature. If you really want it, please let us know!", + OpenCommitInBrowser: "Open commit in browser", + ViewBisectOptions: "View bisect options", + ConfirmRevertCommit: "Are you sure you want to revert {{.selectedCommit}}?", + RewordInEditorTitle: "Reword in editor", + RewordInEditorPrompt: "Are you sure you want to reword this commit in your editor?", + HardResetAutostashPrompt: "Are you sure you want to hard reset to '%s'? An auto-stash will be performed if necessary.", + CheckoutPrompt: "Are you sure you want to checkout '%s'?", + UpstreamGone: "(upstream gone)", + NukeDescription: "If you want to make all the changes in the worktree go away, this is the way to do it. If there are dirty submodule changes this will stash those changes in the submodule(s).", + DiscardStagedChangesDescription: "This will create a new stash entry containing only staged files and then drop it, so that the working tree is left with only unstaged changes", + EmptyOutput: "", + Patch: "Patch", + CustomPatch: "Custom patch", + CommitsCopied: "commits copied", // lowercase because it's used in a sentence + CommitCopied: "commit copied", // lowercase because it's used in a sentence + ResetPatch: "Reset patch", + ResetPatchTooltip: "Clear the current patch.", + ApplyPatch: "Apply patch", + ApplyPatchTooltip: "Apply the current patch to the working tree.", + ApplyPatchInReverse: "Apply patch in reverse", + ApplyPatchInReverseTooltip: "Apply the current patch in reverse to the working tree.", + RemovePatchFromOriginalCommit: "Remove patch from original commit (%s)", + RemovePatchFromOriginalCommitTooltip: "Remove the current patch from its commit. This is achieved by starting an interactive rebase at the commit, applying the patch in reverse, and then continuing the rebase. If later commits depend on the patch, you may need to resolve conflicts.", + MovePatchOutIntoIndex: "Move patch out into index", + MovePatchOutIntoIndexTooltip: "Move the patch out of its commit and into the index. This is achieved by starting an interactive rebase at the commit, applying the patch in reverse, continuing the rebase to completion, and then applying the patch to the index. If later commits depend on the patch, you may need to resolve conflicts.", + MovePatchIntoNewCommit: "Move patch into new commit", + MovePatchIntoNewCommitTooltip: "Move the patch out of its commit and into a new commit sitting on top of the original commit. This is achieved by starting an interactive rebase at the original commit, applying the patch in reverse, then applying the patch to the index and committing it as a new commit, before continuing the rebase to completion. If later commits depend on the patch, you may need to resolve conflicts.", + MovePatchToSelectedCommit: "Move patch to selected commit (%s)", + MovePatchToSelectedCommitTooltip: "Move the patch out of its original commit and into the selected commit. This is achieved by starting an interactive rebase at the original commit, applying the patch in reverse, then continuing the rebase up to the selected commit, before applying the patch forward and amending the seleced commit. The rebase is then continued to completion. If commits between the source and destination commit depend on the patch, you may need to resolve conflicts.", + CopyPatchToClipboard: "Copy patch to clipboard", + NoMatchesFor: "No matches for '%s' %s", + ExitSearchMode: "%s: Exit search mode", + ExitTextFilterMode: "%s: Exit filter mode", + MatchesFor: "matches for '%s' (%d of %d) %s", // lowercase because it's after other text + SearchKeybindings: "%s: Next match, %s: Previous match, %s: Exit search mode", + SearchPrefix: "Search: ", + FilterPrefix: "Filter: ", + WorktreesTitle: "Worktrees", + WorktreeTitle: "Worktree", + Switch: "Switch", + SwitchToWorktree: "Switch to worktree", + SwitchToWorktreeTooltip: "Switch to the selected worktree.", + AlreadyCheckedOutByWorktree: "This branch is checked out by worktree {{.worktreeName}}. Do you want to switch to that worktree?", + BranchCheckedOutByWorktree: "Branch {{.branchName}} is checked out by worktree {{.worktreeName}}", + DetachWorktreeTooltip: "This will run `git checkout --detach` on the worktree so that it stops hogging the branch, but the worktree's working tree will be left alone.", + Switching: "Switching", + RemoveWorktree: "Remove worktree", + RemoveWorktreeTitle: "Remove worktree", + RemoveWorktreePrompt: "Are you sure you want to remove worktree '{{.worktreeName}}'?", + ForceRemoveWorktreePrompt: "'{{.worktreeName}}' contains modified or untracked files (to be honest, it could contain both). Are you sure you want to remove it?", + RemovingWorktree: "Deleting worktree", + DetachWorktree: "Detach worktree", + DetachingWorktree: "Detaching worktree", + AddingWorktree: "Adding worktree", + CantDeleteCurrentWorktree: "You cannot remove the current worktree!", + AlreadyInWorktree: "You are already in the selected worktree", + CantDeleteMainWorktree: "You cannot remove the main worktree!", + NoWorktreesThisRepo: "No worktrees", + MissingWorktree: "(missing)", + MainWorktree: "(main)", + NewWorktree: "New worktree", + NewWorktreePath: "New worktree path", + NewWorktreeBase: "New worktree base ref", + RemoveWorktreeTooltip: "Remove the selected worktree. This will both delete the worktree's directory, as well as metadata about the worktree in the .git directory.", + BranchNameCannotBeBlank: "Branch name cannot be blank", + NewBranchName: "New branch name", + NewBranchNameLeaveBlank: "New branch name (leave blank to checkout {{.default}})", + ViewWorktreeOptions: "View worktree options", + CreateWorktreeFrom: "Create worktree from {{.ref}}", + CreateWorktreeFromDetached: "Create worktree from {{.ref}} (detached)", + LcWorktree: "worktree", + ChangingDirectoryTo: "Changing directory to {{.path}}", + Name: "Name", + Branch: "Branch", + Path: "Path", + MarkedBaseCommitStatus: "Marked a base commit for rebase", + MarkAsBaseCommit: "Mark as base commit for rebase", + MarkAsBaseCommitTooltip: "Select a base commit for the next rebase. When you rebase onto a branch, only commits above the base commit will be brought across. This uses the `git rebase --onto` command.", + MarkedCommitMarker: "↑↑↑ Will rebase from here ↑↑↑", + PleaseGoToURL: "Please go to {{.url}}", + DisabledMenuItemPrefix: "Disabled: ", + NoCopiedCommits: "No copied commits", + QuickStartInteractiveRebase: "Start interactive rebase", + QuickStartInteractiveRebaseTooltip: "Start an interactive rebase for the commits on your branch. This will include all commits from the HEAD commit down to the first merge commit or main branch commit.\nIf you would instead like to start an interactive rebase from the selected commit, press `{{.editKey}}`.", + CannotQuickStartInteractiveRebase: "Cannot start interactive rebase: the HEAD commit is a merge commit or is present on the main branch, so there is no appropriate base commit to start the rebase from. You can start an interactive rebase from a specific commit by selecting the commit and pressing `{{.editKey}}`.", + RangeSelectUp: "Range select up", + RangeSelectDown: "Range select down", + RangeSelectNotSupported: "Action does not support range selection, please select a single item", + NoItemSelected: "No item selected", + SelectedItemIsNotABranch: "Selected item is not a branch", + SelectedItemDoesNotHaveFiles: "Selected item does not have files to view", + RangeSelectNotSupportedForSubmodules: "Range select not supported for submodules", + OldCherryPickKeyWarning: "The 'c' key is no longer the default key for copying commits to cherry pick. Please use `{{.copy}}` instead (and `{{.paste}}` to paste). The reason for this change is that the 'v' key for selecting a range of lines when staging is now also used for selecting a range of lines in any list view, meaning that we needed to find a new key for pasting commits, and if we're going to now use `{{.paste}}` for pasting commits, we may as well use `{{.copy}}` for copying them. If you want to configure the keybindings to get the old behaviour, set the following in your config:\n\nkeybinding:\n universal:\n toggleRangeSelect: \n commits:\n cherryPickCopy: 'c'\n pasteCommits: 'v'", + CommandDoesNotSupportOpeningInEditor: "This command doesn't support switching to the editor", Actions: Actions{ // TODO: combine this with the original keybinding descriptions (those are all in lowercase atm) diff --git a/pkg/integration/tests/diff/rename_similarity_threshold_change.go b/pkg/integration/tests/diff/rename_similarity_threshold_change.go new file mode 100644 index 00000000000..170838fd321 --- /dev/null +++ b/pkg/integration/tests/diff/rename_similarity_threshold_change.go @@ -0,0 +1,41 @@ +package diff + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var RenameSimilarityThresholdChange = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Change the rename similarity threshold while in the commits panel", + ExtraCmdArgs: []string{}, + Skip: false, + SetupConfig: func(config *config.AppConfig) {}, + SetupRepo: func(shell *Shell) { + shell.CreateFileAndAdd("original", "one\ntwo\nthree\nfour\nfive\n") + shell.Commit("add original") + + shell.DeleteFileAndAdd("original") + shell.CreateFileAndAdd("renamed", "one\ntwo\nthree\nfour\nfive\nsix\nseven\neight\nnine\nten\n") + shell.Commit("change name and contents") + }, + Run: func(t *TestDriver, keys config.KeybindingConfig) { + t.Views().Commits().Focus() + + t.Views().Main(). + ContainsLines( + Contains("2 files changed, 10 insertions(+), 5 deletions(-)"), + ) + + t.Views().Commits(). + Press(keys.Universal.DecreaseRenameSimilarityThreshold). + Tap(func() { + t.ExpectToast(Equals("Changed rename similarity threshold to 45%")) + }) + + t.Views().Main(). + ContainsLines( + Contains("original => renamed"), + Contains("1 file changed, 5 insertions(+)"), + ) + }, +}) diff --git a/pkg/integration/tests/file/rename_similarity_threshold_change.go b/pkg/integration/tests/file/rename_similarity_threshold_change.go new file mode 100644 index 00000000000..ec3aad24117 --- /dev/null +++ b/pkg/integration/tests/file/rename_similarity_threshold_change.go @@ -0,0 +1,35 @@ +package file + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var RenameSimilarityThresholdChange = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Change the rename similarity threshold while in the files panel", + ExtraCmdArgs: []string{}, + Skip: false, + SetupConfig: func(config *config.AppConfig) {}, + SetupRepo: func(shell *Shell) { + shell.CreateFileAndAdd("original", "one\ntwo\nthree\nfour\nfive\n") + shell.Commit("add original") + + shell.DeleteFileAndAdd("original") + shell.CreateFileAndAdd("renamed", "one\ntwo\nthree\nfour\nfive\nsix\nseven\neight\nnine\nten\n") + }, + Run: func(t *TestDriver, keys config.KeybindingConfig) { + t.Views().Files(). + IsFocused(). + Lines( + Contains("D ").Contains("original"), + Contains("A ").Contains("renamed"), + ). + Press(keys.Universal.DecreaseRenameSimilarityThreshold). + Tap(func() { + t.ExpectToast(Equals("Changed rename similarity threshold to 45%")) + }). + Lines( + Contains("R ").Contains("original → renamed"), + ) + }, +}) diff --git a/pkg/integration/tests/test_list.go b/pkg/integration/tests/test_list.go index fcc0b74bbbf..477fdee44cd 100644 --- a/pkg/integration/tests/test_list.go +++ b/pkg/integration/tests/test_list.go @@ -149,6 +149,7 @@ var tests = []*components.IntegrationTest{ diff.DiffAndApplyPatch, diff.DiffCommits, diff.IgnoreWhitespace, + diff.RenameSimilarityThresholdChange, file.CopyMenu, file.DirWithUntrackedFile, file.DiscardAllDirChanges, @@ -161,6 +162,7 @@ var tests = []*components.IntegrationTest{ file.DiscardVariousChangesRangeSelect, file.Gitignore, file.RememberCommitMessageAfterFail, + file.RenameSimilarityThresholdChange, file.StageChildrenRangeSelect, file.StageRangeSelect, filter_and_search.FilterCommitFiles, diff --git a/schema/config.json b/schema/config.json index 23e052f69b7..eb93600a33b 100644 --- a/schema/config.json +++ b/schema/config.json @@ -1322,6 +1322,14 @@ "type": "string", "default": "{" }, + "increaseRenameSimilarityThreshold": { + "type": "string", + "default": ")" + }, + "decreaseRenameSimilarityThreshold": { + "type": "string", + "default": "(" + }, "openDiffTool": { "type": "string", "default": "\u003cc-t\u003e" From f2db9fa3f91311fb42967234222bc510cf89b8bf Mon Sep 17 00:00:00 2001 From: Jesse Duffield Date: Sat, 13 Jul 2024 14:54:09 +1000 Subject: [PATCH 156/157] Revert "Check for fixup commits on CI" This reverts commit 7652d579f587c3202d1d80464557cfaa8005b3de. Not working on forks, and I don't have time to fix right now --- .github/workflows/ci.yml | 22 ---------------------- scripts/check_for_fixups.sh | 25 ------------------------- 2 files changed, 47 deletions(-) delete mode 100755 scripts/check_for_fixups.sh diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9b0a04938d5..64c890894c8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -219,25 +219,3 @@ jobs: CODACY_PROJECT_TOKEN=${{ secrets.CODACY_PROJECT_TOKEN }} \ bash <(curl -Ls https://coverage.codacy.com/get.sh) report \ --force-coverage-parser go -r coverage.out - - check-for-fixups: - runs-on: ubuntu-latest - if: github.ref != 'refs/heads/master' - steps: - # See https://github.com/actions/checkout/issues/552#issuecomment-1167086216 - - name: "PR commits + 1" - run: echo "PR_FETCH_DEPTH=$(( ${{ github.event.pull_request.commits }} + 1 ))" >> "${GITHUB_ENV}" - - - name: "Checkout PR branch and all PR commits" - uses: actions/checkout@v4 - with: - ref: ${{ github.event.pull_request.head.ref }} - fetch-depth: ${{ env.PR_FETCH_DEPTH }} - - - name: "Fetch the other branch with enough history for a common merge-base commit" - run: | - git fetch origin ${{ github.event.pull_request.base.ref }} - - - name: Check for fixups - run: | - ./scripts/check_for_fixups.sh ${{ github.event.pull_request.base.ref }} diff --git a/scripts/check_for_fixups.sh b/scripts/check_for_fixups.sh deleted file mode 100755 index c2c2e1a21ba..00000000000 --- a/scripts/check_for_fixups.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/sh - -base_ref=$1 - -# Determine the base commit -base_commit=$(git merge-base HEAD origin/"$base_ref") - -# Check if base_commit is set correctly -if [ -z "$base_commit" ]; then - echo "Failed to determine base commit." - exit 1 -fi -echo "Base commit: $base_commit" - -# Get commits with "fixup!" in the message from base_commit to HEAD -commits=$(git log -i -P --grep "fixup\!" --format="%h %s" "$base_commit..HEAD") - -if [ -z "$commits" ]; then - echo "No fixup commits found." - exit 0 -else - echo "Fixup commits found:" - echo "$commits" - exit 1 -fi From 0489b11c0c161eb73801f841909f47654107045b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 13 Jul 2024 05:03:33 +0000 Subject: [PATCH 157/157] README.md: Update Sponsors --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f87a31840b0..890d2c7c73e 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,7 @@ A simple terminal UI for git commands

-Mark LussierDean HerbertPeter BjorklundReilly WoodOliver GüntherPawan DhananjayBartłomiej DachCarsten GehlingCEUKAkos PutzHolden LucasChau TranmatejciktheAverageDev (Luca Tumedei)Ivan ZaitsevNicholas CloudLightQuantumGabriel SaillardAliaksandr StelmachonakBurgy BenjaminJoe KlemmerTobias LütkeBen BeaumontHollyJeff ForcierMaciej T. NowakFarzad MajidfayyazYuryAndreas KurthBraden SteffaniakJordan GillardSebastianGeorge SpanosFrantisek StankoAndy SlezakMartin KockIllarion KoperskiJesse AlamaCodacyBrettJan HeijmansKevin Nowaldsem pruijsOmar Luq Nicholas MoenEthan LiBrian MacAskillMaxinbrMiguel IbarsJan ZenknerVictor AremuIgor RamazanovElliott Maguiren8n - Workflow AutomationJosh ThomasJJFrederick MorlockDarren CraineMaximilian LangenfeldNurzhanDavis BulsChris OlsenNeil LambertDavid Heinemeier HanssonMarco Aurelio Caldas MirandaEmmanuel NosakhareEthan FischerTerry TaiPhilipp GorczakAdam RoesnerAndy HerdWassim MetallaouiTornike GomareliTim MorganMax ShypulniakMeshan Naidookyu08Felipe PiacsekdimaunxKovács Ádám叶博 +Mark LussierDean HerbertPeter BjorklundReilly WoodOliver GüntherPawan DhananjayBartłomiej DachCarsten GehlingCEUKAkos PutzHolden LucasChau TranmatejciktheAverageDev (Luca Tumedei)Ivan ZaitsevNicholas CloudLightQuantumGabriel SaillardAliaksandr StelmachonakBurgy BenjaminJoe KlemmerTobias LütkeBen BeaumontHollyJeff ForcierMaciej T. NowakFarzad MajidfayyazYuryAndreas KurthBraden SteffaniakJordan GillardSebastianGeorge SpanosAndy SlezakMartin KockIllarion KoperskiJesse AlamaCodacyBrettJan HeijmansKevin Nowaldsem pruijsOmar Luq Nicholas MoenEthan LiBrian MacAskillMaxinbrMiguel IbarsJan ZenknerVictor AremuIgor RamazanovElliott Maguiren8n - Workflow AutomationJosh ThomasJJFrederick MorlockDarren CraineMaximilian LangenfeldNurzhanDavis BulsChris OlsenNeil LambertDavid Heinemeier HanssonMikhailMarco Aurelio Caldas MirandaEmmanuel NosakhareEthan FischerTerry TaiAdam RoesnerAndy HerdWassim MetallaouiTornike GomareliTim MorganMax ShypulniakMeshan Naidookyu08Felipe PiacsekdimaunxKovács Ádám叶博Dusan LesanIan TanMaulik KatariaChanhLyEnzo SterroThomas Feldmann

## Elevator Pitch