BetterCmdTab

Nadpisania dla skrótów

Nadaj każdemu skrótowi własny układ, filtry, sortowanie i wygląd — wraz ze skrótami o ograniczonym zakresie.

Każdy skrót przełącznika zwykle korzysta z ustawień globalnych. shortcutOverrides pozwala użyć innych ustawień dla skrótu: kompaktowej listy alfabetycznej dla jednego skrótu klawiszowego i pełnowymiarowych podglądów okien dla innego, w tej samej instalacji.

Mechanizm współpracuje z scopedShortcutList, który tworzy dodatkowe skróty globalne otwierające przełącznik przefiltrowany do podzbioru okien. Razem pozwalają użyć jednego skrótu do „wszystkich moich okien jako podglądów”, a drugiego do „tylko okien tej aplikacji jako listy”.

Cele

Nadpisanie wskazuje skrót, którego dotyczy, w polu target:

targetSkrót
switchAppsGłówny przełącznik (domyślnie ⌘Tab)
switchWindowsPrzełącznik okien (domyślnie ⌘`)
scoped.<id>Skrót o ograniczonym zakresie, gdzie <id> jest jego id w scopedShortcutList
config.json
{
  "shortcutOverrides": [
    {
      "target": "switchWindows",
      "layoutMode": "windowPreview",
      "panelScalePercent": "140",
      "sortOrder": "mruWindows"
    },
    {
      "target": "scoped.0",
      "layoutMode": "list",
      "listWidthPercent": "60",
      "showMinimized": "false"
    }
  ]
}

Wartości nadpisań są ciągami znaków

Nadpisania są przechowywane jako słowniki ciągów znaków, dlatego każda wartość jest zapisana jako ciąg JSON — "140", a nie 140; "false", a nie false. Odpowiadające im klucze globalne używają swoich naturalnych typów. Generowany plik schema.json wymusza tę zasadę, więc edytor oznaczy błąd.

Każde pominięte pole dziedziczy ustawienie globalne. Nadpisanie zawierające tylko target jest równoważne brakowi nadpisania i zostaje usunięte przy następnym zapisie pliku.

Pola

Nazwy pól przeważnie odpowiadają nazwom kluczy globalnych — ich działanie opisuje dokumentacja konfiguracji. Trzy nazwy są skrócone: showMinimized, showHidden i showWindowless odpowiadają showMinimizedWindows, showHiddenApps i showWindowlessApps.

spaceScope przyjmuje tutaj dodatkową wartość "inherit", która stosuje ustawienie globalne.

Per-shortcut overrides of the global settings. Each entry names its shortcut in "target"; every other field is optional and inherits the global value when absent.

PoleTypOpis
target wymaganestringWhich shortcut this entry overrides.
applicationsOnlystringOverride: Show one entry per app instead of one per window.
  • "true"
  • "false"
backdropMaterialstringOverride: Blur material behind the rows. Ignored by the macOS 26 glass backdrop.
  • "hud"HUD (default)
  • "sidebar"Sidebar
  • "menu"Menu
  • "popover"Popover
  • "fullScreen"Full Screen
  • "underWindow"Under Window
boldSelectedLabelstringOverride: Show the highlighted entry's title in bold.
  • "true"
  • "false"
expandBrowserTabsAsWindowsstringOverride: List browser tabs (Safari, Chromium) as separate entries.
  • "true"
  • "false"
fontFacestringOverride: Typeface used for names and titles.
  • "system"System
  • "rounded"Rounded
  • "serif"Serif
  • "monospaced"Monospaced
fontScalestringOverride: Size of the name/title text, independent of the panel scale.
  • "extraSmall"Extra small
  • "small"Small
  • "standard"Default
  • "large"Large
  • "extraLarge"Extra large
gridMaxColumnsstringOverride: Column cap for the grid layout. 0 = automatic (as many as fit). Accepted: 0…12. Written as a decimal string.
layoutModestringOverride: Switcher layout: list rows, an icon grid, or window previews.
  • "list"List
  • "iconDock"Grid View
  • "windowPreview"Previews
letterHintsEnabledstringOverride: Show the letter that jumps to each entry.
  • "true"
  • "false"
listWidthPercentstringOverride: Width of list rows as a percentage of the automatic, screen-scaled width. Accepted: 30…100. Written as a decimal string.
panelAppearancestringOverride: Light or dark switcher, independent of the rest of macOS.
  • "system"System
  • "light"Light
  • "dark"Dark
panelCornerRadiusstringOverride: Panel corner radius in points. 0 = automatic (follows the panel size), -1 = square corners. Accepted: -1…40. Written as a decimal string.
panelOpacitystringOverride: Opacity of the panel background, in percent. Accepted: 30…100. Written as a decimal string.
panelScalePercentstringOverride: Overall size of the switcher panel, in percent. Accepted: 50…150. Written as a decimal string.
panelSizestringLegacy size preset, read once and migrated to panelScalePercent.
  • "small"
  • "standard"
  • "large"
previewTitleAlignmentstringOverride: Where the title sits under each window-preview tile.
  • "leading"Left
  • "center"Center
  • "trailing"Right
showApplicationNamesstringOverride: Show application names next to the icons.
  • "true"
  • "false"
showHiddenstringOverride: Include apps hidden with ⌘H.
  • "true"
  • "false"
showMinimizedstringOverride: Include minimized windows.
  • "true"
  • "false"
showUnreadBadgesstringOverride: Show each app's Dock unread badge on its entry.
  • "true"
  • "false"
showWindowlessstringOverride: Include running apps that have no open window.
  • "true"
  • "false"
showWindowTitleLabelstringOverride: Show each window's title, not just its app.
  • "true"
  • "false"
sortOrderstringOverride: Order apps and windows are listed in.
  • "mru"Most recent
  • "mruWindows"Most recent (windows)
  • "alphabetical"Alphabetical
  • "launchOrder"Launch order
spaceScopestringOverride: which Spaces windows are pulled from. "inherit" follows the global spaceScope.
  • "inherit"Use global default
  • "currentSpace"This Space only
  • "allSpaces"All Spaces
  • "visibleSpaces"Visible Spaces
stayOpenOnQuickTapstringOverride: Also keep it open after a quick tap of the shortcut.
  • "true"
  • "false"
stayOpenOnReleasestringOverride: Keep the switcher open after the modifier is released.
  • "true"
  • "false"
titleTruncationModestringOverride: Which part of a too-long title is replaced by an ellipsis.
  • "head"Beginning
  • "middle"Middle
  • "tail"End

Nieznane pola są zachowywane bez zmian, a nie usuwane, dlatego otwarcie konfiguracji w starszej wersji aplikacji nie usunie nadpisań, których ta wersja jeszcze nie rozumie.

Skróty o ograniczonym zakresie

scopedShortcutList definiuje dodatkowe globalne skróty klawiszowe, z których każdy otwiera już przefiltrowany przełącznik. Dodawaj i usuwaj je w Ustawienia → Profile.

config.json
{
  "scopedShortcutList": [
    { "id": "0", "scope": "currentAppWindows", "name": "scopedSwitch1" },
    { "id": "1", "scope": "minimizedOnly", "name": "scopedSwitch2" }
  ]
}

Scoped switcher shortcuts — each opens the panel already filtered to one subset of windows.

PoleTypOpis
id wymaganestringStable id of this entry, as a decimal string. Keys its recorded trigger and its shortcutOverrides entry — never reused.
name wymaganestringName the trigger chord is recorded under (the chord itself is stored outside this file).
scopestringWhich windows the shortcut shows.
  • "allAppsAllSpaces"All windows
  • "allAppsCurrentSpace"Windows on this Space
  • "currentAppWindows"Current app's windows
  • "minimizedOnly"Minimized windows

Kombinacji klawiszy nie ma w tym pliku

name jest etykietą, pod którą zarejestrowano kombinację; sama kombinacja znajduje się poza przestrzenią nazw Switcher.* i nie jest synchronizowana. Skopiowanie konfiguracji na innego Maca przenosi skróty o ograniczonym zakresie i ich ustawienia — kombinacje klawiszy rejestruje się tam ponownie w Ustawienia → Profile.

Identyfikatory są przydzielane rosnąco i nigdy nie są używane ponownie, dzięki czemu wpis zachowuje zarejestrowaną kombinację oraz wpis shortcutOverrides podczas dodawania, usuwania i zmiany kolejności. id jest dziesiętnym ciągiem znaków, zgodnie ze sposobem przechowywania listy.

Nie wybieraj ręcznie identyfikatorów kolidujących z istniejącym wpisem i nie zmieniaj nextScopedShortcutID — jest to licznik alokatora. Dodawanie wpisów w oknie ustawień pozwala uniknąć obu problemów.

Bezpośrednie skróty aplikacji

Niezależnie od skrótów o ograniczonym zakresie, choć często używane razem z nimi: directActivationBindings przypisuje identyfikator pakietu do każdego z dziewięciu miejsc skrótu „uaktywnij lub uruchom tę aplikację”. Lista zawsze zawiera dokładnie dziewięć wpisów; pusty ciąg pozostawia miejsce nieużywane.

config.json
{
  "directActivationBindings": [
    "com.apple.Safari",
    "com.googlecode.iterm2",
    "",
    "",
    "",
    "",
    "",
    "",
    ""
  ]
}

Kombinacje klawiszy dla tych miejsc również są rejestrowane poza tym plikiem.

Pełny przykład

Konfiguracja z trzema odrębnymi przełącznikami:

config.json
{
  "layoutMode": "iconDock",
  "sortOrder": "mru",
  "spaceScope": "allSpaces",

  "scopedShortcutList": [
    { "id": "0", "scope": "currentAppWindows", "name": "scopedSwitch1" }
  ],

  "shortcutOverrides": [
    {
      "target": "switchWindows",
      "layoutMode": "windowPreview",
      "sortOrder": "mruWindows",
      "panelScalePercent": "130"
    },
    {
      "target": "scoped.0",
      "layoutMode": "list",
      "listWidthPercent": "50",
      "showWindowTitleLabel": "true",
      "spaceScope": "inherit"
    }
  ]
}
  • ⌘Tab — siatka ikon aplikacji, od ostatnio używanej, ze wszystkich biurek.
  • ⌘` — duże podglądy okien aktywnej aplikacji, uporządkowane według ostatniego użycia okna.
  • Skrót o ograniczonym zakresie — wąska lista okien bieżącej aplikacji z pełnymi tytułami.

Na tej stronie