最新情報

2015年5月23日Emacs
emacs request.el : 【HTTPクライアント】url-retrieveなんか捨てろ、requestで書き直せ! | MELPA Emacs Lisp Elisp パッケージ インストール ライブラリ 使い方
2015年5月22日メルマガ
【メルマガ#182】「日刊Emacs」の秘密をこっそり教えます
2015年5月21日Emacs
emacs http.el : 【HTTPクライアント】バッファからHTTPリクエストを対話的に送る | MELPA Emacs Lisp Elisp パッケージ インストール 設定 使い方
2015年5月20日Emacs
emacs avy.el : 【画面内移動】ace-jump-modeの新実装!より汎用的に使いやすく | MELPA Emacs Lisp Elisp パッケージ インストール 設定 使い方 スクリーンショット
2015年5月19日Emacs
emacs flatui-theme.el : FlatUIで決められた色を使ったカラーテーマ | MELPA Emacs Lisp Elisp パッケージ インストール 設定 使い方 スクリーンショット

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

emacs request.el : 【HTTPクライアント】url-retrieveなんか捨てろ、requestで書き直せ! | MELPA Emacs Lisp Elisp パッケージ インストール ライブラリ 使い方

パッケージ名 request
概要(原文) Compatible layer for URL request in Emacs
リポジトリ MELPA
取得先 https://github.com/tkf/emacs-request
バージョン 20140316.417
関連記事 package:request package:url package:request-deferred package:furl package:grapnel package:emacs-curl package:http

この偉大なライブラリを、なぜみんな知らないのでしょうか。

Emacsにはビルトインで url-retrieve というネットアクセス関数があり、
EmacsでHTTPアクセスをする場合はそれを使うのが普通です。

これは HTTPクライアント としてはお粗末な実装で、
しばしば意味不明な問題に遭遇するし、DNS解決の際には固まります。

それならば curlwget を外部プロセスとして呼び出した方が、
固まらない上に、より信頼でき、より高機能です。

「餅は餅屋」ということで専用の外部プログラムに頼るのは
本来のEmacsの精神、Unixの精神に沿っています。

しかしWindowsにはそれらがインストールされていないので
それがわかっていてもurl-retrieveに固執してしまいます。

せっかくcurlを持っているUnix系OSのユーザからすれば
有難迷惑なもので、url-retrieveの不自由さにイライラします。

なぜ強力な武器があるのに使わないのですか!
もったいないじゃないですか!

request.el は、url-retrieveとcurlのバックエンドに対応した
ネットワークアクセスを行うライブラリです。

curlがインストールされていればそれを使い、
されていなければurl-retrieveにfallbackします。

しかもparserも定義でき、より宣言的で強力な表現ができます。

elispプログラマはより強力な表現力を亨受でき、
curlを持っているユーザはそれを使って快適なネットアクセスができ、
持っていないならurl-retrieveを使ってくれるようになります。

おまけにEmacs23.1という化石にも対応しているので
古いバージョンのEmacsでも問題なく動きます。

request.elを使えばみんな幸せになれるわけです。

結論は
url-retrieveなんか捨てて、今すぐrequestに書き換えろ!
ということです。

request インストール

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

M-x package-refresh-contents
M-x package-install request

使用例

代表的な使用例を見れば、使い方が見えてきます。

仕様は<f1> f requestで見られます。

コールバック関数はたくさんのキーワード引数を持つので、
function*、(cl-function)と&allow-other-keysを使います。

サイトの内容をそのままバッファに表示する例

(request "http://rubikitch.com/"
         :parser 'buffer-string
         :complete (function*
                    (lambda (&key data &allow-other-keys)
                      (switch-to-buffer "*request-result*")
                      (erase-buffer)
                      (insert data))))

parserにbuffer-stringを指定することで、
HTMLをそのままcomplete(コールバック)のdataに渡せます。

