导读:在这个快节奏的技术世界里,重温过去并从中汲取灵感总是一件有趣的事情。今天要介绍的是一款仅用一天时间重制的经典 Macintosh 应用——Stapler。这款应用最初发布于1992年,现在由一位充满激情的开发者重新打造,不仅保留了原汁原味的功能,还加入了现代化的改进和特性,使其更适合现代 macOS 用户的需求。

作者 | Matt Sephton

翻译 | Jonathan Ssst

几天前,我在 Hacker News 上读到一些 Linux 窗口管理器的一项功能,它们允许从不同的应用程序中收集标签页。

这让我想起了 BeOS,但同时也让我想起了 1992 年的一款经典 Macintosh 应用程序——Stapler,以及我过去是如何谈论过它和它的精神继承者 LaunchList 的。它们都是类似的应用程序,允许你收集并启动与特定任务相关的所有应用程序、文件、文件夹和文档,从而节省时间。正如阿里·兰塔卡里(Ali Rantakari)在 2009 年所说的那样,“在 Mac 上同时打开一堆东西”。

因此,在过去的一天多时间里,我为现代 macOS 构建了自己的这一概念!

虽然我的应用受到了 Stapler(连名字都是)和 LaunchList 的启发,但我的应用增加了自己的改进和功能,更像是两者的混合体。例如,Stapler 没有拖放功能,LaunchList 没有零点击自动启动功能。我的目标是尽可能简单,但不能更简单。

详情、下载和使用方法请参阅 GitHub 软件仓库:https://github.com/gingerbeardman/stapler

图:Stapler,适用于现代 macOS(12.0 或更新版本)

告诉我更多

其原理是为每个项目设置一个 Stapler 文档,其中包含相关的应用程序、文件、文件夹等。然后,你就可以通过启动单个文档一次性打开它们。每个文档都包含一个别名列表,可以使用该应用程序进行管理、检查和启动。省时的关键在于,如果直接启动订书机文档,其列表中的所有项目都会自动启动。酷毙了!

  • 工作:文本编辑器、运行当前游戏、像素艺术编辑器、位图字体应用程序、待办事项列表
  • 播放:音乐应用程序、Hacker News 应用程序、Twitter 应用程序、定位窗口的脚本
  • 电影:运行 Caffeine 以保持计算机开机状态、让显示器进入休眠状态的快捷方式

在电脑上工作,这是一种奇怪的思维方式——它以任务为基础,而不是以应用程序或文档为基础。的确,有人可能会说这是一种过时的工作方式。但我一直在鼓吹,有很多好东西都随着 System 7(虽然我还在用它)、BeOS、OS/2、Amiga Workbench、GEM 和雅达利 ST 等众多替代桌面的记忆被过早地抛在了脑后。因此,我想看看我是否能说到做到。

详细信息

它是用 Swift 和 SwiftUI 编写的,大小为 640KB,其中约三分之一是许多不同大小和分辨率的图标文件。通过创建基于文档的应用程序,您可以免费获得大量功能,例如文档/标签/窗口管理、撤销/重做(不过我还是需要注意并刷新应用程序窗口)等等。

编辑器是一个本地 macOS 窗口,有点像文件管理器中的列表视图、电子表格或小文件夹......这取决于你的观点。此外还有一些菜单命令和键盘对应功能。您可以同时打开多个窗口,例如为所有常用任务各打开一个窗口,这样就能以最小的代价启动全部或部分任务。

每个列表中的项目都是 macOS 书签(有时也称为安全范围书签),是一种经过授权/验证/安全的别名(事实上,它们在代码中仍被称为别名),已经存在了大约 10-15 年。它们包含路径和更多信息。随着 macOS 的封锁程度越来越高,建议访问文件的方式是通过正常的系统权限和安全层检索这些书签。如果没有书签,例如只使用纯文本路径,我就无法在快速查看中显示完整图像,也无法轻松启动列表项。这样做的一个主要好处是,即使文件被移动到同一磁盘的其他地方,甚至是不同的卷中,书签仍然可以解析!

