Emacs-Lisp

2009年3月31日 (火)

<Emacs-Lisp>org-modeからmapae記事の自動作成コマンド

 ずいぶん久しぶりにEmacs-Lispのプログラミングに取り組んでみましたが、忘れていることも多くて大変でした。一応、目標としていた機能は実現できたみたいですが、ソースコードの可読性もよくなく、手直しの必要もありそうです。

 同じものをもう一度作るとなると大変なので、保管をかねてソースコードをアップしておきます。環境依存で読み書きするファイルも決めうちしてありますので、そのままでは使い物にもならないと思いますが、よろしければ、参考程度にしてください。作るは時間も掛かりますが、一度作ってしまえば、作業が大幅に自動化できるので、とても便利です。

 本当にコマンド一つで動くようにしたのですが、前置引数を指定することで、事前にTexファイルのコンパイルをするようにしました。




;;2009-03-31
(defun h-cocolog-0rg2send (&optional arg)
  "cocolog blog"
  (interactive "P")
  (unless (null arg)
(save-excursion
  (let* ((workbuf
  (buffer-name
   (or
(get-buffer "kokuso-tex.org")
(find-file-noselect
"~/saisinn/kokuso-tex.org"))))
(create-file
  (progn
(string-match "\\(.+\\)\\..+" workbuf)
(replace-match "\\1.tex" nil nil workbuf))))
(switch-to-buffer workbuf)
(save-excursion
  (call-interactively 'org-export-as-latex-to-buffer))
(switch-to-buffer "*Org LaTeX Export*")
(save-excursion
  (beginning-of-buffer)
  (h-gtlt2escape)
  (h-tex-preamble))
(write-file create-file)
(kill-buffer workbuf))))



  (let* ((mblst nil) (mbf nil)
sp ep tmpbuf fn startp  mapaelst

   (buflist-search (lambda () (setq mblst (mapcar '(lambda (x) (buffer-name x)) (buffer-list)))))
   (mapae-search
(lambda ()
   (while (not (null mblst))
(if (string-match "\\+mapae:.*" (car mblst))
(add-to-list  'mapaelst (car mblst))
   ())
(setq mblst (cdr mblst))))))
   
(funcall buflist-search)
(funcall mapae-search)
(when (null mapaelst)
(progn (mapae-new-post)
   (funcall buflist-search)
   (funcall mapae-search)
   (message "新規にmapae記事投稿のバッファを作成しました。\n%s"
mapaelst)))


(setq mbuf (car mapaelst))
(message "select mapae バッファ OK ")

(switch-to-buffer mbuf)
(let (sp ep)
(beginning-of-buffer)
(search-forward "DESCRIPTION:" nil t)
(next-line)
(beginning-of-line)
(setq sp (point))

(search-forward "EXTENDED:" nil t)
(previous-line 2)
(end-of-line)
(setq ep (point))

(if (>= sp ep)
(goto-char sp)
  (progn (kill-region sp ep)
(setq startp (point)))))

(message "ここまで来ました。")

(save-excursion
  (if (setq fn (get-buffer "kokuso-tex.org"))
(progn
  (message "Change buffer %s" fn)
  (switch-to-buffer fn))
(progn
  (message "Create file buffer")
  (setq fn (switch-to-buffer
(find-file-noselect
"~/saisinn/kokuso-tex.org")))))
 
  (call-interactively 'org-export-as-html)

  (setq tmpbuf (get-buffer-create "***tmp***"))
  (setq sp (beginning-of-buffer))
  (setq ep (end-of-buffer))
  (call-process-region
   sp ep "sed" nil tmpbuf nil
   "-f" "/home/u8w/saisinn/cocolog-css")


  (switch-to-buffer tmpbuf)
  (let ((beg (beginning-of-buffer))
(end (end-of-buffer)))
(append-to-buffer  mbuf beg end)
(message "change %s" mbuf))


  (switch-to-buffer mbuf))
(kill-buffer tmpbuf)
(goto-char startp)))




追記:
 今になって気がついたのですが、Texのコンパイルは全く無関係の作業でした。関係あるのはHTMLエクスポートでした。
 4月1日になったところです。これで18年目を迎えたことになります。これを節目に気持ちも行動も切り替えていきたいと考えています。

| | コメント (0) | トラックバック (0)