org2blog-mode
Table of Contents
- 1. 安装(Installation)
- 2. 依赖关系(Dependencies)
- 3. 使用(Usage)
- 3.1. 自定义 blog 配置(Defining your blog setup)
- 3.1.1. 登陆博客(Logging In)
- 3.1.2. 编写 post(Writing a new post)
- 3.1.3. 使用文章模板(Using post templates)
- 3.1.4. 更新已有文章(Updating an existing post)
- 3.1.5. 发布(Publishing)
- 3.1.6. 发布已有的 org 文件(Post your existing org-files too)
- 3.1.7. 发布子树(Posting a subtree)
- 3.1.8. 发布代码块(Posting source code blocks)
- 3.1.9. 删除文章或页面(Delete an entry or a page)
- 3.1.10. 启动 org2blog 模式(Enabling org2blog mode (defines key-bindings))
- 3.1.11. 上传图片或文件(Uploading Images or Files)
- 3.1.12. 列出所有文章("Dashboard" of all posts)
- 3.1. 自定义 blog 配置(Defining your blog setup)
- 4. 其他(Miscellaneous)
- 5. FAQ
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 授权。
1 安装(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)
2 依赖关系(Dependencies)
org2blog 依赖于:
- xml-rpc、metaweblog
- 确保安装最新的 org-mode。可能和版本 7 之上 都能正常工作,但是如果可以还是使用最新版本吧。
3 使用(Usage)
3.1 自定义 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 或者 .authinfo 文件来保存 blog 的用户名和密码。.netrc 文件看起来是这个样子的:
machine myblog login myusername password myrealpassword
然后如下使用上面的配置:
(require 'auth-source) ;; or nothing if already in the load-path (let (credentials) ;; only required if your auth file is not already in the list of auth-sources (add-to-list 'auth-sources "~/.netrc") (setq credentials (auth-source-user-and-password "myblog")) (setq org2blog/wp-blog-alist `(("my-blog" :url "http://username.server.com/xmlrpc.php" :username ,(car credentials) :password ,(cadr credentials)))))
若想查看和定制其他选项,使用 customize-group 命令: M-x customize-group org2blog/wp RET
3.1.1 登陆博客(Logging In)
使用 M-x org2blog/wp-login
登陆。首先会询问将要登陆的 blog 名字,然后是登陆密码。相应的,使用 M-x org2blog/wp-logout 退出正在登陆的 blog。
3.1.2 编写 post(Writing a new post)
使用 M-x org2blog/wp-new-entry
- 多个标签和分类用逗号或空格分隔,通过 C-c 进行补全,如果正在使用的分类是全新的,会提示添加。
- #+DESCRIPTION 是文章摘要。
- #+PERMALINK 是文章固定连接。
- #+PARENT 指定了一个 page 的上级,使用 C-c t 同样可以补全 page name。
3.1.3 使用文章模板(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)
3.1.4 更新已有文章(Updating an existing post)
如要更新一个博客文章,只需编辑对应的 org 文件然后使用 org2blog 重新发布即可。之前保存在文件中的 POSTID 确保更新的是同一篇文章,而不是新建文章。
3.1.5 发布(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 |
3.1.6 发布已有的 org 文件(Post your existing org-files too)
- 在文件中添加 #+TITLE, #+OPTIONS, #+TAGS, #+CATEGORY, #+DESCRIPTION, #+DATE,这些标签都是可选的。
- 如果编辑已有文章,需指定 #+POSTID。
- 使用上面的函数发布文章。
3.1.7 发布子树(Posting a subtree)
- 使用 M-x org2blog/wp-post-subtree
- 子树的标签页会归类到 blog 的标签。
- 其他属性可以使用属性抽屉设置,属性与 buffer 变量同名。
- POST_DATE 设置文章日期,如果没有,就使用 SCHEDULED, DEADLINE 等其他时间戳。
- 首行将会文章的标题,TITLE 也能指定标题。
3.1.8 发布代码块(Posting source code blocks)
代码块将会自动放在 <pre> 标签中。通过设置变量 org2blog/wp-use-sourcecode-shortcode 和使用 htmlize.el 也可以要求 org2blog 使用 WordPress 的源码简标。WordPress 代码简标提供了很多配置参数 。变量 org2blog/wp-sourcecode-default-params 也可以修改传递给源码块的默认参数。
3.1.8.1 代码高亮(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 支持的语言里列表。
3.1.9 删除文章或页面(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
删除页面类似。
3.1.10 启动 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 |
3.1.11 上传图片或文件(Uploading Images or Files)
网上或者使用 file:// 链接的图片或文件将会上传到媒体库,链接同样会更新。上传的文件信息将会作为文章本身的注释存在。
org-mode 中定义的标题和属性将保留,但不会随图片保存到库。
3.1.12 列出所有文章("Dashboard" of all posts)
org2blog 会跟踪所有使用它创建的 blog 文章,这样可以很容易的管理这些文章。默认的他会在 org-directory 中的 .org2blog.org 文件,改属性可以被关闭。
4 其他(Miscellaneous)
- 可能需要看一下 org mode 手册中 HMTL export 中的导出选项。
- 如果想从 org mode 向 blogger 发送文章,参考如下:
- Tom Breton 写的 org2blog/atom。
- Richard Riley 写的 org-googlecl,
- 写信给作者前请先阅读 README 和 FAQ。
- 如果有疑问、bug、功能要求,使用 git 的时间跟踪或者发邮件到 punchagan+org2blog[at]gmail[dot]com。作者很高兴收到补丁、建议来改进文档。当然也欢迎随意评论。
5 FAQ
- org2blog 可以配置多少 blog? 可以配置任意数量的 blog,使用变量 org2blog/wp-blog-alis 对每个 blog 进行详细配置。但是请注意一次只能登陆一个 blog。
如何更改新文章的默认标题
(setq org2blog/wp-default-title "My New Title")
- 如何只改变某个 blog 默认文章标题? 在变量 org2blog/wp-blog-alist 中设置对应的变量 :default-title。
如何将标签当做文章分类使用?
(setq org2blog/wp-use-tags-as-categories t)
如何配置 org2blog 在发布文章前自动确认?
(setq org2blog/wp-confirm-post t)