|
| 1 | +#+BLOG: DarkSun.1kapp.com |
| 2 | +#+POSTID: 17 |
| 3 | +#+DATE: [2015-04-24 星期五 23:27] |
| 4 | +#+TITLE: org2blog--将org发布到wordpress |
| 5 | +#+AUTHOR: DarkSun |
| 6 | +#+CATEGORY: Emacs |
| 7 | +#+OPTIONS: ^:{} |
| 8 | +* 加载必要的库 |
| 9 | +#+BEGIN_SRC emacs-lisp |
| 10 | + (require 'org2blog-autoloads) |
| 11 | +#+END_SRC |
| 12 | +* 配置 |
| 13 | +** 配置blog信息 |
| 14 | +`org2blog/wp-blog-alist'定义了多个blog的信息.其中每个元素的car为一个表示blog的名称的字符串,每个元素的cdr为一个plist,为每个blog提供属性说明. |
| 15 | + |
| 16 | +#+BEGIN_SRC emacs-lisp |
| 17 | + (setq org2blog/wp-blog-alist |
| 18 | + `(("DarkSun.1kapp.com" |
| 19 | + :url "http://darksun.1kapp.com/xmlrpc.php" |
| 20 | + :username "lujun9972" |
| 21 | + :default-categories ("Emacs") |
| 22 | + :keep-new-lines t |
| 23 | + :confirm t |
| 24 | + :wp-code nil |
| 25 | + :tags-as-categories nil) |
| 26 | + )) |
| 27 | + |
| 28 | +#+END_SRC |
| 29 | + |
| 30 | +关于plist中的属性说明如下: |
| 31 | ++ url :: blog中xmlrpc的url地址,必填 |
| 32 | ++ username :: 登陆blog的用户名,必填 |
| 33 | ++ password :: 登陆blog的密码 |
| 34 | ++ default-title :: 新建文章时的默认标题,默认值为`org2blog/wp-default-title'的值 |
| 35 | ++ default-categories :: 新建文章时默认所属的类别列表,默认值为`org2blog/wp-default-categories'的值 |
| 36 | ++ tags-as-categories :: 是否将文章tag作为文章的类别,默认值为`org2blog/wp-use-tags-as-categories'的值 |
| 37 | ++ confirm :: 发布文章时,是否需要用户确认,默认值为`org2blog/wp-confirm-post'的值 |
| 38 | ++ show :: 发布完文章后,是否使用浏览器访问该文章. 默认值为`org2blog/wp-show-post-in-browser'的值 |
| 39 | ++ keep-new-lines :: 是否删除文章中的空行. 默认值为`org2blog/wp-keep-new-lines'的值 |
| 40 | ++ wp-latex :: 是否将org文件中的LaTeX代码转换为WP的latex代码. 默认值为`org2blog/wp-use-wp-latex'的值 |
| 41 | ++ wp-code :: 是否将org中的<pre>...</pre>转换为WP的源代码块格式. 默认值为`org2blog/wp-use-sourcecode-shortcode' |
| 42 | ++ track-posts :: 是否追踪已发布的文章,若允许追踪,则会在发布的org文件中增加`#+POSTID: '行,通过这种方法可以更新已发布的文章. |
| 43 | +** 配置post templates |
| 44 | +通过修改变量`org2blog/wp-buffer-template'和`org2blog/wp-buffer-format-function'的值可以自动以新建文章的内容模板. |
| 45 | + |
| 46 | +其中org2blog使用(funcall org2blog/wp-buffer-format-function org2blog/wp-buffer-template)的返回值作为新建的文章模板. |
| 47 | +#+BEGIN_SRC emacs-lisp |
| 48 | + (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") |
| 49 | + |
| 50 | + (defun org2blog/wp-format-buffer-with-author (buffer-template) |
| 51 | + "Default buffer formatting function." |
| 52 | + (format buffer-template |
| 53 | + ;; TITLE |
| 54 | + (or (plist-get (cdr org2blog/wp-blog) :default-title) |
| 55 | + org2blog/wp-default-title |
| 56 | + (read-string "请输入POST标题:")) |
| 57 | + ;; AUTHOR |
| 58 | + user-login-name |
| 59 | + ;; DATE |
| 60 | + (format-time-string "[%Y-%m-%d %a %H:%M]" (current-time)) |
| 61 | + ;; CATEGORY |
| 62 | + (mapconcat |
| 63 | + (lambda (cat) cat) |
| 64 | + (or (plist-get (cdr org2blog/wp-blog) :default-categories) |
| 65 | + org2blog/wp-default-categories) |
| 66 | + ", ") |
| 67 | + )) |
| 68 | + |
| 69 | + (setq org2blog/wp-buffer-format-function 'org2blog/wp-format-buffer-with-author) |
| 70 | +#+END_SRC |
| 71 | +* 使用方法 |
| 72 | ++ M-x org2blog/wp-login 会提示你要登陆哪个 blog |
| 73 | + |
| 74 | ++ M-x org2blog/wp-logout 登出blog |
| 75 | + |
| 76 | ++ M-x org2blog/wp-new-entry 会打开新buffer供你写作文章,并根据template预先填充好内容 |
| 77 | + |
| 78 | + - Tag/category的各个值之间需要使用`, '分隔开. 可以使用C-c t进行补全 |
| 79 | + |
| 80 | + - 可以在org的头部使用`#+DESCRIPTION: '来指定文章摘要 |
| 81 | + |
| 82 | + - 可以在org的头部使用`#+PERMALINK: '来指定文章的permalink |
| 83 | + |
| 84 | + - 可以在org的头部使用`#+PARENT: '来指定文章的父级链接. 可以使用C-c t进行补全 |
| 85 | + |
| 86 | + - 可以在org的头部使用`#+TITLE: '来指定文章的标题 |
| 87 | + |
| 88 | + - 可以在org的头部使用`#+TAGS: '来指定文章的tag |
| 89 | + |
| 90 | + - 可以在org的头部使用`#+CATEGORY: '来指定文章的分类 |
| 91 | + |
| 92 | + - 可以在org的头部使用`#+DATE: '来指定文章的创建时间 |
| 93 | + |
| 94 | ++ M-x org2blog/wp-post-buffer 将文章保存成 draft |
| 95 | + |
| 96 | ++ M-x org2blog/wp-post-buffer-and-publish 将文章发布到blog |
| 97 | + |
| 98 | ++ M-x org2blog/wp-post-subtree 发布某个tree而不是整个org文件 |
| 99 | + |
| 100 | + - 这时会使用tree的tag来作为发布的文章tag |
| 101 | + |
| 102 | + - 会使用tree中的同名property drawer来代替org头部定义的属性 |
| 103 | + |
| 104 | + - 默认使用POST_DATE property drawer的值被用于替代`#+DATE'属性,但若无该property drawer,则会使用SCHEDULED, DEADLINE的值 |
| 105 | + |
| 106 | + - 默认情况下,tree的headline会作为文章的标题,但可以通过设置`TITLE' property drawer来设置另一个文章标题 |
| 107 | + |
| 108 | ++ M-x org2blog/wp-delete-entry 或 M-x org2blog/wp-delete-page |
| 109 | + |
| 110 | + 删除当前POSTID所表示的博文 |
| 111 | + |
| 112 | ++ C-u post-id M-x org2blog/wp-delete-entry 或 C-u post-id M-x org2blog/wp-delete-page |
| 113 | + |
| 114 | + 删除指定post-id所表示的博文 |
| 115 | + |
| 116 | +发布源代码可以使用 BEGIN_SRC END_SRC 块,或者冒号开头的行会被当作源代码。 |
| 117 | + |
| 118 | +我使用的是 wp-syntax,所以发布源代码使用 BEGIN_HTML 在里面使用 pre 标签,这样出来的代码会加上格式高亮。 |
| 119 | +#+BEGIN_EXAMPLE |
| 120 | + ,#+BEGIN_HTML |
| 121 | + <pre lang="lisp"> |
| 122 | + (setq a 1) |
| 123 | + </pre> |
| 124 | + ,#+END_HTML |
| 125 | +#+END_EXAMPLE |
| 126 | +* 关于org2blog mode |
| 127 | + |
| 128 | +使用`M-x org2blog/wp-mode'可以开启org2blog mode. 在该mode下有以下默认的快捷键: |
| 129 | ++ C-c p :: 发布该buffer |
| 130 | ++ C-c d :: 保存该buffer为草稿 |
| 131 | ++ C-c t :: 补全tag或parent page |
| 132 | + |
| 133 | +* FAQ |
| 134 | +** How do I split a post into an introductory paragraph and a full view. |
| 135 | + |
| 136 | +Just put in |
| 137 | + |
| 138 | +#+HTML: <!--more--> |
| 139 | + |
| 140 | + |
| 141 | +at the location where you wish to split the post. |
| 142 | +** 如何从.netrc中抽取blog的password |
| 143 | +首先,`.netrc'的格式需要为: |
| 144 | +#+BEGIN_EXAMPLE |
| 145 | + machine myblog login myusername password myrealpassword |
| 146 | +#+END_EXAMPLE |
| 147 | + |
| 148 | +然后使用类似下面的代码 |
| 149 | +#+BEGIN_SRC emacs-lisp |
| 150 | + (require 'auth-source) ;; or nothing if already in the load-path |
| 151 | + |
| 152 | + (let (credentials) |
| 153 | + ;; only required if your auth file is not already in the list of auth-sources |
| 154 | + (add-to-list 'auth-sources "~/.netrc") |
| 155 | + (setq credentials (auth-source-user-and-password "myblog")) |
| 156 | + (setq org2blog/wp-blog-alist |
| 157 | + `(("my-blog" |
| 158 | + :url "http://username.server.com/xmlrpc.php" |
| 159 | + :username ,(car credentials) |
| 160 | + :password ,(cadr credentials))))) |
| 161 | +#+END_SRC |
| 162 | +** 如何设置网络访问的代理 |
| 163 | +通过设置url-proxy-services来设置代理. 例如 |
| 164 | +#+BEGIN_SRC elisp |
| 165 | + (setq url-proxy-services '(("http" . "127.0.0.1:8087"))) |
| 166 | +#+END_SRC |
| 167 | +* provide feature |
| 168 | +#+BEGIN_SRC emacs-lisp |
| 169 | + (provide 'init-life-internet-org2blog) |
| 170 | +#+END_SRC |
0 commit comments