2020年6月

喜欢列表?看看这个便捷的开源应用程序列表,以管理你所有的列表!

奇妙清单(Wunderlist)是一款清单应用,受到很多人的喜爱,但从 2020 年 5 月 6 日起,它就永远停止了。它的网站鼓励现有用户下载并使用“微软待办”来代替它。这很诱人,因为它可以轻松导入你多年来制作的所有这些列表。不过话又说回来,也许这是个机会,可以“近藤麻理惠”一下这些列表,并削减一些事务。(你真的需要 30 个列表吗?很显然,我觉得我需要,所以我不做评判。)

我有各种各样的清单,从“2020 年花园的植物”到“给丈夫的礼物”。有些是清单,有些是待办事项清单,有些是为了清单而清单。

对我和我丈夫来说,最有用的清单是我们共享的杂货清单。我们都有手机上的应用程序,我们都把东西添加到列表中,但在他去购物之前,我们分别在手机上审查它(是的,你没看错),他把东西放进购物车时,他就会勾掉它。这让整个过程变得出奇的高效,我想我们节省了一些钱,因为我们喜欢坚持按清单购物。

虽然奇妙清单的用户很喜欢它,但它并不是完全独一无二的。还有无数的列表应用。对于奇妙清单,我特别喜欢它将简洁性和设计感结合在一起,而且它成功实现了一些有用的功能,比如与他人分享和协作,列表的动态复选框,以及在移动和网页界面上的良好用户体验。我也很喜欢用它来做一个不“活跃”文档的列表:一个我不会每周都回顾或定期进展的列表,就像我用来进行头脑风暴的许多列表一样(包括我一直想写的小说...)。

从这些年来我们发表的许多精彩文章中,我整理了一系列奇妙清单的开源替代方案,从简单的任务管理和待办事项清单到复杂的笔记记录和流程管理,这些列表工具可能会满足你的需求。或者,如果你是那个在丢得到处都是的纸条和便签上书写任务和备注的人,这可能是尝试这些数字工具之一的好时机。

Tasks:可与 OwnCloud 配合

Tasks 是一款自由开源的应用,你可以从 F-droid 安装。Tasks 是一款只适用于手机的应用,但它可以同步到各种地方,非常灵活。你可以将你的列表保存到 NextCloud 或 OwnCloud、Google Tasks、Apple Reminders 以及几乎所有你有账户的 CalDAV 服务器上。

Tasks 的默认视图是每日视图,所以你输入的任何任务都被假定为从今天开始的任务。如果你像我一样,想维护几个不同的列表,你可以用标签来实现。当你创建一个标签时,你就为任务创建了一个类别。你可以为它指定一种颜色和一个图标,这样每个任务列表都是独一无二的。

这需要一点时间来适应,但标签有很多优点。因为所有的任务都是有标签的,你可以通过点击你想过滤的标签来查看任务组,但你也可以按天甚至按地点过滤。这意味着,当你去采购杂货时,你的杂货列表会成为活跃的默认列表,而当你回到家时,你的日常生活列表又会成为活跃的列表。

通过将你的数据同步到你的一个在线账户,你可以与亲人、合作者和同事分享列表。

另一个伟大的功能是,如果你每天早上上班时都有相同的任务,或者每周杂货清单中有 20 个相同的项目,你可以创建定期重复的任务。

评测者:Seth Kenlon

 title=

OpenTasks:适于长列表

OpenTasks 是一款优秀的任务管理工具,可以创建带有各种设置的个人任务。它在创建任务时支持多种字段,从基本的东西,如名称和描述,到更复杂的项目,如选择任务是私人、公共还是机密。OpenTasks 与其他替代品最大的不同之处在于它在应用的主屏幕上使用了选项卡。这些选项卡可以让你快速看到到期的任务、即将开始的任务、按优先级排序的任务,以及按当前完成进度排序的任务。许多其他应用程序支持做这样的事情,但 OpenTasks 很快就能轻松访问这些列表。

