UP | HOME

org2blog-mode

Table of Contents

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 依赖于:

  1. xml-rpc、metaweblog
  2. 确保安装最新的 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)

  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。作者很高兴收到补丁、建议来改进文档。当然也欢迎随意评论。

5 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)
    

Author: liushangliang

Email: phenix3443+github@gmail.com

Created: 2020-04-26 日 10:54