最新情報

2014年9月30日Emacs
emacs comment-dwim-2.el : M-; (comment-dwim)を現在行をコメント・アンコメントできるように進化させる | MELPA Emacs Lisp Elisp パッケージ インストール 設定 使い方 スクリーンショット
2014年9月29日Emacs
【小ネタ】実はEmacsは標準入力を読むことができる
2014年9月28日Emacs
emacs id-manager.el : Emacs/helmでパスワード一元管理!Emacs Lispからパスワードにアクセスする方法、quelpa設定例 | Emacs Lisp Elisp パッケージ インストール 設定 使い方
2014年9月27日Emacs
Emacsメンタルトレーナーさんをパワーアップ!
2014年9月26日Emacs
emacs google-this.el : Emacsからググるたった1つのコマンド | MELPA Emacs Lisp Elisp パッケージ インストール 設定 使い方

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

emacs comment-dwim-2.el : M-; (comment-dwim)を現在行をコメント・アンコメントできるように進化させる | MELPA Emacs Lisp Elisp パッケージ インストール 設定 使い方 スクリーンショット

パッケージ名 comment-dwim-2
概要(原文) An all-in-one comment command to rule them all
リポジトリ MELPA
取得先 https://github.com/remyferre/comment-dwim-2
バージョン 20140929.920
関連記事 package:comment-dwim-2

comment-dwim-2.el は、Emacs標準の M-; (comment-dwim) の進化形です。

標準のcomment-dwimに加えて、現在行のコメント・アンコメントが
できるように挙動を追加します。

通常のM-;の挙動はそのまま継承されているので、
導入の障壁は一切ありません。

気軽に使ってみてください。

作者のサイト にアニメーションgifによるデモがあります。

comment-dwim-2 インストール

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

M-x package-refresh-contents
M-x package-install comment-dwim-2

設定 140930120255.comment-dwim-2.el(以下のコードと同一)