阅读完整的 OpenTasks 评测,作者:Joshua Allen Holm。

 title=

Mirakel:嵌套列表的绝佳之选

Mirakel 是一款任务管理应用,它拥有现代化的用户界面,并支持你在这样一款程序中可能想要的几乎所有格式。Mirakel 在基础层面上支持多个被称为“元列表”的列表。创建一个单独的任务有大量的选项,有截止日期、提醒、进度跟踪、标签、备注、子任务和文件附件,所有这些都构成了任务条目的一部分。

阅读完整的 Mirakel 评测,作者:Joshua Allen Holm。

 title=

Todo:简单有效,随处可用

Todo.txt 是我不断反复推荐的两个待办事项和任务管理应用之一(另一个是 Org 模式)。而让我不断推荐的原因是,它简单、便携、易懂,而且有很多很棒的附加组件,即使一台机器有这个程序而其他机器上没有,也不会破坏它。而且由于它是一个 Bash shell 脚本,我从来没有发现不支持它的系统。阅读更多关于如何安装和使用 Todo.txt

阅读完整的 todo.txt 评测,作者:Kevin Sonney。

 title=

Joplin:最佳私人列表

Joplin 是一个 NodeJS 应用程序,它可以在本地运行和存储信息,允许你加密任务,并支持多种同步方法。Joplin 可以作为控制台或图形应用程序在 Windows、Mac 和 Linux 上运行。Joplin 还拥有 Android 和 iOS 的移动应用,这意味着你的笔记随处可用,而不需要大费周章。Joplin 甚至允许你用 Markdown、HTML 或纯文本来格式化你的笔记。

阅读完整的 Joplin 评测,作者:Kevin Sonney。

 title=

CherryTree:最好的 Evernote / OneNote / Keep 替代品

CherryTree 是一个 GPLv3 许可的应用程序,它以节点的形式组织信息。每个节点都可以有子节点,让你轻松组织你的列表和思想。而且,子节点可以有自己的子节点,具有独立的属性。

阅读完整的 CherryTree 评测,作者:Ben Cotton。

 title=

附赠:Wekan,给看板粉丝

看板 kanban 是当今敏捷流程的主流。我们中的许多人(包括我自己)不仅用它们来组织我们的工作,还用它们来组织我们的个人生活。我认识一些艺术家,他们使用 Trello 这样的应用程序来跟踪他们的委托清单,以及正在进行和已经完成的工作。但这些应用往往与工作账户或商业服务挂钩。让我们看看 Wekan,这是一个开源的看板,你可以在本地或你选择的服务上运行。Wekan 提供了与其他看板应用相同的功能,比如创建面板、列表、泳道和卡片,在列表之间拖放,分配给用户,给卡片贴标签,以及做几乎所有你在现代看板中期待的事情。

阅读完整的 Wekan 评测,作者:Kevin Sonney。

 title=


via: https://opensource.com/article/20/5/alternatives-list

作者:Jen Wike Huger 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

在智能手机上阅读内容正在变得越来越流行。每一部手机都有它自己的电子书阅读器。可能你不知道,在 Fedora 创建你自己的电子书文件是非常容易的。

这篇文章展示了使用两种不同的方法来创建一个 EPUB 文件。EPUB 格式是最流行的格式之一,并且被很多开源软件所支持。

绝大数的人们将会询问 “在很容易创建 PDF 文件的情况下,为什么要花费时间和精力来创建 EPUB 文件?” 答案是: “你曾经尝试看过每次只能看到一张纸的一小部分的吗?”为阅读一个 PDF 文件,你不得不经常缩放和移动文档,或者将其缩放到一个小尺寸来适合屏幕大小。在另一方面,EPUB 文件则被设计成可以适合很多不同的屏幕类型。

方法 1: ghostwriter 和 pandoc