completeはどんな状況でも実行されますが、
successで正常なとき、errorでエラーのときに実行されます。

サイトの内容をw3mで整形してバッファに表示する例

(request "http://rubikitch.com/"
         :parser (lambda ()
                   (shell-command-on-region
                    (point-min) (point-max)
                    "w3m -dump -T text/html"
                    (current-buffer) t)
                   (buffer-string))
         :complete (function*
                    (lambda (&key data &allow-other-keys)
                      (switch-to-buffer "*request-result*")
                      (erase-buffer)
                      (insert data))))

parserはネットワークアクセスの結果をカレントバッファにして
実行するので、 shell-command-on-region でw3mを通して、
(buffer-string)でその内容を文字列にします。

GET でデータを送る

http.el(レビュー) で示したようにHTTPクライアント開発支援サイトの
http://httpbin.org/ を使ってみましょう。

ここからはREADMEの例です。

(request
 "http://httpbin.org/get"
 :params '(("key" . "value") ("key2" . "value2"))
 :parser 'json-read
 :success (function*
           (lambda (&key data &allow-other-keys)
             (message "I sent: %S" (assoc-default 'args data)))))

評価すると

I sent: ((key2 . "value2") (key . "value"))

と出ます。

POST

(request
 "http://httpbin.org/post"
 :type "POST"
 :data '(("key" . "value") ("key2" . "value2"))
 ;; :data "key=value&key2=value2"  ; this is equivalent
 :parser 'json-read
 :success (function*
           (lambda (&key data &allow-other-keys)
             (message "I sent: %S" (assoc-default 'form data)))))

評価すると

I sent: ((key2 . "value2") (key . "value"))

と出ます。

POST file (カレントバッファの全内容が送信されます!!)

(request
 "http://httpbin.org/post"
 :type "POST"
 :files `(("current buffer" . ,(current-buffer))
          ("data" . ("data.csv" :data "1,2,3\n4,5,6\n")))
 :parser 'json-read
 :success (function*
           (lambda (&key data &allow-other-keys)
             (message "I sent: %S" (assoc-default 'files data)))))

このコードのみを書いたバッファでの実行結果

I sent: ((data . "1,2,3
4,5,6
") (current\ buffer . "(request
 \"http://httpbin.org/post\"
 :type \"POST\"
 :files `((\"current buffer\" . ,(current-buffer))
          (\"data\" . (\"data.csv\" :data \"1,2,3\\n4,5,6\\n\")))
 :parser 'json-read
 :success (function*
           (lambda (&key data &allow-other-keys)
             (message \"I sent: %S\" (assoc-default 'files data)))))
"))

HTTP 418を返す場合のコールバック

(request
 "http://httpbin.org/status/418"
 :parser 'buffer-string
 :success
 (function* (lambda (&key data &allow-other-keys)
              (when data
                (with-current-buffer (get-buffer-create "*request demo*")
                  (erase-buffer)
                  (insert data)
                  (pop-to-buffer (current-buffer))))))
 :error
 (function* (lambda (&key error-thrown &allow-other-keys&rest _)
              (message "Got error: %S" error-thrown)))
 :complete (lambda (&rest _) (message "Finished!"))
 :status-code '((400 . (lambda (&rest _) (message "Got 400.")))
                (418 . (lambda (&rest _) (message "Got 418.")))))

結果を*Message*バッファで見てみると

Got 418.
Finished!

が表示されたことがわかります。

HTTP 200(正常)を返す場合のコールバック

(request
 "http://httpbin.org/status/200"
 :parser 'buffer-string
 :success
 (function* (lambda (&key data &allow-other-keys)
              (when data
                (with-current-buffer (get-buffer-create "*request demo*")
                  (erase-buffer)
                  (insert data)
                  (pop-to-buffer (current-buffer))))))
 :error
 (function* (lambda (&key error-thrown &allow-other-keys&rest _)
              (message "Got error: %S" error-thrown)))
 :complete (lambda (&rest _) (message "Finished!"))
 :status-code '((400 . (lambda (&rest _) (message "Got 400.")))
                (418 . (lambda (&rest _) (message "Got 418.")))))
Finished!

とエコーエリアに表示され、 *request demo*バッファが出てきます。

http://httpbin.org/status/200 自体が空の内容なので
バッファの内容も空です。

HTTP 400を返す場合のコールバック

(request
 "http://httpbin.org/status/400"
 :parser 'buffer-string
 :success
 (function* (lambda (&key data &allow-other-keys)
              (when data
                (with-current-buffer (get-buffer-create "*request demo*")
                  (erase-buffer)
                  (insert data)
                  (pop-to-buffer (current-buffer))))))
 :error
 (function* (lambda (&key error-thrown &allow-other-keys&rest _)
              (message "Got error: %S" error-thrown)))
 :complete (lambda (&rest _) (message "Finished!"))
 :status-code '((400 . (lambda (&rest _) (message "Got 400.")))
                (418 . (lambda (&rest _) (message "Got 418.")))))

結果を*Message*バッファで見てみると

Got 400.
Finished!

が表示されたことがわかります。

Atomにxml parserを通し、最初の要素を得る例

(request
 "https://github.com/tkf/emacs-request/commits/master.atom"
 ;; Parse XML in response body:
 :parser (lambda () (libxml-parse-xml-region (point) (point-max)))
 :success (function*
           (lambda (&key data &allow-other-keys)
             ;; Just don't look at this function....
             (let ((get (lambda (node &rest names)
                          (if names
                              (apply get
                                     (first (xml-get-children
                                             node (car names)))
                                     (cdr names))
                            (first (xml-node-children node))))))
               (message "Latest commit: %s (by %s)"
                        (funcall get data 'entry 'title)
                        (funcall get data 'entry 'author 'name))))))

結果

Latest commit: 
        Merge pull request #14 from myuhe/request--curl-write-out-template
     (by tkf)

JSONをPUTする

(request
 "http://httpbin.org/put"
 :type "PUT"
 :data (json-encode '(("key" . "value") ("key2" . "value2")))
 :headers '(("Content-Type" . "application/json"))
 :parser 'json-read
 :success (function*
           (lambda (&key data &allow-other-keys)
             (message "I sent: %S" (assoc-default 'json data)))))

結果

I sent: ((key2 . "value2") (key . "value"))

タグ

【メルマガ#182】「日刊Emacs」の秘密をこっそり教えます

今週は僕が毎日更新しているこのサイト
「日刊Emacs」の秘密に迫っていきます。

運営には有料サーバを使っていますが、
使っているサーバを選択した理由、
そして、なぜ有料サーバにしたのかについて話します。

多くの人は「無料の罠」に陥っています。

いくら優れた無料ブログサービスであっても
避けられない3つの欠点とは?

後半は記事に対するSEOについても触れます。

SEOをきっちりこなすことで検索エンジンが
あなたの記事を見つけてくれやすくなります。

その結果あなたの記事が多くの人に読まれるようになります。

せっかく優れたツールの記事なのに
SEOをしてないためなかなか見付けられず
もったいないなと思うことがよくあります。

タグ

2015/05/22 | コメント/トラックバック(0) |

カテゴリー:メルマガ

emacs http.el : 【HTTPクライアント】バッファからHTTPリクエストを対話的に送る | MELPA Emacs Lisp Elisp パッケージ インストール 設定 使い方

パッケージ名 http
概要(原文) An HTTP client for Emacs
リポジトリ MELPA
取得先 https://github.com/emacs-pe/http.el
バージョン 20141127.855
関連記事 package:http package:request package:httprepl package:restclient

去年は『Rubyによるクローラー開発技法』(共著) を出版し、
お蔭様で大好評となっています。

買ってくださった方々、本当にありがとうございます。

Webアクセスを自動化したい、
クローラーを作りたい
そういった場合はまずHTTPリクエストとレスポンスを調査する必要があります。

さて、今回紹介する http.el は対話型HTTPクライアントです。

バッファ(ファイル)に1つ以上のHTTPリクエストを書いて送信すると
別バッファにてレスポンスが表示されます。

使い方はたった3ステップです。

  1. HTTPリクエストを書く
  2. M-x http-mode
  3. C-c C-cで送信!

なお、使用例で使っている https://httpbin.org/
HTTPクライアント開発のためのサイトで
手軽にPOSTリクエストをテストできます。

http インストール

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

M-x package-refresh-contents
M-x package-install http

使用例

misc/example.txtより抜粋!

一番上に「# -*- http -*-」と書くことで、
そのファイルを再び開いたときは自動的にhttp-modeになります。

# -*- http -*-
# はコメント
# GETリクエストは単純に1行でよい
# 
## 自分のIPアドレス
GET https://httpbin.org/ip
## xmlを表示する
GET https://httpbin.org/xml

## ヘッダをつける
POST https://httpbin.org/post?foo=bar
User-Agent: Emacs24

## POSTリクエスト
# ヘッダとデータの間には空行を入れる
POST https://httpbin.org/post?val=key
User-Agent: Emacs24
Content-Type: application/json

{
  "foo": "bar"
}

一番下のPOSTリクエストを実行すると

{
  "url": "https:\/\/httpbin.org\/post?val=key",
  "origin": "1.23.45.67",
  "json": {
    "foo": "bar"
  },
  "headers": {
    "User-Agent": "Emacs24",
    "Host": "httpbin.org",
    "Content-Type": "application\/json",
    "Content-Length": "21",
    "Accept-Encoding": "deflate, gzip",
    "Accept": "*\/*"
  },
  "form": null,
  "files": null,
  "data": "\n{\n  \"foo\": \"bar\"\n}\n\n",
  "args": {
    "val": "key"
  }
}
// HTTP/1.1 200 OK
// Server: nginx
// Date: Thu, 21 May 2015 01:24:00 GMT
// Content-Type: application/json
// Content-Length: 435
// Connection: keep-alive
// Access-Control-Allow-Origin: *
// Access-Control-Allow-Credentials: true

と出てきます。

タグ

2015/05/21 | コメント/トラックバック(0) |

カテゴリー:Emacs

emacs avy.el : 【画面内移動】ace-jump-modeの新実装!より汎用的に使いやすく | MELPA Emacs Lisp Elisp パッケージ インストール 設定 使い方 スクリーンショット

パッケージ名 avy
概要(原文) set-based completion
リポジトリ MELPA
取得先 https://github.com/abo-abo/avy
バージョン 20150519.529
関連記事 package:avy package:ace-jump-mode package:ace-pinyin package:ace-window package:ace-link

ace-jump-mode.el(レビュー)は画面内の単語や文字に移動する
高速なインターフェースとして人気があります。

ace-pinyin.el(レビュー)と併用すれば日本語文字にも対応してくれます。

avy.elace-jump-mode.el 同様ヒント文字を入力すると
その場所に移動するパッケージです。

ace-jump-modeは単独では素晴しいパッケージなのですが、
いざ拡張しようとするとやりにくいものがあります。

ace-jump-modeのインターフェースが気に入って他で使いたい
elispプログラマならばace-jump-mode.elに固執するのではなく
avy.elを使ってみましょう。

同じ作者によるace-window.el(レビュー)ace-link.el(レビュー)
名前はaceとついているものの、実際はavyを使っています。

ace-jump-modeをすでに使っている人でも、
avy.elが提供している2つのコマンドを使ってみることをおすすめします。

  • avy-goto-char-timer
  • avy-goto-line

M-x avy-goto-char-timer は、 M-x ace-jump-char-mode の進化形です。

  • 1文字入力して0.5秒後にその文字に対応するヒント文字が出る
  • 0.5秒以内に2文字目も入力すると、2文字が連続する場所にヒント文字が出る

20150520073144.png
Fig1: C-@の後にiを押すとiの前にヒント文字が付く

20150520073153.png
Fig2: C-@の後に素早くisと押せばisの前にヒント文字が付く

M-x avy-goto-line は、 M-x ace-jump-line-mode
標準の M-x goto-line を合体させたものです。

  • 行頭のヒント文字を打てばその行に移動
  • 数字を打ったらその時点でgoto-lineの働きをする

20150520073208.png
Fig3: M-g M-gの後にヒント文字が付く

20150520073216.png
Fig4: 数字を打てば標準のgoto-lineに移行

よってM-g M-gをそのままavy-goto-lineに割り当てても問題ありません。

avy インストール

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

M-x package-refresh-contents
M-x package-install avy

併用が一番

他にもace-jump-modeに対応するavyなコマンドが定義されていますが、
日本語と併用する場合に表示がずれてしまいます。

文字幅が考慮されていないのが原因です。

これは我々日本人にとってはとても痛いです。

作者がCJKを知らないようなので無理もないですが、
今後のpull-reqが待たれるところです。

よって、ace-jump-modeを置き換えるのではなく、
併用していくのが一番ではないでしょうか。

20150520073243.png
Fig9: ace-jump-word-modeでは日本語でもずれない

20150520073249.png
Fig10: avy-goto-word-0ではずれてしまう><

タグ

2015/05/20 | コメント/トラックバック(0) |

カテゴリー:Emacs

emacs flatui-theme.el : FlatUIで決められた色を使ったカラーテーマ | MELPA Emacs Lisp Elisp パッケージ インストール 設定 使い方 スクリーンショット

パッケージ名 flatui-theme
概要(原文) A color theme for Emacs based on flatuicolors.com
リポジトリ MELPA
取得先 https://github.com/john2x/flatui-theme.el
バージョン 20150226.512
関連記事 package:flatui-theme

FlatUIというデザインは以下の色を使っています。

flatui-theme.el はこれをEmacsのカラーテーマに移植したものです。

同じ作者によりVim版 も作られています。

20150519121759.png
Fig1: http://flatuicolors.com/ で色を見られる

以下のパッケージに対応しています。

  • compilation
  • grep
  • isearch
  • font lock
  • ledger
  • ace-jump
  • anzu
  • auto-complete
  • clojure-test-mode
  • diff
  • diff-hl
  • dired/dired+/dired-subtree
  • ediff
  • eshell
  • evil
  • flx
  • flycheck
  • flymake
  • flyspell
  • git-gutter
  • git-gutter-fr
  • git-rebase-mode
  • guide-key
  • helm
  • highlight-symbol
  • hl-line-mode
  • hl-sexp
  • ido-mode
  • indent-guide
  • js2-mode
  • linum-mode
  • magit
  • outline
  • rainbow-delimiters
  • structured-haskell-mode
  • show-paren
  • mode-line/sml-mode-line
  • SLIME
  • term
  • web-mode
  • whitespace-mode
  • which-func-mode
  • yascroll
  • ansi-color
  • fill-column-indicator
  • highlight-parentheses
  • vc-annotate

20150519122732.png
Fig2: outline-mode / region

20150519122752.png
Fig3: emacs-lisp-mode

20150519122804.png
Fig4: c-mode

20150519122817.png
Fig5: grep

20150519122848.png
Fig6: ace-jump-char-mode

20150519122914.png
Fig7: eshell

20150519122951.png
Fig8: org-mode

20150519123018.png
Fig9:

flatui-theme インストール

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

M-x package-refresh-contents
M-x package-install flatui-theme

実行方法

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

タグ

2015/05/19 | コメント/トラックバック(0) |

カテゴリー:Emacs theme

emacs orgit.el : org-modeでmagitへのリンクを作成する!export時URL変換対応 | MELPA Emacs Lisp Elisp パッケージ インストール 設定 使い方 スクリーンショット

パッケージ名 orgit
概要(原文) support for Org links to Magit buffers
リポジトリ MELPA
取得先 https://github.com/magit/orgit
バージョン 20150406.540
関連記事 package:orgit package:org package:magit package:github-browse-file package:git-link

org-mode のリンクはいろいろ拡張できます。

orgit.elmagit へのリンクを作成します。

  • status
  • log
  • commit

リポジトリや特定のコミットへのリンクを作成することで
org文書にてプロジェクト管理ができるようになります。

また、export時にはリモートリポジトリへのリンクに変換してくれます。

たとえば、リモートが

github / gitorious / bitbucket / orgmode.org / kernel.org
であるとき、当該ホスティングサービスのstatus/log/commitへのリンクになります。

20150518051457.png
Fig1: M-x magit-status後にC-c l

20150518051504.png
Fig2: *magit-log*にてC-c l

20150518051515.png
Fig3: *magit-commit*にてC-c l

20150518051712.png
Fig4: その後orgバッファにてC-c C-lで集めたリンクを貼り付ける

20150518051741.png
Fig5: C-c C-e h HでHTML変換すると、githubへのリンクになっている!

orgit インストール

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

M-x package-refresh-contents
M-x package-install orgit

設定 150518051325.orgit.1.el(以下のコードと同一)

(require 'orgit)
(global-set-key (kbd "C-c l") 'org-store-link)

実行方法

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

タグ

2015/05/18 | コメント/トラックバック(0) |

カテゴリー:Emacs org-mode

emacs speed-type.el : タイピングマニア in Emacs | MELPA Emacs Lisp Elisp パッケージ インストール 設定 使い方 スクリーンショット

パッケージ名 speed-type
概要(原文) Practice touch and speed typing
リポジトリ MELPA
取得先 https://github.com/hagleitn/speed-type
バージョン 20150120.2034
関連記事 package:speed-type

speed-type.el は、Emacsで動くタイピングゲームです。

激打TYPINGMANIA のようなものです。

表示されたテキストを忠実にタイプして、
正しく入力された文字は緑色に、
間違ってしまった文字は赤色で表示されます。

入力テキストの源より、3つのコマンドが使えます

M-x speed-type-text
インターネット上の英文テキスト
M-x speed-type-buffer
カレントバッファ
M-x speed-type-region
region

M-x speed-type-bufferやM-x speed-type-regionならば
ソースコードの入力速度を測定することもできます。

first-change-hookafter-change-functions
バッファの変更を察知するメカニズムなので、
拙作 sticky.el など入力方式を変更するelispがそのまま使えます。

他のタイピングゲームとは異なり、自分の愛用の入力環境で
測定できるのは嬉しいことではないでしょうか。

日本語については確定後に初めてバッファが変更されないと無理でしょう。

ddskkのようにローマ字入力中に実際のバッファの内容を
変更する日本語入力では正しく動作しません。

T-Codeなどの漢直入力は大丈夫と思われます。

speed-type インストール

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

M-x package-refresh-contents
M-x package-install speed-type

やってみた

20150517050512.png
Fig1: M-x speed-type-text終了後

Netが実質のスコアで、Grossが誤りを無視したスコアです。

僕もやってみましたが、なんとかProと出ました。

僕自身タイピングはめちゃくちゃ遅いと思っていたので意外でした。

sticky.elの設定により「変換a」で「A」と入力できるようにしています。

タグ

2015/05/17 | コメント/トラックバック(0) |

カテゴリー:Emacs

emacs fold-this.el : 【コードリーディング支援】region/S式を一時的に隠すシンプルなコマンド | MELPA Emacs Lisp Elisp パッケージ インストール 設定 使い方 スクリーンショット

パッケージ名 fold-this
概要(原文) Just fold this region please
リポジトリ MELPA
取得先 https://github.com/magnars/fold-this.el
バージョン 20150306.1445
関連記事 package:fold-this package:hideif package:hideshow package:view

Emacsでは org-modeoutline-mode などで見られるように
特定の範囲を隠したりできます。

これらは隠す範囲を予め計算しているのですが、
この fold-this.el はregionを隠すものです。

余計な部分を一時的に隠すことで要点が明確になり、
コードを理解する助けになります。

元々
M-x fold-this でregionを隠し、
M-x fold-this-all でregionの文字列すべてを隠すようになっていますが、
本設定では M-x fold-this–this-or-all を定義して
これらをひとまとめにしています。

view-mode のfに割り当てていて、以下の挙動にしています。

  • regionが有効のときはそのregionを隠す
  • regionが設定されてないときは現在のS式を隠す
  • C-u fでバッファ内の同一region/S式をすべて隠す

隠された部分は「..」と表示され、
その部分でRETかC-gを押せば元に戻ります。

20150516081605.png
Fig1: このバッファをview-modeにして

20150516081616.png
Fig2: fを押すとそのS式が隠れる

20150516081632.png
Fig3: regionを指定し

20150516081640.png
Fig4: C-u fで該当部分が全部隠れる

fold-this インストール

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

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

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

;;; この設定を入れるとEmacsを終了してもfoldが持続する
;; (setq fold-this-persistent-folds t)
(defun fold-this--this-or-all (all)
  (interactive "P")
  (let ((x (bounds-of-thing-at-point 'sexp))
        (rap (region-active-p)))
    (funcall (if all 'fold-this-all 'fold-this)
             (if rap (region-beginning) (car x))
             (if rap (region-end) (cdr x))))
  (message (substitute-command-keys "To unfold all, try \\[fold-this-unfold-all]")))
(with-eval-after-load "view"
  (define-key view-mode-map (kbd "f") 'fold-this--this-or-all))

実行方法

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

タグ

2015/05/16 | コメント/トラックバック(0) |

カテゴリー:Emacs

emacs date-at-point.el : thing-at-pointで日付文字列(date)も扱えるようにする | MELPA Emacs Lisp Elisp パッケージ インストール ライブラリ 使い方

パッケージ名 date-at-point
概要(原文) Add `date’ to `thing-at-point’ function
リポジトリ MELPA
取得先 https://github.com/alezost/date-at-point.el
バージョン 20150108.418
関連記事 package:date-at-point package:thingatpt

date-at-point.elthing-at-point を拡張する20行足らずのライブラリです。

使い方は

(date-at-point)

とelispに書くだけです。

カーソル位置が

  • 2014-12-31
  • 31.12.2014
  • 12/31/13
  • 2014/12/31

などの年月日文字列ならばそれを得ます。

thing-at-pointについて興味があるのならば、
ぜひともソースコードを読んでみることをおすすめします。

date-at-point インストール

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

M-x package-refresh-contents
M-x package-install date-at-point

タグ

【メルマガ#181】10億円に勝る最高の宝

先週は最強の勉強法とは何なのかついてお伝えしました。

今週はそれを実践するにあたっての重要な心構え
そして、それによって得られる「最高の宝」
についてお話します。

この勉強法は僕がるびきちとして活動し始めた当初
(15年前)から行っているもので、その結果、
執筆活動を生業にできるようになりました。

執筆活動を始めた当初はその本当の価値が見えませんでしたが、
年をとった今こそ、それが最高の仕事だと断言できます。

「人生にとって一番大切なことは何か!?」

人間として生きている以上迷っていると思いますが、
この哲学的な問いに対して生涯崩すことのないであろう
僕なりに最高の答えが出せました。

「るびきち史」を振り返り価値観の変遷を通じて
あなたなりの答えを探し出してみてください。

タグ

2015/05/15 | コメント/トラックバック(0) |

カテゴリー:メルマガ

このページの先頭へ