Skip to content
Open
Show file tree
Hide file tree
Changes from 5 commits
Commits
Show all changes
113 commits
Select commit Hold shift + click to select a range
c3dea30
test: cover terminal links opening in their source pane
austinywang Sep 16, 2026
7b6fa66
feat: configure terminal browser links to open in the same pane
austinywang Sep 16, 2026
e4eb592
fix: compose browser settings search entries with explicit types
austinywang Sep 16, 2026
877c1b6
test: unblock app-host test compilation after cloud ownership refactor
austinywang Sep 16, 2026
edceecf
fix: normalize terminal source aliases before browser placement
austinywang Sep 16, 2026
40e4bb3
test: assert invalid terminal link placement resets to split
austinywang Sep 17, 2026
4fef148
test: verify effective placement default and wrapper source propagation
austinywang Sep 17, 2026
1e38656
test: verify terminal link clicks and open commands in running app
austinywang Sep 17, 2026
ee6b4dc
Merge remote-tracking branch 'origin/main' into issue-12798-terminal-…
austinywang Sep 17, 2026
459311a
test: wait for the tagged socket in terminal-link UI verification
austinywang Sep 17, 2026
e955d0e
docs: translate terminal link placement across all web locales
austinywang Sep 17, 2026
ba473c0
test: discover tag-scoped socket for terminal-link UI checks
austinywang Sep 17, 2026
6c6e083
test: include app-reported socket path in UI readiness
austinywang Sep 17, 2026
b1b1606
test: reuse native browser UI socket transport for terminal links
austinywang Sep 17, 2026
80f553f
test: await wrapper output and clarify Korean pane terminology
austinywang Sep 17, 2026
f8151ef
test: validate v2 socket readiness with transport diagnostics
austinywang Sep 17, 2026
7f50fc5
Merge remote-tracking branch 'origin/main' into issue-12798-terminal-…
austinywang Sep 17, 2026
45c72cd
Merge remote-tracking branch 'origin/main' into issue-12798-terminal-…
austinywang Sep 18, 2026
4022251
fix: finish main merge for terminal link focus routing
austinywang Sep 19, 2026
2991020
chore: normalize project after upstream merge
austinywang Sep 19, 2026
e679ec7
fix: close terminal link placement review gaps
austinywang Sep 19, 2026
8c6e28f
test: verify placement through Settings and background opens
austinywang Sep 19, 2026
94ee5dd
test: keep placement socket inside the UI runner sandbox
austinywang Sep 19, 2026
6dd72ac
Merge origin/main into issue-12798-terminal-links-same
austinywang Sep 20, 2026
f7eed2a
test: stabilize placement UI and background coverage
austinywang Sep 20, 2026
5ffbf61
fix: preserve background browser visibility
austinywang Sep 20, 2026
b8ea88a
test: assert background browser visibility
austinywang Sep 20, 2026
0e1c5d8
test: drive placement through a one-shot terminal fixture
austinywang Sep 20, 2026
cefa9a0
Merge remote-tracking branch 'origin/main' into issue-12798-terminal-…
austinywang Sep 20, 2026
b8d74fb
Merge latest origin/main and preserve terminal link settings
austinywang Sep 20, 2026
d05ffa9
test: query live browser tabs and scope the placement menu
austinywang Sep 20, 2026
e05f6cc
test: keep failure diagnostics nonthrowing
austinywang Sep 20, 2026
e333b05
test: resolve visible placement options across menu scopes
austinywang Sep 20, 2026
6a3e6c1
build: import process identity after the main merge
austinywang Sep 20, 2026
6e153e2
Merge remote-tracking branch 'origin/main' into issue-12798-terminal-…
austinywang Sep 20, 2026
30dee74
build: complete process identity imports from main
austinywang Sep 20, 2026
dd67deb
Merge remote-tracking branch 'origin/main' into issue-12798-terminal-…
austinywang Sep 20, 2026
d4be7cb
Merge origin/main and preserve terminal link placement translations
austinywang Sep 21, 2026
d9c7970
docs: include terminal link placement in settings skill keys
austinywang Sep 21, 2026
7bdb671
Merge origin/main with CI admission and tmux test updates
austinywang Sep 21, 2026
faf0f87
Merge remote-tracking branch 'origin/main' into issue-12798-terminal-…
austinywang Sep 21, 2026
b3e1f74
Merge remote-tracking branch 'origin/main' into issue-12798-terminal-…
austinywang Sep 21, 2026
0ba151c
Merge remote-tracking branch 'origin/main' into issue-12798-terminal-…
austinywang Sep 21, 2026
0d25f33
Merge remote-tracking branch 'origin/main' into issue-12798-terminal-…
austinywang Sep 21, 2026
e7f2505
Merge remote-tracking branch 'origin/main' into issue-12798-terminal-…
austinywang Sep 21, 2026
6c2f298
Merge remote-tracking branch 'origin/main' into issue-12798-terminal-…
austinywang Sep 21, 2026
bfb5fe2
fix: opt browser link value utilities out of actor isolation
austinywang Sep 21, 2026
477caf0
Merge remote-tracking branch 'origin/main' into issue-12798-terminal-…
austinywang Sep 21, 2026
7d9feb8
Merge origin/main and reconcile terminal link placement with new rout…
austinywang Sep 28, 2026
2f41151
fix: import browser policy in extracted settings parser
austinywang Sep 28, 2026
076e681
Merge main (f8079082fc46) into issue-12798-terminal-links-same
austinywang Sep 28, 2026
1ef8360
Merge main (214448aa4164) into issue-12798-terminal-links-same
austinywang Sep 28, 2026
2fe2c8e
test: avoid selection dismissal in notification harness
austinywang Sep 28, 2026
777f5a8
test: use accessible sockets for browser fixtures
austinywang Sep 28, 2026
414cdc2
Merge main (a49afca4a08f) into issue-12798-terminal-links-same
austinywang Sep 28, 2026
eb55f9d
Merge main (528c5a870dc2) into issue-12798-terminal-links-same
austinywang Sep 28, 2026
7d4d4bc
test: escape nested iframe fixture scripts
austinywang Sep 28, 2026
e967da7
Merge main (454f1913afc3) into issue-12798-terminal-links-same
austinywang Sep 28, 2026
f9e9a8a
Merge main into terminal link placement branch
austinywang Sep 28, 2026
0bbb51d
Merge main (31b261992edd) into issue-12798-terminal-links-same
austinywang Sep 28, 2026
27c0677
Merge main (1a7467a295c0) into issue-12798-terminal-links-same
austinywang Sep 28, 2026
a05c72a
test(ci): make scratch pruning age regression deterministic
austinywang Sep 28, 2026
e7343db
fix(ci): rank SwiftPM scratch by build file timestamps
austinywang Sep 28, 2026
1480d0f
Merge main and keep upstream SwiftPM cache policy
austinywang Sep 28, 2026
9389bdc
Merge main (7b0a15f9e424) into issue-12798-terminal-links-same
austinywang Sep 28, 2026
f3e6986
Merge main (64a1765fcc7a) into issue-12798-terminal-links-same
austinywang Sep 30, 2026
88ad636
fix(tests): adapt local link fixture to browser placement API
austinywang Sep 30, 2026
388b247
Merge remote-tracking branch 'origin/main' into issue-12798-terminal-…
austinywang Sep 30, 2026
375ae88
Merge main (5cfc6a669255) into issue-12798-terminal-links-same
austinywang Sep 30, 2026
6fd2ff0
fix: preserve main localization ordering after catch-up
austinywang Sep 30, 2026
1bb59d7
Merge main (d87c3be1c054) into issue-12798-terminal-links-same
austinywang Sep 30, 2026
d5a0284
Merge main (6d2b5d116dc4) into issue-12798-terminal-links-same
austinywang Sep 30, 2026
6033e63
fix: preserve main localization ordering after latest catch-up
austinywang Sep 30, 2026
b3c344b
fix: preserve sizing submodule revisions across main merge
austinywang Sep 30, 2026
74bd89d
Merge main (af7e3274d327) into issue-12798-terminal-links-same
austinywang Sep 30, 2026
7397564
fix: preserve localization catalog bytes after catch-up
austinywang Sep 30, 2026
c5764a2
test: account for main's initial dock pane in placement UI
austinywang Sep 30, 2026
99c6399
submodule-forward-only: allow ghostty
austinywang Sep 30, 2026
f77248f
test: isolate browser placement UI preferences from the runner
austinywang Sep 30, 2026
d54c3a1
Merge remote-tracking branch 'origin/main' into issue-12798-terminal-…
austinywang Sep 30, 2026
2305835
fix: advance submodules with main
austinywang Sep 30, 2026
239a747
Merge remote-tracking branch 'origin/main' into issue-12798-terminal-…
austinywang Sep 30, 2026
d17a82d
Merge main (71bb553867ca) into issue-12798-terminal-links-same
austinywang Sep 30, 2026
e3803f0
fix: pass temporary config state to auto naming overrides
austinywang Sep 30, 2026
f4c44a9
fix: keep OpenCode config path resolution in CLI target
austinywang Sep 30, 2026
1e829f2
test: keep close-tab queue helper compatible with main
austinywang Sep 30, 2026
40672ae
submodule-forward-only: allow vendor/bonsplit
austinywang Oct 1, 2026
ce658d7
fix: merge Bonsplit main baseline with sizing fixes
austinywang Oct 1, 2026
05bb183
fix: merge Ghostty main baseline with terminal fixes
austinywang Oct 1, 2026
1a76121
fix: align submodule pointers with main for mergeability
austinywang Oct 1, 2026
e43c0d8
chore: refresh PR merge state
austinywang Oct 1, 2026
dbf360b
Merge main synchronization
austinywang Oct 1, 2026
ed8df8b
Merge main synchronization
austinywang Oct 1, 2026
b0ff5bf
Merge commit '4e9d779888279b178a98c492b6efb350a459649c' into issue-12…
austinywang Oct 1, 2026
86f6b6f
fix: repair inherited test and catalog regressions
austinywang Oct 1, 2026
675e207
fix: use Bonsplit rendering test fix from main
austinywang Oct 1, 2026
eb750c9
fix: repair inherited package test fixtures
austinywang Oct 1, 2026
bb881bf
Merge main (039832207a63) into issue-12798-terminal-links-same
austinywang Oct 1, 2026
f9286e4
test: restore pane resize controller binding
austinywang Oct 1, 2026
34c6109
Merge main (90e1689ffc9d) into issue-12798-terminal-links-same
austinywang Oct 1, 2026
034d21f
fix: preserve main catalog after final catch-up
austinywang Oct 1, 2026
914daee
test: avoid blocking main actor queue drain
austinywang Oct 1, 2026
6ae230b
test: avoid CLI test alias collision
austinywang Oct 1, 2026
0d9b2b0
Merge branch 'main' of https://github.com/manaflow-ai/cmux into issue…
austinywang Oct 1, 2026
6c1520e
fix: share VM poll policy with app tests
austinywang Oct 1, 2026
4188494
test: keep reconcile budget assertions compilable
austinywang Oct 1, 2026
aadd5af
Merge origin/main into issue-12798-terminal-links-same
austinywang Oct 1, 2026
90e28b6
test: keep VM transfer fixture within budget
austinywang Oct 1, 2026
f6b1776
fix: use environment accent in notification rows
austinywang Oct 1, 2026
bba5182
fix: use environment accent in titlebar notifications
austinywang Oct 1, 2026
a3c1b10
Merge origin/main into issue-12798-terminal-links-same
austinywang Oct 1, 2026
6114146
Merge branch 'main' of https://github.com/manaflow-ai/cmux into issue…
austinywang Oct 1, 2026
f6fc1b1
chore: refresh PR mergeability after main catch-up
austinywang Oct 1, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions CLI/BrowserOpenEnvironment.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import Foundation