第一种方法创建一个速成版的电子书文件。它使用一个名为 ghostwriter 的 Markdown 编辑器,和一个名为 pandoc 的命令行文档转换工具。

你可以从软件中心搜查和安装它们,也可以从终端中安装它们。如果你使用终端来安装它们,运行这个命令:

sudo dnf install pandoc ghostwriter

对于那些不知道 Markdown 是什么的人们来说,在这里有一个简要的解释:它是一个大约在 15 年前创建的简单的标记语言。它使用简单的语法来格式化纯文本。Markdown 文件可以随后转换成很多其它文档格式的文件。

ghostwriter

对于工具,ghostwriter 是一个跨平台的易于使用的 Markdown 编辑器。pandoc 是一个非常易于使用的文档转换工具,可以处理数百种不同的格式。

要创建你的电子书,打开 ghostwriter,开始编写你的文档。如果你以前使用过 Markdown,你可能习惯于在文档的“标题 1”的前面放置一个 # 符号来作为标题。像这样: # My Man Jeeves。然而,pandoc 将不会识别其为标题,并将在你的电子书的顶部放置一个一个大的 “UNTITLED” 。相反地在你的标题前放置一个 % 来作为标题。例如,% My Man Jeeves 。章节应该被格式为“标题 2”,例如,## Leave It to Jeeves。如果你有子章节,使用“标题 3”(###)。

在你的文档完成后,单击“文件 -> 导出”(或按 Ctrl+E 键)。在对话框中,在几个 Markdown 转换器中进行选择。如果这是你第一次使用 ghostwriter ,默认选择的是 Sundown 转换器。从对话框中,选择 pandoc 。接下来单击“导出”。现在你的 EPUB 文件已经创建好了。

ghostwriter 导出对话框

注意: 如果你得到一个与 pandoc 有关的错误,关闭“智能排版”,并再试一次。

方法 2: calibre

如果你想要一个更完美的电子书,那这就是你正在寻找的方法。它需要更多的步骤,但是是值得的。

首先,安装一个名为 calibre 的应用程序。calibre 不仅仅是一个电子书阅读器,它也是一个电子书管理器系统。你可以从软件中心安装它,也可以从终端安装它:

sudo dnf install calibre

在这个方法中,你可以在 LibreOffice、ghostwriter,或者其它你选择的编辑器中编写你的文档。确保书籍的标题被格式为“标题 1”,章节被格式为“标题 2”,子章节被格式为“标题 3”。

接下来,导出你的文档为一个 HTML 文件。

现在添加该文件到 calibre 。打开 calibre ,并单击 “添加书籍”。calibre 会用几秒钟来添加文件。

在文件导入后,通过单击 “编辑元数据” 按钮来编辑文件的元数据。在这里你可以填写书的标题和作者的姓名。你也可以上传一个封面图片(如果你有的话),或者 calibre 将为你生成一个封面。

接下来,单击 “转换书籍” 按钮。在新的对话框中,选择 “界面与外观” 部分的 “布局” 标签页。勾选 “删除段间空行” 选项。这将更加严格地缩进每一段的内容。

现在,设置目录。选择 “内容目录” 部分。这里有三个需要注意的选项: “一级目录”、“二级目录” 和 “三级目录”。对于每一个选项点击其末尾处的魔法棒按钮。在新的对话框中,选择应用于目录表项的 HTML 标记。例如,为“一级目录”选择 “h1”。

接下来,告诉 calibre 包含内容目录。选择 “输出 EPUB” 部分并勾选 “插入内联目录”。单击“确定“ 创建 epub 文件。

现在,你有了一个看起来很专业的电子书文件。


via: https://fedoramagazine.org/how-to-generate-an-epub-file-on-fedora/

作者:John Paul Wohlscheid 选题:lujun9972 译者:robsean 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Windows 10 的 Linux 内核将像驱动程序一样由微软更新服务进行更新

