0

我正在使用 CoffeeScript 编写我的第一个小书签,但我无法让任何重要的工作正常工作。

这是我想要的脚本,我想用它来使用网页中的选定片段更新 org-mode 文件:

fs = require 'fs'

appendfile = fs.createWriteStream('webjournals.org',
    flags: "a"
)
appendfile.write("\n")
appendfile.write("* ")
appendfile.write(document.title)
appendfile.write("\n")
appendfile.end(window.getSelection().toString())

这在编译为 JS 时(并通过bookmarklet-izer运行,不起作用。事实上,即使这样也行不通:

(function() {
  var fs;

  fs = require('fs');

  alert(document.title);

}).call(this);

但是,这有效:

(function() {
  var fs;

  alert(document.title);

}).call(this);

我手动检查了这段代码到 Coffee 解释器中与浏览器相关的函数,它可以工作——我可以看到 org-file 中的更改。我错过了什么?

4

2 回答 2

1

如果您正在考虑使用本地 Web 服务器来运行 node.js 以允许脚本运行和访问您的文件系统(如 guillaume 的回答中所建议的那样),您还应该考虑使用Org-Protocol并使用久经考验的写入方法组织文件(组织捕获)。

Org-Protocol 教程提供了设置连接的适当信息(Windows 的注册表项、Mac 的 Emacs.app 配置以及 Gnome 和 KDE 的方法),以及允许小书签完成工作的 javascript。

然后,您只需要创建一个适当的 Capture 模板来包含您检索到的信息并根据需要对其进行格式化。

于 2013-10-02T18:37:59.293 回答
1

您不能fs直接从浏览器使用该模块,因为它是一个 node.js API。

我能想出的最简单的解决方案是让您使用咖啡脚本(例如在 localhost:1234 上)创建一个 Web 服务器,并让小书签向您的服务器(使用jQuery.post)提交一个片段,然后将其写入本地文件。

以一种说明性的方式,一个片段将从左到右:

网页 --> 书签 --> 本地 HTTP 服务器 --> 组织模式文件 --> Emacs

另一种解决方案是让您制作一个 Firefox 插件,它可以访问您的本地文件系统(但API似乎不允许附加到文件)。

有一些新的 API,例如Filesystem API,但它们似乎是一个死胡同,因为您无法访问完整的文件系统,而是一个沙盒系统,您也无法从 emacs 访问。

于 2013-10-01T10:40:51.757 回答