(global-set-key (kbd "M-;") 'comment-dwim-2)
;;; comment-dwimに近い動作をする
(setq comment-dwim-2--inline-comment-behavior 'reindent-comment)
;; ;;; 現在行のコメントをkillする(デフォルト)
;; (setq comment-dwim-2--inline-comment-behavior 'kill-comment)

実行方法

$ wget http://rubikitch.com/f/140930120255.comment-dwim-2.el
$ emacs -Q -f package-initialize -l 140930120255.comment-dwim-2.el

タグ

2014/09/30 | コメント/トラックバック(0) |

カテゴリー:Emacs

【小ネタ】実はEmacsは標準入力を読むことができる

Emacsって標準入力を読めるのかなと
ふと知的好奇心が湧いたので
標準入力にS式を放り込んでみました。

$ echo '(+ 1 2)' | emacs -Q -batch -eval '(print (eval (read standard-input)))'
Lisp expression:
3

あ、できた…

Lisp expression:の行も標準出力に書き出されるから
2>/dev/nullを入れても消せません(笑)

どうやら、標準入力から読み込めるのはS式だけのようで、
任意の入力を受け取る関数は存在しないようです。

今日は問題解決でドタバタしているため、
短いですがこの辺で。

タグ

emacs id-manager.el : Emacs/helmでパスワード一元管理!Emacs Lispからパスワードにアクセスする方法、quelpa設定例 | Emacs Lisp Elisp パッケージ インストール 設定 使い方

パッケージ名 id-manager
概要(原文) id-password management
リポジトリ まだパッケージに登録されていない
サイト https://github.com/kiwanami/emacs-id-manager/
Quelpa設定 (quelpa '(id-manager :repo "kiwanami/emacs-id-manager" :fetcher github))
関連記事 package:id-manager package:helm

id-manager.el は、Emacsで各サービスのパスワードを管理するものです。

同じ目的のツールとしてブラウザの拡張に LastPass などがありますが、
クラウドに全パスワードを保存するということは、
パスワードを預けたサーバがクラックされると
全てのパスワードがダダ漏れになってしまうリスクがあります。

そこでローカルファイルにパスワードを暗号化して保存しておく方法もあります。

また、Emacs LispからID・パスワードにアクセスできるので、
パスワードを平文で設定する必要がなくなり、
セキュリティ が保たれます。

詳しくは開発者の記事を見てください。

http://d.hatena.ne.jp/kiwanami/20110221/1298293727

なお、最新版では anything.el ではなくて helm.el との連携になっています。

helmとともに楽々パスワード管理を楽しんでください。

id-manager インストール

これはまだパッケージ化されていないので、手動でインストール する必要があります。

quelpa は一度入れておくと楽チンです。

設定 140928130442.id-manager.el(以下のコードと同一)

(quelpa '(id-manager :repo "kiwanami/emacs-id-manager" :fetcher github))
(require 'id-manager)
(setq epa-file-cache-passphrase-for-symmetric-encryption t)
(setq epa-file-select-keys 'silent)

実行方法

$ wget http://rubikitch.com/f/140928130442.id-manager.el
$ emacs -Q -f package-initialize -l 140928130442.id-manager.el

id-managerに保存したID・パスワードにLispでアクセスする

id-managerのデータベースは

(idm-load-db)

で得られます。

これはデータそのものではなくて関数オブジェクトになっています。

そこから特定のアカウント名のIDとパスワードを得るには、
この関数にシンボルgetとアカウント名を渡します。

返り値は構造体で、それぞれ

  • idm-record-account-id
  • idm-record-password

でアクセスできます。

つまり、
データベース関数オブジェクト→構造体→ID・パスワード
の3段階になります。

たとえば .idm-db.gpg (をデコードした内容)に以下の行があるとき、

test1	testuser	testpass	2012/11/27	test1
  • アカウント名: test1
  • ID: testuser
  • Password: testpass
  • メモ: test1

となります。

(let ((record (funcall (idm-load-db) 'get "test1")))
  (idm-record-account-id record)        ; => "testuser"
  (idm-record-password record)          ; => "testpass"
  )

ちなみに今日、自分のクレジットカード使用履歴を見るための
Ruby クローラー を作りました。

クレジットカードのサイトのパスワードはid-managerで管理されていて、
クローラーにIDとパスワードをEmacsから渡すための学びです。

タグ

Emacsメンタルトレーナーさんをパワーアップ!

先週のメルマガでは、Emacsを使って
心の状態 を整える内容を紹介しました。

手始めに helmanythingフローワード を出しました。

フローワードとは、その言葉をインプットすると
心の状態がよくなる言葉のことです。

人によって異なるのですが、
代表的な例として

ありがとう
好きな人の名前
好きな食べ物・感情・キャラクター
今に関する言葉

などがあります。

実際に読者から
「応援歌の歌詞をフローワードに設定することで
helmを開くたびにめっちゃテンション上がった」
という反応をいただきました。

嬉しい限りです。

とにかく自分の心の状態を整えることは
仕事においてとてつもなく重要です。

スポーツの世界では大昔から当たり前ですが、
仕事の世界では重要視されていないのが疑問でした。

そこで僕はこの内容をメルマガで取り上げました。

僕が仕事を始める前には深呼吸をして
自分の信念・目標を書いたメモを読み
心の状態を整える儀式をします。

そして、仕事中でもフローワードを見ることで
上機嫌な状態でテキパキとこなします。

今回は、先週紹介したフローワードを出す関数を拡張します。

リファクタリングからの拡張という意味で
ちょっとEmacs Lisp的な内容も学べます。

そして、helmやanything以外の場所でもフローワードを
出させる設定も紹介します。

ちなみに来月はEmacsどっぷりな内容になる予定です。

タグ

emacs google-this.el : Emacsからググるたった1つのコマンド | MELPA Emacs Lisp Elisp パッケージ インストール 設定 使い方

パッケージ名 google-this
概要(原文) A set of functions and bindings to google under point.
リポジトリ MELPA
取得先 https://github.com/Bruce-Connor/emacs-google-this
バージョン 20140925.142
関連記事 package:google-this

なんか今更感があるけど、EmacsからGoogle検索をする方法です。

Emacsを使っている多くの人が自前で「Emacsからググるコマンド」を
作っているかもしれません。

非公開のものも入れればきっと星の数ほど実装がありそうですが、
google-this.el はMELPAに置いてある最新の実装です。

その中にはたくさんのコマンドが定義されていて、
マイナーモード化もされているのですが
実用上、たった一つのコマンドを知っていれば問題ありません。

M-x google-this は空気を読んでググってくれます。

  • regionが指定してあるときはその内容
  • 現在のシンボル
  • 現在の単語

google-this インストール

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

M-x package-refresh-contents
M-x package-install google-this

設定 140926112330.google-this.el(以下のコードと同一)

(require 'google-this)
(setq google-this-location-suffix "co.jp")
(defun google-this-url () "URL for google searches."
  ;; 100件/日本語ページ/5年以内ならこのように設定する
  (concat google-this-base-url google-this-location-suffix
          "/search?q=%s&hl=ja&num=100&as_qdr=y5&lr=lang_ja"))
;;; マイナーモードとして使いたいならば以下の設定
(setq google-this-keybind "C-x g")
(google-this-mode 1)

実行方法

$ wget http://rubikitch.com/f/140926112330.google-this.el
$ emacs -Q -f package-initialize -l 140926112330.google-this.el

タグ

2014/09/26 | コメント/トラックバック(0) |

カテゴリー:Emacs

『Rubyによるクローラー開発技法』第1章正誤

るびきちです。

『Rubyによるクローラー開発技法』 をお買上ありがとうございます。

執筆に対しては何重にもチェックし万全を期しましたが、
誤植が見付かってしまいました。

心からお詫び申し上げます。

p20
誤 ”abc123″[/(.?+).+/,1] # => “a”

正 ”abc123″[/(.+?).+/,1] # => “a”

御指摘頂いた @thayatoさん ありがとうございます。

タグ

2014/09/25 | コメント/トラックバック(0) |

カテゴリー:著書

Emacs×Ruby: org-babelでorg文書を出力させる方法。Rubyクローラーの例あり。

『Rubyによるクローラー開発技法』 、相変わらずamazonの在庫が戻らないです(泣)

みんなの反応

5 : koyancya@hatena 2014/07/31 14:06:18
きっとページを開くと Emacs の本なんですよね

これに爆笑してしまいました。

というわけで突如Emacs×Rubyクローラーな話題を。

僕は、まあなんだかんだ言ってるけど org-mode 愛用してます。

その中でもorg-babelは可能性があっておもしろいと感じています。

僕は昔からWebサイトから情報を抜き出すスクリプト…
クローラー(というほど大きな物ではない10行前後のもの)を
たくさん作ってきました。

個人的に情報を整理して Emacsw3m
見やすい形に整形する目的が多いです。

org-babelを使えば、ソースコードと実行結果を
1つのファイルにまとめられます。

短いスクリプトをorg文書に埋め込んでおいて、
ソースコードの部分でC-c C-cを押すだけでorgファイルが
書き変わります。

org-babelの #+BEGIN_SRC 行で「:results output」を指定すると
出力結果がソースコードの後に書き出されます。

多くの場合はこれでいいのですが、org文書を吐き出すコードの場合は
「#+begin_example 〜 #+end_example」で囲まれてしまうため、
都合がよくありません。

org文書を書き出す場合は「:results output raw」を指定します。

以下の例は僕のサイトの記事一覧をとってきます。

* rubikitch.com 記事一覧
#+BEGIN_SRC ruby :results output raw
require 'nokogiri'
require 'open-uri'
links = (Nokogiri(open("http://rubikitch.com/?sitemap").read).at('ul.sitemap'))/'a'
links.map{|a| [ a["href"], a.content ] }.each{|href,title|
  puts "- [[#{href}][#{title}]]"
}
#+END_SRC

#+RESULTS:
- [[http://rubikitch.com][るびきち×Emacs]]
- [[http://rubikitch.com/emacs-intro/][Emacsとは]]
- [[http://rubikitch.com/package-initialize/][パッケージの初期設定]]
略

サイトマップ http://rubikitch.com/?sitemap の内容をNokogiriで解析し、
class=”sitemap”なるUL要素を取得し、
内部のA要素からリンクとタイトルを得て、
org文書に出力しているだけです。

タグ

2014/09/24 | コメント/トラックバック(0) |

カテゴリー:Emacs Ruby

emacs ace-jump-zap.el : 【初登場】zap-to-char(M-z)をace-jump化して自然に拡張する | MELPA Emacs Lisp Elisp パッケージ インストール 設定 使い方

パッケージ名 ace-jump-zap
概要(原文) Character zapping, `ace-jump-mode` style
リポジトリ MELPA
取得先 https://github.com/waymondo/ace-jump-zap
バージョン 20140922.839
関連記事 package:ace-jump-zap package:ace-jump-mode

あなたは、 M-x zap-to-char (M-z) というコマンドを知っていますか?

これは、カーソル位置から指定した文字までを削除するコマンドです。

でも、ある程度の距離を削除したいとき、M-zだと困ります。

というのは、指定した文字が目的地よりも前に登場していたときは
そこまでしか削除されないからです。

文字を指定する…といえば ace-jump-mode ですね!

ace-jump-zap.el は、M-zをace-jump化するものです。

2つのコマンドが定義されています。

  • M-x ace-jump-zap-to-char
  • M-x ace-jump-zap-up-to-char

M-x ace-jump-zap-to-charの方は、指定した文字「も」削除するのに対して、
M-x ace-jump-zap-up-to-charは指定した文字以前を削除します。

ちなみに M-x zap-up-to-char というコマンドは
存在していて(require ‘misc)の後に使えます。

お好きな方をM-zにバインドしてください。

ちなみに僕は ace-jump-zap-up-to-char の方が好きです。

ace-jump-zap.elはMELPAに登録されたばかりなので、
これからが楽しみです。

ace-jump-zap インストール

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

M-x package-refresh-contents
M-x package-install ace-jump-zap

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

(global-set-key (kbd "M-z") 'ace-jump-zap-up-to-char)

実行方法

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

タグ

2014/09/23 | コメント/トラックバック(0) |

カテゴリー:Emacs

万能ドキュメント変換器Pandocいいね!org-modeにも対応

Pandoc は多種多様なフォーマットに対応した
ドキュメント変換ソフトウェアです。

現在主流の軽量マークアップ言語 Markdown をはじめとして、
Emacsユーザにとって嬉しい org-mode にも対応しています。

orgフォーマットの入出力ができるとはいえ
できたてほやほやなので、まだ完璧ではありません。

$ pandoc --help
Input formats:  docbook, haddock, html, json, latex, markdown,
                markdown_github,
                markdown_mmd, markdown_phpextra, markdown_strict, mediawiki,
                native, opml, org, rst, textile
Output formats: asciidoc, beamer, context, docbook, docx, dzslides,
                epub, epub3,
                fb2, html, html5, icml, json, latex, man, markdown,
                markdown_github, markdown_mmd, markdown_phpextra,
                markdown_strict, mediawiki, native, odt, opendocument, opml,
                org, pdf*, plain, revealjs, rst, rtf, s5, slideous, slidy,
                texinfo, textile
                [*for pdf output, use latex or beamer and -o FILENAME.pdf]
Options:
  -f FORMAT, -r FORMAT  --from=FORMAT, --read=FORMAT
  -t FORMAT, -w FORMAT  --to=FORMAT, --write=FORMAT
  -o FILENAME           --output=FILENAME
略

標準入出力も使えるので、前処理・後処理も自由自在です。

たとえば、サイトを orgフォーマット に変換するにはこのようにします。

$ curl -s URL | pandoc -f html -t org
標準出力に変換結果
$ curl -s URL | pandoc -f html -o output.org
output.orgに出力

とりあえず、URLをorgに変換するEmacsコマンドを書いてみました。

(defun toorg (url)
  (interactive "sConvert site to org (URL): ")
  (switch-to-buffer (format "*toorg: %s" url))
  (buffer-disable-undo)
  (erase-buffer)
  (shell-command
   (format "curl -s %s | pandoc -f html -t org" (shell-quote-argument url))
   (current-buffer))
  (save-excursion
    (while (re-search-forward "\\\\\\\\$" nil t)
      (replace-match "")))
  (org-mode)
  (view-mode 1))

M-x toorg の後にURLを指定すれば、org変換結果をバッファに出力します。

とりあえず興味があれば、
HTML – 多様なフォーマットに対応!ドキュメント変換ツールPandocを知ろう – Qiita
がまとまってて詳しいです。

また、マニュアルが日本に全訳されていて、現時点で新しいです。
Pandoc ユーザーズガイド 日本語版

PandocはHaskellで書かれています。

Haskellはいつか始めてみようと思ったまま
きっかけが見付からず何年も過ぎてしまいました。

ドキュメント変換は昔から興味があるテーマなので
これをきっかけにHaskellにも手を出してみたいです。

タグ

2014/09/22 | コメント/トラックバック(0) |

カテゴリー:Emacs

emacs org-toc.el : github用のREADME.orgの目次を自動生成!通常のorgファイルの目次も作れる | MELPA Emacs Lisp Elisp パッケージ インストール 設定 使い方

パッケージ名 org-toc
概要(原文) add table of contents to org-mode files
リポジトリ MELPA
取得先 https://github.com/snosov1/org-toc
バージョン 20140918.2255
関連記事 package:org-toc package:org

org-toc.el は、 orgファイル に自動的に 目次 をつけます。

とくに github用README.org を書く場合に便利です。

html exportするときは勝手に目次がつけられるので、これは不要です。

githubにおいてはexportされずに独自の方法で
HTML化されるのでこのパッケージが役立ちます。

設定を加えた後、目次用の見出しに「TOC」というタグをつけるだけで、
その見出しが目次になります。

タグは見出しでC-c C-c、あるいは任意の場所でC-c C-qでつけられます。

目次はファイルを保存するときに自動更新されます。

TOCタグのデフォルトの設定は

  • github用
  • 見出しレベル2(**)までが目次になる

となっています。

「TOC@3」と指定すれば、レベル3(***)までが目次になります。

exportせずにorgファイル内でリンクをたどれるようにするには
「TOC@2@org」のように目次化したいレベルとorgを指定します。

org-toc インストール

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

M-x package-refresh-contents
M-x package-install org-toc

設定 140921104232.org-toc.1.el(以下のコードと同一)

(when (require 'org-toc nil t)
  (add-hook 'org-mode-hook 'org-toc-enable))

実行方法

$ wget http://rubikitch.com/f/140921104232.org-toc.1.el
$ emacs -Q -f package-initialize -l 140921104232.org-toc.1.el

使用例

github用

* 1
* 目次                                                                  :TOC:
 - [[#1][1]]
 - [[#2][2]]
 - [[#3][3]]
     - [[#3-1][3-1]]
     - [[#3-2][3-2]]
 - [[#4][4]]

* 2
* 3
** 3-1
*** 3-1-1
** 3-2
* 4

org用

* 1
* 目次                                                                  :TOC@2@org:
 - [[1][1]]
 - [[2][2]]
 - [[3][3]]
     - [[3-1][3-1]]
     - [[3-2][3-2]]
 - [[4][4]]

* 2
* 3
** 3-1
*** 3-1-1
** 3-2
* 4

タグ

2014/09/21 | コメント/トラックバック(0) |

カテゴリー:Emacs

このページの先頭へ