在最新的 Windows 10 预览版中,Windows 10 改变了 WSL 2 内部 Linux 内核的服务模式,将 Linux 内核从 Windows 镜像中移除,让它通过微软更新服务进行更新,就像如今在你的机器上安装和更新第三方驱动程序(如图形,或触摸板驱动程序)一样。

来源:softpedia

硬核老王点评:微软终将吞噬开源,Windows 最后会吃掉 Linux。

Ubuntu 发行商 Canonical 将参加微软欧洲虚拟开源峰会

Ubuntu 背后的 Canonical 宣布,其公有云副总裁将会在会上举行主题演讲,讨论 Ubuntu Pro for Azure 的开源问题。此外,Canonical 还将在微软欧洲虚拟开源峰会上拥有自己的“虚拟”展台。Canonical 是微软在这一领域最重要的合作伙伴之一,例如 Ubuntu 就已经完全兼容 WSL。此外,Canonical 还通过开发 Ubuntu Pro for Azure 等产品,在这一战略上不断投入。

来源:softpedia

硬核老王点评:Canonical 是最积极向微软靠拢的开源公司——让我们“期待”它被微软收购的那一天。

树莓派支持 Vulkan 最新进展:通过 70000 项测试

树莓派基金会正在致力于为树莓派提供开源 Vulkan 驱动程序的支持。目前使用树莓派 4 的 VideoCore VI GPU 渲染 RGB 三角形的测试,已经通过 Vulkan 1.0 Khronos Conformance 测试套件的超过 70,000 项测试,并且为 Vulkan 1.0 API 的重要子集提供了实现。尽管这些演示很不错,但与实际的游戏和应用还相距甚远。

来源:开源中国

谷歌浏览器开始隐藏 URL 详细路径,未来地址栏将只显示主域名信息

谷歌浏览器此前默认隐藏地址栏网址前缀引起较多争议,尽管后来谷歌作出让步但最终默认情况下还是隐藏前缀。这些前缀主要包括 HTTP、HTTPS 和 WWW,但谷歌浏览器还会采取更激进的措施让用户浏览网页时忽略地址栏。在测试版中,3~5 秒左右地址栏内容就开始隐藏,当用户点击地址栏时才会显示完整的 URL。

来源:蓝点网

硬核老王点评:从用户体验的角度来说是进步,就是用户习惯一时难以改变。

预装 elementary OS 的笔记本电脑上架发售

elementary OS 团队目前已经和多家厂商达成了合作,能够预装到诸多笔记本电脑上。目前宣布合作的两家公司分别为 Laptop With Linux 和 Star Labs,这两家公司均会销售不同配置和形态、预装 elementary OS的设备。在和 Laptop With Linux 的合作中,预装 elementary OS 最便宜的设备是 Clevo NL41CU 14-inch Metal Design,零售价格为 529 欧元(约合 4232.95元)。而和 Star Labs 的合作中,最便宜的是 11 英寸的 The Star Lite Mk II,零售价格为 399 欧元(约合 3192.72元)。

来源:cnBeta.COM

硬核老王点评:可喜的一步,期待 elementary OS 走的更远,或许我们将来可以期待它在 Linux 桌面上取得比 Ubuntu 更大的成绩。

Ubuntu 20.04 中默认的 Yaru 主题赋予它优美、现代的外观。默认 Yaru 主题中的文件夹是紫色的外观,以与 Ubuntu 的品牌保持一致。

如果你不喜欢紫色,可以在 Ubuntu 中自由更改颜色主题。你可以更改 Ubuntu 的主题以使其有不同的颜色,但这将意味着放弃 Yaru 主题。

如果你只想在 Ubuntu 20.04 中更改文件夹的颜色,可以有两种方法:

  • 为选定的文件夹赋予不同的颜色和标志(以便更好地组织文件和文件夹)
  • 通过更改 Yaru 颜色主题来更改所有文件夹的颜色

让我向你展示两种方法。

