Pages

2013年1月12日土曜日

Emacsのプログラミングする上でのTipsというか自分のメモ

Emacsのプログラミングする上でのtips

私のメモ的な要素が多分に含まれています。。。

今いるディレクトリから特定のファイルのあるディレクトリを探す

特定の設定ファイルが存在するディレクトリの中にいるのか
探すときなどに、、、

(locate-dominating-file default-directory ".gitignore")

文字列のリストの連結

(mapconcat 'identity '("one" "two" "three") " ")
;; -> "one two three"

listからnilや特定のものを削除

delqの第一引数を変えることで変更できます。

(delq nil '(hoge nil fuga nil piyo))
;; -> '(hoge fuga piyo)

文字に色つけ

put-text-propertyの部分を適当に抜き出して使ってください

(let ((string "hoge"))
(put-text-property 0 1 'face
'font-lock-function-name-face string)
(message string))

モードライン

適当に順番を変えたりしてください

(setq-default mode-line-format
'((line-number-mode "L%l/")
(column-number-mode "C%c-")
mode-line-buffer-identification
;; 中でS式を毎回評価するとき
(:eval (when t
"例えば未読mailの件数とか"))
display-time-string
mode-line-mule-info
mode-line-modified
" %[("
mode-name
(which-func-mode ("" which-func-format "-"))
mode-line-process
minor-mode-alist
"%n" ")%]-"
(-3 . "%p")
"-%-"))

文字のアニメーション

お気に入り、実行するのはscratch buffer推奨

(animate-string "hoge" 0 0)

C-uを押すか押さないかで動作を変える

(defun test ()
(interactive)
(if current-prefix-arg
(message "arg有り")
(message "arg無し")))

Helmのプログラミング

あまり詳しくないですがcandidatesの部分を自分のほしい候補にしたり
アクションの部分を変更することでプログラミングします。
以下は私がhelmでshellヒストリーを表示するからもってきたやつです。
candidatesのstart-processにしているのは非同期で候補を表示するためにこのようにしました。

(defvar helm-shell-history-file "~/.zsh_history")
(defvar helm-shell-history-command
'(lambda (pattern)
(concat "\\tac " helm-shell-history-file " | "
"\\grep -e \"" pattern "\" | "
"\\sed 's/^: [0-9]*:[0-9];//'")))

(defun helm-shell-history ()
(interactive)
(helm :sources
`(((name . "shell-history")
(candidates . (lambda ()
(start-process "history" nil "/bin/sh" "-c"
(funcall helm-shell-history-command
helm-pattern))))
(candidate-number-limit . 500)
(multiline)
(nohighlight)
(action . (lambda (line)
(term-send-raw-string line)))
(requires-pattern . 3)
(delayed)))
:buffer "*helm shell history*"))

マジックコメント

ファイルの一行目に追加する。
codingはコーディングシステムの指定、
lexical-bindingはEmacs24から使えるようになったらしいです。
自作packageに追加したらバイトコンパイル時にwarningが出たので自分は使ってないです。
ちなみにRubyでshabang行を書く場合この設定は2行目でいいようです。

;;; -*- coding: utf-8 lexical-binding: t mode: emacs-lisp -*-

自作パッケージをMELPAに登録する時

Emacs24の場合デフォルトでlist-packagesコマンドから色々なパッケージをダウンロードできますがコメントで書いておくと便利なことやMELPAに登録する時に必須となるものもあるので書いてみます。
Package-Requires:の部分は依存しているパッケージを一緒にダウンロードしてくれます。数字の20120529とかの部分はpackage-listコマンドで見た時のバージョンを指定します。
;;;###autoloadをinteractiveな関数の上に書くとその関数はautoloadを
しなくてもglobal-set-keyなどで登録するだけで使用できます。
以下はpackage名がpackage-name.elだった場合の例

;;; -*- coding: utf-8 -*-
;;; package-name.el --- write short description for package-name.el

;; Copyright (C) 2012 by your name

;; Author: your name <your mail address>
;; URL: https://github.com/example/example
;; Version: 1.0.0
;; Package-Requires: ((popwin "20120529") (popup "20120331"))
;; Keywords: example

;;; License:
;; foo bar

;;; Code:

;;;###autoload
(defun test ()
(interactive)
(message "test"))

(provide 'package-name)

;;; package-name.el ends here

いきなり終わり

ネタが切れました!
ネタが増えたら追加する予定です。


0 件のコメント:

コメントを投稿