ラベル emacs の投稿を表示しています。 すべての投稿を表示
ラベル emacs の投稿を表示しています。 すべての投稿を表示

2017年1月12日木曜日

MobileOrg で Agenda ファイルを org-directry 以外の場所に置くと何が起こるか?   gblog

1.1 はじめに

何やらMobileOrgの同期がうまくいかないなぁ,と思ったときについカッとなってコードを読んだ時の簡単なメモです.

※以下,本文中では,Emacs のシンボル(関数や変数)は(シンボル)で書いてます


1.2 何が起きる?

  • (org-mobile-push) はうまくいく (Emacs –> MobileOrg アプリ)

    • (org-agenda-file) でファイルのフルパスを指定していれば.

  • (org-mobile-pull) はうまくいなかい (MobileOrg アプリ –> Emacs)

片方だけうまくいくおかげで,問題に気づくのにちょっと時間かかった.

1.3 なぜなのか?

1.3.1 org-mobile-pull の挙動

早い話が, (org-mobile-pull) は Agenda ファイルが (org-directory) 以下にあることを想定している


  • (org-mobile-pull) は独自のフォーマットで差分を読み込み,パースして,適用する.

    • Dropbox で同期していれば,MobileOrg アプリは差分情報を (org-mobile-directory)/(org-mobile-capture-file) に保存する

      • (org-mobile-directory) は設定が必要なので,init.el などで設定しているはず.

      • (org-mobile-capture-file) はデフォルトだと,"mobileorg.org"

    • (org-mobile-pull) 時に,(org-mobile-capture-file) から(org-mobile-inbox-for-pull) へコピーする

      • (org-mobile-index-for-pull) のデフォルト値は "~/org/from-mobile.org"

    • この差分を記述するフォーマットはともかく,変更箇所の記述方法が問題

      =~[[olp:<ファイル名>:H1/H2/H3][Head名]]~=
      
      となっている.

    • これを,(org-mobile-locate-entry) が実際のファイルパスとポジションに変換する.

      • このとき,ファイルパスは (org-directry) /<ファイル名>になる.

        • (org-directory) はデフォルトで "~/org"

1.3.2 org-mobile-push の挙動

じゃあ,push はどうなのよというと,実は Agenda ファイルが (org-directory) 以下になくても動くようになっている


  • (org-mobile-push) は.org ファイルを丸々転送している.

    • コピー元は, (org-agenda-files) からファイルパスごと 取ってくる

    • 暗号化しているときは,(org-mobile-capture-file) 経由で暗号化して転送するっぽい

    • でも,この時も .org は暗号化せずに転送しているように見えるけど,大丈夫か?(動かしたわけじゃないから実際はどうなのかわからないけども)


1.4 おわりに

Agenda ファイルはちゃんと,(org-directory) 以下に置きましょう.

どうしてもいやなら,MobileOrg か org-mobile.el を改造しましょう.

2015年1月21日水曜日

org-mobile-pull/push を自動実行する設定


1.1 はじめに

org-mobile でTODO 管理とかすると,PC からの入力がストレスレスで良いのだけど,なにせ,いちいちコマンド叩いて同期するのが面倒.

というわけで,自動的にorg-mobile-pull とかorg-mobile-push とかするようにしてみた.

まだ,この設定で動かした時間短い(30分ぐらい)ので,どこかおかしなところを見逃してる可能性ある.

だから,あんまり鵜呑みにしないようにお願いします.
(追記: 後述のcapture ファイル監視でのpullは動いてないっぽい... 2015/01/21 09:12)





1.2 やること



  • Emacs が開いている間,アイドル時間が一定時間以上でpull してpush
  • org-mobile-capture-file が変更されたらpull (追記: 下記の設定では動いてないぽい)

    • capture ファイルは,org-mobile で同期取るときに使う差分を保持する一時ファイルだったかな? とにかく,他のデバイスとかで編集するとこのファイルが更新されるっぽい.
  • ファイルをセーブするときにはpush
  • ファイルを開くときにはpull




1.3 参考にしたコード



以下のリンクにあるサンプルコードを参考にした