我在保存的文件中将项目存储为 JSON 格式,只是因为比起 XML(这是主要/默认选项),我更喜欢 JSON 格式。我希望文件在一定程度上仍然是可读和可编辑的。

文件使用该文件指定的默认应用程序启动,因此可以根据每个文件进行更改。单个图像可能会在图像编辑器、图像查看器、运行 OCR 的应用程序、运行 OCR 的脚本等中打开。

处理文件既酷又烦,酷的是你可以如此轻松地将书签指向文件,烦的是你必须跳过这么多圈才能绕过安全和沙盒保护,最终不得不以一种啰嗦的方式进行文件请求,然后还必须调整 plist 条目,以便为应用提供正确的权限。我正在使用 SwiftUI 的某些功能,这意味着应用程序无法在 macOS 14 Sonoma 之前的版本上运行。总而言之,我认为现代 macOS 开发有点喜忧参半。要么接受,要么放弃。

图标

由于这是一个周末的快速项目,我在设计图标时有点力不从心。我希望能有一个更好的应用程序图标,以及一个特定的文档图标,所以任何图标设计师都可以加入进来(https://github.com/gingerbeardman/stapler/issues/1)。

额外提示

确保取消选中: System Settings > Desktop & Dock > Windows > Close windows when quitting an application

然后,在退出应用程序时让其窗口保持打开状态。 当您下次启动应用程序时,其窗口将恢复到以前的大小和位置。 如果您先关闭窗口,那么应用程序将恢复到未打开窗口的状态。

感谢:

我的好朋友戴夫-罗伯茨(Serendipity App Company)的集思广益,让我明白了为什么让应用程序在从 Finder 打开文档时做出不同的反应会如此困难。 撕掉它,重新开始! 感谢 Dustin Mierau 为现代 macOS 重塑已被遗忘的旧版应用程序,开启了这一潮流。 永远感谢 Chris Patterson 和 Ali Rantakari 提供的应用程序。

其他

仅花一天时间,开发者重制 32 年前经典 Mac 应用!的更多相关文章

  1. [Unity3D]自己动手重制坦克舰队ArmadaTank

    [Unity3D]自己动手重制坦克舰队ArmadaTank 我玩过一款坦克游戏ArmadaTank(坦克舰队),如下图所示 几个月前我尝试用Unity3D重制这款游戏,已经可以玩起来了.下面是在PC上 ...

  2. 使用AndEngine重制《是男人就上一百层》

    1.为什么还要做<是男人就上一百层> 一是在用Android原生API开发完<是男人就上一百层>以后,一直想体验一下用引擎开发游戏是个什么感觉,顺便也让游戏听上去高大上一些(使 ...

  3. [Unity3D]自己动手重制坦克舰队ArmadaTank(2)从碰撞说起

    [Unity3D]自己动手重制坦克舰队ArmadaTank(2)从碰撞说起 在上一篇里我给出了重制的坦克舰队效果图和试玩程序.本篇介绍一下玩家坦克和敌方坦克碰撞问题. +BIT祝威+悄悄在此留下版了个 ...

  4. Xamarin.Forms之UserDialogs 重制版本

    在 forms 里面,目前使用比较多的弹出组件是 Acr.UserDialogs ,但是这个组件有些小问题,比如 loading .hide 会同时把 toast 给一起关掉,android 下的 t ...

  5. WINDOWS 2003系统时间24小时制与12小时显示格式不一致问题与解决

    WINDOWS 2003 SERVER系统时间24小时制与12小时格式不一致问题,而导致论坛或BLOG不能正常显示更新日期的问题及解决方法问题的方法. 在WIN2003上出现这种情况的原因是在程序中使 ...

  6. 花一天时间试玩vsphere6.7(EXSI)服务器版的vmware

    花一天时间试玩vsphere6.7(EXSI)服务器版的vmware 要注册账号(2019年11月14注册): 登陆网址:https://my.vmware.com/cn/group/vmware/h ...

  7. 12小时制时间&&24小时制时间

    今天在获取时间的时候发现,插入到数据库中的时间,其中下午的时间直接显示01,02的样子...查了下资料发现了端倪, java.text.SimpleDateFormat f=new java.text ...

  8. Linux系统硬件时间12小时制和24小时制表示设置

    目前的服务器status是下面这样的 服务器系统    centos7 Linux系统时间      Fri Mar 20 15:26:27 CST 2020 Linux系统硬件时间  Fri 20 ...

  9. 重制AdvanceWars第一步 -- 搞定地图

    首先来聊下高级战争吧Advance Wars,由任天堂旗下的Intelligent Systems开发的战棋游戏.初作诞生于GBA上,后来继续跟进了高战2黑洞崛,而后在下一代掌机DS上也出了三代续作高 ...

  10. 16进制 32进制 base64之间的区别

    Base64: 包含大写字母(A-Z),小写字母(a-z),数字(0-9)以及+/; Base32: 而Base32中只有大写字母(A-Z)和数字234567: Base16: 而Base16就是16 ...

随机推荐

  1. ZYNQ uboot 网络调试

    背景 使用 Vivado配置好网络,并在PetaLinux中构建了完整的uboot.kernel.rootfs以后,发现网络有问题. > ping 192.168.168.1 ethernet@ ...

  2. 写给rust初学者的教程(一):枚举、特征、实现、模式匹配

    这系列RUST教程一共三篇.这是第一篇,介绍RUST语言的入门概念,主要有enum\trait\impl\match等语言层面的东西. 安装好你的rust开发环境,用cargo创建一个空项目,咱们直接 ...

  3. CF620E

    题目 CF620E 思路 这个题是一个在树上操作的题,每次操作的对象都是以一个结点为根的子树,在1e5的操作下暴力做法必然会超时 观察到c的范围很小,可以考虑状态压缩 考虑将此问题转化为区间问题,利用 ...

  4. Spring Cloud微服务下如何配置I8n

    什么是I8n 国际化(I18n)指的是设计和开发产品的过程,使得它们能够适应多种语言和文化环境,而不需要进行大量的代码更改.这通常涉及到创建一个基础版本的产品,然后通过配置和资源文件来添加对不同语言和 ...

  5. 常见的SQL数值型数据处理函数

    在数据驱动的时代,SQL 已成为数据分析和管理中不可或缺的工具.无论是处理简单的查询还是复杂的数据分析,SQL 都能帮助我们高效地完成任务. 然而,在处理数值型数据时,你是否感到过困惑,不知道如何运用 ...

  6. 学习笔记--Java中方法递归调用

    Java中方法递归调用 public class RecursionTest01{ public static void main(String[] args){ System.out.println ...

  7. char字符_C

    字符的表示  字符类型由单引号' '包围,字符串由双引号" "包围. //正确的写法 char a = '1'; char b = '$'; char c = 'X'; char ...

  8. scratch编程作品-龙年发大财

    作品介绍: 龙年欢歌而来,带着满满的希望与勃勃生机.愿小虎鲸Scratch资源站激发您编程之路的无限灵感,让每一天都充满探索与创造的喜悦.在这吉祥如意的年份里,愿您的每一份耕耘都换来丰收的喜悦,每一个 ...

  9. RHCA cl210 016 流表 overlay

    Overlay网络是建立在Underlay网络上的逻辑网络 underlay br-int 之间建立隧道 数据流量还是从eth1出去 只有vlan20 是geneve隧道.只有租户网络有子网,子网需要 ...

  10. 【微信小程序】02 常用标签组件

    轮播标签: 轮播图 <swiper> <!-- 轮播项 --> <swiper-item>1</swiper-item> <swiper-item ...