2017年5月31日星期三

想拥有自己的 Atom 文本编辑器插件吗?


Linuxeden 开源社区 --制作你的第一个 Atom 文本编辑器插件
导读 这篇教程将会教你怎么制作你的第一个 Atom 文本编辑器的插件。我们将会制作一个山寨版的 Sourcerer,这是一个从 StackOverflow 查询并使用代码片段的插件。到教程结束时,你将会制作好一个将编程问题(用英语描述的)转换成获取自 StackOverflow 的代码片段的插件,像这样:

制作你的第一个 Atom 文本编辑器插件

准备
教程须知

Atom 文本编辑器是用 web 技术创造出来的。我们将完全使用 JavaScript 的 EcmaScript 6 规范来制作插件。你需要熟悉以下内容:

  • · 使用命令行
  • · JavaScript 编程
  • · Promises
  • · HTTP
教程的仓库

你可以跟着教程一步一步走,或者看看放在 GitHub 上的仓库,这里有插件的源代码。这个仓库的历史提交记录包含了这里每一个标题。

开始
安装 Atom

根据 Atom 官网 的说明来下载 Atom。我们同时还要安装上 apm(Atom 包管理器的命令行工具)。你可以打开 Atom 并在应用菜单中导航到 Atom > Install Shell Commands 来安装。打开你的命令行终端,运行 apm -v 来检查 apm 是否已经正确安装好,安装成功的话打印出来的工具版本和相关环境信息应该是像这样的:

apm -v
> apm  1.9.2
> npm  2.13.3
> node 0.10.40
> python 2.7.10
> git 2.7.4
生成骨架代码

让我们使用 Atom 提供的一个实用工具创建一个新的 package(软件包)来开始这篇教程。

  1. 启动编辑器,按下 Cmd+Shift+P(MacOS) 或者 Ctrl+Shift+P(Windows/Linux) 来打开命令面板。
  2. 搜索“Package Generator: Generate Package”并点击列表中正确的条目,你会看到一个输入提示,输入软件包的名称:“sourcefetch”。
  3. 按下回车键来生成这个骨架代码包,它会自动在 Atom 中打开。

如果你在侧边栏没有看到软件包的文件,依次按下 Cmd+K Cmd+B(MacOS) 或者 Ctrl+K Ctrl+B(Windows/Linux)。

制作你的第一个 Atom 文本编辑器插件

[info]
命令面板可以让你通过模糊搜索来找到并运行软件包。这是一个执行命令比较方便的途径,你不用去找导航菜单,也不用刻意去记快捷键。我们将会在整篇教程中使用这个方法。[/info]

运行骨架代码包

在开始编程前让我们来试用一下这个骨架代码包。我们首先需要重启 Atom,这样它才可以识别我们新增的软件包。再次打开命令面板,执行 Window: Reload 命令。

重新加载当前窗口以确保 Atom 执行的是我们最新的源代码。每当需要测试我们对软件包的改动的时候,就需要运行这条命令。

通过导航到编辑器菜单的 Packages > sourcefetch > Toggle 或者在命令面板执行 sourcefetch:toggle 来运行软件包的 toggle 命令。你应该会看到屏幕的顶部出现了一个小黑窗。再次运行这条命令就可以隐藏它。

制作你的第一个 Atom 文本编辑器插件

“toggle”命令

打开 lib/sourcefetch.js,这个文件包含有软件包的逻辑和 toggle 命令的定义。

toggle() {
 console.log('Sourcefetch was toggled!');
 return (
   this.modalPanel.isVisible() ?
   this.modalPanel.hide() :
   this.modalPanel.show()
 );
}

toggle 是这个模块导出的一个函数。根据模态面板的可见性,它通过一个三目运算符 来调用 show 和 hide 方法。modalPanel 是 Panel(一个由 Atom API 提供的 UI 元素)的一个实例。我们需要在 export default 内部声明 modalPanel 才可以让我们通过一个实例变量 this 来访问它。

this.subscriptions.add(atom.commands.add('atom-workspace', {
  'sourcefetch:toggle': () => this.toggle()
}));

上面的语句让 Atom 在用户运行 sourcefetch:toggle 的时候执行 toggle 方法。我们指定了一个 匿名函数 () => this.toggle(),每次执行这条命令的时候都会执行这个函数。这是事件驱动编程(一种常用的 JavaScript 模式)的一个范例。

