Emacs から shell コマンドを実行する

先日知ったのですが Emacs でファイルを編集していてちょっとだけ shell でコマンドを打ちたいというときには M-! とすればよいみたいですね。

ターミナルや iTerm に切り替えるほどではなく、eshell などを立ち上げるのは手間である、そういうときに上記キーバインドを入力するとミニバッファでコマンドを実行できるのです。

alt

ミニバッファで

alt

シェルのコマンドを

alt

入力して

alt

実行できるのです。

使用例としては Emacs で Python を書いていて、少し変更を加えたので実行したいというときに Emacs からターミナルへと意識をスイッチする必要がなく、その場でちょこちょこと実行できるのが便利でした。

more ...

Emacs scratch バッファの内容を保存しておいて読み込む

Emacs を起動したときに最初に開かれる scratch というバッファがあります。 temporary な内容をちょっとメモしておくのに使ったりしていますが、間違って Emacs を終了してしまった場合などにバッファの内容が失われてしまう点がネックとなっていました。

scratch バッファを使わずに別途即座に使い捨て用途のファイルを開く、open-junk-file.el という elisp もあり、私も便利に使っていますが、それでもたまには scratch に何かを書いておきたくなることがあります。

少し検索したところ Emacs 終了時に scratch バッファの内容をファイルに保存して、次回起動時にその内容を読み込んで scratch バッファを復元する elisp を公開している方が見つかりました。

保存するファイルのパスだけ変更して、init.el に書き加えました。