FAQ · matburt/mobileorg-android Wiki

やってることは


  • org-mobile に登録したファイルを保存すると,その後アイドル時間30秒経過するとpush を実行
  • 24時間に一回の頻度でpush
  • Emacs 起動時にpull
  • org-mobile が更新されたらpull




1.4 やってみる




1.4.1 コード





(defvar org-mobile-sync-timer nil
  "Timer that `org-mobile-sync-timer' used to reschedule itself, or nil.")
;;pullしてpush する関数
(defun org-mobile-sync nil
  (interactive)
  (org-mobile-pull)
  (org-mobile-push))

;;idle 時間が60秒経過すると自動でpullしてpush
(defun org-mobile-set-sync-timer nil
  (interactive)
  (setq org-mobile-sync-timer (run-with-idle-timer 10 60 t 'org-mobile-sync)))  ;;修正 2015/01/21 09:04


;;自動pull, push  を無効にする(一応用意してみたが使うかどうか...)
(defun org-mobile-clear-sync-timer nil
  (interactive)
  (cancel-timer org-mobile-sync-timer))

;;↓要修正  (追記:2015/01/21 09:11)
;;指定されたファイルを指定された時間で監視,更新されたらorg-mobile-pull を実行
(defun install-monitor (file secs)
  (run-with-timer
   0 secs
   (lambda (f p)
     (unless (< p (second (time-since (elt (file-attributes f) 5))))
       (org-mobile-pull)))
   file secs))

;; capture ファイルを5秒ごとに監視,更新されたらorg-mobile-pull 実行
(install-monitor (file-truename
                  (concat
                   (file-name-as-directory org-mobile-directory)
                   org-mobile-capture-file))
                 5)

;; org-mobile に登録したファイルを保存するとpush
(add-hook 'after-save-hook
          (lambda ()
            (when (eq major-mode 'org-mode)
              (dolist (file (org-mobile-files-alist))
                (if (string= (file-truename (expand-file-name (car file)))
                             (file-truename (buffer-file-name)))
                    (org-mobile-push)))
              )))

;; org-mobile に登録したファイルを開くとpull
(add-hook 'find-file-hook
          (lambda ()
            (when (eq major-mode 'org-mode)
              (dolist (file (org-mobile-files-alist))
                (if (string= (file-truename (expand-file-name (car file)))
                             (file-truename (buffer-file-name)))
                    (org-mobile-pull)))
              )))
(org-mobile-set-sync-timer)  ;; ←追記 2015/01/21 09:00


  • ファイルをセーブするときpushするコードは,元のコードから遅延を省いただけ.
  • capture ファイル変更でpull するコードは元コードそのまま






1.5 おわりに



とりあえず,これでしばらく使ってみる.

もしかしたら何か問題あるかも知れない.

問題が見つかって,気が向いたらこの記事直します.(無責任)






--
My Emacs Files At GitHub

2015年1月19日月曜日

Emacs Lisp を少し勉強した


1 Emacs Lisp を少し勉強した   gblog



Emacs Lisp のコードを読むときに知らなくて困った(多分)基本的な所をメモ.

困ったときに調べたものだけメモしているので,網羅はしてない.




1.1 コンスセル



「CARスロットおよびCDRスロットと呼ばれる 2つのポインタから成るオブジェクトです。」らしい.

「各スロットは、任意のLispオブジェクトを指すことができます。」

ドット記法とかで表現する.

(A . B) と書くと,A がCARスロット,B がCDR スロット



参考ページ:

GNU Emacs Lispリファレンスマニュアル: Cons Cell Type







1.2 cons obj1 obj2



obj1 とobj2 から成るコンスセルを作る関数.

(cons 1 2) => (1 . 2)





1.3 リスト



リストはコンスセルの入れ子構造.

(1 2 3) と表示する.

この実態は,CARスロットが1, CDR スロットが(2 3) のコンスセル.

2と3 が要素のリスト(2 3) の実態は CARスロットが2, CDR スロットが(3) のコンスセル

3だけが要素のリスト(3) の実態は CAR スロットが3, CDR スロットが空リストの()

ドット表記だと(1 . (2 . (3 . ())

(cons 1 (2 3)) => (1 2 3)

(cons 1 ()) => (1)

また,空リスト() はnil とも書く

つまり,

(cons 1 nil) => (1)





1.4 関数car, cdr



コンスセルのCAR スロットを取り出すのがcar 関数,CDR スロットを取り出すのがcdr 関数.

リストに適用すると,以下のような感じ.

(car '(0 1 2)) => 0

(cdr '(0 1 2)) => (1 2)





1.5 シングルクォートは何?



car やcdr の例では'(0 1 2) とリストの前に「'」がついている.

これは,リストを評価しないようにするためのものらしい.

リストを評価するとは,リストのCAR スロット(第一要素)を関数名,第二引数以降を関数の引数として,計算するということ.

Lisp は(0 1 2) とだけ書いて実行すると,0 を関数名,1 を第一引数,2 を第二引数として計算しようとするらしい.

これをせずに,リストとしてそのまま置いておくために,シングルクォートをつける.

関数名や変数名の前に「'」をつけるのも同じ理由のようである.



参考ページ:

Programming in Emacs Lisp: List Processing



また,別の説明で,おそらくより厳密な説明が以下のリンクにある.

Emacs Lisp

これをちゃんと理解するためには,シンボルというものを理解しないといけないらしい.

また,シンボルなるものの構造については以下のリンクが詳しいと思う.

GNU Emacs Lispリファレンスマニュアル: シンボル

このあたりの理解は今後の課題.





1.6 let



ローカル変数を定義して,最後のリストを評価する.



(let (ローカル変数の定義のリスト) フォーム1 … フォームn)



ローカル変数の定義のリストは以下の構文

((ローカル変数名1 初期値1) ローカル変数名2 … (ローカル変数名n 初期値n))

(ローカル変数名1 初期値1) と言うリストは,ローカル変数名1 が初期値1 で初期化することを示す.

一方,ローカル変数2 とだけ書いていると,ローカル変数2 はnil で初期化する.



フォームとは,Emacs Lisp のコードと思えばいいのかな?

let 全体の戻り値は,最後のフォーム(フォームn) の戻り値になる.



例:

(let ((x 3)) x) => 3

(let ((x 3) (y 2)) x y) => 2 ;; 最後のフォームがlet の戻り値になる

(let ((x 3) (y 2)) (+ x y)) => 5

(let ((x 3) y (z 4)) (list x y z)) => (3 nil 4) ;; (list x y z) はx y z を要素とするリストを返す






1.7 スペシャルフォーム(special form) とマクロ



普通,リストの形式で書いて実行すると,全てのリストが評価される.

しかし,例外があるらしく,それがspecial form というらしい.

先のlet はその一つ.

(let ((x 3) (y 2)) (+ x y)) の(x 3) はリストだが,これを関数として評価していない(したらx なんて関数はないとエラーが出るはず)

一方,一番後ろの(+ x y) は評価されている.

このように,let の引数に関しては,一番後ろしか評価しない,ということになっているようである.

他にも,値を変数に代入するsetq などがそうらしい.



また,スペシャルフォームという言葉を調べていると,マクロという言葉もよく見かける.

マクロは,ユーザー定義のスペシャルフォームらしい.

参考ページ:

スペシャルフォームとマクロ - by shigemk2






1.8 dolist



実は,このブログの内容は,dolist のサンプルコードがわからなくて調べだしたのがきっかけ.

つまり,今回のブログはここがゴール.



dolist もlet のようにスペシャルフォーム.

構文は以下.

(dolist (ローカル変数 リスト [戻り値]) フォーム1 … フォームn)



リストの要素を一つずつローカル変数に代入してフォーム1 からフォームn の処理を繰り返す

python とかでいうforeach 的なやつ.

戻り値を設定しないと,dolist の戻り値はnil になる.

また,戻り値に未定義の変数は使えないので,予め定義する必要がある.

例:

(let ((sum 0)) ;; 戻り値に使う変数を定義

(dolist (x '(1 2 3) sum)

(setq sum (+ x sum)))) => 6






--
My Emacs Files At GitHub

2014年12月11日木曜日

org-export-as が吐く html の文字コードでハマる


1 org-export-as が吐く html の文字コードでハマる



org-googlecl (https://github.com/rileyrg/org-googlecl) でこのブログに記事を投稿するためにごにゅごにょやってたらハマった.

(ちなみに,org-googlecl は4年前から更新されてないみたいで,Org-mode のバージョンアップに合わせて自分で直さないと動かない)

僕の環境では, org-googlecl-blog というコマンドで blogger で投稿するようになってる.

このコマンドの中では,Org-mode のフォーマットを HTML に変換したあとに少し整形して googlecl のコマンドに渡すということをやってる.

この HTML に変換する処理を今は (org-export-as 'html nil t nil nil) という関数でやっているのだが,これがEUC-JP しか吐いてくれない.

EUC-JP だと googlecl さんがエンコードできねーと文句言うもんだからさて困った.



結論としては, org-googlecl-blog コマンドを叩く前に C-x RET c でコマンドを実行する際の文字コードを utf-8 に指定すればとりあえず utf-8 で HTML が吐かれるようになった.

なんか,釈然としないが,とりあえず今日はつかれたし,こんなことやってる場合ではないような気がするのでこれで置いとく.





--
My Emacs Files At GitHub

Org-mode で C-c C-e l 押下でLaTeXに\ エクスポートできなくなった時の話


1 Org-mode で C-c C-e l 押下でLaTeXにエクスポートできなくなった時の話   gblog



Org-mode で LaTeX へエクスポートしようと C-c C-e l 押下すると, Symbol's function definition is void: org-e-latex-export-to-latex とか言われたので場当たり的に対処

半年か一年か放ったらかしになっていた古いEmacs, Org-mode の設定で,Gentoo さんがバシバシアップデートしてくれるEmacs とOrg-mode を使えばやっぱり問題が起きるわけで.

とりあえず,対処療法的に問題が見つかったら潰している感じ.

今回は,Org-mode C-c C-e l でLaTeX をエクスポートしようとしたら, Symbol's function definition is void: org-e-latex-export-to-latex と言われたので対処.




1.1 環境



現環境



  • Emacs version: GNU Emacs 24.4.1


  • Org-mode version: Org-mode version 8.2.6



以前使ってた環境(うろ覚え)



  • Emacs version: GNU Emacs 23.4 くらいだったような気がする


  • Org-mode version: 7.9.3 くらいだったような気がする






1.2 org-e-latex-export-to-latex って何?



昔の Org-mode の Contrib の中にある関数らしい.

どうやら設定ファイルの中で古い Org-mode の Contrib を呼び出してるのがまずいらしい.






1.3 問題回避(解決したとは言ってない)



以前,org-md (Markdown へのエクスポートなどの機能を提供する) を試すために,org-mode/contrib/lisp をロードしていたが,正直全く使ってない.

なので,とりあえず今回は org-mode/contrib/lisp のロードをやめるようにした.

これで,=C-c C-e l l= でLaTeX へエクスポートされるようになった.






--
My Emacs Files At GitHub

2013年6月18日火曜日

Emacsで複数行に文字列を挿入する方法


Emacsで以下を実行




M-x string-rectangle


もしくは




C-x r t


で可能.

自動インデントが効かないときなどに複数行右にずらす(スペースをいれる)のに便利.

左にずらす(スペースを消す)ときは M-x delete-rectangle もしくは C-x r d でOK.





--
My Emacs Files At GitHub

2013年4月5日金曜日

Emacs上で動作するTwitterクライアント(Twittering-mode)をインストールする


はじめに




この記事では,Emacs上で動作するTwitterクライアントである,Twittering-modeのインストール手順を解説する.

なお,Twittering-modeの使い方に関しては解説しない.

使い方に関しては,EmacsWiki: TwitteringMode-ja を参照するとよい.




インストール環境



今回Twittering-modeをインストールした環境を以下に示す.
OS: Mac OS X 10.7.5
Emacs: GNU Emacs 23.4.1


インストール手順





  1. twittering-modeのリポジトリをクローン

    Git を用いてtwittering-modeのリポジトリをクローンする.




    git clone git://github.com/hayamiz/twittering-mode.git


    Githubページ: https://github.com/hayamiz/twittering-mode

    リポジトリを丸ごと取ってくるのが嫌な人や,Gitを使いたくない人は,sourceforgeからダウンロードできる.









  1. Emacsの設定ファイルを編集

    Emacsの設定ファイルに以下の設定を追加する.




    (add-to-list 'load-path "展開したtwittering-modeディレクトリのパス")
    (require 'twittering-mode)
    (setq twittering-use-master-password t)


    3行目の twittering-use-master-password はtwittering-modeを起動する度にアプリの認証を行わないで済むようにするためのものである.

    twittering-use-master-password の機能を用いるためには GnuPG というものが必要である.

  2. GnuPGをインストール.

    GnuPGとは,公開鍵や秘密鍵なんかをいい感じに扱ってくれるものらしい(適当ですみません).

    ともかく, twittering-use-master-password の機能を用いるために必要なのでインストールする.

    GnuPGはMacPortsを使ってインストールできる.

    ターミナルで以下を実行する.




    sudo port install gnupg


  3. Twittering-modeを起動する.

    以上の手順を終えた後に,Emacsを再起動し, M-x twit と押下.

    すると,Twittering-modeが起動される.

  4. Twittering-modeを認証する.

    Twittering-modeを初めて起動するとき,Emacsのミニバッファに以下のメッセージが表示される.




    Open authorization URL with browser? (using `browse-url')(y or n) 


    このメッセージが表示されたら, y を押下する.

    すると,ブラウザでTwitterのページが開き,Twittering-modeを認証するか否か問われる.

    ここで,認証すると,PINコードが表示される.

    このPINコードをEmacsのミニバッファに入力する(コピペでOK).

    最後に,次回起動時から入力するパスワードを設定する.

    設定するパスワードを2回入力すると,Twittering-modeが起動し,Emacsにタイムラインが表示される.




    次回の起動からは,設定したパスワードを入力するだけで起動することができる.










おわりに




Twittering-modeのインストールの手順を解説した.







--
My Emacs Files At GitHub

2013年2月24日日曜日

Edit with Emacsを試す


Edit with Emacsとは




Edit with EmacsというGoogle Extentionがある.

これは,Google chromeで開いたページ内のテキストエリアで編集するとき,Emacsを用いて編集することができる,というものである.

割と簡単に使える.






導入手順





  1. Edit with Emacs からEdit with EmacsをChromeにインストールする.


  2. Edit with EmacsのオプションのInformationにedit-server.elへのリンクがあるので,このリンクから,edit-server.elを入手.

    もしくは,githubの https://github.com/stsquad/emacs_chrome.git からリポジトリとともにedit-server.elを入手.

    githubから入手した場合,edit-server.elは emacs_chrome/servers/ 内にある.


  3. edit-server.elを置いたディレクトリをload-pathに追加し,edit-server.elをロードするようにする.


  4. 設定ファイルに以下を追加




    (require 'edit-server)
    (edit-server-start)



  5. Emacsを再起動.












使い方







Chrome側で,テキストエリアを編集する時にテキストエリアの下に小さく表示されるeditボタンを押下するか,chromeの右上にあるEmacsのアイコンを押下することにより,テキストエリアを編集するためのフレームが起動し,編集できる.

C-x C-sでテキストエリアに反映,C-x C-cで編集キャンセルである.






感想




テキストエリアで長文を編集するときは便利そう.

自分の場合はFC2ブログで記事を書くときなど.

Emacs側のモードをOrg-modeに変えれば,表や箇条書きも楽に書ける.




個人的には,C-x C-sでテキストエリアに反映する時に,フレームを閉じて欲しい.

しっかり使うなら,コードを弄って対策してみたい.













--
My Emacs Files At GitHub

2013年2月10日日曜日

Org-mode内に書いたソースコードを実行する


はじめに




Org-modeでは,プログラムを記述して,その場で実行するOrg-babelという機能がある.

今回は,この使い方が判明したので,書いておく(忘れないために).









使い方




まず,Org-modeで以下のように書く.




#+BEGIN_SRC emacs-lisp
(+ 1 2)
#+END_SRC



そして,SRCブロック内で \C-c \C-c と打つと,以下のように出力される.




#+RESULTS:
: 3









困ったことが…




使い方は単純であるが,何も設定しないとEmacs-lisp以外のソースコードは実行できない.

この設定が今まで面倒で使っていなかった.




今回は,この使い方が判明したので,書いておく.









Emacs-lisp以外でOrg-babelを使うには




Emacsの設定ファイル( ~/.emacs.d/init.el ) などに以下の設定を書く.




(org-babel-do-load-languages
'org-babel-load-languages
'((emacs-lisp . t)
(C . t)))





この例では,C言語を追加している.












結果




結果は以下の通り.







#+BEGIN_SRC C
int main(){
printf("Hello Org-babel!\n");
return 0;
}
#+END_SRC

#+RESULTS:
: Hello Org-babel!









おわりに




Org-babelの使い方を書いた.

慣れてないせいか,言語によって実行するまでにどの程度書かないといけないのかがよくわからない.

javaとScalaはどうも実行できない…













--
My Emacs Files At GitHub

2013年1月27日日曜日

Org-modeでタスク管理する時に使いそうなキーバインド(主に計時関連)


タスクを管理するとき,タスクの処理に掛かる時間を管理することも重要である.

Org-modeでは,タスクにかかる時間をはかり,記録するための機能がある.

この機能を用いるためのキーバインドを表にしておく.

ただそれだけの記事.


キー内容
C-c C-x C-i計時開始
C-c C-x C-o計時終了
C-c C-x C-j計時中のツリーに移動
C-c C-x C-d各ツリーの合計所用時間を計算 (C-c C-c で表示を戻す)
C-c C-s作業予定日を設定
C-c C-x C-e努力目標時間を設定









--
My Emacs Files At GitHub

2012年12月22日土曜日

orgのバージョンを7.9.2にするとorg-googlecが使えなくなる件


Org-modeのバージョンが6.3くらいで古かったのでバージョンを上げた.
すると,Org-modeからこのブログに投稿するために使っているorg-googlecが使えなくなった.
今回は,この問題に対処する.

環境





OS
Mac OS X 10.7.5

Emacsバージョン
23.4.1

Org-modeバージョン
7.9.2







症状




http://tokikane-tec.blogspot.jp/2012/09/emacsblogger6970.html
で紹介した通り,
M-x org-googlecl-blog
を実行すると,以下のエラーメッセージが出力される.



let: Symbol's function definition is void: org-forward-same-level


どうやら, org-forward-same-level という関数がないらしい





原因




結論から言うと, Org-modeの関数名が変わってる のが原因.
具体的には, org-forward-same-level という関数の名前が org-forward-heading-same-level に変わった.
ちなみにこの関数は,今カーソルがあるネストのレベルと同じレベルの次の要素の先頭に移動する関数である.
そして,org-googlecは org-forward-same-level 内部で使っていた.
このために上記のようなエラーが出た,というわけである.





対処




関数の名前が変わったなら,呼び出す部分のソースコードを弄ればいい.
org-googlecl.elの



(org-forward-same-level 1 t)   


という行を



(org-forward-heading-same-level 1 t)   


と書き直す.
これで無事問題が解決する.





おわりに(余談)




どのバージョンを境に関数名が変わったかは不明である.

Org-modeは,結構,昔の環境のことを考えずに変更が加えられることがある.
以前もOrg-modeの参照で :- に置換するという(おせっかい)機能がついていて,はまった.
自分はいつも fig:hoge みたいな書き方をするので困った.

あとこういうのってgithubでpull requestを出して本家を直してもらう,というのがいいのだろうか?
今までpull requestを出したことがないので,よくわからない.










--
My Emacs Files At GitHub

2012年11月11日日曜日

Emacsのバックアップファイルの保存先変更


Emacsでファイルを編集すると,バックアップファイル(<ファイル名>~) や 自動保存ファイル(#<ファイル名>#) が自動生成される.
MacでEmacsを使っていると,時たまEmacsが落ちるので,これらは重宝する.
これらがあれば,Emacsが不正終了して,保存できていなかったファイルでも,コマンド一つで編集途中の状態に復旧できるからだ
(M-x recover-this-file で復旧できます.)

しかし,これらのファイルの自動生成には,いくつか困ったことがあります.


  1. 編集しているとディレクトリと同じディレクトリに作成される

    このため,ディレクトリの中が散らかる



  2. Dropboxのディレクトリの中のファイルを編集すると,バックアップファイルまで同期される.





これらを解決するために,バックアップファイルの保存先ディレクトリを変更します.



ディレクトリの変更方法




まずはバックアップファイルの保存先ディレクトリを変更します.
~/.emacs/init.el に以下を追加します.




(setq backup-directory-alist
(cons (cons ".*" (expand-file-name "~/.emacs.d/backup"))
backup-directory-alist))






".*" は正規表現でバックアップファイルを生成するファイルを指定しています.
".*" は任意の文字列に一致する正規表現です.
ですので,任意のファイルに対して,バックアップを生成します.
(expand-file-name "~/.emacs.d/backup") の部分は,バックアップファイルの保存先ディレクトリを指定しています.
この例では, ~/.emacs.d/backup というディレクトリに保存することになります.

次に自動保存ファイルの保存先ディレクトリを変更します.



(setq auto-save-file-name-transforms
`((".*", (expand-file-name "~/.emacs.d/backup/") t)))





先の同様,".*" は自動保存ファイルを生成するファイルを正規表現で指定しています.
また, (expand-file-name "~/.emacs.d/backup") は自動保存ファイルの保存先ディレクトリを指定しています.

これで,<ファイル名>~ や #<ファイル名># でディレクトリが散らかったり,Dropboxの同期のポップアップを見て悲しい気持ちにならずに済む!(はず)







--
My Emacs Files At GitHub

2012年9月16日日曜日

Emacsからbloggerへ記事を投稿する




実行環境






  • Mac OS X 10.7.4


  • GNU Emacs 23.4.1






googleclのインストール




ターミナルで以下のコマンドを実行
sudo port install googlecl
Ubuntuならapt-get でできるかも(やってないけど)





googlecl.elのインストール




https://github.com/rileyrg/org-googlecl
からZIPをダウンロードし,適当なところに展開し,ファイルのパスをload-pathに追加する.






Emacsの設定




.emacs に以下の設定を追加する.
(require 'org-googlecl)
(setq googlecl-blogname "ブログの名前")
(setq googlecl-username "gmailのアドレス(hogehoge@gmeil.com)")





投稿方法




Emacs上で投稿したい記事(見出し)にカーソルを合わせ
M-x org-googlecl-blog
を実行する.
カーソルを合わせている見出しの部分木がブログとして認識される.





余分な行間への対策




以上の手順を踏めば投稿はできるのですが,行間が無駄に大きく見栄えが悪いです.
これは,(参考URL(2)曰く)出力結果のhtmlが余分に<p>タグを出力しているかららしいです.
ということで,googlecl.elを改造します.
googlecl.elの135行目あたりの

(with-temp-file tmpfile
(insert bhtml)
(goto-char (buffer-end 1))


(with-temp-file tmpfile
(insert (replace-regexp-in-string
"<p>\n*\\(\\(.*\n\\)+?\\)</p>"
"\\1" bhtml))
(goto-char (buffer-end 1)))
と書き換えます.
おそらく正規表現を用いて,出力結果のhtmlの<p>部分を変換してると思われます.





おわりに




この記事は上記の通りに行って投稿した記事です.
今後は,もう少し見栄えがよくなるようにしてみたいです.
あと,プレビューできないのも困るので,なにかいい方法があればいいな…と思ってます.






--
My Emacs Files At GitHub