🌉 Arc 浏览器和它的伙伴们

March 31, 2024 (6mo ago)

该文章基于 ChatGPT 翻译,原文请参看 Arc Browser and Its Pals

Arc Browser 改变了我使用浏览器的方式,它增强了我组织标签页和工作区的能力。对我来说,它是一款必备工具。在这里,我将介绍我如何使用 Arc Browser 以及如何将其与其他工具如 Notion 和 Alfred 结合使用。

Arc Browser introduction

🌏 Arc Browser

Arc Browser 介绍

那么什么是 Arc 呢?

这里给出官方网站的 AI 总结:Arc 浏览器由 The Browser Company 开发,旨在提供一个更加平静和个性化的互联网体验。这是一款不仅满足您的需求,而且能预见您需求的浏览器,提供一个干净无杂乱的环境。主要特点包括:

  • 空间和配置文件(Spaces and Profiles):在一个窗口中组织您的在线活动—工作、学习、爱好—保持一切井井有条且易于访问。
  • 定制(Customization):使用像拆分视图(Split View)和主题(Themes)这样的功能来定制您的浏览体验以适应您的偏好。隐私:Arc 在设计时就考虑到隐私,确保您的在线活动保持私密和安全。总之,Arc 是一款专注于用户体验、定制化和隐私的现代浏览器,为网页浏览提供了一个独特的选择。

Arc Browser 的完美特性

  • 🖼️ 应用程序的独特设计,跨多个平台漂亮且易于使用:Mac、PC、iOS ~ -> 现代 UI 设计

  • 🪟 标签的拆分视图 -> 保存到左侧面板作为一组,这样您可以一起恢复这三个标签的工作空间
  • 🗂️ 嵌套文件夹以树形结构组织标签 -> 每个项目都可以有一个标签组,并且可以轻松地在它们之间切换* 🚀 不同场景的工作区 / 场景 -> 无缝切换您的工作上下文或同时保持多个 Arc 窗口实例
  • ⭐️ 工作区中的共享收藏内容 -> 在不同的工作区保持共享的东西
  • 🔎 类似 Alfred 的全文标签搜索 -> Chrome 在这方面真的很糟糕,Arc 中只需使用 cmd + tab 激活全文搜索菜单,非常优雅 ~
  • 🪄 AI 特性 -> 抓住 AI 时代
    • AI 搜索结果选择
    • 自动标签重命名
    • AI 驱动的网页摘要
    • ..
  • ⌨️ 轻松使用 快捷键 来导航 / 完全控制您的浏览器 -> 节省时间并专注于你的工作和内容

与其他工具结合使用

Notion

目前网页版的 Notion 比桌面应用要好很多,所以我更喜欢使用网页版的 Notion。

  • 一个页面,一个基地,一个任务,使用拆分视图适当准备我们即将执行的任务的上下文
    • Notion 用于组织您私人知识库的结构信息 | 网页 | 网页 | ...
    • 轻松收集和组织您的思想、想法和资源,并在一个简单的空间中组织它们,使用 Arc Browser 恢复或分组

Alfred

可能也可以与像 Alfred 这样的其他工具一起工作,但尚未测试。

  • 通过 iFrame 等准确启动或聚焦工作区 / 标签... -> 使用单一快捷方式

  • 可以下载这个 Alfred 插件并修改 node.js 的代码以进行您的定制,我在这里提供示例代码,以便您可以通过自己的热键激活第一个工作区的第一个标签。请随意使用 😎

list-tabs:

#!/usr/bin/env osascript -l JavaScript
 
function run(args) {
  let browsers = "Arc";
 
  let browser = Application(browsers);
  browser.includeStandardAdditions = true;
 
  let windowCount = browser.windows.length;
  console.log("windownCount: ", windowCount);
 
  let windowIndex = browser.windows.index();
  console.log("windowIndex[0]:", windowIndex[0]);
 
  let windowName = browser.windows.name();
  console.log("windowIndex[0] name:", windowName[0]);
 
  let spaceCount = browser.windows.spaces.length;
  console.log("spaceCount: ", spaceCount);
 
  let spacesTitle = browser.windows.spaces.title();
  console.log("spacesTitle: ", spacesTitle);
 
  let spacesId = browser.windows.spaces.id();
  console.log("spacesId: ", spacesId);
 
  let result = { items: [] };
 
  for (let w = 0; w < windowCount; w++) {
    if (w !== 0) {
      continue;
    }
    for (let s = 0; s < spaceCount; s++) {
      try {
        let item = {
          title: browser.windows[w].spaces[s].title(),
          subtitle: browser.windows[w].spaces[s].id(),
          arg: `${w},${s}`,
        };
        result.items.push(item);
      } catch (e) {
        console.log(e);
      }
    }
  }
 
  console.log(JSON.stringify({ items: result.items }));
  return JSON.stringify({ items: result.items });
}

run select tabs:

#!/usr/bin/env osascript -l JavaScript
 
function run(args) {
  ObjC.import("stdlib");
  let Arc = Application("Arc");
  let query = args[0];
  let [arg1, arg2, arg3] = query.split(",");
  let windowIndex = parseInt(arg1);
  let spaceIndex = arg2 == "undefined" ? undefined : parseInt(arg2);
  let tabIndex = parseInt(arg3);
  // console.log("windowIndex: ", windowIndex);
  // console.log("spaceIndex: ", spaceIndex);
  // console.log("tabIndex:", tabIndex);
  if (spaceIndex == undefined) {
    Arc.windows[windowIndex].tabs[tabIndex].select();
    Arc.activate();
  }
  Arc.windows[windowIndex].spaces[spaceIndex].tabs[tabIndex].select();
  Arc.activate();
}