Atom 命令

命令只是用户触发事件时使用的一些字符串标识符,它定义在软件包的命名空间内。我们已经用过的命令有:

  • · package-generator:generate-package
  • · Window:reload
  • · sourcefetch:toggle

软件包对应到命令,以执行代码来响应事件。

进行你的第一次代码更改

让我们来进行第一次代码更改——我们将通过改变 toggle 函数来实现逆转用户选中文本的功能。

改变 “toggle” 函数

如下更改 toggle 函数。

toggle() {
  let editor
  if (editor = atom.workspace.getActiveTextEditor()) {
    let selection = editor.getSelectedText()
    let reversed = selection.split('').reverse().join('')
    editor.insertText(reversed)
  }
}
测试你的改动
  1. 通过在命令面板运行 Window: Reload 来重新加载 Atom。
  2. 通过导航到 File > New 来创建一个新文件,随便写点什么并通过光标选中它。
  3. 通过命令面板、Atom 菜单或者右击文本然后选中 Toggle sourcefetch 来运行 sourcefetch:toggle 命令。

更新后的命令将会改变选中文本的顺序:

制作你的第一个 Atom 文本编辑器插件

在 sourcefetch 教程仓库 查看这一步的全部代码更改。

原文地址: http://ift.tt/2qzYXgB编辑员:苏西云,审核员:逄增宝

The post 想拥有自己的 Atom 文本编辑器插件吗? appeared first on Linuxeden开源社区.

http://ift.tt/2rkhOcr

Android 之父宣布将开源 Ambient OS 智能家居平台


Linuxeden 开源社区 --

在同莫博士的访谈中,Android 联合创始人、Playground 的首席执行官 Adny Rubin 今天宣布推出了全新高端 Android 智能手机 Essential Phone 以及 Essential Home 语音助手,此外他还宣布 Ambient OS 智能家居平台将开源。

目前智能家居领域还处于各平台混战的情况,诸多可交互的标准和无线平台都尝试将家庭的所有设备整合在一起进行管理,而 Essential 正是抓住了这个契机推出了 Ambient OS。然而,这项决定同时也意味着该平台能够避免当前 Android 平台碎片化的问题,而碎片化导致部分用户错过重要升级和优化。莫博士在谈及 Android 系统在全球各地划分成为各种版本,Rubin 反驳道多种版本反而是 Android 系统的强大之处。Rubin 说道:“没有系统能够获得 100%升级。”

Rubin 承认相对于苹果的 iOS 系统,Android 系统的升级率明显低很多,但他的新公司的 Ambient OS 已经提出了合理的解决方案。不过在本次访谈中,他并未透露具体的解决方案,只是说“在后台托管更多的服务。”

稿源:cnbeta

The post Android 之父宣布将开源 Ambient OS 智能家居平台 appeared first on Linuxeden开源社区.

http://ift.tt/2raWV4T

Gson 2.8.1 发布,Java 的 JSON 类库


Linuxeden 开源社区 --

Gson 2.8.1 发布了。Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。

下载地址:

完整更新内容请查看 发行首页 和 更新日志 。

转自 http://ift.tt/2sc5f2K

The post Gson 2.8.1 发布,Java 的 JSON 类库 appeared first on Linuxeden开源社区.

http://ift.tt/2rb1xYI

Nginx 1.13.1 发布,高性能 Web 服务器


Linuxeden 开源社区 --Nginx
Nginx

Nginx 1.13.1 发布了。更新内容如下:

  • Feature: now a hostname can be used as the “set_real_ip_from” directive parameter.
  • Feature: vim syntax highlighting scripts improvements.
  • Feature: the “worker_cpu_affinity” directive now works on DragonFly BSD.
  • Bugfix: SSL renegotiation on backend connections did not work when using OpenSSL before 1.1.0.
  • Workaround: nginx could not be built with Oracle Developer Studio 12.5.
  • Workaround: now cache manager ignores long locked cache entries when cleaning cache based on the “max_size” parameter.
  • Bugfix: client SSL connections were immediately closed if deferred accept and the “proxy_protocol” parameter of the “listen” directive were used.
  • Bugfix: in the “proxy_cache_background_update” directive.
  • Workaround: now the “tcp_nodelay” directive sets the TCP_NODELAY option before an SSL handshake.

