14 Dec 2016, 08:56

Emacs から SML のテストを実行する

元ネタは、ここです。

coursera で Programming Languages のコースを受講している。

Assignment でテストファイルが与えられるのだが、これをうまく実行する方法についてのメモ。

Preparation

  • hw1.sml … 提出用ファイル
fun is_older(date1: int*int*int, date2: int*int*int) =
  (* implementation *)
  • hw1.sml … テストファイル
(* Test is_older *)
val test_is_older_1 = is_older((2012,1,1), (2012,1,1)) = false
val test_is_older_2 = is_older((2012,1,1), (2013,1,1)) = true
val test_is_older_3 = is_older((2013,1,1), (2013,2,1)) = true
val test_is_older_4 = is_older((2013,1,1), (2013,1,2)) = true

Execute

以下のコマンドで実行できる。

$ cat hw1.sml hw1_test.sml | sml
Standard ML of New Jersey v110.74 [built: Fri Dec  7 10:09:50 2012]
...
val is_older = fn : (int * int * int) * (int * int * int) -> bool
...
val test_is_older_1 = true : bool
val test_is_older_2 = true : bool
val test_is_older_3 = true : bool
val test_is_older_4 = true : bool

Emacs を私はつかっているので、=M-!= (shell-command)で、Emacs の中から実行。

grep

結果を以下のように grep するとなおよい。

$ cat hw1.sml hw1_test.sml | sml | grep false

まとめ

Lecture では、use “hw1.sml”; を利用して、ファイルを読み込むことを推奨しているけれども、 こっちのやり方のほうがフィードバックが素早く得られるのでよい。

いわゆる TDD ができる。

10 Dec 2016, 18:16

Emacs で自分の信念を確認する M-x cookie

成功とはなにか?どのように成功するか?最近、考えに耽っている.以下の記事の続編。

どのように成功するか?

ウォートン・スクールの本当の成功の授業を読み終えた。http://amzn.to/2hpLUsO

どのように成功するか?以下のことを常にこころにとめて生きることにした。

自分の信念

- 小さいことを積み重ねることが、 とんでもないところへ行くただひとつの道 
- スピードよりも着実な理解を優先する 
- やる気がでないときは勉強する意味を考える 
- 達成よりも学習の過程を重視する 
- 屈辱をモチベーションに変える 
- この世で目標を達成するために与えられた時間には限りがある 
- 他人と自分を比較しない、自分は必ず目標を達成できる。 自分を信じること 
- GRIT(やり抜く力) を身につける
  才能は努力で克服できる 
  成長思考−努力は必ず報われると信じる 
  興味をもつ、練習を続ける、目的をもつ、希望を持つ

cookie について

Emacs から、信念を確認したいと思うのは自分だけではないはずだ?

というわけで、Emacs から確認してみる。

M-x cookie というコマンドがある。これを使うと、cookie-file で指定されたファイルにかいてある行をランダムにとりだすことができる。

設定例を示そう。

