β

【Emacs】Org2blog

org2blog 包括两个部分: org2blog/wp 能将 org-mode 中写的东西发布到 wordpress org2blog/atom 则是 Tom Breton 写的一个 g-client 扩展 。理想情况下,org2blog/wp 能够和任何支持 xml-rpc 的平台协同工作,但也有一些 WordPress 的特定功能可能无法支持。

作者从 Ashish Shukla 所著的《a wordpress posting client for muse-mode》受到启发,并基于该文章完成了 org2blog。

org2blog 基于 GPLv3 授权。

安装(Installation)

emacs可以通过 elpa 进行安装或者自行从 github 下载安装,建议使用前者进行扩展的统一安装与更新。

git clone http://github.com/punchagan/org2blog.git

加载 org2blog 目录到 load-path,并作相应配置。

(setq load-path (cons "~/.emacs.d/org2blog/" load-path))
(require 'org2blog-autoloads)

依赖关系(Dependencies)

org2blog 依赖于:

  1. xml-rpc、metaweblog
  2. 确保安装最新的 org-mode。可能和版本 7 之上 都能正常工作,但是如果可以还是使用最新版本吧。

使用(Usage)

自定义 blog 配置(Defining your blog setup)

注意:下面的安装只适用 0.3 以上版本的 org2blog,低版本的请参看 commit e37126e 的 README 文档。通过变量 org2blog/wp-blog-alist 来自定义所有 blog 的位置以及一些特殊配置。例如:

(setq org2blog/wp-blog-alist
      '(("wordpress"
         :url "http://username.wordpress.com/xmlrpc.php"
         :username "username"
         :default-title "Hello World"
         :default-categories ("org2blog" "emacs")
         :tags-as-categories nil)
        ("my-blog"
         :url "http://username.server.com/xmlrpc.php"
         :username "admin")))

这里定义了 WordPress 和 my-blog 两个博客。每个 plist 中的变量将会覆盖相应的全局变量。除了 url 和 username 其他都是可选的。参看变量 org2blog/wp-blog-alist 了解每个属性的详细信息。

也可以使用 .netrc 文件来保存 blog 的用户名和密码。.netrc 文件看起来是这个样子的:

machine myblog login myusername password myrealpassword

然后如下使用上面的配置:

(require 'netrc) ;; or nothing if already in the load-path
(setq blog (netrc-machine (netrc-parse "~/.netrc") "myblog" t))
(setq org2blog/wp-blog-alist
      '(("my-blog"
         :url "http://username.server.com/xmlrpc.php"
         :username (netrc-get blog "login")
         :password (netrc-get blog "password"))))

若想查看和定制其他选项,使用 customize-group 命令:

M-x customize-group org2blog/wp RET

登陆博客(Logging In)

使用 M-x org2blog/wp-login 登陆。首先会询问将要登陆的 blog 名字,然后是登陆密码。相应的,使用 M-x org2blog/wp-logout 退出正在登陆的 blog。

编写 post(Writing a new post)

使用 M-x org2blog/wp-new-entry

  • 多个标签和分类用逗号或空格分隔,通过 C-c 进行补全,如果正在使用的分类是全新的,会提示添加。
  • #+DESCRIPTION 是文章摘要。
  • #+PERMALINK 是文章固定连接。
  • #+PARENT 指定了一个 page 的上级,使用 C-c t 同样可以补全 page name。

使用文章模板(Using post templates)

通过修改变量 org2blog/wp-buffer-template 和 org2blog/wp-buffer-format-function 定制文章模板,例如:

(setq org2blog/wp-buffer-template
"-----------------------
#+TITLE: %s
#+DATE: %s
-----------------------\n")

(defun my-format-function (format-string)
   (format format-string
           org2blog/wp-default-title
           (format-time-string "%d-%m-%Y" (current-time)))))