转自  http://ift.tt/2qzzX4K

The post Nginx 1.13.1 发布,高性能 Web 服务器 appeared first on Linuxeden开源社区.

http://ift.tt/2sdQ759

OpenShot 发布 2.3.2 版本啦!


Linuxeden 开源社区 --OpenShot 2.3.2 发布,非线性视频编辑器 - 开源中国社区
导读 OpenShot 2.3.3 发布了,Openshot 是 linux 的 Gnome 桌面一个非线性视频编辑器,有许多功能:你可以重划大小,修剪或者剪切视频,同时有实时的预览,图片覆盖,标题模板,视频解码,数码变焦,音频混合和编辑,数字视频效果,具备了大部分你可以想像到的功能。

开发人员表示:”在过去的两周中,我完成了相当多的工作,总结了 openshot-qt 和 liboenshot 的异常数据,并分析了一些关键的数据点。2.3.3 版本解决了 25 个崩溃和错误“。

此版本还调整了 SpaceMovie 3D 动画标题,和各种时间线错误。

OpenShot 2.3.2 发布,非线性视频编辑器 - 开源中国社区

下载地址:http://ift.tt/1rmxGVt

原文地址: http://ift.tt/2rjPjeY编辑员:杨鹏飞,审核员:逄增宝

The post OpenShot 发布 2.3.2 版本啦! appeared first on Linuxeden开源社区.

http://ift.tt/2qApPNa

npm v5.0.0 正式发布,改进了稳定性


Linuxeden 开源社区 --

npm 5 有了很大的进步,在几乎所有常见的情况下显著地改进了其性能,修复了很多由架构导致的旧的错误,使其更稳定和具有更好的容错性。这对于需要一致性/安全保证的用户是个好消息,新版还为 git 依赖提供了语义化支持。

重大变更:

  • 现有的 npm 缓存将不再使用:您将不得不重新下载全部缓存的软件包。没有任何工具或意图重新使用旧的缓存 (#15666)
  • 不要再使用大写的 npm(npm will now scold you if you capitalize its name. seriously it will fight you.)
  • npm will --save by default now。另外,除非 npm-shrinkwrap.json 存在,否则 package-lock.json 将会自动创建 (#15666)
  • 通过 user/repo#semver:^1.2.3,Git 依赖支持语义化 (#15308) (#15666) (@sankethkatta)
  • 移除 Stub 文件 (#16204) (@watilde)
  • “extremely legacy” _token couchToken 已被移除 (#12986)
  • npm install ./packages/subdir will now create a symlink instead of a regular installation. file://path/to/tarball.tgz will not change – only directories are symlinked. (#15900)
  • Git dependencies with prepare scripts will have their devDependencies installed, and npm install run in their directory before being packed.
  • npm cache commands have been rewritten and don’t really work anything like they did before. (#15666)
  • --cache-min and --cache-max have been deprecated. (#15666)
  • Running npm while offline will no longer insist on retrying network requests. npm will now immediately fall back to cache if possible, or fail. (#15666)
  • package locks no longer exclude optionalDependencies that failed to build. This means package-lock.json and npm-shrinkwrap.json should now be cross-platform. (#15900)
  • If you generated your package lock against registry A, and you switch to registry B, npm will now try to install the packages from registry B, instead of A. If you want to use different registries for different packages, use scope-specific registries (npm config set @myscope:registry=http://ift.tt/2qifOUZ). Different registries for different unscoped packages are not supported anymore.
  • Shrinkwrap and package-lock no longer warn and exit without saving the lockfile.
  • Local tarballs can now only be installed if they have a file extensions .tar, .tar.gz, or .tgz.
  • A new loglevel, notice, has been added and set as default.
  • One binary to rule them all: ./cli.js has been removed in favor of ./bin/npm-cli.js. In case you were doing something with ./cli.js itself. (#12096) (@watilde)

详情请参阅发布主页 。

转自 http://ift.tt/2rhVZtW

The post npm v5.0.0 正式发布,改进了稳定性 appeared first on Linuxeden开源社区.

http://ift.tt/2sdl8WR