更改所选文件和文件夹的颜色和标志

我知道有些人将他们的文件夹使用不同的颜色或放在不同的位置,来表示工作正在进行中还是待处理或已完成。

如果你也是这样的,那么可以使用 Folder Color 工具更改文件夹的颜色。你还可以在文件夹中添加标志(绿色的勾号表示完成,加号表示新的,感叹号表示重要等)。你可以在上一张图片中看到一些例子。

你还可以在文件上使用 “Folder Color” 工具。你不能更改文件图标的颜色,但可以添加标志。

如果你在 Ubuntu 20.04 中使用 Yaru 主题,你可以使用官方 PPA

sudo add-apt-repository ppa:costales/yaru-colors-folder-color

现在,使用 Yaru 兼容包安装 Folder Color。

sudo apt install folder-color yaru-colors-folder-color

安装后,你必须使用 nautilus -q 命令重启 Nautilus 文件管理器。之后,你可以进入文件管理器,右键单击文件夹或文件。你会在上下文菜单中看到 Folder Color 的选项。你将在此处看到颜色和标志选项。

你还可以通过在菜单通过选择“默认”恢复原始文件夹颜色

对于 Ubuntu 18.04 或更早版本,可以从软件中心安装 Folder Color。它还可用于 Linux Mint/Cinnamon 桌面的 Nemo 文件管理器和 MATE 桌面的 Caja 文件管理器

如何删除 Folder Color?

如果你不想使用 Folder Color,你可以删除应用并删除 PPA。首先删除该应用:

sudo apt remove folder-color yaru-colors-folder-color

现在删除 PPA

sudo add-apt-repository -r ppa:costales/yaru-colors-folder-color

Yaru Colors 主题包更改 Yaru 主题颜色

如果你想继续使用 Yaru 主题但使用不同的颜色,那么需要Yaru Colors 主题包

Yaru Colors 由 12 种 Yaru 颜色变体组成。它们浅绿色、蓝色、棕色、深蓝色、绿色、灰色、MATE 绿、橙色、粉红色、紫色、红色和黄色。

主题包括 GTK 主题、图标、光标和 GNOME Shell 主题。

  • 图标:更改文件夹的强调色
  • GTK 主题:更改应用窗口的强调色
  • 光标主题:向光标添加几乎可以忽略的色彩轮廓
  • GNOME Shell 主题:更改消息托盘和系统托盘中的强调色

你可以从它的 GitHub 仓库下载 Yaru Colors 主题包:

下载 Yaru Colors 主题包

在提取内容时,你会发现图标、主题文件夹,这两个文件夹都包含上述十二种颜色。你可以分别在 ~/.local/share/.icons~/.local/share/themes 文件夹中复制图标和主题文件夹。

如果你不想亲自复制,那么你可以在解压文件夹中找到 install.sh 脚本。你可以运行它来通过交互式终端会话安装全部或选定的几个主题。

要更改 GNOME Shell 主题,你必须使用 GNOME Tweak 工具。你也可以使用 GNOME Tweak 将图标和主题更改回默认。

享受为你的 Ubuntu 生活增色 ?


via: https://itsfoss.com/folder-color-ubuntu/

作者:Abhishek Prakash 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

通过为流行的代码编辑器编写自己的扩展来添加缺失的功能。

Visual Studio Code(VS Code)是微软为 Linux、Windows 和 macOS 创建的跨平台代码编辑器。遗憾的是,微软版本的 VS Code 是在 Microsoft Software License 下发布的,这不是一个开源的许可证。然而,它的源代码是开源的,在 MIT 许可证下由 VSCodium 项目发布。

VSCodium 和 VS Code一样,支持扩展、内嵌式 Git 控制、GitHub 集成、语法高亮、调试、智能代码补完、代码片段等。换句话说,对于大多数用户来说,使用 VS Code 和 VSCodium 没有什么区别,而且后者是完全开源的!