;; scratch バッファの内容をファイルに書き出して保持する
(defun save-scratch-data ()
  (let ((str (progn
               (set-buffer (get-buffer "*scratch*"))
               (buffer-substring-no-properties
                (point-min) (point-max))))
        (file "~/.emacs.d ...
more ...

org-mode ファイルごとの設定について

以前から Emacs の org-mode は何となく使っていて、適当な使い方であっても他には代えがたい便利さがあるので私にとっては手放せないツールの一つとなっています。

最近、タスク管理について少しまじめに取り組もうかという思いが強くなり、org-mode について色々と調べていたのですが、便利な設定の存在を知ったので書いておきます。例えば以下に挙げたようなことが設定可能です。

  • ファイルを開いた時の見出しの展開具合(トップレベルのみ or 全ての見出し など)
  • トップ以下の見出しのアスタリスク * を右端のみ表示にする
  • TODO ステータスを DONE にしたタイムスタンプを記録する
  • TODO キーワードやタグを設定する

いくつか設定例を見てみましょう。

;; トップレベルのみ表示(デフォルト)
#+STARTUP: overview

;; すべての見出しを表示
#+STARTUP: content

;; 何も折りたたまず全体を表示
#+STARTUP: showall
;; 見出しの全てのアスタリスク * を表示
#+STARTUP: showstars

;; 見出しの右端のアスタリスク * のみを表示
#+STARTUP: hidestars
;; タグを設定
#+TAGS: hoge(h) fuga(f ...
more ...

Python ファイル作成時のテンプレートを設定

以前に .rst ファイルのテンプレートを作成したのと同じ要領で .py ファイルにも autoinsert を使って、必要な部分が最初から挿入されているように設定しました。

Python の本や他人のコードなどでよく見られるお約束的な部分(__name__ が __main__ かどうかを見る)について、これまでは何となく避けていましたが、今後は基本に忠実に、真似るべきところは真似るようにしていきます。

#!/usr/bin/env python
#-*- coding: utf-8; -*-


def main():
    pass


if __name__ == '__main__':
    main()

こういうテンプレートファイル(template.py)を用意して init.el を少し編集します。

;; 各ファイルによってテンプレートを切り替える
(setq auto-insert-alist
      (nconc '(
               ("\\.rst$" . ["template.rst" my-template])
               ("\\.py ...
more ...

Emacs で背景色の透過設定を変更する

Emacs の背景色を黒にして少し透過するように(背面のウィンドウが見えるように)して使っています。自宅や会社の環境ではディスプレイが複数あるので透過させる必要性はそれほどは感じませんが、ノート PC では表示領域に限りがあるためブラウザを確認しながら Emacs でファイルを編集するということが難しい場合があります。

それぞれを左右に並べると Emacs はともかくとして、ブラウザの方は横方向のスクロールを多用せざるを得なくなったりして、使い心地がイマイチです。

そういうときには Emacs の背景を透過させて、前面にある Emacs のウィンドウから背面のブラウザが透けて見えるようにすることで凌ぐというのもひとつの手ではないでしょうか。

これまでは init.el に下記の設定を書いていました。

;; Color
(if window-system (progn
    (set-background-color "Black")
    (set-foreground-color "LightGray")
    (set-cursor-color "Gray")
    (set-frame-parameter nil 'alpha 70) ;透明度
    ))

ただ、これで完璧かというとそうでもなく、もう少し透過させたいときや、逆にブラウザで表示しているページが派手だったりすると Emacs でのファイル編集時に目障りになったりして、透過しないようにしたいという場合もあります。

そのたびに init.el ...

more ...

Emacs でバッファを常に自動で保存する

書籍 Binary Hacks やインクリメンタル検索の Migemo 等で有名な(と個人的には認識していました)高林哲さんのエントリで紹介されていた auto-save-buffers を導入してみました。

指定した時間ごとに変更があったバッファを自動で保存してくれるので C-x C-s を自分で入力する必要がなくなります。とりあえず標準の 0.5 秒で設定してみます。ちょっとでも編集するとすぐ保存されます。

なかなか便利そうで気に入りました。ただ、Dropbox で他の人と共有しているファイルの場合だと、保存するたびに相手のデスクトップでは「ファイルが更新されました」という通知が発生することになり、かなりうるさくなってしまうので特定のディレクトリにあるファイルを除外するようにします。

;; auto-save-buffers
;; http://0xcc.net/misc/auto-save/
(require 'auto-save-buffers)
;; Dropbox/share 以下のファイルは除外する
(run-with-idle-timer 0.5 t 'auto-save-buffers "" "Dropbox/share/.*\\..*$")

auto-save-buffers の引数としてディレクトリ・ファイル名の正規表現を渡せるようになっていました。ふむふむ。

あ ...

more ...

Pelican で手軽に記事ファイルを作成する

Pelican では reST 形式でテキストファイルを作成してその中身が HTML として作成されます。Emacs で autoinsert を使ってメタデータのテンプレートが自動で入るようにしたり していますがさらにお手軽に reST のテキストを書けるようにしたいと思い、少し Emacs をいじっていました。

  1. open-junk-file を流用して reST ファイルを作成する
  2. key-chord を設定して df 同時押しで↑を実行する

やったことは簡単で、まず open-junk-file.el をコピーしてリネームします。適当に open-rest-file.el としておきました。 ファイルの中身を開いて open-junk-file という文字列をすべて open-rest-file に置換します。

init.el に設定を書きます。ファイルの保存先ディレクトリとファイル名の形式を指定しましょう。

;; open-rest-file
;; open-junk-file をコピー
;; http://d.hatena.ne ...
more ...

Emacs のフォントサイズを変更する

Emacs のフォントサイズを変えたいというときに、これまでは init.el に書いている設定を書き換える方法しか知りませんでした。先日別のことを調べている際にもう少し便利な方法があることを知りました。

C-x C-+ ;; フォントを大きくする
C-x C-- ;; フォントを小さくする

上記キーバインドで現在のバッファのフォントサイズを変更できるのですね。(英字配列のキーボードの場合)"+" は shift と = を押さなくても = だけで大丈夫でした。

一回これを入力すると、ミニバッファに

+,-,0 for further adjustment:

と表示されて、続けて +,-,0 を単独で押せばそのままさらに大きく(小さく)したり、デフォルトの大きさに戻したりすることができます。これはなかなか便利ですね。

more ...