最強のタスク管理ツール.
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))
M-x org-emphasize で選択できる.
C-c C-x C-f (Emphasis and monospace - The Org Manual)
- test Bold
- test Itaric
- test Underline
text
CodetextDeletetest
Small
色やフォントなどの CSS を指定する場合は, HTML を直接かく.
- emacs - Exporting org-mode to HTML: In-place coloring - Stack Overflow
- Quoting HTML tags - The Org Manual
ここに macro がたくさん定義されている. 後で調査.
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-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)))
(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"))
タスクシュート用に修正.
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)
参考:
- http://hpcgi1.nifty.com/spen/index.cgi?OrgMode%2fOrganize_Your_Life_In_Plain_Text!#i9
- OrgMode/Org-mode で GTD 実践 (翻訳) - How I use Emacs and Org-mode to implement GTD の翻訳
;; 時間表示が 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 and optimization
- Speeding up your agendas - The Org Manual
- 【もう遅くない】 Emacs org-agenda による予定表を瞬時に表示させる方法
;; 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)
(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.
;; (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))
C-c C-c するとでる.
Special Properites (org-mode の特別なプロパティ)
- http://orgmode.org/manual/Special-properties.html#Special-properties CLOCKSUM_T … clocksum today
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)
定義方法
- Custom Agenda Commands
- Custom agenda views - The Org Manual
- Special agenda views - The Org Manual
- Org Mode マニュアル
このアジェンダの書き方いいなぁ
(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)
;; )))
(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)
(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-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)))))
指定したタスクを clockin するためのショートカット はじめてつくった自作 defun!!
- http://orgmode.org/manual/Resolving-idle-time.html#Resolving-idle-time
- https://github.com/danieroux/emacs/blob/master/external/bh-org-mode.el
- https://github.com/tsu-nera/dotfiles/blob/master/.emacs.d/mylisp/my-org-clockin-gtd.el
(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)))
タグごとに clocktable を集計.
- http://stackoverflow.com/questions/17353591/timetable-grouped-by-tag
- https://gist.github.com/tsu-nera/d9ffa6a51a6e7bdb957b
宣言方法
#+BEGIN: clocktable-by-tag :maxlevel 2 :tags ("p1" "p2")
:tstart "2013-06-27" :tend "2013-06-28"
(use-package clocktable-by-tag)
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)
;; なんか, 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
(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")))
(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)
このハックいいね.
- https://github.com/binarin/rc/blob/master/xmobar-clock-monitor.sh
- https://github.com/binarin/rc/blob/master/.xmobarrc
アイデアをキャプチャーする.
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)")
)))
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")
)
)))
SyntaxHighlighter Evolved Plugin を利用すればできるようだ.
- Publish to WordPress with Emacs 24 and org2blog - vxlabs
- tmaeda1981jp の blog » Blog Archive » org2blog を使用して Emacs から WordPress に投稿する
- How to use org2blog effectively as a programmer | Chen’s blog
(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',
画像ファイルは記事投稿時にサーバの 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 というツールがよい.
- When I blog with Emacs and when I blog with other tools
- コマンドラインで画像を縮小する:ImageMagick convert mogrify - Linux Memo: Vine Linux 5 設定 tips
- ImageMagick で画像をリサイズする時のメモ
このサイトを参考に, 幅 670px, 高さ 447px に.
- 最近ブログのアイキャッチ画像の作り方を確立したので, 自分がやっている方法を紹介します - iLOG
convert -resize 640x480 before.jpg after.jpg convert -resize 670x447 before.jpg after.jpg
縦横比を計算してくれるつーる.
最大サイズの画像の中から自動でアイキャッチ画像を設定してくれる.
どうもサイズが 300 にリサイズされてしまう.
;; (setq org2blog/wp-image-thumbnails t)
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..
おそらく 、ブログ側に問題あり。 最近改造した場合は、以前の状態に戻してみる.
(setq org-fontify-emphasized-text t)
(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-mode から別形式へ. つまり, なんでも org-mode でよいということ.
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 |
dokuwiki 変換.
(use-package ox-wk :defer t)
markdown 変換
(use-package ox-md :defer t)
(use-package ox-textile :defer t)
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>")
org-mode から reStructredText への変換
;; (use-package ox-rst)
org-mode から reStructredText への変換. ox-rst を使うからいらないかも.
;; (use-package ox-pandoc)
;; (setq org-pandoc-output-format 'rst)
TaskJuggler 変換.
;; (use-package ox-taskjuggler)
freemind もできるんだー.
ただし, ArchLinux では freemind がとてもつかいにくい…
;; (use-package ox-freemind)
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)
結果がコードにかかれる. ただし, tangle したときは無視される.
begin_src end_src で囲まれて出力される.
ブログを書くときに便利.
export するときの挙動をきめる.
- :exports code
- :exports results
- :exports both
- :exports none
これで, 表を表示.
:results text :colnames yes :rownames yes
参考:
インタプリタをもつ言語では, :session hogehoge を記述することで, hogehoge バッファでセッションが開始する.
なにがうれしいかというと, 複数の code block の間で, 変数を共有することができる.
クラス名を指定する.
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))
(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)
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
- 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.
C-c C-x b narrow
検索語に関連するところだけを拾い読みするのに便利.
(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-mode に挿入する
ドラッグ & ドロップで画像をコピーできる.
動画もある. Awesome!!
(use-package org-download
:config
;; scrot をつかってる
(setq org-download-screenshot-method "scrot"))
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))))
- https://github.com/lolownia/org-pomodoro
とてもおもしろい elisp なのだけれども、 25 分でタイマがストップしたまま、さきに進むのをよく忘れるので、封印.
(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-mode + 暗記.
(use-package org-drill)
minimal password manager for Emacs Org mode.
url から org-link 挿入. これは便利!
(use-package org-cliplink :bind "C-x p i")
eww で org-mode をプレビューする。
(use-package org-preview-html)
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))
n/p で 日付や priority を変更.
(use-package org-multiple-keymap :disabled t)
org-mode のの見出しアイコンの変更.
windows 環境だとド派手になるので封印.
(use-package org-bullets
:disabled t
:init
(add-hook 'org-mode-hook (lambda () (org-bullets-mode 1))))
org-mode + PDF memo
(use-package interleave :disabled t)
auto-complete source for org-mode
邪魔なので無効!
(use-package org-ac
:disabled t
:config
(org-ac/config-default))
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")
)
(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 のメールを追跡できる.
(use-package org-wl)
(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 を利用すれば, 多彩なフォーマットを org-mode に変換可能だ.
- org-mode で書いたテキストを Pandoc で Restructured Text に変換する | Futurismo
- Pandoc ユーザーズガイド 日本語版 - Japanese Pandoc User’s Association
Rubikichi さんの記事:
- Emacs ユーザならば Web ページを Pandoc で org-mode に変換して読もう るびきち「日刊 Emacs」
- 万能ドキュメント変換器 Pandoc いいね! | るびきち「日刊 Emacs」
Emacs 用カレンダー.
- kiwanami/emacs-calfw
- Emacs 用カレンダー calfw v1.2 リリース - 技術日記@ kiwanami
- calfw の org-agenda 対応 calfw-org.el - 技術日記@ kiwanami
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))
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")))
result で org-table を出力
Interacting with R
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)
cookbook. 図の書き方とか R との連携とか, 小技がある.
PDF を org-mode で閲覧.