/// Origin information supplied by the terminal `open` wrapper.
struct BrowserOpenEnvironment {
let environment: [String: String]

var isTerminalLink: Bool { environment["CMUX_TERMINAL_LINK"] == "1" }
Comment thread
cubic-dev-ai[bot] marked this conversation as resolved.
Resolved
var sourceSurfaceID: String? { environment["CMUX_SURFACE_ID"] }
var respectsExternalOpenRules: Bool {
guard let raw = environment["CMUX_RESPECT_EXTERNAL_OPEN_RULES"] else { return false }
return ["1", "true", "yes", "on"].contains(raw.trimmingCharacters(in: .whitespacesAndNewlines).lowercased())
}
}
22 changes: 9 additions & 13 deletions CLI/cmux.swift
Original file line number Diff line number Diff line change
Expand Up @@ -16564,17 +16564,7 @@ struct CMUXCLI {
throw CLIError(message: "browser \(subcommand) does not support \(strayFlag)")
}
let url = urlArgs.joined(separator: " ").trimmingCharacters(in: .whitespacesAndNewlines)
let respectExternalOpenRules: Bool = {
guard let raw = ProcessInfo.processInfo.environment["CMUX_RESPECT_EXTERNAL_OPEN_RULES"] else {
return false
}
switch raw.trimmingCharacters(in: .whitespacesAndNewlines).lowercased() {
case "1", "true", "yes", "on":
return true
default:
return false
}
}()
let openEnvironment = BrowserOpenEnvironment(environment: ProcessInfo.processInfo.environment)

