最新情報

2016年7月24日dired
emacs openwith.el : C-x C-fやdiredで外部プログラムを使ってファイルを開く | MELPA Emacs Lisp Elisp パッケージ インストール 設定 使い方
2016年7月23日Emacs
emacs sudo-edit.el : ★MELPA最短行数★rootでファイルを開く・カレントバッファを開き直す | MELPA Emacs Lisp Elisp パッケージ インストール 使い方
2016年7月22日Emacs
Emacs: popup.elをhelmやidoに置き換える方法
2016年7月21日Emacs
Emacs org-mode: org-clock-out-hookの罠!
2016年7月20日Emacs
Emacs組み込みWebブラウザEWWでテキストの横幅を指定する方法

このエントリーを含むはてなブックマーク Buzzurlにブックマーク livedoorクリップ Yahoo!ブックマークに登録

emacs openwith.el : C-x C-fやdiredで外部プログラムを使ってファイルを開く | MELPA Emacs Lisp Elisp パッケージ インストール 設定 使い方

パッケージ名 openwith
概要(原文) Open files with external programs
リポジトリ MELPA
取得先
バージョン 20120531.1436
関連記事 package:openwith package:dired-open package:runner package:unify-opening package:runner

openwith.elは外部プログラムを使って
ファイルを開くパッケージです。

たとえばPDFを開きたいときは
専用のPDFビューアで開きたいと思う人もいるでしょう。

グローバルマイナーモード M-x openwith-mode を有効にすれば
C-x C-fでシームレスに外部プログラムでファイルを開けます。

dired-open.el(レビュー) のように
diredからでも外部プログラムを利用するようになります。

openwith.elの特徴は、
外部プログラムの親プロセスをEmacsから切り離すので、
たとえEmacsが落ちても外部プログラムまで道連れにはしません。
unixではnohupコマンドを、Windowsではopenコマンドを使用します。

openwith インストール

このパッケージはmelpaにあるので パッケージの初期設定 を行ってください。

M-x package-refresh-contents
M-x package-install openwith

設定 160724112210.openwith.el(以下のコードと同一)