(setq org2blog/wp-buffer-format-function 'my-format-function)

更新已有文章(Updating an existing post)

如要更新一个博客文章,只需编辑对应的 org 文件然后使用 org2blog 重新发布即可。之前保存在文件中的 POSTID 确保更新的是同一篇文章,而不是新建文章。

发布(Publishing)

post buffer as draft C-c d M-x org2blog/wp-post-buffer
publish buffer C-c p C-u M-x org2blog/wp-post-buffer
post buffer as page draft C-c D M-x org2blog/wp-post-buffer-as-page
publish buffer as page C-c P C-u M-x org2blog/wp-post-buffer-as-page

发布已有的 org 文件(Post your existing org-files too)

  • 在文件中添加 #+TITLE, #+OPTIONS, #+TAGS, #+CATEGORY, #+DESCRIPTION, #+DATE,这些标签都是可选的。
  • 如果编辑已有文章,需指定 #+POSTID。
  • 使用上面的函数发布文章。

发布子树(Posting a subtree)

  • 使用 M-x org2blog/wp-post-subtree
  • 子树的标签页会归类到 blog 的标签。
  • 其他属性可以使用属性抽屉设置,属性与 buffer 变量同名。
  • POST_DATE 设置文章日期,如果没有,就使用 SCHEDULED, DEADLINE 等其他时间戳。
  • 首行将会文章的标题,TITLE 也能指定标题。

发布代码块(Posting source code blocks)

代码块将会自动放在 <pre> 标签中。通过设置变量 org2blog/wp-use-sourcecode-shortcode 和使用 htmlize.el 也可以要求 org2blog 使用 WordPress 的源码简标。WordPress 代码简标提供了很多配置参数 。变量 org2blog/wp-sourcecode-default-params 也可以修改传递给源码块的默认参数。

  • 代码高亮(Syntax Highlight)

    org2blog 有两种方式实现代码高亮:

    • 如果 org2blog/wp-use-sourcecode-shortcode 设置为 nil,通过 org-mode 的 export 接口,结合 htmlize.el 将代码块包裹在 <pre> 标签中,代码上传到 blog;
    • 如果该值非 nil,同样利用 org-mode 的 export 接口,将代码块包裹在 sourcecode 标签中,然后上传到 WordPress 后由 syntax highlighting 进行高亮。
    • 如果该值非 nil,同样利用 org-mode 的 export 接口,将代码块包裹在 sourcecode 标签中,然后上传到 WordPress 后由 syntax highlighting 进行高亮。

    变量 org2blog/wp-sourcecode-langs 定义了 org2blog 支持语法高亮的语言,该变量支持范围与syntaxHighlight基本相同,但更为重要的是变量 org2blog/wp-shortcode-langs-map ,它起到了沟通 org2blog、org、syntaxHighlight 三者的作用,如果一种语言 org2blog 不支持高亮,但被 syntaxHightlight支持,同 org-mode 也支持编辑,则可以在这个变量中定义(syntaxHight,org-mode)的映射,兼顾代码高亮和 org-mode 中的代码编辑。具体参看该变量的说明。

    SyntaxHighlight支持的语言里列表

删除文章或页面(Delete an entry or a page)

  • 如果正处于文章或页面的编辑 buffer,并且 #+POSTID 存在,执行 M-x org2blog/wp-delete-entry or M-x org2blog/wp-delete-page
  • 如果想删除不在 buffer 中的文章,文章 id 已知,执行 C-u post-id M-x org2blog/wp-delete-entry

删除页面类似。

启动 org2blog 模式(Enabling org2blog mode (defines key-bindings))

使用 M-x org2blog/wp-mode,定义的键绑定如下:

C-c p publish buffer
C-c d post as draft
C-c t complete tag or parent page name

上传图片或文件(Uploading Images or Files)

网上或者使用 file:// 链接的图片或文件将会上传到媒体库,链接同样会更新。上传的文件信息将会作为文章本身的注释存在。

org-mode 中定义的标题和属性将保留,但不会随图片保存到库。

列出所有文章(”Dashboard” of all posts)

org2blog 会跟踪所有使用它创建的 blog 文章,这样可以很容易的管理这些文章。默认的他会在 org-directory 中的 .org2blog.org 文件,改属性可以被关闭。

其他(Miscellaneous)

  1. 可能需要看一下 org mode 手册中 HMTL export 中的导出选项。
  2. 如果想从 org mode 向 blogger 发送文章,参考如下:
    • Tom Breton 写的 org2blog/atom。
    • Richard Riley 写的 org-googlecl,
  3. 写信给作者前请先阅读 README 和 FAQ 。
  4. 如果有疑问、bug、功能要求,使用 git 的时间跟踪或者发邮件到 punchagan+org2blog[at]gmail[dot]com 。作者很高兴收到补丁、建议来改进文档。当然也欢迎随意评论。

FAQ

  1. org2blog 可以配置多少 blog? 可以配置任意数量的 blog,使用变量 org2blog/wp-blog-alis 对每个 blog 进行详细配置。但是请注意一次只能登陆一个 blog。
  2. 如何更改新文章的默认标题
    (setq org2blog/wp-default-title "My New Title")
  3. 如何只改变某个 blog 默认文章标题? 在变量 org2blog/wp-blog-alist 中设置对应的变量 :default-title。
  4. 如何将标签当做文章分类使用?
    (setq org2blog/wp-use-tags-as-categories t)
  5. 如何配置 org2blog 在发布文章前自动确认?
    (setq org2blog/wp-confirm-post t)
作者:胖狐狸的日记 » 胖狐狸的日记
又一个WordPress站点
原文地址:【Emacs】Org2blog, 感谢原作者分享。

发表评论