暗无天日

=============>DarkSun的个人博客

org2blog--将org发布到wordpress

1 加载必要的库

(require-and-install 'org2blog)
(require 'org2blog-autoloads)

2 配置

2.1 配置blog信息

`org2blog/wp-blog-alist'定义了多个blog的信息.其中每个元素的car为一个表示blog的名称的字符串,每个元素的cdr为一个plist,为每个blog提供属性说明.

(setq org2blog/wp-blog-alist
      `(("DarkSun.1kapp.com"
         :url "http://darksun.1kapp.com/xmlrpc.php"
         :username "lujun9972"
         :default-categories ("Emacs")
         :keep-new-lines t
         :confirm t
         :wp-code nil
         :tags-as-categories nil)
        ("DarkSun.blog.51cto.com"
         :url "http://darksun.blog.51cto.com/xmlrpc.php"
         :username "lujun9972"
         :default-categories ("Emacs")
         :keep-new-lines t
         :confirm t
         :wp-code nil
         :tags-as-categories nil)))

关于plist中的属性说明如下:

url
blog中xmlrpc的url地址,必填
username
登陆blog的用户名,必填
password
登陆blog的密码
default-title
新建文章时的默认标题,默认值为`org2blog/wp-default-title'的值
default-categories
新建文章时默认所属的类别列表,默认值为`org2blog/wp-default-categories'的值
tags-as-categories
是否将文章tag作为文章的类别,默认值为`org2blog/wp-use-tags-as-categories'的值
confirm
发布文章时,是否需要用户确认,默认值为`org2blog/wp-confirm-post'的值
show
发布完文章后,是否使用浏览器访问该文章. 默认值为`org2blog/wp-show-post-in-browser'的值
keep-new-lines
是否删除文章中的空行. 默认值为`org2blog/wp-keep-new-lines'的值
wp-latex
是否将org文件中的LaTeX代码转换为WP的latex代码. 默认值为`org2blog/wp-use-wp-latex'的值
wp-code
是否将org中的<pre>…</pre>转换为WP的源代码块格式. 默认值为`org2blog/wp-use-sourcecode-shortcode'
track-posts
是否追踪已发布的文章,若允许追踪,则会在发布的org文件中增加`#+POSTID: '行,通过这种方法可以更新已发布的文章.

2.2 配置post templates

通过修改变量`org2blog/wp-buffer-template'和`org2blog/wp-buffer-format-function'的值可以自动以新建文章的内容模板.

其中org2blog使用(funcall org2blog/wp-buffer-format-function org2blog/wp-buffer-template)的返回值作为新建的文章模板.

(setq org2blog/wp-buffer-template "#+TITLE: %s\n#+AUTHOR: %s\n#+DATE: %s\n#+OPTIONS: toc:nil num:nil todo:nil pri:nil tags:nil ^:nil\n#+CATEGORY: %s\n#+TAGS:\n#+DESCRIPTION:\n\n")

(defun org2blog/wp-format-buffer-with-author (buffer-template)
  "Default buffer formatting function."
  (format buffer-template
          ;; TITLE
          (or (plist-get (cdr org2blog/wp-blog) :default-title)
              org2blog/wp-default-title
              (read-string "请输入POST标题:"))
          ;; AUTHOR
          user-login-name
          ;; DATE
          (format-time-string "[%Y-%m-%d %a %H:%M]" (current-time))
          ;; CATEGORY
          (mapconcat
           (lambda (cat) cat)
           (or (plist-get (cdr org2blog/wp-blog) :default-categories)
               org2blog/wp-default-categories)
           ", ")
          ))

(setq org2blog/wp-buffer-format-function 'org2blog/wp-format-buffer-with-author)

3 使用方法

  • M-x org2blog/wp-login 会提示你要登陆哪个 blog
  • M-x org2blog/wp-logout 登出blog
  • M-x org2blog/wp-new-entry 会打开新buffer供你写作文章,并根据template预先填充好内容
    • Tag/category的各个值之间需要使用`, '分隔开. 可以使用C-c t进行补全
    • 可以在org的头部使用`#+DESCRIPTION: '来指定文章摘要
    • 可以在org的头部使用`#+PERMALINK: '来指定文章的permalink
    • 可以在org的头部使用`#+PARENT: '来指定文章的父级链接. 可以使用C-c t进行补全
    • 可以在org的头部使用`#+TITLE: '来指定文章的标题
    • 可以在org的头部使用`#+TAGS: '来指定文章的tag
    • 可以在org的头部使用`#+CATEGORY: '来指定文章的分类
    • 可以在org的头部使用`#+DATE: '来指定文章的创建时间
  • M-x org2blog/wp-post-buffer 将文章保存成 draft
  • M-x org2blog/wp-post-buffer-and-publish 将文章发布到blog
  • M-x org2blog/wp-post-subtree 发布某个tree而不是整个org文件
    • 这时会使用tree的tag来作为发布的文章tag
    • 会使用tree中的同名property drawer来代替org头部定义的属性
    • 默认使用POST_DATE property drawer的值被用于替代`#+DATE'属性,但若无该property drawer,则会使用SCHEDULED, DEADLINE的值
    • 默认情况下,tree的headline会作为文章的标题,但可以通过设置`TITLE' property drawer来设置另一个文章标题
  • M-x org2blog/wp-delete-entry 或 M-x org2blog/wp-delete-page

    删除当前POSTID所表示的博文

  • C-u post-id M-x org2blog/wp-delete-entry 或 C-u post-id M-x org2blog/wp-delete-page

    删除指定post-id所表示的博文

发布源代码可以使用 BEGIN_SRC END_SRC 块,或者冒号开头的行会被当作源代码。

我使用的是 wp-syntax,所以发布源代码使用 BEGIN_EXPORT html 在里面使用 pre 标签,这样出来的代码会加上格式高亮。

#+BEGIN_EXPORT html
<pre lang="lisp">
(setq a 1)
</pre>
#+END_EXPORT

4 关于org2blog mode

使用`M-x org2blog/wp-mode'可以开启org2blog mode. 在该mode下有以下默认的快捷键:

C-c p
发布该buffer
C-c d
保存该buffer为草稿
C-c t
补全tag或parent page

5 FAQ

5.1 How do I split a post into an introductory paragraph and a full view.

Just put in

at the location where you wish to split the post.

5.2 如何从.netrc中抽取blog的password

首先,`.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)))))

5.3 如何设置网络访问的代理

通过设置url-proxy-services来设置代理. 例如

(setq url-proxy-services '(("http" . "127.0.0.1:8087")))

6 provide feature

(provide 'init-life-internet-org2blog)