什么是 VS Code 扩展?

扩展 extension 可以让你为 VS Code 或 VSCodium 添加功能。你可以在 GUI 中或从终端安装扩展。

你也可以构建自己的扩展。有几个你可能想学习如何构建扩展的原因:

  1. 想要添加一些功能: 如果缺失你想要的功能,你可以创建一个扩展来添加它。
  2. 为了乐趣和学习: 扩展 API 允许你探索 VSCodium 是如何工作的,这是一件有趣的事情。
  3. 为了提高您的技能: 创建扩展可以提高你的编程技能。
  4. 为了成名: 创建一个对他人有用的扩展可以提高你的公众形象。

安装工具

在你开始之前,你必须已经安装了 Node.jsnpm 和 VS Code 或 VSCodium

要生成一个扩展,你还需要以下工具:Yeoman,是一个开源的客户端脚手架工具,可以帮助你搭建新项目;以及 vscode-generator-code,是 VS Code 团队创建的 Yeoman 生成器。

构建一个扩展

在本教程中,你将构建一个扩展,它可以为应用程序初始化一个 Docker 镜像。

生成一个扩展骨架

要在全局范围内安装并运行 Yeoman 生成器,请在命令提示符或终端中输入以下内容:

npm install -g yo generator-code

导航到要生成扩展的文件夹,键入以下命令,然后按回车:

yo code

根据提示,你必须回答一些关于你的扩展的问题:

  • 你想创建什么类型的扩展? 使用上下箭头选择其中一个选项。在本文中,我将只介绍第一个选项,New Extension (TypeScript)
  • 你的扩展名称是什么? 输入你的扩展名称。我的叫 initdockerapp。(我相信你会有一个更好的名字。)
  • 你的扩展的标识符是什么? 请保持原样。
  • 你的扩展的描述是什么? 写一些关于你的扩展的内容(你可以现在填写或稍后编辑它)。
  • 初始化 Git 仓库? 这将初始化一个 Git 仓库,你可以稍后添加 set-remote
  • 使用哪个包管理器? 你可以选择 yarnnpm;我使用 npm

按回车键后,就会开始安装所需的依赖项。最后显示:

"Your extension initdockerapp has been created!"

干的漂亮!

检查项目的结构

检查你生成的东西和项目结构。导航到新的文件夹,并在终端中键入 cd initdockerapp

一旦你进入该目录,键入 .code。它将在你的编辑器中打开,看起来像这样。

 title=

