Yub.js 是一个可扩展的客户端 Web 命令行,附带大量有用的搜索引擎和快捷方式、可重用命令以及许多其他隐藏的好东西,例如秒表和内嵌 YouTube 视频。它还具有灵活的 API,因此您可以从任何地方调用 yub.js 命令:例如,您可以直接链接到命令,或直接从浏览器地址栏访问它们(只需设置一个指向 yub.js 的搜索快捷方式) API,并免费获得数百个其他搜索快捷方式)。
整个事情从一开始就被设计为一个单页独立 html 文档,其中包含开箱即用所需的所有内容。它可以在本地安装并直接从您的计算机运行,无需服务器或网络托管。从那时起,它已经有了很大的发展,并且开发已被分成单独的、更易于管理的文件。独立的 html 页面版本仍然可用,尽管它现在由 ruby 脚本自动生成,并且有缩小版本和源版本。只需将页面直接保存到您的计算机或将其放到您的服务器上即可开始!
可用搜索引擎的列表是完全模块化的:您可以通过编辑或替换 mods.js 文件 (json) 来添加您自己的常用网站列表。创建您自己的新命令很容易——只需使用create
命令(将新命令的名称作为可选参数)。您可以随意添加自己的新函数或通过编辑functions.js
来扩展现有函数。哦,默认情况下,正则表达式在所有地方都受支持。
了解 yub.js 工作原理的最佳方法是立即开始尝试命令。因此,在讨论历史或内部结构等无聊的事情之前,让我们先看看一些可以立即尝试的很酷的命令。
list
或ls
获取所有可用搜索快捷方式的列表http://commandlinefu.com/
://commandlinefu.com/ 或ftp://ftp.mozilla.org/
!
在任何裸露 URL 前面可直接访问该网站,例如:!smh.com.au 可访问《悉尼先驱晨报》g [searchterm]
进行普通的 Google 搜索。或者您可能更喜欢使用y
、 b
、 ix
或sp
代替help
或man
来获得帮助(可以选择包含您想要帮助的命令作为参数,例如help shuffle
)calc 857*2^3
:求解简单的数学公式calc (25+2)==(28-1)
:测试等价性calc ~32.56
:四舍五入rand 550
: 返回 0-550 之间的随机数rand site
: 转到随机网站rand img
:显示随机图像rand git
:访问随机的 GitHub 项目watch ninja cat
:观看搜索词“ninja cat”的 YouTube 视频结果的嵌入式播放列表link flint tigers
:获取命令flint Tigers的永久链接(该命令在 flickr 中搜索按“兴趣度”排序的老虎图片)fspell sometext
: 用 flickr 图像写出一些文本ascii sometext
: 在 ascii 艺术中写出 _sometextwhere gn
:显示命令gn的关键字和默认搜索地址> am Alice in Wonderland
:直接转到 Amazon.com 上“爱丽丝梦游仙境”一词的第一个 Google 搜索结果> wpde Turing complete
:阅读德语维基百科中关于“图灵完备性”的文章cat engadget.com
:显示 engadget.com 网页的纯文本版本pop bbc gn yn bn
:通过一个命令弹出包含 BBC 新闻、Google 新闻、雅虎新闻和 Bing 新闻的各个选项卡pop gim yim bim -t horses
:弹出新选项卡,显示在 Google、Yahoo 和 Bing 上对马进行图像搜索的结果注意:要使用pop
命令,您可能需要在浏览器的弹出窗口阻止程序中为 yub.js 设置例外
默认搜索引擎存储在engines.js 文件中。其中包含各种通用 Web 快捷方式、搜索引擎、新闻源和其他有趣的内容,这些内容演示了 yub.js 的基本功能,并且应该让您了解哪些类型的快捷方式可能对您自己的需求有用。
您可以在engines.js中找到的内容有:主要搜索引擎(Google、Yahoo、Bing...等)及其各种相关产品(图像、视频、地图、新闻、天气、机器翻译)、Wikipedia 及其各种维基媒体姊妹网站(维基词典、维基语录、维基新闻...等)、精选主要新闻机构(BBC、德国之声、法国 24 频道...等)、主要网络邮件提供商(Gmail、雅虎、Hotmail...等)、几种流行脚本语言(Bash、JS、PHP、Python、Ruby)的文档,以及许多其他有用的网站和工具(Down For Every Or Just Me?、Whois、What Is My Ip?...等)。更详细的指南可以在 wiki 中找到。
使用 yub.js 快捷方式的一个很好的好处是,只要有可能(即在所有支持它的地方),就会默认使用 https。
为了方便起见,所有自定义链接和快捷方式都放在 mods.js 中。该文件完全是可选的,因此您可以根据需要将内容放入或取出。您不需要 mods.js 文件即可使用 yub.js 。
存储库中发现的巨大 mods.js 文件纯粹是一个示例,用于演示 yub.js 的各种功能,例如 unicode 正则表达式搜索,以及各种本地搜索站点和其他您可以挑选的有趣内容你自己的用途。 106 Kb / 870+ 条目(截至撰写本文时)还表明,即使有大量自定义快捷方式,yub.js 也能顺利运行,速度没有任何明显下降。
示例 mods.js 文件中不加区别地转储的一些示例:
ebin
,或英国亚马逊的amuk
)enes
,对于西班牙语-英语词典使用esen
; enko
和koen
代表韩语, enfr
和fren
代表法语等。需要注意的一件事是,一些非常有趣的网站已被排除在engines.js甚至mods.js之外,以保持默认快捷方式尽可能有用。但不用担心,您仍然可以将它们添加到 mods.js 文件中!您可以考虑添加以下一些内容来自定义 mods.js:
cl
或kj
命令并将其放入 mods.js 中http://www.xe.com/ucc/convert.cgi?Amount=%s&From=[CURRENCY1]&To=[CURRENCY2]
(将[CURRENCY1]
和[CURRENCY2]
替换为您选择的货币的三字母代码)主题支持以通过skin
命令加载的自定义 CSS 文件的形式提供。皮肤基本上只是css文件(位于/css
文件夹中),可以通过输入命令skin
和皮肤名称来加载(不需要添加.css
扩展名)。
要返回默认皮肤,只需输入skin default
。要删除所有 CSS,请使用skin none
。
目前,皮肤不会在 yub 会话中持续存在(这需要设置 cookie,到目前为止我们已设法避免),但您可以将 yub.js 实例的链接/书签更改为https://dohliam.github.io/yub/?skin%20terminal
之类的内容https://dohliam.github.io/yub/?skin%20terminal
始终在加载特定皮肤的情况下启动 yub.js。或者,一旦您决定要为本地安装设置默认皮肤,只需将其重命名为default.css
(如果您不想覆盖,可以将原始default.css
文件重命名为old.css
或类似文件)它)。下次打开 yub.js 时,您的新文件将作为默认文件加载。
要制作新皮肤,只需将现有皮肤文件之一复制到新文件(例如mynewskin.css
并根据您的喜好进行自定义! (并且不要忘记将您的自定义皮肤添加到 wiki 中的皮肤库中,以便其他人可以享受它们!)
以下是 yub.js 附带的一些皮肤的截图:
默认:
终端:
山湖:
射线:
天际线:
没有CSS :
当然,您不需要安装 yub.js 即可开始使用它。对于一次性搜索,您可以轻松使用 GitHub 上托管的最新版本的 yub.js。一切都完全在客户端完成,因此您的任何查询都不会通过网络发送。
您甚至可以使用 API 将 GitHub 版本设为浏览器的默认搜索。但是,如果您使用 API,您输入的任何命令都将可见(例如,在 GitHub 服务器日志中),因此您可能更愿意设置 yub.js 的本地版本并完全离线运行(或在您自己的站点上) )。
wiki 中有关于如何将 yub.js 设置为默认搜索引擎的详细指南。您可以找到有关如何为 Chrome/Chromium 和 Firefox 设置 yub.js 的分步说明(如果您使用其他浏览器并且能够安装 yub.js,请考虑将您执行的步骤添加到指南中) 。
安装 yub.js 时要考虑的一件事是要将其设置为关键字搜索还是将其用作默认搜索引擎。将其设置为默认值的好处是,它基本上使浏览器的 URL 栏本身变成了 Web 命令行。
yub.js 最有用的功能之一是其易于使用的 API,它在笔记本电脑上的运行效果与在服务器上的运行效果一样好。只需将链接、书签或关键字搜索指向 yub.js URL 并添加?
加上您的命令或搜索词即可直接转到结果。
示例1:
http://example.com/yub
http://example.com/yub?weather tokyo
示例2:
file:///home/user/yub/index.html?rand site
您可以将 yub.js 嵌入到任何网页上,并获得如下所示的功能性 Web 命令行:
只需复制以下代码并将其包含在页面的任意位置即可:
<form method="get" action="#" onsubmit="window.location='https://dohliam.github.io/yub/?'+window.yub.value; return false"><img src="yub.gif" /> <input id="yub" type="text" size=27 value="yub.js web command-line" autocomplete="off" style="border-style: none none solid; color:gray; font-family:monospace;" onfocus="this.value=''; this.style.color='black'" onblur="if (this.value=='') {this.value='yub.js: enter commands here';this.style.color='gray'}"> <input style="visibility: hidden" type="submit" value="" />
可能有一种更优雅的方法来做到这一点,但经过一些测试,这似乎是在 Firefox 和 Chrome 中都有效的唯一方法。如果您发现更好的东西,请随意尝试并打开拉取请求!
还有大量功能尚未实现。尽可能在问题跟踪器中跟踪计划的新功能和请求的功能。如果您有一个想法,请继续添加它(或分叉该项目并通过拉取请求进行拍摄)!
看到每个人的自定义 mods.js 文件真是太棒了 - 可以在 wiki 中共享这些文件的链接,不过如果列表足够大,将来也可以使用单独的存储库。同时,如果您有想要分享的 mods.js 文件,请告诉我 - 特别是如果它是围绕特定主题组织的(例如,社交媒体网站、瑞典报纸、研究数据库、历史学家或工具的集合)海洋生物学家...等)。
一些仍在开发中的计划功能:
watch
,但用于音乐)如果您想为添加任何这些功能(或其他我没有想到的功能)做出贡献,请随时提交拉取请求。
很久以前(确切地说是 2005 年),一个名为 YubNub 的开创性网站推出,允许用户为各种 Web 服务编写自己的命令和快捷方式。使用类似于 bash 的简短命令访问网站的想法非常引人注目,而且实际上令人上瘾,并很快催生了诸如split和gimyim 之类的各种创意工具。与许多其他人一起,我创建了一堆命令并大量使用该网站一段时间。
然而,有一件事永远没有道理——为什么有人想要过滤他们通过(另一个)第三方网站所做的每一个搜索?无论如何,一旦 Firefox 的关键字搜索功能广为人知,使用 YubNub 快捷方式的吸引力就开始减弱——为最常见的搜索设置本地 Firefox 关键字然后使用这些关键字会更容易。因此,一个包含数十个以前的 YubNub 命令(以搜索关键字的形式)的书签文件从一台计算机传输到另一台计算机,存活了近十年,然后才发现该系统也非常笨重、缓慢且不切实际(例如,从另一台计算机很痛苦,并且在计算机之间保持列表更新也不令人愉快)。更糟糕的是,这种方法还错过了 YubNub 提供的许多令人兴奋的非搜索命令功能。
九年后,对 YubNub 的访问显示该服务仍在运行,并且根据维基百科,截至 2008 年甚至拥有超过 22,000 个用户贡献的命令。查看命令列表会得出令人沮丧的结论:曾经很棒的服务被成千上万的垃圾邮件条目淹没,扼杀了任何剩余的社区意识(社交命令行),而这曾经是最可爱的事情之一 地点。
更令人失望的是,许多最酷的命令(例如split 、 gimyim )甚至不再起作用。当然,这其实并不令人惊讶——自 2005 年以来,网络架构已经发生了很大变化。(就拆分而言,一方面是因为在框架中加载网站已不再是正常且可接受的事情,另一方面此外,正如gimyim所证明的那样,因为谷歌和雅虎——以及几乎所有其他主要网站——现在都积极阻止尝试从外部网站加载其内容)。真糟糕。
Yub.js 最初是为了在一个完全客户端应用程序中恢复旧 YubNub 命令行的一些功能,任何人都可以调整或调整以满足他们的需求,然后在本地计算机上运行 - 或者删除进入云或私有服务器并从任何地方访问。
虽然多年来我一直在闲逛这个想法,但它始终只是一个白日梦,因为我什至不确定是否可以用 JavaScript 完成我想做的大部分事情。最终,我创建了一个小 html 页面,将查询重定向到一些常见的搜索引擎,“yubSearch”就这样诞生了。
然而,很快我们就发现仅靠搜索快捷方式是不够的。搜索快捷方式列表的简单命令后面跟着其他命令,用于打印日期和时间、显示每个快捷方式的说明以及对文本进行排序。添加了计算器,然后添加了秒表。随着新命令从各地的代码片段和变通方法中演变而来,了解仅用纯 JavaScript 可以拼凑出什么内容几乎成为一个挑战。它不再只是搜索快捷方式——因此 yubSearch 变成了 yub.js。
开发工作是在严格的抓紧基础上进行的,并根据实际需要添加新功能。从很早起,yub.js 就成为了自己的开发环境,并且有内置的 JavaScript 参考工具(以及其他流行的脚本语言)、linter 和内部命令创建语法,有助于共同开发- 相关任务变得更加容易。
在某个时刻,yub.js 获得了自己的生命。虽然图灵并不完全完整,但当考虑通过补丁添加 Eliza 作为响应对话提示的引擎时,它变得危险地接近了……
Yub.js 继续使用纯 JS 开发,不使用框架或外部库。尽管可以使用服务器端脚本、框架和其他高超的重型编码大炮来添加许多有趣的功能,但主要目标始终是可移植性和响应能力——您几乎可以将 yub.js 放在任何地方:桌面、服务器、ChromeBook、甚至手机,其工作方式几乎完全相同。事实证明,这在移动设备上是一个特别的救星,在移动设备上,即使是简单的搜索(更不用说任何更复杂的搜索)有时也会变得非常笨拙和令人沮丧,而且移动网站经常隐藏或简化搜索等基本功能。
然而,如上所述,代码实际上是用备件拼凑而成的,(直到最近)没有考虑过使其看起来漂亮,更不用说标准化或高效了。尽管如此,由于文件大小相对较小以及完全在客户端运行的好处,一切都以令人难以置信的速度进行。
还能更快吗?绝对地!毫无疑问,仍有大量工作需要优化和美化现有的(诚然相当难看)代码库。普通用户会注意到这些改进吗?这很难说——毕竟,瞬时响应时间和一半速度的响应时间之间的差异很难辨别。 JavaScript 在任何给定时间处理的大多数单独任务都非常琐碎(制作列表、重定向到 URL),因此在实际使用过程中速度很少成为问题。
另一方面,如果比实际需要慢的事情原则上困扰您,您可能需要看看下一节。
云同步爱好者:如果您仍然想知道这一切的意义何在,而您只需使用 Firefox Sync 或使用 Google 帐户登录 Chrome,那么 yub.js 可能不适合您。
书签管理器:几乎所有主要浏览器的云同步选项现在无处不在,如果没有这些服务之一,您始终可以将书签文件备份到某个服务器上并完成它。如果这对你有用,那就太好了——但是对这些方法的挫败感才是导致 yub.js 诞生的首要原因。
追求优雅代码的人:如前所述,目前的代码相当丑陋——当然不是故意的,而是因为每个新功能都是由于一些紧迫的需求、拼凑和各种强力低效循环而添加的盛产。随着代码(缓慢)重构,这种情况有望随着时间的推移而改变。但如果丑陋的代码冒犯了你,你可能想避开你的视线。
eval 的仇恨者:如果您认为 eval 在任何情况下都是邪恶的(甚至解析经过净化的数学表达式)...那么您可能只想从您的 yub.js 版本中删除计算器函数。
bash.js 的探索者:Yub.js 不是 bash 到 JavaScript 的端口。如果您想知道为什么 yub.js 不提供mount
命令,或者没有办法kill
进程,或者modprobe
您的鼠标驱动程序...您可能来错地方了(也许您正在寻找 unixkcd)。另一方面,如果您能想到一个在Web命令行上有意义的mount
、 kill
或modprobe
适当的隐喻,我很乐意听取您的意见! ?
非常感谢乔恩·阿基诺 (Jon Aquino) 以及在 YubNub 鼎盛时期做出贡献的每个人,感谢 Web 即命令行的比喻,这是 yub.js 的最初灵感。
使用 Uglifier for Ruby 制作的缩小单页版本。
由 https://github.com/dohliam/tocdown 生成的目录。
随机 GitHub 存储库基于 RyanDavison 的 RandomRepo。
各种皮肤的背景壁纸:
麻省理工学院——有关详细信息,请参阅许可证文件。