(when (require 'openwith nil 'noerror)
  (setq openwith-associations
        (list
         (list (openwith-make-extension-regexp
                '("mpg" "mpeg" "mp3" "mp4"
                  "avi" "wmv" "wav" "mov" "flv"
                  "ogm" "ogg" "mkv"))
               "vlc"
               '(file))
         (list (openwith-make-extension-regexp
                '("xbm" "pbm" "pgm" "ppm" "pnm"
                  "png" "gif" "bmp" "tif" "jpeg" "jpg"))
               "geeqie"
               '(file))
         (list (openwith-make-extension-regexp
                '("doc" "xls" "ppt" "odt" "ods" "odg" "odp"))
               "libreoffice"
               '(file))
         '("\\.lyx" "lyx" (file))
         '("\\.chm" "kchmviewer" (file))
         (list (openwith-make-extension-regexp
                '("pdf" "ps" "ps.gz" "dvi"))
               "okular"
               '(file))
         ))
  (openwith-mode 1))

実行方法

$ wget http://rubikitch.com/f/160724112210.openwith.el
$ emacs -Q -f package-initialize -l 160724112210.openwith.el

タグ

2016/07/24 | コメント/トラックバック(0) |

カテゴリー:dired Emacs

emacs sudo-edit.el : ★MELPA最短行数★rootでファイルを開く・カレントバッファを開き直す | MELPA Emacs Lisp Elisp パッケージ インストール 使い方

パッケージ名 sudo-edit
概要(原文) Utilities for opening files with sudo
リポジトリ MELPA
取得先 https://github.com/nflath/sudo-edit
バージョン 20160627.1203
関連記事 package:sudo-edit package:tramp package:sudo-ext package:crux

sudo-edit.elはカレントバッファ・任意のファイルを
root権限で開き直すコマンドを2つ提供しています。

M-x sudo-edit はファイルをroot権限で開きます。
システムファイルを編集するときに便利です。
なお、C-u M-x sudo-editでカレントバッファをrootで開き直します。

M-x sudo-edit-current-file は現在位置を保持したまま
カレントバッファをrootで開き直します。

たった6行のコマンドを2つだけ定義しているので、
おそらくMELPAで登録されているパッケージで最短行数 でしょう。
このように短いパッケージでもMELPAに登録されるので、
自分用のコマンドで他人にとっても便利だと感じたならば
思い切ってMELPAに登録申請 すればいいです。
これがEmacs界全体への貢献となります。

この記事から新たなカテゴリ「ソース解読推奨 」を作成しました。
Emacsを深く理解したい方、elispを学びたい方が読めば
勉強になると判断したパッケージをこのカテゴリに入れます。

sudo-edit インストール

このパッケージはmelpaにあるので パッケージの初期設定 を行ってください。

M-x package-refresh-contents
M-x package-install sudo-edit

タグ

Emacs: popup.elをhelmやidoに置き換える方法

popup.elはauto-complete.elでも使われているように素晴しいelispです。
とはいえ、中には候補選択インターフェースとして
helm(カテゴリ)ido(カテゴリ) の方が好きな人もいるでしょう。

popup.elのポップアップメニューのエントリポイントは popup-menu* 関数です。
リストを取り、その中のたった1つの候補を返します。

それならばhelmやidoの同種の関数に置き換えることは
nadvice.elによるoverrideアドバイス を使えば簡単です。

popup-menu*関数は 先日紹介した dump-jump.el でも使われています。

helm化する

(defun popup-menu*--helm (selection &rest ignore)
  (helm-comp-read "Popup menu: " selection :must-match t))
(advice-add 'popup-menu* :override 'popup-menu*--helm)

ido化する

(defun popup-menu*--ido (selection &rest ignore)
  (ido-completing-read "Popup menu: " selection nil t))
(advice-add 'popup-menu* :override 'popup-menu*--ido)

タグ

Emacs org-mode: org-clock-out-hookの罠!

僕は普段の作業をorg-modeのclock機能を使って管理しています。

メルマガ登録者 限定特典で僕の秘技「org習慣仕事術」もclock機能をシンプルかつ効果的に使う方法です。
この方法は絶大ですので、ぜひとも登録していただけると嬉しいです。

僕はいつも音楽をかけながら作業をしていますが、タスクによっては音楽を一時停止したいこともあります。
そこで、タスクの見出しのタグに「pause」が含まれている場合は、そのタスクを開始したら音楽を一時停止し、終了したら再生するような設定にしています。
多くのメディアプレイヤーではシェルから再生中の音楽・動画の一時停止機能があります。

そこで以下のようなコードを書きました。

(defun org-clock-get-tags ()
  "Get the list of tags specified in the current clocking task."
  (save-excursion
    (set-buffer (marker-buffer org-clock-marker))
    (goto-char org-clock-marker)
    (org-get-tags-at)))
(defun pause-music ()
  (interactive)
  (shell-command-to-string "音楽を停止するコマンド(各自で)"))
(defun org-clock-in/out-hook--pause-music (&rest ignore)
  (when (member "pause" (org-clock-get-tags))
    (pause-music)))

ここまでは問題ありません。

最初は以下のように設定しましたが、ここからが問題です。

(add-hook 'org-clock-in-hook 'org-clock-in/out-hook--pause-music)
(add-hook 'org-clock-out-hook 'org-clock-in/out-hook--pause-music)

確かにclock-inしたときには音楽は止まるのですが、
clock-outしてたときにエラーになります。
その原因は
org-clock-out-hookが実行されるのはclock-out後である
からです。
そのため (org-clock-get-tags) でclock-inされてないとエラーになります。

member: Wrong type argument: stringp, nil
org-agenda-clock-out: No running clock

かといって、clock-outする直前に実行するフックは存在しません。
そういう場合はadviceを使う ことになります。

(add-hook 'org-clock-in-hook 'org-clock-in/out-hook--pause-music)
;; org-clock-out-hookではすでにclock out後なのでclock out前に実行する必要あり
(advice-add 'org-clock-out :before 'org-clock-in/out-hook--pause-music)

非対称になってしまいますが、とりあえずこれで動作します。

タグ

Emacs組み込みWebブラウザEWWでテキストの横幅を指定する方法

Emacs 24.4、Emacs 24.5のEWWは(Emacs25は未確認)、
ウィンドウの幅に応じてテキストの幅を自動調節しています。

それはウィンドウの横幅が長いと
テキストの横幅も長くなってしまい、
読みづらくなってしまうことを意味します。

そこで、テキストの幅を70桁に固定してみました。

カスタマイズ変数がないので
nadvice.elによるアドバイス を使いました。

(defun shr-insert-document--for-eww (&rest them)
  (let ((shr-width 70)) (apply them)))
(defun eww-display-html--fill-column (&rest them)
  (advice-add 'shr-insert-document :around 'shr-insert-document--for-eww)
  (unwind-protect
      (apply them)
    (advice-remove 'shr-insert-document 'shr-insert-document--for-eww)))
(advice-add 'eww-display-html :around 'eww-display-html--fill-column)

タグ

emacs contrast-color.el : Google Material Designでのコントラストカラーを得る関数 | MELPA Emacs Lisp Elisp パッケージ インストール 設定 使い方 スクリーンショット

パッケージ名 contrast-color
概要(原文) Pick best contrast color for you
リポジトリ MELPA
取得先 https://github.com/yuutayamada/contrast-color-el
バージョン 20160713.1211
関連記事 package:contrast-color package:rainbow-mode

contrast-color.elはたったひとつの関数 contrast-color を提供します。
CIEDE2000 アルゴリズムにおけるコントラストカラーを返す関数です。
それはGoogle’s material design’s colors に基いています。

20160719115618.png
Fig1: 実行例(M-x lispxmp→M-x fundamental-mode→M-x rainbow-mode)

contrast-color インストール

このパッケージはmelpaにあるので パッケージの初期設定 を行ってください。

M-x package-refresh-contents
M-x package-install contrast-color

タグ

2016/07/19 | コメント/トラックバック(0) |

カテゴリー:Emacs

emacs dumb-jump.el : すぐ使える多言語対応関数・変数定義ジャンパー | MELPA Emacs Lisp Elisp パッケージ インストール 設定 使い方 スクリーンショット

パッケージ名 dumb-jump
概要(原文) jump to definition for multiple languages without configuration.
リポジトリ MELPA
取得先 https://github.com/jacktasia/dumb-jump
バージョン 20160715.1740
関連記事 package:dumb-jump package:ag package:etags package:gtags package:robe package:elpy package:popup

dumb-jump.elは複数のプログラミング言語に対応した
関数・変数定義にジャンプするパッケージです。
タグファイルなどは使わずag(the_silver_searcher)を使うのが特徴です。

タグファイルがあると確かに高速にジャンプできますが、
メンテナンスの手間がかかります。

最近のコンピュータは高性能なので小中規模のコードは
agによって腕づくで検索してしまった方が手軽です。

もっとも、大規模な開発においてはタグファイルがあれば高速です。

agがインストールされていない場合はgrepを使いますが、
速度面などの観点から是非ともagをインストールしておいた方がいいです。

このパッケージの特徴は、TAGSファイルなどを使わずに
カレントバッファのメジャーモードや拡張子に応じて
ag(grep)に渡す正規表現を決定し、定義と思われる場所にジャンプします。

もし、一箇所に決定できない場合はポップアップメニューで選択肢が出てきます。

動的言語によるDSLまでは対応していませんが、
普通の関数定義・変数定義にはジャンプできる程度の精度はあります。
たとえばelispでいえばdefine-minor-modeなどで定義された関数にはジャンプできません。
elispでは素直にファイルをロードして find-function などでジャンプする方が確実です。

dumb-jump インストール

このパッケージはmelpaにあるので パッケージの初期設定 を行ってください。

M-x package-refresh-contents
M-x package-install dumb-jump

対応言語

  • JavaScript
  • Emacs Lisp
  • Python
  • Go
  • PHP
  • Ruby
  • Scala
  • Clojure
  • Faust
  • R
  • Lua
  • Rust
  • CoffeeScript

使えるコマンド

マイナーモード M-x dumb-jump-mode を有効にしたら、()内のキーバインドが使えます。

dumb-jump-go (C-M-g)
定義にジャンプする
dumb-jump-back (C-M-p)
ジャンプ前の場所に戻る
dumb-jump-quick-look (C-M-q)
定義位置をエコーエリアに表示する

Rubyでの使用例

以下のRubyスクリプトを例にします。

class A
  def sub1                      # (1)
    1
  end

  def sub2                      # (2.2)
    2
  end
end

class B < A
  def sub2                      # (2.1)
    22
  end

  def main
    sub1                        # *1
    sub2                        # *2
  end

end

「*1」のsub1でC-M-gを押したら(1)の行にジャンプします。
「*2」のsub2でC-M-gを押したら(2.1)の行にジャンプし、再度実行したら(2.2)の行にジャンプします。

elispでの例

dumb-jump.elと同じディレクトリにelファイルを作成します。

(defun a ()
  (interactive)
  (dumb-jump-mode)
  (dumb-jump-go))

dumb-jump-modeはdefine-minor-modeによる定義なのでジャンプできませんが、
dumb-jump-goはpopup.elによる選択肢が現れます。
C-p/C-nで選択してRETで決定します。

20160718173803.png
Fig1: 複数の候補が出てきたらpopupされる

.dumbjumpで検索先を増やす

プロジェクトルートディレクトリに .dumbjump ファイルを置いておくと、
定義の検索先を増やしたり減らしたりできます。

たとえば「+」に絶対パス(~は未対応)を指定すれば、使用ライブラリも定義検索の対象になります。
対して「-」を指定すれば検索対象外にできます。

.dumbjumpファイルなしでは「-filter」などの定義はジャンプできないですが、
作成することでジャンプできるようになります。

たとえばquelpa を使っていてf/s/dash/popupのライブラリが以下のディレクトリにある場合は.dumbjumpの内容を以下のようにします。

+/home/rubikitch/.emacs.d/quelpa/build/f/
+/home/rubikitch/.emacs.d/quelpa/build/s/
+/home/rubikitch/.emacs.d/quelpa/build/dash/
+/home/rubikitch/.emacs.d/quelpa/build/popup/

対応言語を増やすには

各プログラミング言語ごとの正規表現設定は dumb-jump-find-rules 変数に、
拡張子と言語名とagのファイルタイプは dumb-jump-language-file-exts に、
コンテキスト情報は dumb-jump-language-contexts に定義されています。

とくに dumb-jump-find-rules は複雑ですが、
なんとか読み解けば対応言語を増やせるでしょう。
なお、:regex内のJJJは現在のシンボル、「\\j」は単語の境界を表しています。

増やしたらpull-requestを送ってあげてください。

タグ

2016/07/18 | コメント/トラックバック(0) |

カテゴリー:Emacs

Meta/Super/Hyperキーの秘密

http://www.catonmat.net/blog/why-emacs-uses-meta-key/

Emacsユーザの疑問のひとつとして、
「なぜAltキーのことをメタキーと言うのか」
というのがあると思います。

その歴史的経緯を上のページで紹介してあります。

昔のキーボードはHyperやSuperキーがあったのですよ!
画像は必見です。

タグ

emacs rainbow-mode.el : 【CSS書くなら持っとけ】色文字列に色をつける! | ELPA Emacs Lisp Elisp パッケージ インストール 設定 使い方 スクリーンショット

パッケージ名 rainbow-mode
概要(原文) Colorize color names in buffers
リポジトリ ELPA(公式リポジトリ)
バージョン 0.12
関連記事 package:rainbow-mode package:contrast-color

CSSなどを書いていこくと #ff00ff などの色文字列が出てきます。
そこでM-x rainbow-modeを実行すれば、これらの色文字列が表す色をEmacsが示してくれます。

ここではrainbow-mode.elを一旦fundamental-modeにしてからM-x rainbow-modeにしたスクリーンショットです。

20160716074909.png

20160716074929.png

rainbow-mode インストール

このパッケージはELPAにあるので、パッケージの初期設定は不要です。

M-x package-refresh-contents
M-x package-install rainbow-mode

設定 160716074813.rainbow-mode.1.el(以下のコードと同一)

;;; 色文字列に色をつける
(setq rainbow-html-colors t)
(setq rainbow-x-colors t)
(setq rainbow-latex-colors t)
(setq rainbow-ansi-colors t)
(add-hook 'css-mode-hook 'rainbow-mode)
(add-hook 'scss-mode-hook 'rainbow-mode)
(add-hook 'php-mode-hook 'rainbow-mode)
(add-hook 'html-mode-hook 'rainbow-mode)
;; (save-window-excursion (shell-command (format "emacs-test -l test-minimum -l %s %s &" buffer-file-name buffer-file-name)))

実行方法

$ wget http://rubikitch.com/f/160716074813.rainbow-mode.1.el
$ emacs -Q -f package-initialize -l 160716074813.rainbow-mode.1.el

タグ

2016/07/16 | コメント/トラックバック(0) |

カテゴリー:Emacs

emacs buffer-sets.el : 予め決められたファイル群を同時に開くようにする | MELPA Emacs Lisp Elisp パッケージ インストール 設定 使い方

パッケージ名 buffer-sets
概要(原文) Sets of Buffers for Buffer Management
リポジトリ MELPA
取得先 https://github.com/swflint/buffer-sets
バージョン 20160712.1627
関連記事 package:buffer-sets

buffer-sets.elは、複数のファイルバッファをひとつのグループにして扱えるようにするelispです。
あるファイルを開いたら、同時に他のファイルも開いてほしいという場合に便利です。
また、buffer-setを開いたときに実行するフォームを指定できるので、一連のファイルを開いた後に行う処理を記述できます。

現時点での使い方としては、init.elに define-buffer-set でbuffer-setを定義してから、M-x buffer-sets-load-setで開くという形になります。
あるいはM-x buffer-sets-modeというマイナーモードを有効にした上で C-x L l と操作します。

まだ開発初期で荒削りで他のコマンドにはバグがあります。
とりあえずC-x L lのバグはpull-requestを送りました。

buffer-sets インストール

このパッケージはmelpaにあるので パッケージの初期設定 を行ってください。

M-x package-refresh-contents
M-x package-install buffer-sets

使用例

(progn
  ;; 現時点ではdefine-buffer-setの内容を変更しても大元のデータが反映されないので
  ;; prognによりまとめて評価するしかない。
  (setq *buffer-set-definitions* nil)
  ;; 複数のorgファイルを用意した上でM-x org-agendaを実行する
  (define-buffer-set org
    :files ("~/memo/daily-projects.org"
            "~/memo/life-misc.org"
            "~/memo/memo.org")
    ;; ファイル群を開いた後で実行するフォーム
    :on-apply ((org-agenda)))
  (define-buffer-set quickrun
    :files ("~/.emacs.d/quelpa/build/quickrun/README.md"
            "~/.emacs.d/quelpa/build/quickrun/quickrun.el")
    ;; quickrun.elバッファを選択する
    :select "quickrun.el")
  )

タグ

2016/07/15 | コメント/トラックバック(0) |

カテゴリー:Emacs

このページの先頭へ