Skip to content

Latest commit

 

History

History
executable file
·
1643 lines (1354 loc) · 55.2 KB

50_org-mode.org

File metadata and controls

executable file
·
1643 lines (1354 loc) · 55.2 KB

org-mode

最強のタスク管理ツール.

Manual

こまったらここを見れば日本語訳がある

一般的な設定

  • C-c C-h helm-descbind
(use-package org-install
  :mode ("\\.org$"  . org-mode)
  :bind  (("C-c a" . org-agenda)
	  ("C-c c" . org-capture)
;;	  ("C-c b" . org-iswitchb) -> helm-descbinds へあげる.
	  ("C-c l" . org-store-link)
	  ("C-c C-x C-@" . org-clock-out) ;; tmux で C-o は利用しているため
	  ("C-c C" . cfw:open-org-calendar)
	  ("C-c C-x C-z" . org-resolve-clocks)
	  ("C-c C-x C-g" . org-clock-goto))
  :init
  ;; ここが init である理由は, init.el ですでに org を load しているから.
  
  ;; C-o の置き換え tmux で c-o は使っているので
  (define-key org-mode-map "\C-co" 'org-open-at-point)

  ;; RET でリンクを追う.
  (setq org-return-follows-link t))

Formatting

M-x org-emphasize で選択できる.

C-c C-x C-f (Emphasis and monospace - The Org Manual)

  • test Bold
  • test Itaric
  • test Underline
  • text Code
  • text Delete
  • test Small

色やフォントなどの CSS を指定する場合は, HTML を直接かく.

ここに macro がたくさん定義されている. 後で調査.

org-mode の src を目立たせる設定

org-mode の src を目立たせる設定.

(setq org-src-fontify-natively t)
(setq org-fontify-whole-heading-line t)

スタートアップ設定

;; アスタリスクはかくす
(setq org-hide-leading-stars t)

;; 初期状態は見出しを表示
(setq org-startup-folded 'content)

;; (setq org-indent-mode t)

;; 折り返さない
;; (setq org-startup-truncated nil)

org-open-link を dired で

(org-add-link-type "file+emacs+dired" 'org-open-file-with-emacs-dired)
(add-hook 'org-store-link-functions 'org-dired-store-link)

(defun org-open-file-with-emacs-dired (path)
  "Open in dired."
  (let ((d (file-name-directory path))
    (f (file-name-nondirectory path)))
    (dired d)
    (goto-char (point-min))
    (search-forward f nil t)))

(defun org-dired-store-link ()
  "Store link to files/directories from dired."
  (use-package dired-x)
  (when (eq major-mode 'dired-mode)
    (let* ((f (dired-filename-at-point))
           (link (concat "file+emacs+dired" ":" f))
           (desc (concat f " (dired)")))
      (org-add-link-props :link link :description desc)
      link)))

org-mode での移動 with hydra

(defhydra hydra-outline (org-mode-map "C-c")
  "outline"
  ("C-n" outline-next-visible-heading "next head")
  ("C-p" outline-previous-visible-heading "previous head"))

priority 変更

タスクシュート用に修正.

shift-up / shift-down

  • A: 04:00 - 07:00
  • B: 07:00 - 10:00
  • C: 10:00 - 13:00
  • D: 13:00 - 16:00
  • E: 16:00 - 19:00
  • F: 19:00 - 22:00
  • G: 22:00 - 25:00
(setq org-highest-priority ?A)
(setq org-lowest-priority ?G)
(setq org-default-priority ?G)

GTD

参考:

org-agenda

;; 時間表示が 1 桁の時, 0 をつける
(setq org-agenda-time-leading-zero t)

;; 祝日を利用しない
(setq calendar-holidays nil)

;; DONE の時刻を記録
(setq org-log-done 'time)

;; スケジュールやデッドラインアイテムは DONE になっていれば表示する
(setq org-agenda-skip-deadline-if-done nil)
(setq org-agenda-skip-scheduled-if-done nil)

;; セレクションメニューから状態の変更を行えるようにする
(setq org-use-fast-todo-selection t)

;; default で logbook を表示
(setq org-agenda-include-inactive-timestamps t)

;; default で 時間を表示
(setq org-agenda-start-with-log-mode t)

;;; 一ヶ月分を表示
(setq org-agenda-span 30)

;;アジェンダの clockreport 用パラメータ
(setq org-agenda-clockreport-parameter-plist
      '(:maxlevel 5 :block t :tstart t :tend t :emphasize t :link t :narrow 80 :indent t :formula nil :timestamp t :level 5 :tcolumns nil :formatter nil))

アジェンダ表示の対象ファイル

;;(setq org-agenda-files '("~/gtd/main.org"
;;                         "~/gtd/inbox.org"
;;                         "~/gtd/journal/journal.org"
;;                         "~/gtd/journal/twitter.org"                         
;;                         "~/gtd/habits.org"))
(setq org-agenda-files '("~/gtd/main.org"
                         "~/gtd/inbox.org"))

;; (setq org-agenda-file-regexp "\\`[^.].*\\.org'\\|[0-9]+.org$")

;; ショートカットを作成
;; もしすでにひらいているときは, 切り替えめる
(defun org-gtd-open-main ()
  (interactive)
  (find-file "~/gtd/main.org"))
(bind-key "C-<f6>" 'org-gtd-open-main)

agenda speedup

;; Inhibit the dimming of blocked tasks:
(setq org-agenda-dim-blocked-tasks nil)

;; Inhibit agenda files startup options:
(setq org-agenda-inhibit-startup nil)

;; Disable tag inheritance in agenda:
(setq org-agenda-use-tag-inheritance nil)

agenda default

(defun org-agenda-default ()
  (interactive)
  (org-agenda nil "a")
  (delete-other-windows))
(global-set-key (kbd "C-<f5>") 'org-agenda-default)

(setq org-agenda-restore-windows-after-quit t)
(setq org-agenda-sticky nil)

agenda full screen

agenda の full screen.

;; (defadvice org-agenda-list (around org-agenda-fullscreen activate)
;;   "Start agenda in fullscreen.
;;  
;; After agenda loads, delete other windows.
;; `org-agenda-restore-windows-after-quit' should non-nil to restore
;; the previous window configuration. If `org-agenda-sticky' is
;; non-nil, configurations with more than one window do not seem to
;; be restored properly."
;;   ad-do-it
;;   (delete-other-windows))

(defadvice org-agenda (around org-agenda-fullscreen activate)
  (window-configuration-to-register :org-agenda-fullscreen)
  ad-do-it
  (delete-other-windows))

(defadvice org-agenda-quit (around org-agenda-quit-fullscreen activate)
  ad-do-it
  (jump-to-register :org-agenda-fullscreen))

column & properties

C-c C-c するとでる.

Special Properites (org-mode の特別なプロパティ)

Column の書式

独自プロパティ操作のためには, API が用意されている.

column の org-table への書き出し http://orgmode.org/manual/Capturing-column-view.html

; global Effort estimate values
(setq org-global-properties (quote ((
      "Effort_ALL" . "00:05 00:10 00:15 00:30 01:00 01:30 02:00 02:30 03:00"))))

;; カラムビューで表示する項目
;; Set default column view headings: Task Effort Clock_Summary
;; 保存時にスペースを入れられてしまう...
;; カスタムファイルに設定を書くことにする --> カスタムファイルがクリアされた!!
(setq org-columns-default-format "%50ITEM(Task) %10Effort(Effort){:} %10CLOCKSUM(Clock)")

;; 見つもり合計
(setq org-agenda-columns-add-appointments-to-effort-sum t)

カスタムビュー

定義方法

このアジェンダの書き方いいなぁ

(setq org-agenda-custom-commands 
      '(
      ;; http://hpcgi1.nifty.com/spen/index.cgi?OrgMode%2FOrg-mode%A4%C7GTD%BC%C2%C1%A9%A1%CA%CB%DD%CC%F5%A1%CB#i16
       ("D" "Daily Action Summary"
        ((agenda "" 
                 ((org-agenda-ndays 1)
         (org-agenda-entry-types '(:timestamp :sexp))
	))
	(tags-todo "next"))
	)
       ("d" "Daily Action List Detail"
        ((agenda "" ((org-agenda-ndays 1)
                     (org-agenda-sorting-strategy
                      (quote ((agenda time-up priority-down tag-up))))
                     ;; (org-deadline-warning-days 0)
                     ;; (org-agenda-clockreport-mode t) ;; 時間表の表示はコメントアウト
                     ))))
       ("y" "Yesterday Action List"
        ((agenda "" ((org-agenda-span 1)
                     (org-agenda-start-day "-1d")
                     (org-agenda-entry-types '(:timestamp :sexp))))))

       ("w" "Completed and/or deferred tasks from previous week"
        ((agenda "" ((org-agenda-span 8)
                     (org-agenda-start-day "-7d")
                     (org-agenda-entry-types '(:timestamp :sexp))))))
       ("n" "Next Action List"
        tags-todo "next"
        ((org-agenda-prefix-format " %6e ")))
       ("a" "Agenda and all TODO's"
        ((tags "project-CLOCK=>\"<today>\"|repeatable") (agenda "")))
       ("c" ""
        tags-todo "SCHEDULED=\"<+0d>\"" 
        ((org-agenda-overriding-header "TaskChute TODO")
         (org-agenda-overriding-columns-format "%50ITEM(Task) %10Effort(Effort){:}")
         (org-agenda-view-columns-initially t)))
;       ("R" . "Review" )
;       ("Rd" "Day in review"
;        agenda ""
;        ;; agenda settings
;        ((org-agenda-overriding-header "TaskChute DONE")
;        (org-agenda-start-with-log-mode nil)
;        (org-agenda-start-with-clockreport-mode t)         
;         (org-agenda-view-columns-initially t)
;         (org-agenda-span 'day)))
       ))

タスクの状態

うまく動作しないので, 利用しないことにする.

定義

基本の状態は以下.

  • TODO: Default
  • DONE: Done
  • NEXT: Next Action
  • WAIT: Wait for
  • SOME: Some Day
(setq org-todo-keywords '((sequence "TODO" "DONE")))
;; (setq org-todo-keywords (quote (
;;  (sequence "TODO (t)" "NEXT (n)" "DONE (d)")
;;  (sequence "WAIT (w)" "SOME (s)")
;;  )))

;; (setq org-todo-keyword-faces (quote (
;;  ("TODO" :foreground "red" :weight bold)
;;  ("NEXT" :foreground "orange" :weight bold)
;;  ("DONE" :foreground "forest green" :weight bold)
;;  ("REMINER" :foreground "forest green" :weight bold)
;;  ("WAITING" :foreground "brown" :weight bold)
;;  ("SOMEDAY" :foreground "yellow" :weight bold)
;;  )))

Next Action

(defvar my-next-tag "next")
(defvar my-unplan-tag "unplan")

(setq org-tag-faces '(("next" :foreground "orange")))

;; Next タグをトグルする
(defun my-toggle-next-tag ()
  (interactive)
  (when (eq major-mode 'org-mode)
    (save-excursipon
      (save-restriction
        (unless (org-at-heading-p)
          (outline-previous-heading))
        (if (string-match (concat ":" my-next-tag ":") (org-get-tags-string))
            (org-toggle-tag my-next-tag 'off)
          (org-toggle-tag my-next-tag 'on))
        (org-reveal)))))

;; うまくうごかないので, 封印
;; (defun my-toggle-tag (my-tag)
;;   (interactive)
;;   (when (eq major-mode 'org-mode)
;;     (save-excursion
;;       (save-restriction
;;         (unless (org-at-heading-p)
;;           (outline-previous-heading))
;;         (if (string-match (concat ":" my-tag ":") (org-get-tags-string))
;;             (org-toggle-tag my-tag 'off)
;;           (org-toggle-tag my-tag 'on))
;;         (org-reveal)))))

;; (defun my-toggle-next-tag ()
;;   my-toggle-tag ("next"))

;; (defun my-toggle-unplan-tag ()
;;   my-toggle-tag (my-unplan-tag))

(global-set-key (kbd "C-x <f2>") 'my-toggle-next-tag)
;;(global-set-key (kbd "C-x <f3>") 'my-toggle-unplan-tag)

next タグの除去

(setq org-todo-state-tags-triggers
      (quote (("DONE" ("next")))))

をすべてアーカイブ

(defun my-org-archive-done-tasks ()
  (interactive)
  (org-map-entries 'org-archive-subtree "/DONE" 'file))

org-clock

org-clock. org-mode での時間管理.

;; Resume clocking task on clock-in if the clock is open
(setq org-clock-in-resume t)

;; Sometimes I change tasks I'm clocking quickly
;; - this removes clocked tasks with 0:00 duration
(setq org-clock-out-remove-zero-time-clocks t)

;; clock out when moving task to a done state
;; タスクが完了した時に時間測定も停止する
(setq org-clock-out-when-done t)

;; 空き時間の解決 
;; 半端時間を絶えずチェックしているファイルのリストは, M-x org-resolve-clocks
;; http://orgmode.org/manual/Resolving-idle-time.html#Resolving-idle-time
(setq org-clock-idle-time 20)

;; Do not prompt to resume an active clock
(setq org-clock-persist-query-resume nil)

;; Enable auto clock resolution for finding open clocks
(setq org-clock-auto-clock-resolution (quote when-no-clock-is-running))

;; Include current clocking task in clock reports
(setq org-clock-report-include-clocking-task t)

;; logbook にまとめる
(setq org-log-into-drawer t)

; 時間になったら音をならす
;;(setq org-clock-sound "/usr/share/sounds/LinuxMint/stereo/desktop-login.ogg")
;;(setq org-clock-sound t)

必ず時間見積り

一時無効

;; (defadvice org-clock-in (before is-set-effort-before-clock-in)
;;   (let ((effort (org-entry-get (point) "Effort")))
;;     (unless effort
;;       (error "[Error: Is not set a effort!]"))))
;; (ad-activate-regexp "is-set-effort-before-clock-in")

別の実装

(add-hook 'org-clock-in-prepare-hook
          'my/org-mode-ask-effort)

(defun my/org-mode-ask-effort ()
  "Ask for an effort estimate when clocking in."
  (unless (org-entry-get (point) "Effort")
    (let ((effort
           (completing-read
            "Effort: "
            (org-entry-get-multivalued-property (point) "Effort"))))
      (unless (equal effort "")
        (org-set-property "Effort" effort)))))

my/org-clockin-gtd

指定したタスクを clockin するためのショートカット はじめてつくった自作 defun!!

(use-package my-org-clockin-gtd
  :bind (("C-<f7>" . mygtd:gtd)
	 ("C-<f8>" . mygtd:rest)
	 ("C-x <f8>" . mygtd:reset-rest-timer)))
;;  :init
;;  (with-eval-after-load 'org-pomodoro
;;    (add-hook 'org-pomodoro-finished-hook 'mygtd:rest)
;;    (add-hook 'org-pomodoro-break-finished-hook 'mygtd:reset-rest-timer)))

org-clock-by-tags

タグごとに clocktable を集計.

宣言方法
 #+BEGIN: clocktable-by-tag :maxlevel 2 :tags ("p1" "p2")
                           :tstart "2013-06-27" :tend "2013-06-28"
(use-package clocktable-by-tag)

  対策: workaround

It’s workaround :(

(eval-after-load "org-clock"
  '(defun org-clocktable-indent-string (level)
  (if (= level 1) ""
    (concat "\\" (let ((str " "))
      (dotimes (k (1- level) str)
        (setq str (concat "_" str))))))))

モードラインにも表示

モードラインに時間を表示するためには、以下の設定をテーマに書く.

(:eval org-mode-line-string)

手動で確認

モードラインに表示できないので.

(defun org-clock-show()
  (interactive)
  (princ (org-clock-get-clock-string)))
(global-set-key (kbd "C-x <f9>") 'org-clock-show)

ファイルに時間を書き出す

xmobar に表示できる… が xmobar の表示方法がわからん..

(display-time)
(defun esf/org-clocking-info-to-file ()
  (with-temp-file "~/tmp/clocking"
    ;; (message (org-clock-get-clock-string))
    (if (org-clock-is-active)
        (insert (format "org: %d (%d/%d) min"

                        (- (org-clock-get-clocked-time) org-clock-total-time)
                        org-clock-total-time
                        (org-clock-get-clocked-time))
                        
                )
      ) ;;(org-clock-get-clock-string)
    )
  )
(add-hook 'display-time-hook 'esf/org-clocking-info-to-file)

clock 履歴 を保存する

;; なんか, org-mode を開くときに遅いので封印する.
;;
;; Save the running clock and all clock history
;; when exiting Emacs, load it on startup
;; Emacs が再起動したときにタスクの時間計測を再開する
;; Emacs が終了する時に測定中の計測と全ての測定履歴を保存する
;; http://orgmode.org/manual/Clocking-work-time.html
;; (setq org-clock-persist 'history)

;; emacs resume 時に時間計測再開
;; (org-clock-persistence-insinuate)

;; Org clock-in
(org-clock-persistence-insinuate)
(setq org-clock-persist t)
;;; * Orgmode Modules
(add-to-list 'org-modules 'habits)
;; Number of clock tasks to remember in history.
(setq org-clock-history-length 35)  ; 1 to 9 + A to Z

clock-in で表示を出す

(add-hook 'org-clock-in-hook
          (lambda ()
            (gntp-notify 'alert "Clock In"
                         "Happy Hacking! (^o^)/"
                         "localhost")))

(add-hook 'org-clock-out-hook
          (lambda ()
            (gntp-notify 'alert "Clock Out"
                         "Good Job!"
                         "localhost")))

clock-in してないとアラート表示

(defun org-clocking-alart ()
  (unless (org-clocking-p)
    (gntp-notify 'alert "What are you doing!!"
                 "You should start clocking ('・_・`)"
                 "localhost")))
;; (run-at-time t 5 'org-clocking-alart)

xmobar に clock 状態を表示

このハックいいね.

org-capture

アイデアをキャプチャーする.

capture てんぷれの書き方

注意: adjust-text.el との兼ね合いで, file+datetree が動かない. 様子見

(use-package org-capture
  :config
  (setq org-capture-templates
      '(
	("i" "Inbox" entry (file+datetree "~/gtd/inbox.org") "** TODO %?\n")
	("u" "Unplan" entry (file+datetree "~/gtd/unplan.org") "** TODO %? :unplan:\n")
	;; ("w" "Diary" entry (file+datetree "~/gtd/main.org") "** %T %?\n")
	("w" "Diary" entry (file+headline "~/gtd/main.org" "Diary") "**** %T %?\n")
	("k" "Clock-in" entry (clock) "* %T %?\n")
	;; calfw との連携 http://sheephead.homelinux.org/2014/03/15/7035/
        ;; ("m" "Memo" plain
	;;  (file (concat org-directory (format-time-string "/howm/%Y%m%d-%H%M%S.org")))
	;;  "* MEMO <%<%Y-%m-%d>> %?\n	 %i\n  %a\n\n"
	;;  :prepend t
	;;  :unnarrowed t
	;;  :kill-buffer t)
        ;; ("m" "Memo" entry (file+headline "~/gtd/main.org" "Memo") "** %U%?\n%i\n")
	("e" "Email Todo" entry (file+headline "~/gtd/main.org" "Mails")
        "* TODO %^{Brief Description}\n%a\n%?Added: %U\n" :prepend t)
	("c" "calfw2org" entry (file "~/gtd/schedule.org") "*  %?\n %(cfw:org-capture-day)")
        )))

org2blog

Emacs から WordPress に投稿する Lisp

(use-package org2blog-autoloads
  :config
  ;; パスワード設定
  (when linux-p
    (setq sternstunden (netrc-machine (netrc-parse "~/.netrc") "sternstunden" t))
    (setq everclassic (netrc-machine (netrc-parse "~/.netrc") "everclassic" t))
    (setq futurismo (netrc-machine (netrc-parse "~/.netrc") "futurismo" t))
    )
  (when windows-p
    (setq futurismo (netrc-machine (netrc-parse "c:/cygwin64/home/tsu-nera/.netrc") "futurismo" t))
    )

  ;; ブログ設定
  (setq org2blog/wp-blog-alist
        '(
        ("Futurismo"
         :url "http://futurismo.biz/xmlrpc.php"
	 :username "admin"
	 ;; :username (netrc-get futurismo "login")
	 ;; :password (netrc-get futurismo "password")
	 )
	("English Hacks"
         :url "http://hmi-me.ciao.jp/toeic/xmlrpc.php"         
	 :username "tsu-nera"	 
         )
        ("Futurismo Dev"
         :url "http://hmi-me.ciao.jp/futurismo_dev/xmlrpc.php"
	 :username "admin"
	 ;; :username (netrc-get futurismo "login")
	 ;; :password (netrc-get futurismo "password")
	 )
	("SternStunden"
	 :url "http://hmi-me.ciao.jp/sternstunden/xmlrpc.php"
	 :username "admin"         
	 ;; :username (netrc-get sternstunden "login")
	 ;; :password (netrc-get sternstunden "password")
	)
	("EverClassic"
	 :url "http://everclassic.biz/xmlrpc.php"
	 :username "admin"	 
	 ;; :username (netrc-get everclassic "login")
	 ;; :password (netrc-get everclassic "password")
         )
	("Dandieat"
	 :url "http://dandieat.biz/xmlrpc.php"
	 :username "admin"	 
	 ;; :username (netrc-get everclassic "login")
	 ;; :password (netrc-get everclassic "password")
         )
        )))

WordPress で シンタックスハイライト

SyntaxHighlighter Evolved Plugin を利用すればできるようだ.

(setq org2blog/wp-use-sourcecode-shortcode t)
(setq org2blog/wp-sourcecode-default-params "light=false")
;;(setq org2blog/wp-use-sourcecode-shortcode t)
;;(setq org2blog/wp-sourcecode-default-params nil) ;; removed light="true"

;; target language needs to be in here
(setq org2blog/wp-sourcecode-langs
      '("actionscript3" "bash" "coldfusion" "cpp" "csharp" "css" "delphi"
        "erlang" "fsharp" "diff" "groovy" "javascript" "java" "javafx" "matlab"
        "objc" "perl" "php" "text" "powershell" "python" "ruby" "scala" "sql"
        "vb" "xml"
        "sh" "elisp" "lisp" "lua"
	"emacs-lisp" "c"))
 
;; this will use emacs syntax higlighting in your #+BEGIN_SRC
;; <language> <your-code> #+END_SRC code blocks.
;; 別のところで宣言
;; (setq org-src-fontify-natively t)

更新すると, 設定が消えた! syntaxhighlighter.php に追記する.

       // add myself
	    'elisp'         => 'clojure',
	    'emacs-lisp'    => 'clojure',
       'shell'         => 'sh',
       'sh'            => 'bash'
       'language'      => 'text',            

images

画像ファイルは記事投稿時にサーバの upload フォルダに転送されるよう.

# ./../img/2014-08-17-124249_785x456_scrot.png
# http://futurismo.biz/wp-content/uploads/wpid-2014-08-17-124249_785x456_scrot.png

scrot で撮影した画像を,以下のように書くことで記事に挿入することができる.

[[file:/ ファイルパス]]

ただし, リサイズはされない.外部コマンドと連携させる必要がある. ImageMagic というツールがよい.

このサイトを参考に, 幅 670px, 高さ 447px に.

縦横比を計算してくれるつーる.

自動サムネイル挿入

最大サイズの画像の中から自動でアイキャッチ画像を設定してくれる.

どうもサイズが 300 にリサイズされてしまう.

;; (setq org2blog/wp-image-thumbnails t)

org-export html で表が崩れる

left 属性が設定されてしまうことが原因.

<th class="left"> xx </th>
<td class="left"> xx </td>

以下のように設定する.

(setq org-html-table-data-tags (quote ("<td>" . "</td>")))
(setq org-html-table-header-tags (quote ("<th scope=\"%s\">" . "</th>")))

ログインできない

Invalid end tag methodResponse..

おそらく 、ブログ側に問題あり。 最近改造した場合は、以前の状態に戻してみる.

bold とかがきかない

(setq org-fontify-emphasized-text t)

Emacs25 で投稿できない

(advice-add 'url-http-create-request :override
            'url-http-create-request-debug)
(defun url-http-create-request-debug (&optional ref-url)
  "Create an HTTP request for <code>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 </code>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" host (url-port url-http-target-url))
               (format "Host: %s\r\n" 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
    ;;(unless (= (string-bytes request)
    ;;           (length request))
    ;;  (message "   text byte %d vs %d length" (string-bytes request) (length request)))
      ;;(message "===============================")
      ;;(error "Multibyte text in HTTP request: %s" request))
    (url-http-debug "Request is: \n%s" request)
    request))

org-export

org-mode から別形式へ. つまり, なんでも org-mode でよいということ.

-Exporting - The Org Manual

C-c C-e

デフォルト以外を export 先ツールとして利用するためには, ox-xxx を require します.

ascii (ASCII format)ox-ascii.el
beamer (LaTeX Beamer format)ox-beamer.el
html (HTML format)ox-html.el
icalendar (iCalendar format)ox-icalendar.el
latex (LaTeX format)ox-latex.el
man (Man page format)ox-man.el
md (Markdown format)ox-md.el
odt (OpenDocument Text format)ox-odt.el
org (Org format)ox-org.el
texinfo (Texinfo format)ox-texinfo.el

ox-wk

dokuwiki 変換.

(use-package ox-wk :defer t)

ox-mk

markdown 変換

(use-package ox-md :defer t)

org-textile

(use-package ox-textile :defer t)

MathJax の設定

Default の設定だと参照する MathJax の version が古いらしく、以下の設定で最新が使える。

(setq org2blog-use-wp-latex nil)
(setq org2blog-use-sourcecode-shortcode nil)

(setf org-html-mathjax-options
      '((path "https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML")
        (scale "100") 
        (align "center") 
        (indent "2em")
        (mathml nil))
      )
(setf org-html-mathjax-template
      "<script type=\"text/javascript\" src=\"%PATH\"></script>")

未使用中

ox-rst

org-mode から reStructredText への変換

;; (use-package ox-rst)

ox-pandoc

org-mode から reStructredText への変換. ox-rst を使うからいらないかも.

;; (use-package ox-pandoc)
;; (setq org-pandoc-output-format 'rst)

ox-taskjuggler

TaskJuggler 変換.

;; (use-package ox-taskjuggler)

ox-freemind

freemind もできるんだー.

ただし, ArchLinux では freemind がとてもつかいにくい…

;; (use-package ox-freemind)

org-babel

org-babel で 実行した言語を書く. デフォルトでは emacs-lisp だけ.

(org-babel-do-load-languages
 'org-babel-load-languages
 '((R . t)
   (C . t)
   (java . t)
   (shell . t)
   (ledger . t)      
   (python . t)
   (ruby . t)   
   )
 )

評価するときにいちいち質問されないようにする.

(setq org-confirm-babel-evaluate nil)

org-mode でファイルをひらくときに,inline-image があれば読み込み.

(add-hook 'org-babel-after-execute-hook 'org-display-inline-images)   
(add-hook 'org-mode-hook 'org-display-inline-images)   

出力方法

:results

raw

結果がコードにかかれる. ただし, tangle したときは無視される.


code

begin_src end_src で囲まれて出力される.

ブログを書くときに便利.

:exports

export するときの挙動をきめる.

  • :exports code
  • :exports results
  • :exports both
  • :exports none

これで, 表を表示. :results text :colnames yes :rownames yes

参考:

インタプリタ

インタプリタをもつ言語では, :session hogehoge を記述することで, hogehoge バッファでセッションが開始する.

なにがうれしいかというと, 複数の code block の間で, 変数を共有することができる.

java

クラス名を指定する.


mmm-mode

mmm-mode を利用すると, org-mode のなかに major-mode が共存できる.

(use-package mmm-mode
  :config
  (setq mmm-global-mode 'maybe) ;; 自動推測
  ;; (setq mmm-global-mode 't) ;; つねに利用

  ;; (setq mmm-submode-decoration-level 2)
  (setq mmm-submode-decoration-level 1)

  ;; idle 中にパース.
  (setq mmm-parse-when-idle t)
  (setq mmm-idle-timer-delay 0.5)

  ;; (set-face-bold-p 'mmm-default-submode-face t) ;太字

  ;; 背景色
  (if (eq window-system nil)
  (set-face-background 'mmm-default-submode-face nil))
  
  (mmm-add-classes
   '((org-elisp
      :submode emacs-lisp-mode
      :front "#\\+begin_src emacs-lisp"
      :back  "#\\+end_src")))
  (mmm-add-mode-ext-class nil "\\.org\\'" 'org-elisp)

  (mmm-add-classes
   '((org-R
      :submode R-mode
      :front "^#\\+begin_src R[ \t]*\n?"
      :back "^#\\+end_src")))
  (mmm-add-mode-ext-class 'org-mode nil 'org-R))

flycheck を動かす

(defadvice org-edit-src-code (around set-buffer-file-name activate compile)
  (let ((file-name (buffer-file-name))) ;; (1)
    ad-do-it                            ;; (2)
    (setq buffer-file-name file-name))) ;; (3)

org-babel-tangle をコマンドラインから実行

see…

org-ext は外した.

#!/bin/sh
# -*- mode: shell-script -*-
#
# tangle files with org-mode
#
DIR=`pwd`
FILES=""

# wrap each argument in the code required to call tangle on it
for i in $@; do
    FILES="$FILES \"$i\""
done

emacs -Q --batch \
    --eval "(progn
     (add-to-list 'load-path (expand-file-name \"~/src/org/lisp/\"))
     (add-to-list 'load-path (expand-file-name \"~/src/org/contrib/lisp/\" t))
     (require 'org) (require 'ob) (require 'ob-tangle)
     (mapc (lambda (file)
            (find-file (expand-file-name file \"$DIR\"))
            (org-babel-tangle)
            (kill-buffer)) '($FILES)))" 2>&1 |grep tangled

org-narrow

  • C-x n s (org-narrow-to-subtree) Narrow buffer to current subtre
  • C-x n b (org-narrow-to-block) Narrow buffer to current block.
  • C-x n w (widen) Widen buffer to remove narrowing.

org-tree-to-indirect-buffer

C-c C-x b narrow

org-sparse-tree

検索語に関連するところだけを拾い読みするのに便利.

(defun org-sparse-tree-indirect-buffer (arg)
  (interactive "P")
  (let ((ibuf (switch-to-buffer (org-get-indirect-buffer))))
    (condition-case _
        (org-sparse-tree arg)
      (quit (kill-buffer ibuf)))))
(define-key org-mode-map (kbd "C-c \\") 'org-sparse-tree-indirect-buffer)

org-screenshot

スクリーンショットを撮影して, org-mode に挿入する

org-download

ドラッグ & ドロップで画像をコピーできる.

動画もある. Awesome!!

(use-package org-download
  :config
  ;; scrot をつかってる
  (setq org-download-screenshot-method "scrot"))

org-table

org-journal

org-mode で簡単日記.

使い方.

  • To create a new journal entry: C-c C-j
  • To open today’s journal without creating a new entry: C-u C-c C-j
(use-package org-journal
  :bind (("C-c j" . org-journal-new-entry)
         ("C-c C-x j" . org-journal-from-minibuffer))
  :config
  (setq org-journal-date-format "%x")
  (setq org-journal-time-format "<%Y-%m-%d %R> ")
  ;; (setq org-journal-file-format "%Y%m%d.org")
  (setq org-journal-file-format "journal.org")
  (setq org-journal-dir "~/gtd/journal/")

  (defun org-journal-from-minibuffer (x)
    "write from minibuffer"
    (interactive "sEnter message: ")
    (let ((tweet-message
           (concat "** " (format-time-string org-journal-time-format) x "\n")))
      (write-region tweet-message nil
                    (concat org-journal-dir org-journal-file-format) 'append))))

org-pomodoro

(use-package org-pomodoro
  :disabled t
  :commands (custom-org-agenda-mode-defaults)
  :bind* (("C-c C-x C-i" . org-pomodoro)
          ("C-c C-x C-o" . org-pomodoro))
  :init
  (add-hook 'org-agenda-mode-hook 'custom-org-agenda-mode-defaults 'append)
  :config
  (setq org-pomodoro-play-start-sound t)
  (setq org-pomodoro-play-ticking-sounds nil)
  (setq org-pomodoro-audio-player "mplayer")


  (add-hook 'org-pomodoro-started-hook
            (lambda ()
              (gntp-notify 'alert "Clock in"
                           "Happy Hacking! (^o^)/"
                           "localhost")))
  (add-hook 'org-pomodoro-killed-hook
            (lambda ()
              (gntp-notify 'alert "Clock Interupped"
                           "Oh....!"
                           "localhost")))
  (add-hook 'org-pomodoro-finished-hook
            (lambda ()
              (gntp-notify 'alert "Clock out"
                           "Good Job!"
                           "localhost")))
  (add-hook 'org-pomodoro-break-finished-hook
            (lambda ()
              (gntp-notify 'alert "Break End"
                           "Let's start next hack!"
                           "localhost")))
 (if linux-p
     (add-hook 'org-pomodoro-finished-hook
               (lambda ()
                 (notifications-notify :title "Clock out"
                                       :body "Let's Check next task"
                                       :timeout 0))))
 
  ;; 3 分の休憩
  (setq org-pomodoro-short-break-length 3)
  
  (defun custom-org-agenda-mode-defaults ()
    (org-defkey org-agenda-mode-map "q" 'bury-buffer)
    (org-defkey org-agenda-mode-map "I" 'org-pomodoro)
    (org-defkey org-agenda-mode-map "O" 'org-pomodoro)
    (org-defkey org-agenda-mode-map (kbd "C-c C-x C-i") 'org-pomodoro)
    (org-defkey org-agenda-mode-map (kbd "C-c C-x C-o") 'org-pomodoro)))

org-drill

org-mode + 暗記.

(use-package org-drill)

org-password-manager

minimal password manager for Emacs Org mode.

org-cliplink

url から org-link 挿入. これは便利!

(use-package org-cliplink :bind "C-x p i")

org-preview-mode

eww で org-mode をプレビューする。

(use-package org-preview-html)

未使用中

org-weather

org-agenda に天気を表示する

(use-package org-weather
  :disabled t
  :init
  ;;(setq org-weather-format "Weather: %desc, %tmin-%tmax%tu, %p%pu, %h%hu, %s%su")
  (setq org-weather-format "Weather: %desc, %tmin-%tmax%tu")
  (setq org-weather-location "Tokyo,JP")
  (defun org-weather-browse ()
    (interactive)
    (browse-url "http://openweathermap.org/city/1850147"))
  :config
  (org-weather-refresh))

org-multiple-keymap

n/p で 日付や priority を変更.

(use-package org-multiple-keymap :disabled t)

org-bullets

org-mode のの見出しアイコンの変更.

windows 環境だとド派手になるので封印.

(use-package org-bullets
  :disabled t
  :init
  (add-hook 'org-mode-hook (lambda () (org-bullets-mode 1))))

interleave

org-mode + PDF memo

(use-package interleave :disabled t)

org-ac

auto-complete source for org-mode

邪魔なので無効!

(use-package org-ac
  :disabled t
  :config
  (org-ac/config-default))

他のツールとの連携

RSS Feed

RSS Feeder for Emacs

(use-package org-feed
  :disabled t
  :config
  (defun org-feed-parse-rdf-feed (buffer)
    "Parse BUFFER for RDF feed entries.
Returns a list of entries, with each entry a property list,
containing the properties `:guid' and `:item-full-text'."
    (let (entries beg end item guid entry)
      (with-current-buffer buffer
	(widen)
	(goto-char (point-min))
	(while (re-search-forward "<item[> ]" nil t)
	((set  ) q beg (point)
	 end (and (re-search-forward "</item>" nil t)
		  (match-beginning 0)))
	(setq item (buffer-substring beg end)
	      guid (if (string-match "<link\\>.*?>\\(.*?\\)</link>" item)
		       (org-match-string-no-properties 1 item)))
	(setq entry (list :guid guid :item-full-text item))
	(push entry entries)
	(widen)
	(goto-char end))
	(nreverse entries))))
  
  (setq org-feed-retrieve-method 'wget)
  ;;(setq org-feed-retrieve-method 'curl)

  (setq org-feed-default-template "\n* %h\n  - %U\n  - %a  - %description")
)

登録 feed

(use-package org-feed
  :disabled t
  :config
  (setq org-feed-alist nil)
  ;; (add-to-list 'org-feed-alist
  ;;   '("Futurismo" "http://futurismo.biz/feed"
  ;;     "~/org/rss.org" "Futurismo"
  ;;     :parse-feed org-feed-parse-rdf-feed))
  (add-to-list 'org-feed-alist
	       '("Publickey" "http://www.publickey1.jp/atom.xml"
		 "~/org/rss.org" "PublicKey")))

Wanderlust

wanderlust のメールを追跡できる.

(use-package org-wl)

Plantuml

(when linux-p
  (setq org-plantuml-jar-path "/usr/local/bin/plantuml.jar")
  
(defun org-babel-plantuml-init ()
  (org-babel-do-load-languages
   'org-babel-load-languages
   (add-to-list 'org-babel-load-languages '(plantuml . t))))
(add-hook 'org-mode-hook 'org-babel-plantuml-init))

Pandoc

pandoc を利用すれば, 多彩なフォーマットを org-mode に変換可能だ.

html2org

Rubikichi さんの記事:

calfw-org

Emacs 用カレンダー.

org-gcal と連携させることで, Google カレンダーと同期して, calfw で表示させることもできる.

(use-package calfw-org
  :config
  ;; 対象ファイル
  (setq cfw:org-icalendars '("~/gtd/schedule.org"))
  ;; First day of the week  0:Sunday, 1:Monday
  (setq calendar-week-start-day 1))

org-gcal

google calendar.

Google Developer Console で client-id と secret-key を取得する必要がある.

取得した情報は ~/.netrc に保存して読み出す.

  • org-gcal-fetch で同期
(use-package org-gcal
  :if linux-p
  :init
  (define-key cfw:calendar-mode-map "v" 'org-gcal-fetch)
  (define-key cfw:calendar-mode-map "&" 'browse-google-calendar)  
  :config
  ;; password は netrc へ
  (setq GoogleCal (netrc-machine (netrc-parse "~/.netrc") "org-gcal" t))
  (setq org-gcal-client-id (netrc-get GoogleCal "login")
	org-gcal-client-secret (netrc-get GoogleCal "password")
	org-gcal-dir "~/org"
	org-gcal-file-alist '(("fox10225fox@gmail.com" .  "~/gtd/schedule.org")))

  (defun browse-google-calendar ()
      (interactive)
      (browse-url "https://www.google.com/calendar/render?hl=ja")))

R

result で org-table を出力

Interacting with R

mobileOrg

iPhone と org-mode の同期. Dropbox を利用

org-modbile は org-mode プロジェクトに含まれている.

;; Set to the location of your Org files on your local system
(setq org-directory "~/gtd")
;; Set to the name of the file where new notes will be stored
(setq org-mobile-inbox-for-pull "~/gtd/inbox.org")
;; Set to <your Dropbox root directory>/MobileOrg.
(setq org-mobile-directory "~/Dropbox/アプリ/MobileOrg")

;; ;; 起動と終了時に同期
;; ;; org-mobile-directry が存在しないとハングするためなしにした
;; ;; そのうちなんか考える
;; ;; (add-hook 'after-init-hook 'org-mobile-pull)
;; ;; (add-hook 'kill-emacs-hook 'org-mobile-push)

;; moble sync
;; http://stackoverflow.com/questions/8432108/how-to-automatically-do-org-mobile-push-org-mobile-pull-in-emacs
(defvar org-mobile-sync-timer nil)
(defvar org-mobile-sync-idle-secs (* 60 10))
(defun org-mobile-sync ()
    (interactive)
      (org-mobile-pull)
	(org-mobile-push))
(defun org-mobile-sync-enable ()
    "enable mobile org idle sync"
      (interactive)
	(setq org-mobile-sync-timer
	      (run-with-idle-timer org-mobile-sync-idle-secs t
				   'org-mobile-sync)))
(defun org-mobile-sync-disable ()
    "disable mobile org idle sync"
      (interactive)
	(cancel-timer org-mobile-sync-timer))

;; 無効にしておくか
;; (org-mobile-sync-enable)

Bookmarks

cookbook. 図の書き方とか R との連携とか, 小技がある.

PDF を org-mode で閲覧.