(Hussain Ansari, CC BY-SA 4.0

最需要注意的两个文件是 src 文件夹内的 package.jsonextension.ts

package.json

首先来看看 package.json,它应该是这样的:

{
        "name": "initdockerapp",
        "displayName": "initdockerapp",
        "description": "",
        "version": "0.0.1",
        "engines": {
                "vscode": "^1.44.0"
        },
        "categories": [
                "Other"
        ],
        "activationEvents": [
                "onCommand:initdockerapp.initialize"
        ],
        "main": "./out/extension.js",
        "contributes": {
                "commands": [
                        {
                                "command": "initdockerapp.initialize",
                                "title": "Initialize A Docker Application"
                        }
                ]
        },
        "scripts": {
                "vscode:prepublish": "npm run compile",
                "compile": "tsc -p ./",
                "lint": "eslint src --ext ts",
                "watch": "tsc -watch -p ./",
                "pretest": "npm run compile && npm run lint",
                "test": "node ./out/test/runTest.js"
        },
        "devDependencies": {
                "@types/vscode": "^1.44.0",
                "@types/glob": "^7.1.1",
                "@types/mocha": "^7.0.2",
                "@types/node": "^13.11.0",
                "eslint": "^6.8.0",
                "@typescript-eslint/parser": "^2.26.0",
                "@typescript-eslint/eslint-plugin": "^2.26.0",
                "glob": "^7.1.6",
                "mocha": "^7.1.1",
                "typescript": "^3.8.3",
                "vscode-test": "^1.3.0"
        }
}
{
        "name": "initdockerapp",
        "displayName": "initdockerapp",
        "description": "",
        "version": "0.0.1",
        "engines": {
                "vscode": "^1.44.0"
        },
        "categories": [
                "Other"
        ],
        "activationEvents": [
                "onCommand:initdockerapp.initialize"
        ],
        "main": "./out/extension.js",
        "contributes": {
                "commands": [
                        {
                                "command": "initdockerapp.initialize",
                                "title": "Initialize A Docker Application"
                        }
                ]
        },
        "scripts": {
                "vscode:prepublish": "npm run compile",
                "compile": "tsc -p ./",
                "lint": "eslint src --ext ts",
                "watch": "tsc -watch -p ./",
                "pretest": "npm run compile && npm run lint",
                "test": "node ./out/test/runTest.js"
        },
        "devDependencies": {
                "@types/vscode": "^1.44.0",
                "@types/glob": "^7.1.1",
                "@types/mocha": "^7.0.2",
                "@types/node": "^13.11.0",
                "eslint": "^6.8.0",
                "@typescript-eslint/parser": "^2.26.0",
                "@typescript-eslint/eslint-plugin": "^2.26.0",
                "glob": "^7.1.6",
                "mocha": "^7.1.1",
                "typescript": "^3.8.3",
                "vscode-test": "^1.3.0"
        }
}

如果你是 Node.js 开发者,其中一些可能看起来很熟悉,因为 namedescriptionversionscripts 是 Node.js 项目的常见部分。

有几个部分是非常重要的:

  • engines:说明该扩展将支持哪个版本的 VS Code / VSCodium。
  • categories:设置扩展类型;你可以从 LanguagesSnippetsLintersThemesDebuggersFormattersKeymapsOther中选择。
  • contributes:可用于与你的扩展一起运行的命令清单。
  • main:扩展的入口点。
  • activationEvents:指定激活事件发生的时间。具体来说,这决定了扩展何时会被加载到你的编辑器中。扩展是懒加载的,所以在激活事件触发之前,它们不会被激活。

src/extension.ts

接下来看看 src/extension.ts,它应该是这样的:

// The module 'vscode' contains the VSCodium extensibility API
// Import the module and reference it with the alias vscode in your code below
import * as vscode from "vscode";
const fs = require("fs");
const path = require("path");

// this method is called when your extension is activated
// your extension is activated the very first time the command is executed
export function activate(context: vscode.ExtensionContext) {

        // Use the console to output diagnostic information (console.log) and errors (console.error)
        // This line of code will only be executed once when your extension is activated
        console.log('Congratulations, your extension "initdockerapp" is now active!');
       
        // The command has been defined in the package.json file
        // Now provide the implementation of the command with registerCommand
        // The commandId parameter must match the command field in package.json
        let disposable = vscode.commands.registerCommand('initdockerapp.initialize', () => {
                // The code you place here will be executed every time your command is executed

                let fileContent =`
                FROM node:alpine
                WORKDIR /usr/src/app

                COPY package.json .
                RUN npm install
               
                COPY . .
               
                EXPOSE 3000
                CMD ["npm", "start"]
                `;
               
                fs.writeFile(path.join(vscode.workspace.rootPath, "Dockerfile"), fileContent, (err:any) => {
                        if (err) {
                                return vscode.window.showErrorMessage("Failed to initialize docker file!");
                        }
                        vscode.window.showInformationMessage("Dockerfile has been created!");
                });
        });

        context.subscriptions.push(disposable);
}

// this method is called when your extension is deactivated
export function deactivate() {}

这是为你的扩展写代码的地方。已经有一些自动生成的代码了,我再来分析一下。

注意,vscode.command.registerCommand 里面的 initdockerapp.initializepackage.json 里面的命令是一样的。它需要两个参数。

  1. 要注册的命令名称
  2. 执行命令的功能

另一个需要注意的函数是 fs.writeFile,这是你写在 vscode.command.registerCommand 函数里面的。这将在你的项目根目录下创建一个 Dockerfile,并在其中附加代码来创建一个 Docker 镜像。

调试扩展

现在你已经写好了扩展,是时候调试它了。点击“Run”菜单,选择“Start Debugging”(或者直接按 F5)打开调试窗口。

在调试窗口里面点击“Add Folder”或“Clone Repository”按钮,打开该项目。

接下来,用 Ctrl+Shift+P(在 macOS 上,用 Command 键代替 Ctrl)打开命令面板,运行 Initialize A Docker Application

  • 第一次运行此命令时,自 VSCodium 启动后,激活函数尚未执行。因此,调用激活函数,并由激活 函数注册该命令。
  • 如果命令已注册,那么它将被执行。

你会看到右下角有一条信息,上面写着:Dockerfile has been created!。这就创建了一个 Dockerfile,里面有一些预定义的代码,看起来是这样的:

 title=

(Hussain Ansari, CC BY-SA 4.0

总结

有许多有用的 API 可以帮助你创建你想要构建的扩展。VS Code 扩展 API 还有许多其他强大的方法可以使用。

你可以在 VS Code 扩展 API 文档中了解更多关于 VS Code API 的信息。


via: https://opensource.com/article/20/6/vs-code-extension

作者:Ashique Hussain Ansari 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Python 和 Go 成为年度最受欢迎的黑客工具榜首

网络安全公司 Imperva Cloud WAF 对数据进行聚类分析后,他们得到了如下结论:按工具来分类,Python 依旧是大多数黑客的首选武器,紧接着是使用量增长迅速的 Go 语言;再其次是 WinHttp 库,该库主要由 Windows 上运行的 .net 和 CPP 使用;Shell 工具(如 cURL、wget 等)也榜上有名。

来源:开源中国

硬核老王点评:所以,Python 语言是个好语言。

黑客冒充 SpaceX 频道诈骗 两天获利价值 150 万美元的比特币

黑客劫持了三个 YouTube 频道,冒充 Elon Musk 的 SpaceX 频道进行比特币诈骗。被黑客劫持的频道现在都是马斯克接受采访或参加 SpaceX 会议的直播录像,并宣传一些骗局,要求人们发送少量比特币以获得双倍的回报。
现已收到 29 笔比特币交易,总额为 4.08 BTC。

来源:雷锋网

硬核老王点评:总是有人愿意交这些智商税。

BellSoft 与 VMware 合作改进 OpenJDK

Snyk 于 2020 年进行的一项调查显示,只有 34% 的 Java 用户使用 Oracle JDK,而有 53% 的用户选择使用 OpenJDK。与上一年相比,OpenJDK 增长了 36%。有 80% 的 Oracle JDK 用户正在考虑其他支持选项。OpenJDK 的主要贡献者 BellSoft 将提供其主要产品 Liberica JDK 以及对 VMware Tanzu 的全面服务支持。主要的改进领域是增强对 ARM 处理器的支持,并针对云部署和微服务架构优化 Java。

来源:开源中国

硬核老王点评:开放胜过专有的一大胜利。

.NET 5.0 不再内置 WinRT 支持,可精简六万行代码

关于.NET 中不再内置 WinRT 支持,微软提供的原因如下:1.WinRT 互操作性从 .NET runtime 中剥离后开发和改进;2.能够让 WinRT 的互操作性和 iOS 和 Android 等其他操作系统一样。3.可以利用很多其他的 .NET 功能(AOT,C# 特性,IL 链接);4.简化了 .NET runtime 的代码库。在取消内置 WinRT 支持之后,开发者能够使用 C#/WinRT 工具链来替代内置的 WinRT 支持。

来源:cnBeta.COM

硬核老王点评:确实 .NET 太臃肿了。