Skip to content

Add warp://settings deeplink entrypoints (open, search, scroll-to-widget)#13232

Merged
szgupta merged 4 commits into
masterfrom
suraj/settings-uri-entrypoints
Jul 1, 2026
Merged

Add warp://settings deeplink entrypoints (open, search, scroll-to-widget)#13232
szgupta merged 4 commits into
masterfrom
suraj/settings-uri-entrypoints

Conversation

@szgupta

@szgupta szgupta commented Jun 30, 2026

Copy link
Copy Markdown
Member

Demo: https://www.loom.com/share/d26cdf004faa4aee9c128f77dc0b2af8

Description

Adds a warp://settings deep link family so settings can be opened directly from a URL:

  • warp://settings - opens a settings tab on the default page.
  • warp://settings?q=<query> - opens settings with the search bar pre-filled and the page list filtered.
  • warp://settings?widget=<widget_id> - opens settings scrolled to (and highlighting) a specific widget.

Why: lets external surfaces (docs, in-app links, support flows) deep-link users straight to the relevant setting.

How: the existing UriHost::Settings handler now treats an empty trailing path segment as "no sub-page" and routes the bare host plus the q/widget query params (precedence: widget > q > existing simple sub-pages > bare default). A new OpenSettingsArgs enum maps to the existing workspace actions (ShowSettings, ShowSettingsPageWithSearch, ScrollToSettingsWidget) via two new root_view actions. ?widget= resolves through an allowlist (settings_widget_deeplink_target) of stable slugs to (SettingsSection, &'static str) so internal Rust type names aren't exposed as the public URL contract; seeded with global_hotkey, cli_agents, and custom_router. Also fixed open_settings_pane so a ?q= search applies even when a settings tab is already open.

Linked Issue

N/A - no linked issue.

Testing

Added unit tests in app/src/uri/uri_tests.rs:

  • parse_settings_search_query - present / empty / URL-encoded / missing q
  • settings_widget_deeplink_target - known slugs (incl. custom_router) and unknown/empty
  • settings_section_for_simple_subpage - regression for existing sub-pages

Ran ./script/format and cargo clippy -p warp --all-targets --tests -- -D warnings (clean), plus the new unit tests.

  • I have manually tested my changes locally with ./script/run

Not manually run via ./script/run; covered by unit tests. Routing-only change with no new UI layout, so no screenshots.

Agent Mode

  • Warp Agent Mode - This PR was created via Warp's AI Agent Mode

Warp artifacts

CHANGELOG-IMPROVEMENT: Added warp://settings deep links - open settings, pre-fill the search bar with ?q=, or jump to a specific setting with ?widget=.

Co-Authored-By: Oz oz-agent@warp.dev

Route three warp://settings deep links through the existing settings
workspace actions:
- warp://settings opens a settings tab on the default page
- warp://settings?q=<query> pre-fills the settings search bar
- warp://settings?widget=<widget_id> scrolls to a specific widget

?widget= resolves through an allowlist of stable slugs
(global_hotkey, cli_agents, custom_router) so internal widget type
names are not exposed as the public URL contract. Also apply the
search query on an already-open settings pane.

Co-Authored-By: Oz <oz-agent@warp.dev>
@cla-bot cla-bot Bot added the cla-signed label Jun 30, 2026
@szgupta szgupta marked this pull request as ready for review June 30, 2026 23:26
@oz-for-oss

oz-for-oss Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

@szgupta

I'm starting a first review of this pull request.

You can view the conversation on Warp.

I completed the review and no human review was requested for this pull request.

Comment /oz-review on this pull request to retrigger a review (up to 3 times on the same pull request).

Powered by Oz

@oz-for-oss oz-for-oss Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overview

This PR adds warp://settings deeplink handling for opening Settings, pre-filling search, and scrolling/highlighting allowlisted widgets. The diff also updates existing settings-pane reuse behavior so a new search query applies when a settings tab is already open.

Concerns

  • This is a user-facing behavior change, but the PR description says it was not manually tested with ./script/run and includes no screenshot or screen recording. For this user-facing change, please include screenshots or a short screen recording demonstrating the bare settings link, ?q=, and ?widget= flows working end to end.

Verdict

Found: 0 critical, 1 important, 0 suggestions

Request changes

Comment /oz-review on this pull request to retrigger a review (up to 3 times on the same pull request).

Powered by Oz

@szgupta szgupta requested a review from acarl005 June 30, 2026 23:29

@acarl005 acarl005 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some comments but nothing blocking! Up to you if you want to change or not.

Comment thread app/src/uri/mod.rs Outdated
Comment thread app/src/root_view.rs Outdated
Comment thread app/src/root_view.rs Outdated
szgupta and others added 3 commits June 30, 2026 20:12
Co-authored-by: Andy <8334252+acarl005@users.noreply.github.com>
Co-authored-by: Andy <8334252+acarl005@users.noreply.github.com>
Reuse the already-parsed query_string map to pull out the 'q' search
param instead of re-parsing pairs in a dedicated helper. Removes the
now-redundant parse_settings_search_query fn and its unit test.

Co-Authored-By: Oz <oz-agent@warp.dev>
@szgupta szgupta merged commit 676c882 into master Jul 1, 2026
26 checks passed
@szgupta szgupta deleted the suraj/settings-uri-entrypoints branch July 1, 2026 06:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants