使用org-mode写cnblogs博客

*/-->

pre.src {background-color: #002b36; color: #839496;}

pre.src {background-color: #002b36; color: #839496;}

pre.src {background-color: #002b36; color: #839496;}

pre.src {background-color: #002b36; color: #839496;}

pre.src {background-color: #002b36; color: #839496;}

pre.src {background-color: #002b36; color: #839496;}

pre.src {background-color: #002b36; color: #839496;}

pre.src {background-color: #002b36; color: #839496;}

pre.src {background-color: #002b36; color: #839496;}

pre.src {background-color: #002b36; color: #839496;}

pre.src {background-color: #002b36; color: #839496;}

pre.src {background-color: #002b36; color: #839496;}

pre.src {background-color: #002b36; color: #839496;}

pre.src {background-color: #002b36; color: #839496;}

pre.src {background-color: #002b36; color: #839496;}

pre.src {background-color: #002b36; color: #839496;}

使用org-mode写cnblogs博客

1 下载

https://github.com/yangwen0228/unimacs/tree/master/packages/vendor/cnblogs

这个插件是下载的cnblogs , 但作者好像很久没有更新了,而我们org-mode更新之后,org-html-export-as-html的行为有些改变,不能使用异步的方式了,导致插件使用不了。所以需要把异步改为同步,另外需要把org-export-show-temporary-export-buffer设置为nil,即导出的临时buffer在后台不可见。

(cons "description"
(let ((org-export-show-temporary-export-buffer nil))
(with-current-buffer (org-html-export-as-html nil nil nil nil nil)
(let ((buf-str (cnblogs-replace-media-object-location
(buffer-substring-no-properties
(point-min) (point-max)))))
(kill-buffer)
buf-str))))

具体的使用方法可以参加原作者的博客:

http://www.cnblogs.com/Open_Source/archive/2012/09/14/2684897.html

还有csophys的这两篇文章也写得很好:

http://www.cnblogs.com/csophys/archive/2012/04/26/2471667.html#2542335

http://www.cnblogs.com/csophys/archive/2012/11/16/2773812.html

2 配置

设置cnblogs的url和username,然后,Alt+x运行cnblogs-setup-blog,依次输入博客的名称(一般和用户名相同,比如我的是yangwen0228),用户名和密码就可以了。

(use-package cnblogs
:ensure nil
:init
(require 'cnblogs)
(cnblogs-minor-mode t)
;; Run command: cnblogs-setup-blog to set up.
(bind-keys ("C-c c p" . cnblogs-post)
("C-c c n" . cnblogs-new-post)
("C-c c e" . cnblogs-edit-post)
("C-c c d" . cnblogs-delete-post))
;; Bugfix: error url-http-create-request: Multibyte text in HTTP request
;; @ http://www.cnblogs.com/yangwen0228/p/6238528.html
(defun url-http-create-request (&optional ref-url)
"Create an HTTP request for `url-http-target-url', referred to by REF-URL."
(let* ((extra-headers)
(request nil)
(no-cache (cdr-safe (assoc "Pragma" url-http-extra-headers)))
(using-proxy url-http-proxy)
(proxy-auth (if (or (cdr-safe (assoc "Proxy-Authorization"
url-http-extra-headers))
(not using-proxy))
nil
(let ((url-basic-auth-storage
'url-http-proxy-basic-auth-storage))
(url-get-authentication url-http-proxy nil 'any nil))))
(real-fname (url-filename url-http-target-url))
(host (url-http--encode-string (url-host url-http-target-url)))
(auth (if (cdr-safe (assoc "Authorization" url-http-extra-headers))
nil
(url-get-authentication (or
(and (boundp 'proxy-info)
proxy-info)
url-http-target-url) nil 'any nil))))
(if (equal "" real-fname)
(setq real-fname "/"))
(setq no-cache (and no-cache (string-match "no-cache" no-cache)))
(if auth
(setq auth (concat "Authorization: " auth "\r\n")))
(if proxy-auth
(setq proxy-auth (concat "Proxy-Authorization: " proxy-auth "\r\n"))) ;; Protection against stupid values in the referrer
(if (and ref-url (stringp ref-url) (or (string= ref-url "file:nil")
(string= ref-url "")))
(setq ref-url nil)) ;; We do not want to expose the referrer if the user is paranoid.
(if (or (memq url-privacy-level '(low high paranoid))
(and (listp url-privacy-level)
(memq 'lastloc url-privacy-level)))
(setq ref-url nil)) ;; url-http-extra-headers contains an assoc-list of
;; header/value pairs that we need to put into the request.
(setq extra-headers (mapconcat
(lambda (x)
(concat (car x) ": " (cdr x)))
url-http-extra-headers "\r\n"))
(if (not (equal extra-headers ""))
(setq extra-headers (concat extra-headers "\r\n"))) ;; This was done with a call to `format'. Concatenating parts has
;; the advantage of keeping the parts of each header together and
;; allows us to elide null lines directly, at the cost of making
;; the layout less clear.
(setq request
(concat
;; The request
(or url-http-method "GET") " "
(url-http--encode-string
(if using-proxy (url-recreate-url url-http-target-url) real-fname))
" HTTP/" url-http-version "\r\n"
;; Version of MIME we speak
"MIME-Version: 1.0\r\n"
;; (maybe) Try to keep the connection open
"Connection: " (if (or using-proxy
(not url-http-attempt-keepalives))
"close" "keep-alive") "\r\n"
;; HTTP extensions we support
(if url-extensions-header
(format
"Extension: %s\r\n" url-extensions-header))
;; Who we want to talk to
(if (/= (url-port url-http-target-url)
(url-scheme-get-property
(url-type url-http-target-url) 'default-port))
(format
"Host: %s:%d\r\n" (puny-encode-domain host)
(url-port url-http-target-url))
(format "Host: %s\r\n" (puny-encode-domain host)))
;; Who its from
(if url-personal-mail-address
(concat
"From: " url-personal-mail-address "\r\n"))
;; Encodings we understand
(if (or url-mime-encoding-string
;; MS-Windows loads zlib dynamically, so recheck
;; in case they made it available since
;; initialization in url-vars.el.
(and (eq 'system-type 'windows-nt)
(fboundp 'zlib-available-p)
(zlib-available-p)
(setq url-mime-encoding-string "gzip")))
(concat
"Accept-encoding: " url-mime-encoding-string "\r\n"))
(if url-mime-charset-string
(concat
"Accept-charset: "
(url-http--encode-string url-mime-charset-string)
"\r\n"))
;; Languages we understand
(if url-mime-language-string
(concat
"Accept-language: " url-mime-language-string "\r\n"))
;; Types we understand
"Accept: " (or url-mime-accept-string "*/*") "\r\n"
;; User agent
(url-http-user-agent-string)
;; Proxy Authorization
proxy-auth
;; Authorization
auth
;; Cookies
(when (url-use-cookies url-http-target-url)
(url-http--encode-string
(url-cookie-generate-header-lines
host real-fname
(equal "https" (url-type url-http-target-url)))))
;; If-modified-since
(if (and (not no-cache)
(member url-http-method '("GET" nil)))
(let ((tm (url-is-cached url-http-target-url)))
(if tm
(concat "If-modified-since: "
(url-get-normalized-date tm) "\r\n"))))
;; Whence we came
(if ref-url (concat
"Referer: " ref-url "\r\n"))
extra-headers
;; Length of data
(if url-http-data
(concat
"Content-length: " (number-to-string
(length url-http-data))
"\r\n"))
;; End request
"\r\n"
;; Any data
url-http-data))
;; Bug#23750
(setq request (url-http--encode-string request))
(unless (= (string-bytes request)
(length request))
(error "Multibyte text in HTTP request: %s" request))
(url-http-debug "Request is: \n%s" request)
request))
)

3 使用org写文章

用org写文章,org-mode可以去看org-mode的官网,或者是其他的教程介绍,一旦用上,就再也离不开了。

3.1 tags

其中有几个常用的tags:

  • TITLE
  • CATEGORIES
  • DESCRIPTION
  • KEYWORDS
  • DATE

因为这是每次写cnblogs都需要的,所以,我做了一个snippet:

#+TITLE: $
#+CATEGORIES: ${2:Emacs}
#+DESCRIPTION: ${3:}
#+KEYWORDS: $
#+DATE: `(format-time-string "%Y-%m-%d %H:%M")`

这样,每次写博客之前,只需要输入cnblogs,然后tab一下,就可以把这个插入到文章的开头了,然后根据实际需要再填入相关的信息。

3.2 code blocks

默认的code block的配色只取front-face的颜色,背景是浅色或白色的,显示的效果不太好,使用下面的配置,就是可以和Emacs中显示的效果一模一样了。

  ;; @ http://emacs.stackexchange.com/questions/3374/set-the-background-of-org-exported-code-blocks-according-to-theme
(defun my/org-inline-css-hook (exporter)
"Insert custom inline css to automatically set the
background of code to whatever theme I'm using's background"
(when (eq exporter 'html)
(let* ((my-pre-bg (face-background 'default))
(my-pre-fg (face-foreground 'default)))
(setq
org-html-head-extra
(concat
org-html-head-extra
(format "<style type=\"text/css\">\n pre.src {background-color: %s; color: %s;}</style>\n"
my-pre-bg my-pre-fg))))))
(add-hook 'org-export-before-processing-hook 'my/org-inline-css-hook)

3.3 quote

我们写博客时,经常会引用别人的经典的语录。这个时候怎么办呢?
假设我们这样写:

#+BEGIN_SRC text
/*子曰:学而时习之,不亦说乎!*/

#+ENDSRC
结果是这样的:

/*子曰:学而时习之,不亦说乎!*/

我们看到,这个引用使用的是与code block一样的设置。那么,引用改怎么写呢?

其实,org-mode中专门有一个引用的tag:

#+BEGIN_QUOTE
/*子曰:学而时习之,不亦说乎!*/
#+END_QUOTE

效果是这样的:

子曰:学而时习之,不亦说乎!

这个才是正确的引用姿势。

4 发布

只需要按 C-c c p 进行发布就可以了,如果是第一次发布,会提示"Do you want to post this blog to cnblogs?" ,回答"y"。如果是更新之前发表过的文章,"Already published! Do you want to update this blog to cnblogs?",回答"y"就可以更新文章。

5 资源

所有的配置,可以查看我的github:

https://github.com/yangwen0228/unimacs

其中配置文件放置在 personal/configures中。

Date: 2016-12-30 23:47

Created: 2017-01-08 周日 19:13

Validate

使用org-mode写cnblogs博客的更多相关文章

  1. 配置Windows Live Writer,写cnblogs博客

    引言        以前写博客一般都是联网在cnblogs上面写,不好的地方就是不联网就写不了,当然我们也可以先记录在word文件,等联网在从word里面拷贝出来发布到cnblogs上面,但是样式这些 ...

  2. 配置WindowsLiveWriter,写cnblogs博客

    转载:http://www.haogongju.net/art/2307587 引言 以前写博客一般都是联网在cnblogs上面写,不好的地方就是不联网就写不了,当然我们也可以先记录在word文件,等 ...

  3. 【原创】配置Windows Live Writer,写cnblogs博客

    20180115更新补充: 现在live writer已经改名open live writer了,需要去下载的到地址:http://openlivewriter.org/ 引言 以前写博客一般都是联网 ...

  4. org-mode 写 cnblogs 博客

    1. 为什么用org-mode写博客 我最开始用Emacs, 是因为org-mode.这是一个专注于写,而让我忽略展示结果的一种写作方式.为 什么这么说?因为所有内容的格式都是可定制的.按照自己喜欢的 ...

  5. 用emacs的org2blog组件写cnblogs博客 -- 环境配置及使用

    Table of Contents 配置 使用 创建一篇博文并发布 更新一篇博文 删除一篇博文 待办 本文给出了一个安装.配置org2blog的方法,实现在emacs中书写blog文章.并发布到cnb ...

  6. emacs写cnblog博客

    emacs的版本 org-mode版本   参考链接: 用Emacs管理博客园博客   用emacs org-mode写cnblogs博客 用emacs org-mode写博客 & 发布到博客 ...

  7. 把cnblogs变成简书 - cnblogs博客自定义皮肤css样式

    吐槽 博客园cnblogs作为老牌的IT技术博客类网站,为广大的开发者提供了非常不错的学习交流平台. 虽然博客内容才是重点,但是如果有赏心悦目的页面不更好吗! cnblogs可以更换博客模板,并且提供 ...

  8. cnblogs博客迁移到hexo

    cnblogs博客备份 备份地址:https://i.cnblogs.com/BlogBackup.aspx?type=1 备份文件为xml格式,打开备份文件,如下所示: <?xml versi ...

  9. 利用Word发布文章到cnblogs博客

    利用Word发布文章到cnblogs博客 用博客园cnblogs:http://www.cnblogs.com/博客名称/services/metablogapi.aspx,word老是提醒" ...

随机推荐

  1. Compile Linux Kernel on Ubuntu 12.04 LTS (Detailed)

    This tutorial will outline the process to compile your own kernel for Ubuntu. It will demonstrate bo ...

  2. postmortem报告【第二组】

    一.alpha阶段的经验教训 1.针对 进度规划不到位,任务完成速度慢 的问题,引入teambition规范任务管理,每周组会验收上一周任务,发布下一周任务,对各组员是否完成任务以及完成质量进行评价. ...

  3. 【记录】linux 文件权限的查看和修改

    从上图可以看出每个文件权限与类型都是不一样的,如果对各个字母表达的含义不了解,那么看的真是一脸懵逼. 别急,具体解释如下: d rwx  rwx  rwx -  rwx  r--  rw- 第一列含义 ...

  4. 笔记78 HttpStatus

    HttpStatus = { //Informational 1xx 信息 '100' : 'Continue', //继续 '101' : 'Switching Protocols', //交换协议 ...

  5. 深入理解TCP协议及其源代码

    本次实验,我们来探究connect及bind.listen.accept背后的三次握手. 实验原理 首先简要回顾一下TCP三次握手的过程: 第一次握手:client向server发送SYN=1的数据报 ...

  6. [转]C# CancellationTokenSource 终止线程

    我们在多线程中通常使用一个bool IsExit类似的代码来控制是否线程的运行与终止,其实使用CancellationTokenSource来进行控制更为好用,下面我们将介绍CancellationT ...

  7. 【leetcode】519. Random Flip Matrix

    题目如下: You are given the number of rows n_rows and number of columns n_cols of a 2D binary matrix whe ...

  8. Pydiction补全插件

    Pydiction不需要安装,所有没有任何依赖包问题,Pydiction主要包含三个文件. python_pydiction.vim -- Vim plugin that autocompletes ...

  9. 贾扬清谈大数据&AI发展的新挑战和新机遇

    摘要:2019云栖大会大数据&AI专场,阿里巴巴高级研究员贾扬清为我们带来<大数据AI发展的新机遇和新挑战>的分享.本文主要从人工智能的概念开始讲起,谈及了深度学习的发展和模型训练 ...

  10. 升级ceph

    参考文档 https://blog.51cto.com/jerrymin/2140258 https://www.virtualtothecore.com/en/upgrade-ceph-cluste ...