if surfaceRaw != nil, subcommand == "open" {
// Treat `browser <surface> open <url>` as navigate for agent-browser ergonomics.
Expand Down Expand Up @@ -16612,19 +16602,25 @@ struct CMUXCLI {
params["workspace_id"] = workspace
}
}
if respectExternalOpenRules {
if openEnvironment.respectsExternalOpenRules {
params["respect_external_open_rules"] = true
}
if let windowRaw = windowOpt {
if let window = try normalizeWindowHandle(windowRaw, client: client) {
params["window_id"] = window
}
}
if subcommand == "open", openEnvironment.isTerminalLink {
params["terminal_link"] = true
if let source = try normalizeSurfaceHandle(openEnvironment.sourceSurfaceID, client: client) {
params["surface_id"] = source
}
}
try applyFocusOption(focusOpt, defaultValue: false, to: &params)
let payload = try client.sendV2(method: "browser.open_split", params: params)
let surfaceText = formatHandle(payload, kind: "surface", idFormat: effectiveIDFormat) ?? "unknown"
let paneText = formatHandle(payload, kind: "pane", idFormat: effectiveIDFormat) ?? "unknown"
let placement = ((payload["created_split"] as? Bool) == true) ? "split" : "reuse"
let placement = payload["placement_strategy"] as? String == "same_pane" ? "samePane" : ((payload["created_split"] as? Bool) == true ? "split" : "reuse")
output(payload, fallback: "OK surface=\(surfaceText) pane=\(paneText) placement=\(placement)")
return
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,13 @@ public struct BrowserCatalogSection: SettingCatalogSection {
userDefaultsKey: "browserOpenTerminalLinksInCmuxBrowser"
)

/// Placement shared by clicked terminal links and intercepted `open` commands.
public let terminalLinkBrowserPlacement = DefaultsKey<TerminalLinkBrowserPlacement>(
id: "browser.terminalLinkBrowserPlacement",
defaultValue: .split,
userDefaultsKey: "browserTerminalLinkBrowserPlacement"
)

public let interceptTerminalOpenCommandInCmuxBrowser = DefaultsKey<Bool>(
id: "browser.interceptTerminalOpenCommandInCmuxBrowser",
defaultValue: true,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
/// Placement of browser tabs opened by terminal links or intercepted `open` commands.
public enum TerminalLinkBrowserPlacement: String, CaseIterable, Sendable, SettingCodable {
/// Reuse a pane to the right, or create a right split when none exists.
case split
/// Create a browser tab in the pane containing the source terminal.
case samePane
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import Foundation

extension CuratedSettingEntry {
static var browserEntries: [CuratedSettingEntry] {
[
// Browser
.init(section: .browser, id: "enable-browser", title: String(localized: "settings.browser.enabled", defaultValue: "Enable cmux Browser"), synonyms: "Enable cmux Browser browser.disabled enable disable webview embedded browser tabs links"),
.init(section: .browser, id: "search-engine", title: String(localized: "settings.browser.searchEngine", defaultValue: "Default Search Engine"), synonyms: "Default Search Engine browser.defaultSearchEngine omnibar address bar google duckduckgo bing kagi brave startpage perplexity exa yahoo ecosia qwant mojeek wikipedia github baidu yandex custom search provider engine name url template"),
.init(section: .browser, id: "search-suggestions", title: String(localized: "settings.browser.searchSuggestions", defaultValue: "Show Search Suggestions"), synonyms: "Show Search Suggestions browser.showSearchSuggestions suggest autocomplete address bar search suggestions"),
.init(section: .browser, id: "theme", title: String(localized: "settings.browser.theme", defaultValue: "Browser Theme"), synonyms: "Browser Theme browser.theme web page theme color scheme light dark system"),
.init(section: .browser, id: "hidden-webview-discard", title: String(localized: "settings.browser.hiddenWebViewDiscard", defaultValue: "Browser Memory Saver"), synonyms: "Browser Memory Saver browser.discardHiddenWebViews memory hidden tabs webview discard unload reclaim"),
.init(section: .browser, id: "hidden-webview-discard-delay", title: String(localized: "settings.browser.hiddenWebViewDiscardDelay", defaultValue: "Memory Saver Delay"), synonyms: "Memory Saver Delay browser.hiddenWebViewDiscardDelaySeconds memory hidden tabs delay seconds discard unload"),
.init(
section: .browser,
id: "ask-where-to-save-downloads",
title: String(localized: "settings.browser.askWhereToSaveDownloads", defaultValue: "Ask Where to Save Downloads"),
detailText: String(localized: "settings.browser.askWhereToSaveDownloads.subtitle", defaultValue: "When off, browser downloads save directly to Downloads without a save panel."),
synonyms: String(localized: "settings.search.alias.setting.browser.ask-where-to-save-downloads", defaultValue: "browser.askWhereToSaveDownloads downloads save panel folder attachments files pdf gmail")
),
.init(section: .browser, id: "terminal-links", title: String(localized: "settings.browser.openTerminalLinks", defaultValue: "Open Terminal Links in cmux Browser"), synonyms: "Open Terminal Links in cmux Browser browser.openTerminalLinksInCmuxBrowser click url terminal links open in browser href"),
.init(section: .browser, id: "intercept-open", title: String(localized: "settings.browser.interceptOpen", defaultValue: "Intercept open http(s) in Terminal"), synonyms: "Intercept open http(s) in Terminal browser.interceptTerminalOpenCommandInCmuxBrowser open command http https url terminal intercept"),
.init(section: .browser, id: "host-whitelist", title: String(localized: "settings.browser.hostWhitelist", defaultValue: "Hosts to Open in Embedded Browser"), synonyms: "Hosts to Open in Embedded Browser browser.hostsToOpenInEmbeddedBrowser allowlist whitelist host wildcard domain embedded browser"),
.init(section: .browser, id: "external-patterns", title: String(localized: "settings.browser.externalPatterns", defaultValue: "URLs to Always Open Externally"), synonyms: "URLs to Always Open Externally browser.urlsToAlwaysOpenExternally denylist blocklist regex rules external default browser"),
.init(section: .browser, id: "http-allowlist", title: String(localized: "settings.browser.httpAllowlist", defaultValue: "HTTP Hosts Allowed in Embedded Browser"), synonyms: "HTTP Hosts Allowed in Embedded Browser browser.insecureHttpHostsAllowedInEmbeddedBrowser insecure http allowlist localhost localtest non-https warning"),
.init(
section: .browser,
id: "url-allowlist",
title: String(localized: "settings.browser.urlAllowlist", defaultValue: "Embedded Browser URL Allowlist"),
synonyms: String(localized: "settings.search.alias.setting.browser.url-allowlist", defaultValue: "browser.urlAllowlist URL allowlist localhost wildcard scheme port organization policy")
),
.init(section: .browser, id: "react-grab", title: String(localized: "settings.browser.reactGrabVersion", defaultValue: "React Grab Version"), synonyms: "React Grab Version browser.reactGrabVersion react grab npm version toolbar cmd-shift-g inspect component"),
.init(section: .browser, id: "history", title: String(localized: "settings.browser.history", defaultValue: "Browsing History"), synonyms: "Browsing History browsing history clear visited pages omnibar suggestions delete"),
.init(section: .browser, id: "terminal-link-placement", title: String(localized: "settings.browser.terminalLinkPlacement", defaultValue: "Terminal Link Placement"), paths: ["browser.terminalLinkBrowserPlacement"], synonyms: String(localized: "settings.browser.terminalLinkPlacement.search", defaultValue: "terminal link browser placement same pane tab split open URL")),
Comment thread
austinywang marked this conversation as resolved.
Resolved
]
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ extension Array where Element == CuratedSettingEntry {
/// a different set of entries pass their own array via
/// ``SettingsSearchIndex/init(catalog:curatedEntries:)``.
public static var cmuxDefault: [CuratedSettingEntry] {
[
var entries: [CuratedSettingEntry] = [
// Account / integrations
.init(section: .account, id: "account", title: String(localized: "settings.section.account", defaultValue: "Account"), synonyms: "Account auth authentication login logout signin sign-in signout sign-out email user profile stack team"),
.init(section: .automation, id: "claude-code", title: String(localized: "settings.automation.claudeCode", defaultValue: "Claude Code Integration"), synonyms: "Claude Code Integration automation.claudeCodeIntegration claude code hooks agent integration status notifications"),
Expand Down Expand Up @@ -417,34 +417,9 @@ extension Array where Element == CuratedSettingEntry {
paths: ["computerUse.showInMenuBar"],
synonyms: String(localized: "settings.search.alias.setting.computerUse.showInMenuBar", defaultValue: "computerUse.showInMenuBar menu bar menubar status item cursor agents")
),
// Browser
.init(section: .browser, id: "enable-browser", title: String(localized: "settings.browser.enabled", defaultValue: "Enable cmux Browser"), synonyms: "Enable cmux Browser browser.disabled enable disable webview embedded browser tabs links"),
.init(section: .browser, id: "search-engine", title: String(localized: "settings.browser.searchEngine", defaultValue: "Default Search Engine"), synonyms: "Default Search Engine browser.defaultSearchEngine omnibar address bar google duckduckgo bing kagi brave startpage perplexity exa yahoo ecosia qwant mojeek wikipedia github baidu yandex custom search provider engine name url template"),
.init(section: .browser, id: "search-suggestions", title: String(localized: "settings.browser.searchSuggestions", defaultValue: "Show Search Suggestions"), synonyms: "Show Search Suggestions browser.showSearchSuggestions suggest autocomplete address bar search suggestions"),
.init(section: .browser, id: "theme", title: String(localized: "settings.browser.theme", defaultValue: "Browser Theme"), synonyms: "Browser Theme browser.theme web page theme color scheme light dark system"),
.init(section: .browser, id: "hidden-webview-discard", title: String(localized: "settings.browser.hiddenWebViewDiscard", defaultValue: "Browser Memory Saver"), synonyms: "Browser Memory Saver browser.discardHiddenWebViews memory hidden tabs webview discard unload reclaim"),
.init(section: .browser, id: "hidden-webview-discard-delay", title: String(localized: "settings.browser.hiddenWebViewDiscardDelay", defaultValue: "Memory Saver Delay"), synonyms: "Memory Saver Delay browser.hiddenWebViewDiscardDelaySeconds memory hidden tabs delay seconds discard unload"),
.init(
section: .browser,
id: "ask-where-to-save-downloads",
title: String(localized: "settings.browser.askWhereToSaveDownloads", defaultValue: "Ask Where to Save Downloads"),
detailText: String(localized: "settings.browser.askWhereToSaveDownloads.subtitle", defaultValue: "When off, browser downloads save directly to Downloads without a save panel."),
synonyms: String(localized: "settings.search.alias.setting.browser.ask-where-to-save-downloads", defaultValue: "browser.askWhereToSaveDownloads downloads save panel folder attachments files pdf gmail")
),
.init(section: .browser, id: "terminal-links", title: String(localized: "settings.browser.openTerminalLinks", defaultValue: "Open Terminal Links in cmux Browser"), synonyms: "Open Terminal Links in cmux Browser browser.openTerminalLinksInCmuxBrowser click url terminal links open in browser href"),
.init(section: .browser, id: "intercept-open", title: String(localized: "settings.browser.interceptOpen", defaultValue: "Intercept open http(s) in Terminal"), synonyms: "Intercept open http(s) in Terminal browser.interceptTerminalOpenCommandInCmuxBrowser open command http https url terminal intercept"),
.init(section: .browser, id: "host-whitelist", title: String(localized: "settings.browser.hostWhitelist", defaultValue: "Hosts to Open in Embedded Browser"), synonyms: "Hosts to Open in Embedded Browser browser.hostsToOpenInEmbeddedBrowser allowlist whitelist host wildcard domain embedded browser"),
.init(section: .browser, id: "external-patterns", title: String(localized: "settings.browser.externalPatterns", defaultValue: "URLs to Always Open Externally"), synonyms: "URLs to Always Open Externally browser.urlsToAlwaysOpenExternally denylist blocklist regex rules external default browser"),
.init(section: .browser, id: "http-allowlist", title: String(localized: "settings.browser.httpAllowlist", defaultValue: "HTTP Hosts Allowed in Embedded Browser"), synonyms: "HTTP Hosts Allowed in Embedded Browser browser.insecureHttpHostsAllowedInEmbeddedBrowser insecure http allowlist localhost localtest non-https warning"),
.init(
section: .browser,
id: "url-allowlist",
title: String(localized: "settings.browser.urlAllowlist", defaultValue: "Embedded Browser URL Allowlist"),
synonyms: String(localized: "settings.search.alias.setting.browser.url-allowlist", defaultValue: "browser.urlAllowlist URL allowlist localhost wildcard scheme port organization policy")
),
.init(section: .browser, id: "react-grab", title: String(localized: "settings.browser.reactGrabVersion", defaultValue: "React Grab Version"), synonyms: "React Grab Version browser.reactGrabVersion react grab npm version toolbar cmd-shift-g inspect component"),
.init(section: .browser, id: "history", title: String(localized: "settings.browser.history", defaultValue: "Browsing History"), synonyms: "Browsing History browsing history clear visited pages omnibar suggestions delete"),

]
entries += CuratedSettingEntry.browserEntries
Comment thread
austinywang marked this conversation as resolved.
Resolved
entries += [
// Browser import
.init(section: .browserImport, id: "import-data", title: String(localized: "settings.browser.import", defaultValue: "Import Browser Data"), synonyms: "Import Browser Data chrome safari firefox brave edge arc bookmarks history cookies profiles migration"),
.init(section: .browserImport, id: "import-hint", title: String(localized: "settings.browser.import.hint.show", defaultValue: "Show import hint on blank browser tabs"), synonyms: "Show import hint on blank browser tabs browser.showImportHintOnBlankTabs blank tab onboarding hint import prompt dismiss"),
Expand Down Expand Up @@ -488,6 +463,7 @@ extension Array where Element == CuratedSettingEntry {
// Reset
.init(section: .reset, id: "reset-all", title: String(localized: "settings.reset.resetAll", defaultValue: "Reset All Settings"), synonyms: "Reset All Settings factory reset restore defaults clear preferences"),
]
return entries
}

private static var keyboardShortcutActionSynonyms: String {
Expand Down
Loading
Loading