(setq cookie-file "~/.emacs.d/policy.txt")
(global-set-key (kbd "C-x C-,") 'cookie)

policy.txt のなかみは fortune 形式というもので書く必要がある。

Policy
%
小さいことを積み重ねることが, とんでもないところへ行くただひとつの道
%
スピードよりも着実な理解を優先する
%
やる気がでないときは勉強する意味を考える
%
達成よりも学習の過程を重視する
%
屈辱をモチベーションに変える
%
この世で目標を達成するために与えられた時間には限りがある
%
他人と自分を比較しない, 自分は必ず目標を達成できる. 自分を信じるこ
%
才能は努力で克服できる
%
成長思考..努力は必ず報われると信じる
%
興味をもつ, 練習を続ける, 目的をもつ, 希望を持つ 
%

これで、”C-x C-,“を押すと、名言が見られる。

hydra と連携して、連続で信念をみる

hydra を使うと、連続で信念を次から次へと出すことができる。

(defhydra hydra-meigen (global-map "C-x ,")
  "meigen"
  ("," cookie "meigen"))

他の名言集もいっしょに

信念の他に名言集もみたい。最終的には、以下のように設定している。

名言集 meigen.txt

名言
%
苦悩を抜けて歓喜へ ... ベートーベン
%
志を立てて以って万事の源と為す ... 吉田松蔭
%
高みに向かって努力を続けることは, 決して無駄ではない ... ニーチェ
%
普通の奴らの上を行け ... ポール・グレアム
%
克己凌雲 ... tsu-nera
%

設定例

(defun set-my-meigen ()
  (interactive) (setq cookie-file   "~/.emacs.d/meigen/meigen.txt"))
(defun set-my-policy ()
  (interactive) (setq cookie-file "~/.emacs.d/meigen/policy.txt"))

(setq cookie-file "~/.emacs.d/meigen/policy.txt")
(defhydra hydra-meigen (global-map "C-x ,")
  "meigen"
  ("," cookie "meigen")
  ("m" set-my-meigen "my-meigen")
  ("p" set-my-policy "my-policy"))

09 Dec 2016, 19:32

Emacsで fcitx-anthy(Nicola)の調子が悪いときに試すこと

私は、Emacsで 日本語入力(親指シフト)をしていると、調子がわるいときがある。

  • 入力結果の出力がやたらと遅い
  • 打鍵しても、期待しない文字が入力される

なんとか解決方法はないかと、3時間頑張って探して、ようやく見つけた。

環境

  • Ubuntu 16.04
  • fcitx-anthy 4.2.9

解決方法

一旦別のアプリ(ターミナル、ブラウザ)で打鍵をしてから、Emacsに戻ってくる。

これで、解決できた。なにかのバグかな?これが判明するまでに、試行錯誤て3時間かかった。

こんなことで悩んでいるのは自分だけかもしれないけれども

06 Dec 2016, 06:46

org2blog で BEGIN_HTML が動かない場合の対処方法

いつも、このブログは org2blog を利用して、Emacs から書いているのだが、

#+BEGIN_HTML

#+END_HTML

を書いても、HTML を記事の中に埋め込むことができなくなった。

解決方法

いろいろと試行錯誤してみたところ、以下の書き方だとうまくいった。

#+begin_export html

#+end_export

誰かの参考になればとおもいメモ。

15 Jan 2016, 09:43

Emacs で Python デバッグするときは pdb が便利

Emacs で Python のデバッグをするときは、pdb が便利.

以下を参考にして設定してみた.

手順

  • デバッグしたいファイルまで M-x cd で移動。
  • 以下のスクリプトを書いて、パスが通った場所におく

[sourcecode language=”bash” title=”” ]
#!/bin/sh
exec python -m pdb $1 $2 $3 $4 $5 $6 $7 $8 $9
[/sourcecode]

Python2 だとこっち.

[sourcecode language=”bash” title=”” ]
#!/bin/sh
exec python2 /usr/lib/python2.7/pdb.py $1 $2 $3 $4 $5 $6 $7 $8 $9
[/sourcecode]

  • M-x pdb を実行
  • ミニバッファで pdb (file 名) を実行
  • 画面が 2 分割されて、ソースと pdb の画面が現れる.
  • (pdb) コンソール上で n とか s で ステップ実行

便利!

02 Jan 2016, 00:21

Emacs で Clojure の開発環境を構築

Clojure の勉強を始めました。

まずはなにより Emacs の設定からかと思うので、 Clojure の Emacs 設定を整えました. 現時点での設定をプログにスナップショット.

優れた IDE が備える機能

  • シンタックスハイライト/ インデント clojure-mode
  • 検索・置換 たくさんあるよ.
  • タグジャンプ ggtags
  • コード補間 ac-clojure
  • エラーチェック flycheck
  • リファクタリング clj-refactor
  • インタープリタ・デバッカ cider
  • プロジェクト管理 projectile
  • ドキュメント参照 eldoc

Clojure に特科した Elisp

clojure-mode

<div class="outline-text-3" id="text-orgheadline2">
  <p>
    Clojure のためのメジャーモード. シンタックスハイライトとかインデントとかを正してくれるモード. これは必須.
  </p>

  <ul class="org-ul">
    <li>
      <a href="https://github.com/clojure-emacs/clojure-mode">https://github.com/clojure-emacs/clojure-mode</a>
    </li>
  </ul>

  <p>
    [sourcecode language=&#8221;emacs-lisp&#8221; title=&#8221;&#8221; ]<br /> (require &#8216;clojure-mode)<br /> [/sourcecode]
  </p>
</div>

cider

<div class="outline-text-3" id="text-orgheadline3">
  <p>
    Clojure のためのインタラクティブな開発環境.
  </p>

  <ul class="org-ul">
    <li>
      <a href="https://github.com/clojure-emacs/cider">https://github.com/clojure-emacs/cider</a>
    </li>
  </ul>

  <p>
    [sourcecode language=&#8221;emacs-lisp&#8221; title=&#8221;&#8221; ]<br /> (require &#8216;cider)<br /> ;; clojure-mode で cider を有効に<br /> (add-hook &#8216;clojure-mode-hook &#8216;cider-mode)<br /> ;; eldoc を有効にする<br /> (add-hook &#8216;cider-mode-hook &#8216;cider-turn-on-eldoc-mode))<br /> [/sourcecode]
  </p>

  <ul class="org-ul">
    <li>
      cider-jack-in で repl 起動
    </li>
    <li>
      cider-connect でリモート repl に接続
    </li>
  </ul>

  <p>
    repl と連携して開発を行うことができる. REPL 駆動開発!!
  </p>
</div>

4clojure

<div class="outline-text-3" id="text-orgheadline4">
  <p>
    clojure の問題集.
  </p>

  <ul class="org-ul">
    <li>
      <a href="https://github.com/losingkeys/4clojure.el">https://github.com/losingkeys/4clojure.el</a>
    </li>
  </ul>

  <p>
    [sourcecode language=&#8221;emacs-lisp&#8221; title=&#8221;&#8221; ]<br /> (require &#8216;4clojure)<br /> [/sourcecode]
  </p>

  <p>
    Emacs から問題をといたり、答え合わせができる. そのまま答えを投稿できればいいのだけれども、それは未対応.
  </p>
</div>

ac-cider

<div class="outline-text-3" id="text-orgheadline5">
  <p>
    auto-complete for cider. 強力な補完機能が手に入る.
  </p>

  <ul class="org-ul">
    <li>
      <a href="https://github.com/clojure-emacs/ac-cider">https://github.com/clojure-emacs/ac-cider</a>
    </li>
  </ul>

  <p>
    [sourcecode language=&#8221;emacs-lisp&#8221; title=&#8221;&#8221; ]<br /> (require &#8216;ac-cider)<br /> (add-hook &#8216;cider-mode-hook &#8216;ac-flyspell-workaround)<br /> (add-hook &#8216;cider-mode-hook &#8216;ac-cider-setup)<br /> (add-hook &#8216;cider-repl-mode-hook &#8216;ac-cider-setup)<br /> (eval-after-load &#8220;auto-complete&#8221;<br /> &#8216;(progn<br /> (add-to-list &#8216;ac-modes &#8216;cider-mode)<br /> (add-to-list &#8216;ac-modes &#8216;cider-repl-mode))))<br /> [/sourcecode]
  </p>
</div>

clojure-cheatsheet

<div class="outline-text-3" id="text-orgheadline6">
  <p>
    CheatSheet を参照できる.
  </p>

  <ul class="org-ul">
    <li>
      <a href="https://github.com/clojure-emacs/clojure-cheatsheet">https://github.com/clojure-emacs/clojure-cheatsheet</a>
    </li>
  </ul>

  <p>
    [sourcecode language=&#8221;emacs-lisp&#8221; title=&#8221;&#8221; ]<br /> (require &#8216;clojure-cheatsheet)<br /> (define-key clojure-mode-map (kbd &#8220;C-c C-h&#8221;) #&#8217;clojure-cheatsheet)<br /> [/sourcecode]
  </p>
</div>

clj-refactor

<div class="outline-text-3" id="text-orgheadline7">
  <p>
    Clojure 用リファクタリング支援ツール.
  </p>

  <ul class="org-ul">
    <li>
      <a href="https://github.com/clojure-emacs/clj-refactor.el">https://github.com/clojure-emacs/clj-refactor.el</a>
    </li>
  </ul>

  <p>
    できる機能か多すぎ!覚えらんない..
  </p>

  <ul class="org-ul">
    <li>
      <a href="https://github.com/clojure-emacs/clj-refactor.el/wiki">https://github.com/clojure-emacs/clj-refactor.el/wiki</a>
    </li>
  </ul>

  <p>
    [sourcecode language=&#8221;emacs-lisp&#8221; title=&#8221;&#8221; ]<br /> (require &#8216;clj-refactor)
  </p>

  <p>
    (defun my-clojure-mode-hook ()<br /> (clj-refactor-mode 1)<br /> (yas-minor-mode 1) ; for adding require/use/import statements<br /> ;; This choice of keybinding leaves cider-macroexpand-1 unbound<br /> (cljr-add-keybindings-with-prefix &#8220;C-c C-m&#8221;))
  </p>

  <p>
    (add-hook &#8216;clojure-mode-hook #&#8217;my-clojure-mode-hook)<br /> [/sourcecode]
  </p>
</div>

clojure-snippets

<div class="outline-text-3" id="text-orgheadline8">
  <p>
    Yasnipeet for Clojure
  </p>

  <ul class="org-ul">
    <li>
      <a href="https://github.com/mpenet/clojure-snippets">https://github.com/mpenet/clojure-snippets</a>
    </li>
  </ul>

  <p>
    [sourcecode language=&#8221;emacs-lisp&#8221; title=&#8221;&#8221; ]<br /> (require &#8216;clojure-snippets)<br /> (setq clojure-snippets-dir &#8220;~/.emacs.d/el-get/repo/clojure-snippets/&#8221;)<br /> [/sourcecode]
  </p>
</div>

主に Lisp 系に役立つ Elisp

ggtags

<div class="outline-text-3" id="text-orgheadline10">
  <ul class="org-ul">
    <li>
      <a href="https://github.com/leoliu/ggtags">https://github.com/leoliu/ggtags</a>
    </li>
  </ul>

  <p>
    変数や関数の定義にタグジャンプする. ggtags-create-tags 関数を呼ぶと, ctags コマンドがコールされてタグがつくられる.
  </p>

  <p>
    と思ったら、つくられない。.globalrc に設定を追加する必要があるようだ. 以下のサイトを参考にした。ありがとうございます.
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://ayato.hateblo.jp/entry/20150603/1433329200">Clojure の開発で gtags を使う &#8211; (define -ayalog &#8216;())</a>
    </li>
  </ul>

  <p>
    タグができたら、あとはコマンドを定義するだけ.
  </p>

  <p>
    [sourcecode language=&#8221;emacs-lisp&#8221; title=&#8221;&#8221; ]<br /> (require &#8216;ggtags)<br /> (add-hook &#8216;clojure-mode-hook (lambda () (ggtags-mode 1)))
  </p>

  <p>
    ;; use helm<br /> (setq ggtags-completing-read-function nil)
  </p>

  <p>
    ;; use eldoc<br /> (setq-local eldoc-documentation-function #&#8217;ggtags-eldoc-function)
  </p>

  <p>
    ;; imenu<br /> (setq-local imenu-create-index-function #&#8217;ggtags-build-imenu-index)
  </p>

  <p>
    (define-key ggtags-mode-map (kbd &#8220;C-c g s&#8221;) &#8216;ggtags-find-other-symbol)<br /> (define-key ggtags-mode-map (kbd &#8220;C-c g h&#8221;) &#8216;ggtags-view-tag-history)<br /> (define-key ggtags-mode-map (kbd &#8220;C-c g r&#8221;) &#8216;ggtags-find-reference)<br /> (define-key ggtags-mode-map (kbd &#8220;C-c g f&#8221;) &#8216;ggtags-find-file)<br /> (define-key ggtags-mode-map (kbd &#8220;C-c g c&#8221;) &#8216;ggtags-create-tags)<br /> (define-key ggtags-mode-map (kbd &#8220;C-c g u&#8221;) &#8216;ggtags-update-tags)<br /> (define-key ggtags-mode-map (kbd &#8220;C-c g m&#8221;) &#8216;ggtags-find-tag-dwim)
  </p>

  <p>
    (define-key ggtags-mode-map (kbd &#8220;M-,&#8221;) &#8216;pop-tag-mark))<br /> [/sourcecode]
  </p>
</div>

smartparens

<div class="outline-text-3" id="text-orgheadline11">
  <ul class="org-ul">
    <li>
      <a href="https://github.com/Fuco1/smartparens">https://github.com/Fuco1/smartparens</a>
    </li>
  </ul>

  <p>
    カッコの移動を簡単にする elisp. 似たような機能に Paredit という elisp もある. どちらを使うかは好き嫌い.
  </p>

  <p>
    [sourcecode language=&#8221;emacs-lisp&#8221; title=&#8221;&#8221; ]<br /> (require &#8216;smartparens-config)<br /> (smartparens-global-mode t)<br /> [/sourcecode]
  </p>

  <p>
    以下、自分のキーバインドを貼り付けるけれども、キーバインドは好きに設定してよい.
  </p>

  <p>
    正直、あまりつかいこなせてない&#x2026;
  </p>

  <p>
    [sourcecode language=&#8221;emacs-lisp&#8221; title=&#8221;&#8221; ]<br /> (define-key sp-keymap (kbd &#8220;C-M-f&#8221;) &#8216;sp-forward-sexp) ;; forward<br /> (define-key sp-keymap (kbd &#8220;C-M-b&#8221;) &#8216;sp-backward-sexp) ;; backward
  </p>

  <p>
    (define-key sp-keymap (kbd &#8220;C-M-n&#8221;) &#8216;sp-next-sexp) ;; next<br /> (define-key sp-keymap (kbd &#8220;C-M-p&#8221;) &#8216;sp-previous-sexp) ;; previous
  </p>

  <p>
    ;; 一段中の/ 外のカッコに移動.<br /> (define-key sp-keymap (kbd &#8220;C-M-d&#8221;) &#8216;sp-down-sexp) ;; down<br /> (define-key sp-keymap (kbd &#8220;C-M-u&#8221;) &#8216;sp-up-sexp) ;; up
  </p>

  <p>
    ;; かっこの先頭と末尾に移動.<br /> (define-key sp-keymap (kbd &#8220;C-M-a&#8221;) &#8216;sp-beginning-of-sexp)<br /> (define-key sp-keymap (kbd &#8220;C-M-e&#8221;) &#8216;sp-end-of-sexp)
  </p>

  <p>
    ;; カッコのなかを削除・コピー (かたまり単位)<br /> ;; sp-kill/copy-hiblid-sexp というものもある<br /> (define-key sp-keymap (kbd &#8220;C-M-k&#8221;) &#8216;sp-kill-sexp)<br /> (define-key sp-keymap (kbd &#8220;C-M-w&#8221;) &#8216;sp-copy-sexp)
  </p>

  <p>
    ;; かっこを外す<br /> (define-key sp-keymap (kbd &#8220;C-M-s&#8221;) &#8216;sp-unwrap-sexp)<br /> [/sourcecode]
  </p>
</div>

show-paren-mode

<div class="outline-text-3" id="text-orgheadline12">
  <p>
    対応する括弧を光らせる.
  </p>

  <p>
    [sourcecode language=&#8221;emacs-lisp&#8221; title=&#8221;&#8221; ]<br /> ;; turn on highlight matching brackets when cursor is on one<br /> (show-paren-mode 1)<br /> [/sourcecode]
  </p>
</div>

rainbow-delimiters

<div class="outline-text-3" id="text-orgheadline13">
  <p>
    かっこの深さに応じて色付けしてくれる.
  </p>

  <ul class="org-ul">
    <li>
      <a href="https://github.com/Fanael/rainbow-delimiters">https://github.com/Fanael/rainbow-delimiters</a>
    </li>
  </ul>

  <p>
    [sourcecode language=&#8221;emacs-lisp&#8221; title=&#8221;&#8221; ]<br /> (require &#8216;rainbow-delimiters)<br /> [/sourcecode]
  </p>
</div>

26 Dec 2015, 11:25

AOJ へ Emacs から投稿するスクリプトをみつけた

AOJ の問題を最近解いているのだが、 Emacs から投稿するスクリプトがないかなと探していたら、見つけた.

aoj-submit をうつと、web に投稿してくれる。これは便利だ..

ここからが Hack. できれば、ローカルでテストケースを実行したい.

そのためのスクリプトを見つけた.

たとえば、問題番号 1147 のテストをしたいとき、 以下を実行すると、テストケースをダウンロードしてきてローカルで実行してくれる.

oj.py --aoj -i 1147.py 1147

ソースを読むと、html をスクレイピングしてるようなトリッキーなことをしていた.

これを Emacs から叩けるように、メソッドを追加してみた.

(defcustom aoj-ojpy-path nil "Your oj.py path")

(defun aoj-test ()
  (interactive)
  (shell-command (concat aoj-ojpy-path " --aoj -i "
                         (file-name-nondirectory (buffer-file-name)) " " (aoj--problemNO))))

これで、Emacs からテスト実行 -> 提出ができるようになった.

13 Sep 2015, 10:36

今何時?に大々的に答えてくれるEmacsコマンド

今何時か知りたい. そんなときに、便利なコマンド.

time-now

超ビッグな表示で、時間が表示される.

[sourcecode language=”text” title=”” ]
(defun my:time-now ()
(interactive)
(let ((temp-buffer-show-function ‘switch-to-buffer))
(with-output-to-temp-buffer
“*time-now*”
(princ (format-time-string “%H:%M”)))
(setq buffer-face-mode-face ‘(:height 2000))
(buffer-face-mode)))
(global-set-key (kbd “C-“) ‘my:time-now)
[/sourcecode]

2015-09-13-192948_973x353_scrot.png

<p>
  時間を確認したら、q を押して閉じる.
</p>

<p>
  またこんなことで時間を潰してしまった。。。
</p>

<p style="font-size:32px">
  以上、Happy Hacking!!
</p>

22 Aug 2015, 14:50

org-modeでマイクロブログ!! org-agendaに twitterのつぶやきを表示する方法

org-agendaに twitterのつぶやきを表示してみました.

これらの関連記事のまとめになります.

方法

以下のようなRuby スクリプトをかいて、自分のつぶやきをorg形式で保存. rubyからtwitterのtweetを取得するために、twitter gemを利用.

#!/usr/bin/ruby
require 'twitter'
require 'pp'

client = Twitter::REST::Client.new do |config|
  config.consumer_key        = ""
  config.consumer_secret     = ""
  config.access_token        = ""
  config.access_token_secret = ""
end

lines = nil

# ファイルに保存してあるツイートを一旦読込み
File.open("/home/tsu-nera/gtd/journal/twitter.org", "r") do |file|
  lines = file.readlines
end

# ツイートを配列に挿入
client.user_timeline("tsu_nera").each do |tweet|
  t = tweet.created_at.dup.utc.localtime
  lines << "** <#{t.strftime("%Y-%m-%d %H:%M")}> #{tweet.text}\n"
end

# 重複除去
lines.uniq!

# 書き込み
File.open("/home/tsu-nera/gtd/journal/twitter.org", "w") do |file|
  lines.each do |line|
    file.puts line
  end
end

以下のような感じで保存される.

** <2015-08-22 22:43> 投稿テスト
** <2015-08-22 22:23> twitterの投稿をorg-agandaからみることができるかどうかテスト
** <2015-08-22 21:51> clojureを写経してばかりいるけど、自分で一からかける気がしないなぁ。
** <2015-08-22 19:21> test
** <2015-08-20 21:59> 名言を書き溜めてEmacsからランダムに参照するというライフハック。https://t.co/DYmuvM3Faq
** <2015-08-16 23:19> courseraの講義受けて同じようにアルゴリズム取引に挑戦したけど、全く儲からずに泣いている自分がここにいます。 / “自家製プログラムでアルゴリズム取引に励む個人投資家 - WSJ” http://t.co/VzE8Rl9aTc
** <2015-08-10 01:06> ドラクエ3の性格占い、しあわせものだった。
** <2015-08-09 22:17> 集中力がおちたと最近とても感じる。
** <2015-08-09 20:51> clojureで為替レートを取得する処理を書いてみた。https://t.co/lUgKXdfp2o
** <2015-08-09 14:45> walkcar http://t.co/xakyqwcqid
** <2015-08-09 14:42> walkcarほしい。会社の通勤使いたい。これで遅刻しなくてすむ。https://t.co/Tu0trSq4tf
** <2015-08-09 13:34> ニューラルネットワークによる自動作曲。信じられない…。http://t.co/WD2NAwFXxN
** <2015-08-08 14:22> 最近、無駄についつい本を買って積ん読してしまう。でも、FXで湯水のごとくお金がなくなっていくので、もうどうでもいいやと思えてきた。
** <2015-08-08 05:58> @kanata_56 違う言語を学ぶと見える世界も変わりますね。
** <2015-08-08 04:00> ネストの深さは悪しきものだと思っていたが、今はカッコの深さがカッコいいと思う今日この頃。
** <2015-08-08 01:33> もう3か月も仕事でプログラミングしてない。こんな状態が続くなら畜生転職だ。
** <2015-08-08 01:29> 今週も仕事が暇で辛かった。
** <2015-08-06 19:19> かった!よむ! http://t.co/306Ai5M6LF
** <2015-08-04 04:19> 4時なのに眠れない。明日の会社のC言語テストはズタボロだな。
** <2015-08-03 23:16> ランボー怒りのシャワー浴びよ

このファイルを org-agenaの対象ファイルに指定する.

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

これで、org-agenda view をみると、 twitterのコメントが時間つきで表示されているのだ.

なにができるようになったか

以前, org-journalに書き溜めたコメントを org-agendaでみるハックを書いた.

今回、twitterのつぶやきが org-agendaで見られるようになった. このことによって、

  • 公開したいつぶやきは、twitterへ
  • 非公開のつぶやきは、 org-journalへ

というように分けることができるようになった. どちらの書き込みにも、ミニバッファから投稿できるようにした.

twitterをミニバッファ経由での書き込みにするには、以下の記事を.

org-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-agendaという統一 viewで閲覧することができるようになった.

以上、Happy Hacking!!

08 Aug 2015, 10:54

xmobarに org-clockの状態と時刻を表示する超コネタ

org-clockと xmobarを愛用しているひとのための超コネタ.

org-clockの状態を xmobarに表示します.

clock状態を表示する

以下のスクリプトをまずは用意して、パスの通った場所におく.

  • xmobar-clocking-monitor.sh
#!/bin/bash
if [[ $(emacsclient --e '(org-clocking-p)') == 't' ]] ; then
    echo "<fc=grey,#000000>"
else
    echo "<fc=white,#ff0000>"
fi

.xmobarrcの設定はあとで書きます.

clocking時間を表示する

以下のelispを書くと、現在の時間をファイルに吐き出してくれる.

(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)

.xmobarrcの設定

以下のように設定を書く. これで、xmobar上に、clock状態と clocking時刻が表示される.

Config { font = "-misc-fixed-*-*-*-*-10-*-*-*-*-*-*-*"
       , borderColor = "black"
       , border = TopB
       , bgColor = "black"
       , fgColor = "grey"
       , position = TopW L 90
       , lowerOnStart = True
       , persistent = False
       , commands = [ Run Cpu ["-L","3","-H","50","--normal","green","--high","red"] 10
                    , Run Memory ["-t","Mem: <usedratio>%"] 10
            -- , Run Swap [] 10
                    , Run Battery ["Bat0"] 600
                    , Run Com "xmobar-clock-monitor.sh" [] "orgClock" 10
                    , Run Com "sh" ["-c", "cat ~/tmp/clocking"] "orgShow" 10
                , Run Date "%a %b %_d %Y %H:%M:%S" "date" 10
            ]   
       , sepChar = "%"
       , alignSep = "}{"
       , template = "%cpu% | %memory% | %battery% }{ <fc=#ee9a00>%date%</fc> %orgClock%clock</fc> %orgShow%"
       }

以上、Happy Hacking!!