Top | Wiki | Blog | Github  

差分

この文書の現在のバージョンと選択したバージョンの差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
emacs:init.el [2017/09/08 06:41]
takaxp
emacs:init.el [2018/09/17 17:03] (現在)
takaxp
ライン 1: ライン 1:
 ====== Configurations for GNU Emacs ====== ====== Configurations for GNU Emacs ======
  
-===== じめに =====+このページのコンテンツ,次のサイト移転しました.:​-D
  
-  * この文章は,[[https://​gist.github.com/​1369417|org2dokuwiki.pl]]を使って生成しています. +[[https://​takaxp.github.com/​init.html]]
-  * [[https://​github.com/takaxp/emacs.d/​blob/​master/​init.el|init.el]] 本体は,[[https://​github.com/​takaxp/​emacs.d/​|github]] に公開しています. +
-  * [[https://​github.com/​takaxp/​emacs.d/​blob/​master/init.org|init.org]] から [[https://​github.com/​takaxp/​emacs.d/​blob/​master/​init.el|init.el]],[[https://​github.com/​takaxp/​emacs.d/​raw/​master/​init.pdf|init.pdf]],[[https://​github.com/​takaxp/​emacs.d/​raw/​master/​init.odt|init.odt]],[[https://​pxaka.tokyo/​wiki/​doku.php?​id=emacs:​init.el|wiki]] を生成しています. +
-  * 一部の関数定義を [[https://​pxaka.tokyo/​wiki/​doku.php?​id=emacs:​utility.el|utility.el]] に分離しています. +
-  * コピペだけで動かなかった場合は,ページ最下部のコメント欄にご意見をどうぞ. +
-    * github.io 以下で閲覧する場合は,コメント欄が表示されません.+
  
-===== 基本設定 ===== +コメントは引き続きこのページで受け付けます.
- +
-この設定群を利用するために設定です.一部の関数は記述しておかないと動かない可能性があります. +
- +
-==== init.el のヘッダ ==== +
- +
- +
-<code emacs-lisp>​ +
-;; -*- lexical-binding:​ t -*- +
-;; Configurations for Emacs +
-;;                                         ​Takaaki ISHIKAWA ​ <​takaxp@ieee.org>​ +
-</​code>​ +
- +
-  * .emacs のカスタマイズを本格化し始めた頃に[[http://​www.mygooglest.com/​fni/​dot-emacs.html|参照した情報]] +
- +
-==== init ファイルの読み込み時間計測 ==== +
- +
-次の関数を <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​init.el</​span></​html>​ の最初に記載して,オプション付きで <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​after-init-hook</​span></​html>​ に乗っければ,initファイルの読み込み時間を計測できます(GUIのフレーム生成を含まない).これ以降に設定する <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​emacs-init-time</​span></​html>​ の派生関数と違い, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​after-init-hook</​span></​html>​ で実行される処理の時間もわかります(ほかの処理も微妙に入るので,あくまで目安です). +
- +
-<code emacs-lisp>​ +
-(defconst before-load-init-time (current-time)) +
-</​code>​ +
- +
-<code emacs-lisp>​ +
-(defun my:​load-init-time () +
-  "​Loading time of user init files including time for `after-init-hook'​."​ +
-  (let ((time1 (float-time +
-                (time-subtract after-init-time before-load-init-time))) +
-        (time2 (float-time +
-                (time-subtract (current-time) before-load-init-time)))) +
-    (message (concat "​Loading init files: %.0f [msec], " +
-                     "​of which %.f [msec] for `after-init-hook'​."​) +
-             (* 1000 time1) (* 1000 (- time2 time1))))) +
-(add-hook '​after-init-hook '​my:​load-init-time t) +
-</​code>​ +
- +
-<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​after-init-hook</​span></​html>​ の値をチェックして,最後に配置されていることに留意します.以下は, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​after-init-hook</​span></​html>​ の例です. +
- +
-<code emacs-lisp>​ +
-(session-initialize recentf-mode my:​emacs-init-time my:​load-init-time) +
-</​code>​ +
- +
-==== 起動時間の計測 ==== +
- +
-<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​M-x emacs-init-time</​span></​html>​ を実行すると,Emacsの起動にかかった時間が表示されます.個人的にはミリ秒表示が好きなので,手を加えます.元ネタは[[http://​d.hatena.ne.jp/​sugyan/​20120120/​1327037494|すぎゃーんメモ]]からです.感謝. +
- +
-<code emacs-lisp>​ +
-(defun my:​emacs-init-time () +
-  (message "Emacs booting time: %.0f [msec] from `emacs-init-time'​."​ +
-           (* 1000 +
-              (float-time (time-subtract +
-                           ​after-init-time +
-                           ​before-init-time))))) +
-(add-hook '​after-init-hook '​my:​emacs-init-time) +
-</​code>​ +
- +
-==== GCサイズの最適化 ==== +
- +
-起動時に発生するガベージレクトを防きます.起動後に使用しているモリサイズを超えていれば良さ気. <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​garbage-collection-messages</​span></​html>​ を設定しておくと,ガベージコレクトが生じる時にメッセージが出るようになります. +
- +
-<code emacs-lisp>​ +
-(setq gc-cons-threshold 134217728) ;; 128MB +
-(setq garbage-collection-messages t) +
-</​code>​ +
- +
-==== [exec-path-from-shell] PATH設定をシェルから継承する ==== +
- +
-外部プログラムのサポートを得て動くパッケージは,設定の過程でプログラムが見つからないと怒られることがしばしばあります. <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​exec-path-from-shell</​span></​html>​ は,シェルに設定した <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​PATH</​span></​html>​ の情報を継承して <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​exec-path</​span></​html>​ や <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​PATH</​span></​html>​ を設定してくれます.私は起動時に環境を切り替えることがあるので使ってませんが,使われている方は多いようです. +
- +
-<code emacs-lisp>​ +
-(when (and (require '​exec-path-from-shell nil t) +
-           (memq window-system '(mac ns))) +
-  (exec-path-from-shell-initialize)) +
-</​code>​ +
- +
-==== cl を使う ==== +
- +
-  * http://​lisperblog.blogspot.com/​2008/​12/​blog-post_18.html +
- +
-同時にバイトパイル時の警告を回避するために,いくつかのパッケージを <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​eval-when-compile</​span></​html>​ の中に記述します. +
- +
-<code emacs-lisp>​ +
-(eval-when-compile +
-  (require '​cl-lib) +
-  (require '​org) +
-  (require '​org-clock) +
-  (require '​org-mac-link)) +
-</​code>​ +
- +
-==== [load-package-p] 設定の読み込みフラグを確認する ==== +
- +
-<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​loading-packages</​span></​html>​ 変数に,設定を無視するパッケージを記述しておくと, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​autoload-if-found</​span></​html>​ 内でそれらを読み込まないようにします.読み込まなかったパッケージは,Messages バッファにそのことを報告します. <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​autoload-if-found</​span></​html>​ は本来の実装ではなく,<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​loading-packages</​span></​html>​ を参照するように手を加えています. +
- +
-<code emacs-lisp>​ +
-(defun load-package-p (file) +
-  (let ((enabled t)) +
-    (when (boundp '​loading-packages) +
-      (dolist (package loading-packages) +
-        (let ((name (car package)) +
-              (flag (cdr package))) +
-          (when (and (stringp name) +
-                     ​(equal file name) +
-                     (not flag)) +
-            (setq enabled nil) +
-            (message "--- `%s' was NOT loaded explicitly"​ name))))) +
-    enabled)) +
-</​code>​ +
- +
-==== リストで関数を渡す autoload-if-found を使う ==== +
- +
-  * http://​d.hatena.ne.jp/​jimo1001/​20090921/​1253525484 +
- +
-eval-after-load とのペアでマクロ化したバージョもあります(次章参照).ただ,生成されるバイコードに問題がありそうなので,最近は <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​autoload-if-found</​span></​html>​ と <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​with-eval-after-load</​span></​html>​ の組み合わせに戻しています.最初に <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​when</​span></​html>​ 判定をすることで,パッケージが未インストールの状態に各種設定をスキップするので安全です. +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(f1 f2) ;; 関数リスト.要素の関数を呼ぶ時に,パッケージが読み込まれる +
-         "​package-name"​ nil t) ;; 第4数まで指定すると,M-x で補完対象になる. +
- +
-    ;; (1) バイトコンパイル時に警告がでたら,対応するパッケージを記載 +
-    (eval-when-compile +
-      (require '​package-name nil t)) +
- +
-    ;; (2) 遅延読み込みする設定群 +
-    (with-eval-after-load "​package-name"​ +
-      (setq v1 t) +
-      (setq v2 nil) +
-      (define-key package-name-map (kbd "​q"​) '​f1)) +
- +
-    ;; (3) パッケージが存在すれば, Emacs 起動時に読み込む設定群 +
-    (push '​("​\\.hoge$"​ . package-name-mode) auto-mode-alist) +
-    (add-hook '​after-init-hook 'f1) +
-    (global-set-key (kbd "​r"​) '​f2)) +
-</​code>​ +
- +
-  * http://​www.sodan.org/​~knagano/​emacs/​dotemacs.html(オリジナル) +
- +
- +
-次のカスタマイズされた <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​autoload-if-found</​span></​html>​ は引数にリストのみを受け付けます. +
- +
-<code emacs-lisp>​ +
-(defun autoload-if-found (functions file &​optional docstring interactive type) +
-  "set autoload iff. FILE has found."​ +
-  (and (load-package-p file) +
-       ​(locate-library file) +
-       ​(progn +
-         ​(dolist (f functions) +
-           ​(autoload f file docstring interactive type)) +
-         ​t))) +
-</​code>​ +
- +
-==== [eval-after-autoload-if-found] 複数関数を対象とする遅延読み込み ==== +
- +
-Twitterでぼやいていたら [[https://​twitter.com/​cvmat|@cvmat]]さんが降臨して次のマクロを作ってくださいました.感謝感謝. +
- +
-  * [[https://​gist.github.com/​3513287]] +
- +
-autoload-if-found で遅延読み込みすると,eval-after-load と組み合わせるので,どうしてもインデントが増えてしまうのが欠点です. +
- +
-例えば,cycle-buffer を遅延読み込みしたい場合, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​setq</​span></​html>​ で変数を書換えするために随分とインデントが進んでいます. +
- +
-# (eval-after-autoload-if-found '(f1 f2) "​f"​) ​      ;; autoload に複数指定 +
-# (eval-after-autoload-if-found '(f1 f2) "​f"​ nil t) ;; interactive を使う時 +
-# (when (eval-after-autoload-if-found '(f1 f2) "​f"​ nil t nil '()) (add-hook..)  +
- +
-<code emacs-lisp>​ +
-(when (autoload-if-found +
-       '​(cycle-buffer cycle-buffer-backward) "​cycle-buffer"​ nil t) +
-  (with-eval-after-load "​cycle-buffer"​ +
-    (setq cycle-buffer-allow-visible t) +
-    (setq cycle-buffer-show-length 12) +
-    (setq cycle-buffer-show-format '​("​ [ %s ]" . " %s"​)))) +
-</​code>​ +
- +
-これをスッキリさせるために <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​eval-after-autoload-func</​span></​html>​ を使います.記述がシンプルになり,行数も桁数もスッキリです. +
- +
-<code emacs-lisp>​ +
-(eval-after-autoload-if-found +
- '​(cycle-buffer cycle-buffer-backward) ;; autoload で反応させる関数 +
- "​cycle-buffer"​ nil t nil      ;; 反応させた関数のコールで読むパッケージ指定 +
- '​(;;​ パッケージ読み込み後の設定 +
-   (setq cycle-buffer-allow-visible t) +
-   (setq cycle-buffer-show-length 12) +
-   (setq cycle-buffer-show-format '​("​ <​(%s)>"​ . " %s"​)))) +
-</​code>​ +
- +
-さらに戻り値を判定して,グローバルなキーアサインもできます.存在しないパッケージの関数呼び出しを明示的に防ぐために有効です. <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​hook</​span></​html>​ 系の登録も同様です. +
- +
-<code emacs-lisp>​ +
-(when (eval-after-autoload-if-found +
-       '​(cycle-buffer cycle-buffer-backward) "​cycle-buffer"​ nil t nil +
-       '​((setq cycle-buffer-allow-visible t) +
-         (setq cycle-buffer-show-length 12) +
-         (setq cycle-buffer-show-format '​("​ <​(%s)>"​ . " %s"​)) +
-         ;; パッケージのキーアサインはこちら +
-         ;; (define-key xxx-map (kbd "​q"​) '​hoge) +
-         )) +
-  ;; グローバルはこちら +
-  (global-set-key (kbd "​M-]"​) '​cycle-buffer) +
-  (global-set-key (kbd "​M-["​) '​cycle-buffer-backward) +
-  ;; パッケージに紐付いたフックはこちらへ +
-  ;; (add-hook '​xxx-hook '​hogehoge) +
-  ;; +
-  ;; ビルドインではないmodeの auto-mode-alist 設定も必要ならこちに記述 +
-  ;; (push '​("​\\.hoge$"​ . hoge-mode) auto-mode-alist) +
-  ) +
-</​code>​ +
- +
-なお,第四引数 <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​(functions file docstring interactive)</​span></​html>​ まで指定すれば, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​M-x</​span></​html>​ の呼び出し候補に functions で指定した関数が補完表示されます. +
- +
-=== 関数版 === +
- +
-関数版にリスト <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​loading-packages</​span></​html>​ を追加しました.このリストに事前に Lisp ファイル名を入れておくと,一切の設定をスキップするものです. <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​eval-after-atoload-if-found</​span></​html>​ を定義する前に次のような変数を設定しておきます.バイトコンパイルしていないファイルに書いておけば,パッケージのON/​OFFを簡単に制御できます. +
- +
-ただ問題点として,最後の引数に入れる関数がバイトコンパイル時に展開されないようで,出来上がったバイトコードが高速化に寄与しているのか不明です.簡易的な実験ではだいぶ差があるようで,最近は <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​autoload-if-found</​span></​html>​ , <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​with-eval-after-load</​span></​html>​ , <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​eval-when-compile</​span></​html>​ の組み合わせで,設定を書いて,遅延ロードと高速読み込みを実現しています. <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​loading-packages</​span></​html>​ は <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​autoload-if-found</​span></​html>​ に組み込みました. +
- +
-<code emacs-lisp>​ +
-(setq loading-packages ;; 追加されていない場合は標準で読み込む +
-      '​(("​web-mode"​ . nil) ;; 読み込まない +
-        ("​org"​ . t))) ;; 読み込む +
-</​code>​ +
- +
-[[https://​gist.github.com/​3513287]] +
- +
-<code emacs-lisp>​ +
-;; https://​github.com/​zk-phi/​setup +
-;; (when (require 'setup nil t) +
-;;   ​(setup-initialize)) +
-(defun eval-after-autoload-if-found +
-    (functions file &​optional docstring interactive type after-body) +
-  "Set up autoload and eval-after-load for FUNCTIONS iff. FILE has found."​ +
-  (let ((enabled t) +
-        (package nil)) +
-    (message "--- %s" file) +
-    (when (and (boundp '​loading-packages) loading-packages) +
-      (dolist (package loading-packages) +
-        (let ((name (car package)) +
-              (flag (cdr package))) +
-          (when (and (stringp name) (equal file name)) +
-            (unless flag +
-              (setq enabled nil) +
-              (message "--- A setting for `%s' was NOT loaded explicitly"​ +
-                       ​name)))))) +
-    ;; if disabled then return nil. +
-    (when (and enabled (locate-library file)) +
-      (mapc (lambda (func) +
-              (autoload func file docstring interactive type)) +
-            (if (listp functions) +
-                functions +
-              (list functions))) +
-      (when after-body +
-        (eval-after-load file `(progn ,​@after-body))) +
-      t))) +
-</​code>​ +
- +
-=== マクロ版 === +
- +
-以下はマクロ版です.引数の渡し方が関数と少し違うので要注意です. +
- +
-[[https://​gist.github.com/​3499459]] +
- +
-<code emacs-lisp>​ +
-(defmacro eval-after-autoload-if-found +
-    (functions file &​optional docstring interactive type &rest after-body) +
-  "Set up autoload and eval-after-load for FUNCTIONS iff. FILE has found."​ +
-  `(let* ((functions ,​functions) +
-          (docstring ,​docstring) +
-          (interactive ,​interactive) +
-          (type ,type) +
-          (file ,file)) +
-     (when (locate-library file) +
-       (mapc (lambda (func) +
-               ​(autoload func file docstring interactive type)) +
-             (if (listp functions) +
-                 ​functions +
-               (list functions))) +
-       ,​@(when after-body +
-           ​`((eval-after-load file '​(progn ,​@after-body)))) +
-       ​t))) +
-</​code>​ +
- +
-==== [library-p] load-path にライブラリがあるかを判定 ==== +
- +
-パッケージが load-path に存在していて使える状態にあるかを調べます.もし存在しなければ,メッセージバッファに [NOT FOUND] を刻みます. +
- +
-<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​libraries</​span></​html>​ には複数を指定でき,すべてが使える状態の場合のみ <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​t</​span></​html>​ が返ります. +
- +
-<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">"​org"</​span></​html>​ を渡したり, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">'​("​org"​ "​helm"​)</​span></​html>​ を渡したりできます. +
- +
-<code emacs-lisp>​ +
-(defun library-p (libraries) +
-  "​Return `t' when every specified library can be located. " +
-  (let ((result t)) +
-    (mapc (lambda (library) +
-            (unless (locate-library library) +
-              (message "--- NOT FOUND: %s" library) +
-              (setq result nil))) +
-          (if (listp libraries) +
-              libraries +
-            (list libraries))) +
-    result)) +
-</​code>​ +
- +
-==== [passed-clock-p] 指定時刻が本日の未来の時刻かを判定 ==== +
- +
-今日の時刻に限定して,指定時刻が過去の時間かどうかを判定します. <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​run-at-time</​span></​html>​ が想定通りに動かず,起動時に対象の関数が走ってしまうので,この判定が <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​nil</​span></​html>​ の時だけタイマー登録します. <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​target</​span></​html>​ を HH:MM の書式で与えます.現在時刻を与えた場合は,過ぎ去っていないので <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​nil</​span></​html>​ を返します. +
- +
-<code emacs-lisp>​ +
-(defun passed-clock-p (target) +
-  (let +
-      ((hour nil) +
-       (min nil) +
-       ​(current-hour nil) +
-       ​(current-min nil)) +
-    (when (string-match "​\\([0-2]?​[0-9]\\):​\\([0-5][0-9]\\)"​ target) +
-      (setq hour (substring target (match-beginning 1) (match-end 1))) +
-      (setq min (substring target (match-beginning 2) (match-end 2))) +
-      (setq current-hour (format-time-string "​%H"​ (current-time))) +
-      (setq current-min (format-time-string "​%M"​ (current-time))) +
-      (< (+ (* (string-to-number hour) 60) +
-            (string-to-number min)) +
-         (+ (* (string-to-number current-hour) 60) +
-            (string-to-number current-min)))))) +
-</​code>​ +
- +
-==== [input-focus-p] フォーカス判定 ==== +
- +
-フォーカスが当たっているのかを判定するための関数です. +
- +
-<code emacs-lisp>​ +
-(defvar window-focus-p t) +
-(defun window-focus-p () +
-  (if window-focus-p t nil)) +
-(add-hook '​focus-in-hook #'​(lambda () (setq window-focus-p t))) +
-(add-hook '​focus-out-hook #'​(lambda () (setq window-focus-p nil))) +
-</​code>​ +
- +
-==== 警告の抑制 ==== +
- +
-起動時に警告が出てうっとうしい場合に使います.起動直後に呼ばれるように, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​.emacs</​span></​html>​ の上の方に書いておくとよいと思います. +
- +
-  * [[http://​d.hatena.ne.jp/​kitokitoki/​20100425/​p1]] +
- +
-<code emacs-lisp>​ +
-(setq byte-compile-warnings +
-      '​(free-vars unresolved callargs redefine obsolete noruntime +
-                  cl-functions interactive-only make-local)) +
-(setq ad-redefinition-action '​accept) +
-</​code>​ +
- +
- +
-==== エラー表示の抑制 ==== +
- +
-普段使いでは要らないので抑制します. +
- +
-<code emacs-lisp>​ +
-(setq debug-on-error nil) +
-</​code>​ +
- +
-==== compilation buffer でのデータ表示で自動するスクロールする ==== +
- +
-<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​nil</​span></​html>​ のままだと,出力がいてもスクロールされないので,自動的にスクロールされるように設定. +
- +
-<code emacs-lisp>​ +
-(setq compilation-scroll-output t) +
-</​code>​ +
- +
-==== C-x C-c で容易にEmacsを終了させないように質問する ==== +
- +
-<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​y-or-n-p</​span></​html>​ を指定するだけです. +
- +
-<code emacs-lisp>​ +
-(setq confirm-kill-emacs '​y-or-n-p) +
-</​code>​ +
- +
-以前は, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​C-x C-c</​span></​html>​ を以下の関数に割り当てて,任意の質問文で入力を求めていました. +
- +
-<code emacs-lisp>​ +
-;;; Cite: http://​flex.ee.uec.ac.jp/​texi/​emacs-jp/​emacs-jp_12.html +
-;;; Cite: http://​d.hatena.ne.jp/​Ubuntu/​20090417/​1239934416 +
-;; A simple solution is (setq confirm-kill-emacs '​y-or-n-p). +
-(defun confirm-save-buffers-kill-emacs (&​optional arg) +
-  "Show yes or no when you try to kill Emacs"​ +
-  (interactive "​P"​) +
-  (cond (arg (save-buffers-kill-emacs)) +
-        (t +
-         (when (yes-or-no-p "Are you sure to quit Emacs now? ") +
-           ​(save-buffers-kill-emacs))))) +
-(global-set-key (kbd "C-x C-c") '​confirm-save-buffers-kill-emacs) +
-</​code>​ +
- +
-==== [shut-up.el] Messages 出力を封じる(制御する) ==== +
- +
-<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​shut-up.el</​span></​html>​ というマクロがあり,現在はそちらを使っています.非常に強力です. +
- +
-<code emacs-lisp>​ +
-(defun hoge () +
-  (interactive) +
-  (if (require '​shut-up nil t) +
-      (shut-up (recentf-save-list)) +
-    (recentf-save-list))) +
-</​code>​ +
- +
-以下はそれ以前のアプローチ. <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​recentf-save-list</​span></​html>​ を <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​find-file-hook</​span></​html>​ にぶら下げていますが,そのままだと <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​org-agenda</​span></​html>​ の初回実行時にたくさんのメッセージが出てしまうところ,このマクロを介すだけで抑制可能です. <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​message-log-max</​span></​html>​ で制御でるのがすごい. +
- +
-  * [[http://​qiita.com/​itiut@github/​items/​d917eafd6ab255629346|Emacs - エコーエリアや *Messages* バッファにメッセージを表示させたくない - Qiita]] +
- +
-<code emacs-lisp>​ +
-(defmacro with-suppressed-message (&rest body) +
-  "​Suppress new messages temporarily in the echo area and the `*Messages*'​ buffer while BODY is evaluated."​ +
-  (declare (indent 0)) +
-  (let ((message-log-max nil)) +
-    `(with-temp-message (or (current-message) ""​) ,@body))) +
-</​code>​ +
- +
-==== エンターキーの挙動 ==== +
- +
-好みの問題ですかね. +
- +
-<code emacs-lisp>​ +
-(global-set-key (kbd "​RET"​) '​electric-newline-and-maybe-indent) +
-</​code>​ +
- +
-==== コマンド入力中に入力過程をミニバッファに反映する ==== +
- +
-標準値は <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​1</​span></​html>​ です.例えば, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​C-c f r</​span></​html>​ で発動する関数があるとき, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​C-c</​span></​html>​ を入力するとその直後にはミニバッファに何も表示されませんが, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​echo-keystrokes</​span></​html>​ だけ経過すると, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​C-c</​span></​html>​ が表示されます. <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​0</​span></​html>​ に設定すると,いくら経過しても何も表示しません. +
- +
-<code emacs-lisp>​ +
-(setq echo-keystrokes 0.5) +
-</​code>​ +
- +
-===== コア設定 ===== +
- +
-Emacs を操作して文書編集する上で欠かせない設定です. +
- +
-==== 言語/文字コード ==== +
- +
-徹底的にUTF-8に合わせます. +
- +
-<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​save-buffer-coding-system</​span></​html>​ を設定すると, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​buffer-file-coding-system</​span></​html>​ の値を無視して,指定した <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​save-buffer-coding-system</​span></​html>​ の値でバッファを保存する.つまり, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​buffer-file-coding-system</​span></​html>​ に統一するなら設定不要. +
- +
-<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​set-default-coding-systems</​span></​html>​ か <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​prefer-coding-system</​span></​html>​ を設定すると,同時に <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​file-name-coding-system</​span></​html>​,<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​set-terminal-coding-system</​span></​html>​,<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​set-keyboard-coding-system</​span></​html>​ も同時に設定される.<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​prefer-coding-system</​span></​html>​ は,文字コード自動判定の最上位判定項目を設定する. +
- +
-<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​set-buffer-file-coding-system</​span></​html>​ は,Xとのデータやりとりを設定する. +
- +
-<code emacs-lisp>​ +
-(prefer-coding-system '​utf-8-unix) +
-;; (set-language-environment "​Japanese"​) ;; will take 20-30[ms] +
-(set-locale-environment "​en_US.UTF-8"​) ; "​ja_JP.UTF-8"​ +
-(set-default-coding-systems '​utf-8-unix) +
-(set-selection-coding-system '​utf-8-unix) +
-(set-buffer-file-coding-system '​utf-8-unix) +
-</​code>​ +
- +
- +
-==== 日本語入力 ==== +
- +
-NSビルド用のインラインパッチを適用している場合に使います.Lion でも使える自分用にカスタマイズした [[https://​gist.github.com/​1532344|inline-patch]] を使っています. +
- +
-  * Emacs24用には,Mavericks対応した[[https://​gist.github.com/​takaxp/​9658281|パッチ]]を使っています. +
-  * Emacs24.5用は[[https://​gist.github.com/​takaxp/​1d91107b311b63b57529|ちら]]. +
-  * Emacs25.2用は[[https://​gist.github.com/​takaxp/​3314a153f6d02d82ef1833638d338ecf|こちら]]. +
- +
-<code emacs-lisp>​ +
-(when (fboundp '​mac-add-key-passed-to-system) +
-  (setq default-input-method "​MacOSX"​) +
-  (mac-add-key-passed-to-system '​shift)) +
-</​code>​ +
- +
-==== [ag.el] 検索 ==== +
- +
-検索には <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​The Silver Searcher</​span></​html>​ を使います.あらかじめインストールしておく必要があります.MacPorts ​場合,the_silver_searcher の名称で頒布されています. <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​exec-path</​span></​html>​ に <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">/​opt/​local/​bin</​span></​html>​ が含まれていることを確認してください. +
- +
-<code sh> +
-the_silver_searcher @0.18.1 (textproc) +
- A code-searching tool similar to ack, but faster. +
-</​code>​ +
- +
- +
-カスタマイズした関数を <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​C-M-f</​span></​html>​ にぶら下げています.helm インタフェースを使う <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​helm-ag</​span></​html>​ もあります. +
- +
-<code emacs-lisp>​ +
-  (when (and (executable-find "​ag"​) +
-             ​(autoload-if-found +
-              '​(my:​ag ag) +
-              "​ag"​ nil t)) +
- +
-    (eval-when-compile +
-      (require 'ag nil t)) +
- +
-    (with-eval-after-load "​ag"​ +
-      (setq ag-highlight-search t) +
-      (setq ag-reuse-buffers t) ;; nil: 別ウィンドウが開く +
-      (setq ag-reuse-window nil) ;; nil: 結果を選択時に別ウィンドウに結果を出す +
-      ;; q でウィンドウを抜ける +
-      ;; (define-key ag-mode-map (kbd "​q"​) '​delete-window) +
- +
-      ;; 自動的に出力バッファに移動 +
-      (defun my:ag () +
-        (interactive) +
-        (call-interactively 'ag) +
-        (switch-to-buffer-other-frame "*ag search*"​))) +
- +
-    (global-set-key (kbd "​C-M-f"​) '​my:​ag) +
-    (autoload-if-found '​(helm-ag) "​helm-ag"​ nil t)) +
-</​code>​ +
- +
-==== 基本キーバインド ==== +
- +
-次の機能にキーバインドを設定する. +
- +
-- Cmd+V でースト(Mac用) +
-- Cmd と Option を逆にする(Mac用) +
-- 削除 +
- +
-<code emacs-lisp>​ +
-  (when (memq window-system '(mac ns)) +
-    (global-set-key (kbd "​M-v"​) '​yank) +
-    (when (boundp '​ns-command-modifier) +
-      (setq ns-command-modifier '​meta)) +
-    (when (boundp '​ns-alternate-modifier) +
-      (setq ns-alternate-modifier '​super)) +
-    (when (boundp '​ns-pop-up-frames) +
-      (setq ns-pop-up-frames nil)) +
-    (global-set-key [ns-drag-file] '​ns-find-file)) ; D&D for Emacs23 +
- +
-  (global-set-key [delete] '​delete-char) +
-  (global-set-key [kp-delete] '​delete-char) +
-</​code>​ +
- +
-==== ナローイングするか ==== +
- +
-ナローイングを有効にします.ナローイングを知らないユーザが「データが消えた!」と勘違いしないように,デフォルトでは無効になっています. +
- +
-Org Mode でナローイングを使う場合は,特に設定しなくてもOKです. +
- +
-<code emacs-lisp>​ +
-(put '​narrow-to-region '​disabled nil) +
-</​code>​ +
- +
-<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​fancy-narrow</​span></​html>​ を使うと,通常バッファ上で表示しなくなる領域を目立たないように残すことができます. +
- +
-<code emacs-lisp>​ +
-(autoload-if-found +
- '​(fancy-narrow-to-region +
-   ​fancy-widen +
-   ​org-fancy-narrow-to-block +
-   ​org-fancy-narrow-to-element +
-   ​org-fancy-narrow-to-subtree) +
- "​fancy-narrow"​ nil t) +
-</​code>​ +
- +
-==== バッファの終わりでのnewlineを禁止する ==== +
- +
-<code emacs-lisp>​ +
-;; Avoid adding a new line at the end of buffer +
-(setq next-line-add-newlines nil) +
-</​code>​ +
- +
-==== 常に最終行に一行追加する ==== +
- +
-<code emacs-lisp>​ +
-;; Limit the final word to a line break code (automatically correct) +
-(setq require-final-newline t) +
-</​code>​ +
- +
-==== 長い文章を右端で常に折り返す ==== +
- +
-<code emacs-lisp>​ +
-(setq truncate-lines nil) +
-(setq truncate-partial-width-windows nil) +
-</​code>​ +
- +
-==== バッファが外部から編集された場合に自動で再読み込みする ==== +
- +
-<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​auto-save-buffers</​span></​html>​ を使っていれば,バッファは常に保存された状態になるため, revert が即座に反映されます.適宜バックアップツールと組み合わせないと,バッファが自動更新されてしまうので不安かもしれません. +
- +
-<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​helm-config</​span></​html>​ の後に呼んでいるのは,Emacs起動時の単純な高速化対策です. +
- +
-<code emacs-lisp>​ +
-(with-eval-after-load "​helm-config"​ +
-  (global-auto-revert-mode 1)) +
-</​code>​ +
- +
-==== [uniquify.el] 同じバッファ名が開かれた場合に区別する ==== +
- +
-ビルトインの <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​uniquify</​span></​html>​ を使います. +
- +
-<code emacs-lisp>​ +
-(setq uniquify-buffer-name-style '​post-forward-angle-brackets) +
-</​code>​ +
-==== マウスで選択した領域を自動コピー ==== +
- +
-マウスで選択すると,勝手にペーストボードにデータが流れます. +
- +
-<code emacs-lisp>​ +
-(setq mouse-drag-copy-region t) +
-</​code>​ +
- +
-==== パッケージ管理 ==== +
- +
-[[https://​github.com/​cask/​cask|Cask]]+Palletの環境を採用しました.それまは,特定のディレクトリに必要な elisp をダウンロードしておいたり,git から取り寄せて,それらをload-pathに設定するスクリプトを準備するなど,個人的なルールで運用してきましたが,希望の機能をCaskが提供しているので,Emacs24.4になるタイミングで移行しました. +
- +
-ただし,頒布元が危ういようなファイルはやはり個人で管理しておきたいので,Caskで管理する対象は,MEPLA経由で入手可能なメンテナンスが行き届いたパッケージに限定しています.また,普通の使い方(casl.elを読み込んで初期化)をしていると,起動時に少し時間を要するので,所定のディレクトリにCaskで取り寄せたすべてのファイルをコピーして,そのディレクトリだけをload-pathで指定するという使い方もしています.今のところ大きな問題は生じていません. +
- +
-=== [cask-mode.el] モード設定 === +
- +
-  * [[https://​github.com/​Wilfred/​cask-mode|Wilfred/​cask-mode:​ Major mode for editing Cask files]] +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(cask-mode) +
-         "​cask-mode"​ nil t) +
- +
-    (push '​("/​Cask\\'"​ . cask-mode) auto-mode-alist)) +
-</​code>​ +
- +
-=== Cask のセットアップ === +
- +
-以下は自分用のメモです. +
- +
-  - curl -fsSkL https://​raw.github.com/​cask/​cask/​master/​go | python +
-  - ~/.cask/bin に PATH を通す (see .zshenv, export PATH="​${HOME}/​.cask/​bin:​{$PATH}"​) +
-  - cask upgrade +
-  - cd ~/​.emacs.d +
-  - cask init            ;; ~/​.emacs.d/​Cask が存在しない場合だけ実行 +
-  - cask install +
- +
-=== load-path を一箇所にして起動を高速化 === +
- +
-Caskを使うと,個々のパッケージが独立にload-pathに設定されます.これにより依存関係がスッキリするわけですが,数が増えると起動時間が遅くなります.重いです.自分の例では,800[ms]のオーバーヘッドでした.これを避けるには,load-pathを一箇所に集約することが効きます.オーバーヘッドは約100[ms]まで削減できました.場合によっては依存関係に問題が生じる可能性がありますが,今のところは問題になっていません. +
- +
-  - =~/​.emacs.d/​.cask/​package/<​emacs-version>​= なるフォルダを作る +
-  - =~/​.emacs.d/​.cask/​24.4.1/​elpa/​*/​*= と =~/​.emacs.d/​.cask/​24.4.1/​elpa/​*/​lisp/​*= をすべて上記フォルダにコピー +
-  - =~/.emacs= で, =~/​.emacs.d/​.cask/​package/<​emacs-version>​= を load-path に設定し,Caskは読み込まない +
- +
-<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​M-x lis-packges</​span></​html>​ を使って新しいパッケージをインストールする時だけ,以下のフラグを nil に書き換えてEmacsを起動します. <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​load-path-setter</​span></​html>​ は独自関数です(普通に <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​add-to-list</​span></​html>​ で追加するのと同じです) +
- +
-<code emacs-lisp>​ +
-(defconst cask-package-dir +
-  (format "​~/​.emacs.d/​.cask/​package/​%s"​ emacs-version)) +
-(if t +
-    (load-path-setter `(,​cask-package-dir) '​load-path) +
-  (when (or (require 'cask "​~/​.cask/​cask.el"​ t) +
-            (require 'cask "/​usr/​local/​opt/​cask/​cask.el"​ t)) ;; Homebrew +
-    (when (fboundp '​cask-initialize) (cask-initialize))) ;; 800[ms] +
-  (when (require '​pallet nil t) +
-    (when (fboundp '​pallet-mode) (pallet-mode t)))) +
-</​code>​ +
- +
-Cask で新しいパッケージを導入したり,既存のパッケージを更新したら,その都度,package ディレクトリにコピーします.手動でやると面倒なので,次のようなスクリプトで対処します.アルファリリースなどに対応するときなど,少し調整が必要です. +
- +
-<code sh> +
-  #!/bin/sh +
- +
-  # Required setting: alias emacs='/​Applications/​Emacs.app/​Contents/​MacOS/​Emacs'​ +
-  # exec cd ~/.emacs.d && cask upgrade-cask if you upgrade cask itself. +
- +
-  CASKPATH=~/​.emacs.d/​.cask +
-  #​VERSION=24.5.1 +
-  #​VERSION=25.0.95.1 +
-  VERSION=25.2 +
-  #​VERSION=25.1.90.1 +
-  SUBDIR=package/​$VERSION +
-  BACKUPDIR=~/​Dropbox/​backup +
-  EMACS=`which emacs` +
-  if [ $HOSTTYPE = "​intel-mac"​ ]; then +
-  EMACS=/​Applications/​Emacs.app/​Contents/​MacOS/​Emacs +
-  fi +
-  # COMMAND="​$EMACS -batch -q -l ~/.emacs -f batch-byte-compile";​ +
-  if [ -d "​$CASKPATH/​$SUBDIR"​ ]; then +
-      echo "--- Removing $CASKPATH/​$SUBDIR"​ +
-      rm -r "​$CASKPATH/​$SUBDIR"​ +
-  else +
-      echo "--- Target dir does NOT exist ($CASKPATH/​$SUBDIR)."​ +
-      exit +
-  fi +
-  mkdir -p $CASKPATH/​$SUBDIR +
- +
-  cd ~/​.emacs.d +
-  echo "--- Cask install"​ +
-  EMACS="/​Applications/​Emacs.app/​Contents/​MacOS/​Emacs"​ cask install +
- +
-  echo "--- Cask update"​ +
-  EMACS="/​Applications/​Emacs.app/​Contents/​MacOS/​Emacs"​ cask update +
- +
-  # echo "--- Removing org-mode installed by Cask unexpectedly"​ +
-  /bin/rm -rf ~/​.emacs.d/​.cask/​$VERSION/​elpa/​org-20* +
- +
-  echo "--- Copying elisp files"​ +
-  /bin/cp -rf ~/​.emacs.d/​.cask/​$VERSION/​elpa/​*/​* $CASKPATH/​$SUBDIR +
-  /bin/cp -rf ~/​.emacs.d/​.cask/​$VERSION/​elpa/​*/​lisp/​* $CASKPATH/​$SUBDIR +
-  cd $CASKPATH/​$SUBDIR +
-  rm -rf ./*~ +
- +
-  echo "--- Done"​ +
-</​code>​ +
- +
-=== [paradox.el] パッケージ選択画面の改善 === +
- +
-パッケージインストール用のバッファが多機能になります.スターが表示されたり,ミニバッファには様々な情報が表示されるようになります.基本の操作系は同じで,拡張部分は <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​h</​span></​html>​ を押すとミニバッファにディスパッチャが表示されます. +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(paradox-list-packages my:​list-packages my:​setup-cask) +
-         "​paradox"​ nil t) +
- +
-    (with-eval-after-load "​paradox"​ +
-      (when (fboundp '​paradox-enable) +
-        (paradox-enable)))) +
-</​code>​ +
- +
-==== インデント ==== +
- +
-オープンソース等で他の人のコードを修正する場合は,以下のような設定は良くないかもしれません.例えば差分を取ると見た目は変わらないのに,タブとスペースの違いから差分ありと判定されてしまい,意図しない編集履歴が残ることがあります.ただこの問題は,修正対象のファイルが限定されているならば, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​M-x tabify</​span></​html>​ や <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​M-x untabify</​span></​html>​ で回避できそうです. +
- +
-一方, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​org-mode</​span></​html>​ のソースブロックは半角スペース統一されているため,この設定のほうが都合が良いです. +
- +
-<code emacs-lisp>​ +
-  (setq-default tab-width 2) +
-  (setq-default indent-tabs-mode nil) +
-  (setq indent-line-function '​insert-tab) +
- +
-  ;; (add-hook '​emacs-lisp-mode-hook +
-  ;;           '​(lambda () +
-  ;;              (setq indent-tabs-mode t) +
-  ;;              (setq tab-width 8) +
-  ;;              (setq indent-line-function '​lisp-indent-line))) +
-</​code>​ +
- +
-==== [aggressive-indent] 即時バッファ整形 ==== +
- +
-特定のメジャーモードで,とにかく整形しまくります. <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​python-mode</​span></​html>​ では意図しないインデントになったりします. <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​web-mode</​span></​html>​ だと異常に重かったりします. +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(aggressive-indent-mode) +
-         "​aggressive-indent"​ nil t) +
- +
-    (dolist +
-        (hook +
-         '​(;;​ python-mode-hook +
-           ;; nxml-mode-hook +
-           ;; web-mode-hook +
-           ​emacs-lisp-mode-hook +
-           ​lisp-mode-hook perl-mode-hook c-mode-common-hook)) +
-      (add-hook hook '​aggressive-indent-mode))) +
-</​code>​ +
- +
-==== [ws-butler.el] 不要なスペースを自動除去 ==== +
- +
-行末のスペース等が不要に残るのを回避できます.バッファ保存時の自動処理です. +
- +
-<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​helm-config</​span></​html>​ の後に呼んでいるのは,Emacs起動時の単純な高速化対策です. +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(ws-butler-mode ws-butler-global-mode) +
-         "​ws-butler"​ nil t) +
- +
-    (with-eval-after-load "​ws-butler"​ +
-      (push '​org-mode ws-butler-global-exempt-modes) +
-      (push '​empty-booting-mode ws-butler-global-exempt-modes)) +
- +
-    (with-eval-after-load "​helm-config"​ +
-      (ws-butler-global-mode))) +
-</​code>​ +
- +
-==== ファイルリンクを辿る時に確認のメッセージを出さない ==== +
- +
-そのまま辿ってファイルオープンします. +
- +
-<code emacs-lisp>​ +
-(setq vc-follow-symlinks t) +
-</​code>​ +
- +
-==== MBPビルド用設定 ==== +
- +
-NSビルド版で生じた日本語入力時のチラつきを避けるために,MBP版ビルドに(一時期)浮気しました.以下はその時にNSビルドの振る舞いに近づけるためにがんばった設定です.詳細な情報は,リンク先の記事にあります. +
- +
-  * [[http://​qiita.com/​takaxp/​items/​a86ee2aacb27c7c3a902|Emacs 25.1/25.2 を EMP版で快適に使う - Qiita]] +
- +
-<code emacs-lisp>​ +
-  (when (eq window-system '​mac) +
-    (mac-auto-ascii-mode 1) +
- +
-    (defvar mac-win-last-ime-status 'off) ;; {'​off|'​on} +
-    (defun mac-win-save-last-ime-status () +
-      (setq mac-win-last-ime-status +
-            (if (string-match "​\\.\\(Roman\\|US\\)$"​ (mac-input-source)) +
-                'off '​on))) +
-    (mac-win-save-last-ime-status) ;; 初期化 +
- +
-    (defun mac-win-restore-ime () +
-      (when (and mac-auto-ascii-mode +
-                 (eq mac-win-last-ime-status '​on)) +
-        (mac-select-input-source +
-         "​com.google.inputmethod.Japanese.base"​))) +
- +
-    (defun advice:​mac-auto-ascii-setup-input-source (&​optional _prompt) +
-      "​Extension to store IME status"​ +
-      (mac-win-save-last-ime-status)) +
-    (advice-add '​mac-auto-ascii-setup-input-source :before +
-                #'​advice:​mac-auto-ascii-setup-input-source) +
- +
-    (defun mac-win-restore-ime-target-commands () +
-      (when (and mac-auto-ascii-mode +
-                 (eq mac-win-last-ime-status '​on)) +
-        (mapc (lambda (command) +
-                (when (string-match +
-                       ​(format "​^%s"​ command) (format "​%s"​ this-command)) +
-                  (mac-select-input-source +
-                   "​com.google.inputmethod.Japanese.base"​))) +
-              mac-win-target-commands))) +
- +
-    (add-hook '​pre-command-hook '​mac-win-restore-ime-target-commands) +
- +
-    (defvar mac-win-target-commands +
-      '​(find-file save-buffer other-window delete-window split-window)) +
- +
-    ;; バッファリストを見るとき +
-    (add-to-list '​mac-win-target-commands '​helm-buffers-list) +
-    ;; ChangeLogに行くとき +
-    (add-to-list '​mac-win-target-commands '​add-change-log-entry-other-window) +
-    ;; 個人用の関数を使うとき +
-    ;; (add-to-list '​mac-win-target-commands '​my:​) +
-    ;; 自分で作ったパッケージ群の関数を使うとき +
-    (add-to-list '​mac-win-target-commands '​change-frame) +
-    ;; org-mode で締め切りを設定するとき. +
-    (add-to-list '​mac-win-target-commands '​org-deadline) +
-    ;; org-mode で締め切りを設定するとき. +
-    ;; (add-to-list '​mac-win-target-commands '​org-capture) +
-    ;; query-replace で変換するとき +
-    (add-to-list '​mac-win-target-commands '​query-replace) +
- +
-    ;; ミニバッファ利用後にIMEを戻す +
-    ;; M-x でのコマンド選択でIMEを戻せる. +
-    ;; これ移動先で q が効かないことがある +
-    (add-hook '​minibuffer-setup-hook '​mac-win-save-last-ime-status) +
-    (add-hook '​minibuffer-exit-hook '​mac-win-restore-ime) +
- +
-    ;; タイトルバーの振る舞いを NS版に合わせる. +
-    (setq frame-title-format (format (if (buffer-file-name) "​%%f"​ "​%%b"​))) +
- +
-    ;; なおテーマを切り替えたら,face の設定をリロードしないと期待通りにならない +
-    (custom-set-faces +
-     ;; 変換前入力時の文字列用 face +
-     ​`(mac-ts-converted-text +
-       ​((((background dark)) :underline "​orange"​ +
-         :​background ,​(face-attribute '​hl-line :​background)) +
-        (t (:underline "​orange"​ +
-                       :​background ,​(face-attribute '​hl-line :​background))))) +
-     ;; 変換対象の文字列用 face +
-     ​`(mac-ts-selected-converted-text +
-       ​((((background dark)) :underline "​orange"​ +
-         :​background ,​(face-attribute '​hl-line :​background)) +
-        (t (:underline "​orange"​ +
-                       :​background ,​(face-attribute '​hl-line :​background)))))) +
- +
-    (when (fboundp '​mac-input-source) +
-      (run-with-idle-timer 3 t '​my:​mac-keyboard-input-source)) +
- +
- +
-    ;; あまりよいアプローチでは無い気がするけど,org-heading 上とagendaでは +
-    ;; 1秒アイドルすると,自動的に IME を OFF にする +
-    (defun my:​mac-win-org-heading-auto-ascii () +
-      (when (and (eq major-mode '​org-mode) +
-                 (or (looking-at org-heading-regexp) +
-                     ​(equal (buffer-name) org-agenda-buffer-name))) +
-        (setq mac-win-last-ime-status '​off) +
-        (mac-auto-ascii-select-input-source))) +
-    (when (fboundp '​mac-auto-ascii-select-input-source) +
-      (run-with-idle-timer 1 t '​my:​mac-win-org-heading-auto-ascii)) +
- +
-    ;; EMP版Emacsの野良ビルド用独自設定群 +
-    ;; IME toggleを Emacs内で有効にする +
-    (defun mac-win-ime-toggle () +
-      (interactive) +
-      (when (fboundp '​mac-input-source) +
-        (mac-select-input-source +
-         ​(concat "​com.google.inputmethod.Japanese"​ +
-                 (if (string-match "​\\.base$"​ (mac-input-source)) +
-                     "​.Roman"​ "​.base"​))))) +
-    (global-set-key (kbd "​M-SPC"​) '​mac-win-ime-toggle) +
-    (global-set-key (kbd "​S-SPC"​) '​mac-win-ime-toggle) +
- +
-    ;; isearch 中にIMEを切り替えると,[I-Search] の表示が消える. +
-    (define-key isearch-mode-map (kbd "​M-SPC"​) '​mac-win-ime-toggle) +
-    (define-key isearch-mode-map (kbd "​S-SPC"​) '​mac-win-ime-toggle) +
- +
-    (setq mac-win-ime-cursor-type my:​cursor-type-ime-on) +
-    ;; minibuffer では↑の背景色を無効にする +
-    (when (fboundp '​mac-min--minibuffer-setup) +
-      (add-hook '​minibuffer-setup-hook '​mac-min--minibuffer-setup)) +
-    ;; echo-area でも背景色を無効にする +
-    (setq mac-win-default-background-echo-area t) ;; *-text の background を無視 +
-    ;; デバッグ用 +
-    (setq mac-win-debug-log nil) +
-    ;; Testing... +
-    (setq mac-win-apply-org-heading-face t)) +
-</​code>​ +
- +
-==== NSビルド用設定 ​                                                      :Mac: ==== +
- +
-インラインパッチの適用が前提の設定です. <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​M-SPC/​S-SPC</​span></​html>​ で日本語IMEのON/​OFFができるようになります.インラインパッチの情報はリンク先にあります. +
- +
-  * [[http://​qiita.com/​takaxp/​items/​e07bb286d80fa9dd8e05|emacs-25.2 をインラインパッチをあてて使う(OSX) - Qiita]] +
-  * [[https://​gist.github.com/​takaxp/​3314a153f6d02d82ef1833638d338ecf|An inline-patch for Emacs-25.2]] +
- +
-<code emacs-lisp>​ +
-  (when (eq window-system 'ns) +
-    (when (boundp '​mac-ime-cursor-type) ;; private patch +
-      (setq mac-ime-cursor-type '(bar . 2))) +
- +
-    (defun ns-org-heading-auto-ascii () +
-      (when (and window-focus-p +
-                 (eq major-mode '​org-mode) +
-                 (or (looking-at org-heading-regexp) +
-                     ​(equal (buffer-name) org-agenda-buffer-name))) +
-        (my:​ime-off))) +
- +
-    (defun ns-ime-toggle () +
-      (interactive) +
-      (when (fboundp '​mac-get-current-input-source) +
-        (if (my:​ime-active-p) (my:​ime-off) (my:​ime-on)))) +
-    ;; (mac-toggle-input-method +
-    ;;  (if (string-match "​\\.base$"​ (mac-get-current-input-source)) +
-    ;;      nil t)))) +
- +
-    (global-set-key (kbd "​M-SPC"​) '​ns-ime-toggle) ;; toggle-input-method +
-    (global-set-key (kbd "​S-SPC"​) '​ns-ime-toggle) ;; toggle-input-method +
-    (define-key isearch-mode-map (kbd "​M-SPC"​) '​ns-ime-toggle) +
-    (define-key isearch-mode-map (kbd "​S-SPC"​) '​ns-ime-toggle) +
- +
-    (when (fboundp '​mac-toggle-input-method) +
-      (run-with-idle-timer 1 t '​ns-org-heading-auto-ascii))) +
-</​code>​ +
- +
-===== カーソル移動 ===== +
- +
-カーソルの移動は,次のポリシーに従っています.デフォルトでは <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​C-v/​M-v</​span></​html>​ で上下移動になっていますが, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​M-v</​span></​html>​ は windows のペーストに対応するので混乱を招くので使っていません.ページスクロールは標準の <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​cua-base.el</​span></​html>​ に記載されています. +
- +
-^ 行移動 ​                  ^ C-n/​C-p ​    ^ +
-^ ページ移動(スクロール) ^ M-n/​M-p ​    ^ +
-^ ウィンドウ移動 ​          ^ C-M-n/C-M-p ^ +
-^ バッファ切り替え ​        ^ M-]/​M-[ ​    ^ +
-^ バッファ先頭・末尾 ​      ^ C-M-t/C-M-b ^ +
- +
-==== バッファ内のカーソル移動 ==== +
- +
-先頭に移動,最終行に移動,ページ単位の進む,ページ単位の戻る,行数を指定して移動. +
- +
-<code emacs-lisp>​ +
-(global-set-key (kbd "​C-M-t"​) '​beginning-of-buffer) +
-(global-set-key (kbd "​C-M-b"​) '​end-of-buffer) +
-;; Backward page scrolling instead of M-v +
-(global-set-key (kbd "​M-p"​) '​scroll-down) +
-;; Frontward page scrolling instead of C-v +
-(global-set-key (kbd "​M-n"​) '​scroll-up) +
-;; Move cursor to a specific line +
-(global-set-key (kbd "C-c g") '​goto-line) +
-</​code>​ +
- +
-==== バッファ間のカーソル移動 ==== +
- +
-<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​C-c o</​span></​html>​ でもいいですが,ワンアクションで移動できるようが楽です.次のように双方向で使えるように設定しています. +
- +
-<code emacs-lisp>​ +
-(global-set-key (kbd "​C-M-p"​) #'​(lambda () (interactive) (other-window -1))) +
-(global-set-key (kbd "​C-M-n"​) #'​(lambda () (interactive) (other-window 1))) +
-</​code>​ +
- +
-==== スクロールを制御 ==== +
- +
-一行づつスクロールさせます.デフォルトではバッファの端でスクロールすると,半画面移動します.また,上下の端にカーソルがどのくらい近づいたらスクロールとみなすかも指定できます. +
- +
-  * http://​marigold.sakura.ne.jp/​devel/​emacs/​scroll/​index.html +
- +
-非ASCII文字を扱っているときに一行づつスクロールしない場合は,scroll-conservatively の値を1ではなく大きい数字にすると直るかもしれません. +
- +
-  * http://​www.emacswiki.org/​emacs/​SmoothScrolling +
- +
-scroll-margin を指定すると,カーソルがウィンドウの端から離れた状態でスクロールされます. +
- +
-<code emacs-lisp>​ +
-;; Scroll window on a line-by-line basis +
-(setq scroll-conservatively 1000) +
-(setq scroll-step 1) +
-;;  (setq scroll-margin 0) ; default=0 +
-</​code>​ +
- +
-スクロール時のジャンプが気になる場合は次のパッケージを使うとよいです. +
- +
-  * http://​adamspiers.org/​computing/​elisp/​smooth-scrolling.el +
- +
-<code emacs-lisp>​ +
-(when (require '​smooth-scrolling nil t) +
-  (setq smooth-scroll-margin 1)) +
-</​code>​ +
- +
- +
-==== スクロールで表示を重複させる行数 ==== +
- +
-<code emacs-lisp>​ +
-;; Scroll window on a page-by-pabe basis with N line overlapping +
-(setq next-screen-context-lines 1) +
-</​code>​ +
- +
-==== [SmoothScroll.el] カーソル固定でスクロールする ==== +
- +
-https://​raw.github.com/​takaxp/​EmacsScripts/​master/​SmoothScroll.el +
-https://​github.com/​pglotov/​EmacsScripts/​blob/​master/​SmoothScroll.el +
- +
-カーソル位置と行を固定してバッファを背景スクロールできます. +
- +
-オリジナルのままだとコンパイル時に警告がでるので, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​line-move-visual</​span></​html>​ で書き換えています.残念ながら最近は使っていません. +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(scroll-one-up scroll-one-down) +
-         "​smoothscroll"​ nil t) +
- +
-    (global-set-key (kbd "​s-<​up>"​) '​scroll-one-down) +
-    (global-set-key (kbd "​s-<​down>"​) '​scroll-one-up)) +
-</​code>​ +
- +
-==== [smooth-scroll.el] 滑らかなスクロール ==== +
- +
-良い感じです.スススっとスクロールします. +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(smooth-scroll) +
-         "​smooth-scroll"​ nil t) +
- +
-    (with-eval-after-load "​smooth-scroll"​ +
-      (setq smooth-scroll/​vscroll-step-size 6) +
-      (setq smooth-scroll/​hscroll-step-size 6)) +
- +
-    (smooth-scroll-mode t)) +
-</​code>​ +
- +
-==== [point-undo.el] カーソル位置を簡単にたどる ==== +
- +
-autoload や autoload-if-found で定義すると,使いたい時に履歴が取れていないのでよろしくないです.起動時に有効化します. bm.el で明示的にマーカーを残して履歴をたどる方が気に入っているので,最近は point-undo を使っていません.シングルキーを割り当てておくと使いやすいです. +
- +
-<code emacs-lisp>​ +
-(when (require '​point-undo nil t) +
-  ;; [point-undo.el] Move the cursor to the previous position +
-  (global-set-key (kbd "<​f7>"​) '​point-undo) +
-  ;; [point-undo.el] Redo of point-undo +
-  (global-set-key (kbd "​S-<​f7>"​) '​point-redo)) +
-</​code>​ +
- +
-==== [cycle-buffer.el] カレントバッファの表示切り替え ==== +
- +
-http://​www.emacswiki.org/​emacs/​download/​cycle-buffer.el +
- +
-cycle-buffer を使うと,バッファの履歴をスライドショーのようにたどれます.ミニバッファに前後の履歴が表示されるので,何回キーを押せばいいかの目安になります.それを超える場合には,おとなしくバッファリストを使います.直近数件のバッファをたどるのに便利です. +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(cycle-buffer cycle-buffer-backward) +
-         "​cycle-buffer"​ nil t) +
- +
-    (eval-when-compile +
-      (require '​cycle-buffer nil t)) +
- +
-    (with-eval-after-load "​cycle-buffer"​ +
-      (setq cycle-buffer-allow-visible t) +
-      (setq cycle-buffer-show-length 12) +
-      (setq cycle-buffer-show-format '​("​ <​(%s)>"​ . " %s"​))) +
- +
-    (global-set-key (kbd "​M-]"​) '​cycle-buffer) +
-    (global-set-key (kbd "​M-["​) '​cycle-buffer-backward)) +
-</​code>​ +
- +
-==== [bm.el] カーソル位置をブックマークして追う ==== +
- +
-[[https://​github.com/​joodland/​bm|bm.el]]は,カーソル位置をブックマークしておくためのツールです. <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​point-undo</​span></​html>​ と比較して,ユーザが明示的に位置を保存でき,見た目にも使いやすいです.以下の例では, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​org-mode</​span></​html>​ のツリー内にブックマークがある時にも,上手い具合に表示ができるように調整してあります.カーソル移動は,順方向( <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​bm-next</​span></​html>​ )にだけ使っています. +
- +
-org-mode との連携には, [[https://​github.com/​alphapapa/​org-bookmark-heading|org-bookmark-heading]] があります.ただ,私は下記の設定だけでそれほど不自由していません. +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(my:​bm-toggle +
-           ​my:​bm-next bm-buffer-save bm-buffer-restore bm-buffer-save-all +
-           ​bm-repository-save bm-repository-load bm-load-and-restore) +
-         "​bm"​ nil t) +
- +
-    (eval-when-compile +
-      (require 'bm nil t)) +
- +
-    (with-eval-after-load "​bm"​ +
-      (setq-default bm-buffer-persistence t) +
-      (setq bm-cycle-all-buffers t) +
-      ;; (setq bm-toggle-buffer-persistence t) +
-      (setq bm-repository-file "​~/​Dropbox/​emacs.d/​.bookmark"​) +
-      ;; autoload との組み合わせでは無意味 +
-      ;;​(after-init-hook を利用せよ) +
-      ;; (setq bm-restore-repository-on-load t) +
-      (setq bm-buffer-persistence t) +
-      (setq bm-persistent-face '​bm-face) +
-      (setq bm-repository-file +
-            (expand-file-name "​~/​Dropbox/​emacs.d/​.bm-repository"​)) +
-      (bm-repository-load) +
- +
-      (defun my:​bm-toggle () +
-        "​bm-toggle with updating history"​ +
-        (interactive) +
-        (let ((bm (concat +
-                   ​(buffer-name) "::"​ +
-                   (if (and (equal major-mode '​org-mode) +
-                            (not (org-before-first-heading-p))) +
-                       (nth 4 (org-heading-components)) +
-                     ​(format "​%s"​ (line-number-at-pos)))))) +
-          (if (bm-bookmark-at (point)) +
-              (bookmark-delete bm) +
-            (bookmark-set bm))) +
-        (bm-toggle) +
-        (bm-save)) +
- +
-      (defun my:bm-next () +
-        "​bm-next with org-mode"​ +
-        (interactive) +
-        (bm-next) +
-        (when (and (equal major-mode '​org-mode) +
-                   (not (org-before-first-heading-p))) +
-          (widen) +
-          (org-overview) +
-          (org-reveal) +
-          (org-cycle-hide-drawers '​all) +
-          (org-show-entry) +
-          (show-children) +
-          (org-show-siblings)))) +
- +
-    ;; ファイルオープン時にブックマークを復帰 +
-    (add-hook '​find-file-hook '​bm-buffer-restore) +
-    (global-set-key (kbd "<​f9>"​) '​my:​bm-toggle) +
-    (global-set-key (kbd "<​C-f9>"​) '​my:​bm-next)) +
-</​code>​ +
- +
-==== [centered-cursor-mode.el] カーソル位置をバッファ中央に固定 ==== +
- +
-<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​isearch-mode</​span></​html>​ の時だけ有効にしています. +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(centered-cursor-mode) +
-         "​centered-cursor-mode"​ nil t) +
- +
-    (add-hook '​isearch-mode-hook +
-              #'​(lambda () (centered-cursor-mode 1))) +
-    (add-hook '​isearch-mode-end-hook +
-              #'​(lambda () (centered-cursor-mode -1)))) +
-</​code>​ +
- +
-==== [back-button] マークをたどる ==== +
- +
-現在のバッファと開いている全てのバッファのマークを辿ることができます.いま注目している位置が,マーク全体でどのあたりに位置するのかをミニバッファに表示してくれます.ツールバーを表示している場合は,マークを付けたり辿る用のボタンが追加されます. <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​global-mark-ring-max</​span></​html>​ を設定して,辿れるマークの数を拡張しておきます. +
- +
-ただ <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​C-x <​SPC></​span></​html>​ が潰れるので要注意です.矩形選択で用いる <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​rectangle-mark-mode</​span></​html>​ に当てられているキーバインドです. +
- +
-  * [[https://​github.com/​rolandwalker/​back-button|rolandwalker/​back-button:​ Visual navigation through mark rings in Emacs 🔊]] +
- +
-<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​helm-config</​span></​html>​ の後に呼んでいるのは,Emacs起動時の単純な高速化対策です. +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(back-button-mode +
-           ​back-button-local-forward back-button-global-forward) +
-         "​back-button"​ nil t) +
-    (with-eval-after-load "​back-button"​ +
-      (setq global-mark-ring-max 64) +
-      (setq back-button-local-forward-keystrokes '​("<​f10>"​)) +
-      (setq back-button-global-forward-keystrokes '​("​C-<​f10>"​)) +
-      (define-key back-button-mode-map +
-        (kbd (car back-button-local-forward-keystrokes)) +
-        '​back-button-local-forward) +
-      (define-key back-button-mode-map +
-        (kbd (car back-button-global-forward-keystrokes)) +
-        '​back-button-global-forward) +
-      (setq back-button-mode-lighter nil) +
-      (setq back-button-index-timeout 0))) +
- +
-  (with-eval-after-load "​helm-config"​ +
-    (back-button-mode 1)) +
-</​code>​ +
- +
-==== [smart-mark] C-g後に元の場所へカーソルを戻す ==== +
- +
-すぐわかる例は, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​C-x h</​span></​html>​ で全選択して何もせず, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​C-g</​span></​html>​ する場合です.通常だとバッファの先頭にカーソルが置き去りにされますが, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​smart-mark</​span></​html>​ を使うと,全選択を実行した時の位置に自動的に戻してくれます. +
- +
-<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​helm-config</​span></​html>​ の後に呼んでいるのは,Emacs起動時の単純な高速化対策です. +
- +
-  * [[https://​github.com/​zhangkaiyulw/​smart-mark|zhangkaiyulw/​smart-mark:​ Emacs package to restore point after C-g when mark]] +
- +
-<code emacs-lisp>​ +
-(with-eval-after-load "​helm-config"​ +
-  (when (require '​smart-mark nil t) +
-    (smart-mark-mode 1))) +
-</​code>​ +
- +
-==== TODO [syntax-subword.el] M-f で移動する位置をより密にする ==== +
- +
-  * https://​bitbucket.org/​jpkotta/​syntax-subword +
- +
-<code emacs-lisp>​ +
-(with-eval-after-load "​helm-config"​ +
-  (when (require '​syntax-subword nil t) +
-    (global-syntax-subword-mode 1))) +
-</​code>​ +
- +
-==== [goto-chg.el] 編集箇所を簡単に辿る ==== +
- +
-編集結果を保持したまま編集箇所にカーソルを移すことができます.<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​C-/</​span></​html>​ の Undo のような操作で,簡単かつ高速にカーソルを移動できます. +
- +
-  * =helm-config= の後に呼んでいるのは,Emacs起動時の単純な高速化対策です. +
- +
-<code emacs-lisp>​ +
-(with-eval-after-load "​helm-config"​ +
-  (when (require '​goto-chg nil t) +
-    (global-set-key (kbd "​C-,"​) '​goto-last-change) +
-    (global-set-key (kbd "​C-."​) '​goto-last-change-reverse) +
- +
-    (with-eval-after-load "​flyspell"​ +
-      (define-key flyspell-mode-map (kbd "​C-,"​) '​goto-last-change) +
-      (define-key flyspell-mode-map (kbd "​C-."​) '​goto-last-change-reverse)))) +
-</​code>​ +
- +
-===== 編集サポート ===== +
- +
-==== 矩形編集/連番入力 ==== +
- +
-Built-in の cua-base.el(CUA-mode)を使う.矩形選択は,領域選択後 <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​cua-toggle-rectangle-mark</​span></​html>​ でもできるが, 24.4 からは, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​C-x SPC</​span></​html>​ を押下すると矩形モードに入り直感的に矩形選択ができるようになっています. +
- +
-<code emacs-lisp>​ +
-(require '​cua-base) +
-(cua-mode 1) +
-(setq cua-enable-cua-keys nil) +
-</​code>​ +
- +
-矩形選択した後に, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​M-n</​span></​html>​ を押すと,連番をふれる.開始値,増加値を入力してから,hoge%03d.pgm などとすれば,hoge001,hoge002,,,と入力される.これと,org-mode の表機能( <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​C-c ^</​span></​html>​ で選択部分を簡単に表にできる)を組み合わせれば,連番で数値をふったテーブルを容易に作れる. +
- +
-なお,標準の rect.el に以下の機能が実装されている. +
- +
-^ 矩形切り取り ​        ^ C-x r k ^ +
-^ 矩形削除 ​            ^ C-x r d ^ +
-^ 矩形貼り付け ​        ^ C-x r y ^ +
-^ 矩形先頭に文字を挿入 ^ C-x r t ^ +
-^ 矩形を空白に変換する ^ C-x r c ^ +
- +
-==== Yank時に装飾を取る ==== +
- +
-<code emacs-lisp>​ +
-(setq yank-excluded-properties t) +
-</​code>​ +
- +
-==== ファイル保存時に時間を記録する ==== +
- +
-Built-in の time-stamp.el を使う. +
- +
-バッファの保存時にタイムスタンプを記録する.以下の設定では,バッファの先頭から10行以内に,"​Last Update: " があると,"​Last Update: 2011-12-31@12:​00"​のようにタイムスタンプが記録される. +
- +
- +
-<code emacs-lisp>​ +
-(add-hook '​before-save-hook '​time-stamp) +
-(with-eval-after-load "​time-stamp"​ +
-  (setq time-stamp-start "Last Update: ") +
-  (setq time-stamp-format "​%04y-%02m-%02d@%02H:​%02M"​) +
-  (setq time-stamp-end "​$"​) +
-  (setq time-stamp-line-limit 10)) ; def=8 +
-</​code>​ +
- +
-==== 選択リージョンを使って検索 ==== +
- +
-検索語をミニバッファに入力するのが面倒なので,リージョンをそのまま検索語として利用します. +
- +
-  * http://​dev.ariel-networks.com/​articles/​emacs/​part5/​ +
- +
-<code emacs-lisp>​ +
-(defadvice isearch-mode +
-    (around isearch-mode-default-string +
-            (forward &​optional regexp op-fun recursive-edit word-p) activate) +
-  (if (and transient-mark-mode mark-active (not (eq (mark) (point)))) +
-      (progn +
-        (isearch-update-ring (buffer-substring-no-properties (mark) (point))) +
-        (deactivate-mark) +
-        ad-do-it +
-        (if (not forward) +
-            (isearch-repeat-backward) +
-          (goto-char (mark)) +
-          (isearch-repeat-forward))) +
-    ad-do-it)) +
-</​code>​ +
- +
-==== ChangeLog モード ==== +
- +
-<code emacs-lisp>​ +
-(setq user-full-name "Your NAME"​) +
-(setq user-mail-address "​your@address.com"​) +
-</​code>​ +
- +
-<code emacs-lisp>​ +
-(add-hook '​change-log-mode-hook +
-          #'​(lambda() +
-             ​(orgstruct-mode) +
-             (setq tab-width 4) +
-             (setq left-margin 4))) +
-</​code>​ +
- +
-==== テキストモード ==== +
- +
-http://​d.hatena.ne.jp/​NeoCat/​20080211 +
- +
-とは言っても,Org-modeを知ってから <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​.txt</​span></​html>​ もテキストモードで開かなくなったので,ほぼ無意味な設定となりました.しかも, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​nxml-mode</​span></​html>​ で <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​TAB</​span></​html>​ が効かなくなる現象が起きているので,以下の設定はしない方がよさげ. +
- +
-<code emacs-lisp>​ +
-(add-hook '​text-mode-hook +
-          #'​(lambda() +
-              (setq tab-width 4) +
-              (setq indent-line-function '​tab-to-tab-stop) +
-              (setq tab-stop-list +
-                    '(4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 +
-                        64 68 72 76 80)))) +
-</​code>​ +
- +
-==== C/​C++モード ==== +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(modern-c++-font-lock-mode) +
-         "​modern-cpp-font-lock"​ nil t) +
- +
-    (push '​("​\\.h$"​ . c++-mode) auto-mode-alist) +
-    (add-hook '​c++-mode-hook #'​modern-c++-font-lock-mode)) +
-</​code>​ +
- +
-==== C#モード ==== +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(csharp-mode) +
-         "​csharp-mode"​ "Major mode for editing C# mode." nil t) +
- +
-    (push '​("​\\.cs$"​ . csharp-mode) auto-mode-alist)) +
-</​code>​ +
- +
-==== Infoモード ==== +
- +
-Org-mode の日本語翻訳済みinfoを読むための設定.[[https://​github.com/​org-mode-doc-ja/​org-ja|翻訳プロジェクト]]で頒布しています. +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(info org-info-ja) +
-         "​info"​ nil t) +
- +
-    (with-eval-after-load "​info"​ +
-      (add-to-list '​Info-additional-directory-list +
-                   ​(expand-file-name "​~/​devel/​mygit/​org-ja/​work/"​)) +
- +
-      (defun org-info-ja (&​optional node) +
-        "​(Japanese) Read documentation for Org-mode in the info system. +
-      With optional NODE, go directly to that node."​ +
-        (interactive) +
-        (info (format "​(org-ja)%s"​ (or node ""​)))))) +
-</​code>​ +
- +
-==== Rモード ==== +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(R-mode R) +
-         "​ess-site"​ "Emacs Speaks Statistics mode" nil t) +
- +
-    (push '​("​\\.[rR]$"​ . R-mode) auto-mode-alist)) +
-</​code>​ +
- +
-==== nXMLモード ==== +
- +
-<code emacs-lisp>​ +
-  (eval-when-compile +
-    (require '​nxml-mode nil t)) +
- +
-  (add-hook '​nxml-mode-hook +
-            #'​(lambda () +
-                (define-key nxml-mode-map "​\r"​ '​newline-and-indent) +
-                (auto-fill-mode -1) +
-                (setq indent-tabs-mode t) +
-                (setq nxml-slash-auto-complete-flag t) +
-                (setq tab-width 1) +
-                (setq nxml-child-indent 1) +
-                (setq nxml-attribute-indent 0))) +
-</​code>​ +
- +
-==== yamlモード ==== +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(yaml-mode) +
-         "​yaml-mode"​ nil t) +
- +
-    (push '​("​\\.yml$"​ . yaml-mode) auto-mode-alist)) +
-</​code>​ +
- +
-==== jsonモード ==== +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(json-mode) +
-         "​json-mode"​ nil t) +
- +
-    (push '​("​\\.json$"​ . json-mode) auto-mode-alist)) +
-</​code>​ +
- +
-==== javascriptモード ==== +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(js2-mode) +
-         "​js2-mode"​ nil t) +
-    (with-eval-after-load "​js2-mode"​ +
-      (require '​js2-refactor nil t) +
-      (push '​("​\\.js$"​ . js2-mode) auto-mode-alist) +
- +
-      (when (autoload-if-found +
-             '​(ac-js2-mode ac-js2-setup-auto-complete-mode) +
-             "​ac-js2"​ nil t) +
-        (add-hook '​js2-mode-hook #'​ac-js2-mode)) +
- +
-      (eval-when-compile +
-        (require 'tern nil t) +
-        (require '​tern-auto-complete nil t)) +
- +
-      (if (executable-find "​tern"​) +
-          (when (autoload-if-found +
-                 '​(tern-mode) +
-                 "​tern"​ nil t) +
-            (with-eval-after-load "​tern"​ +
-              (tern-mode 1) +
-              ;; tern-command shall be overwritten by actual path +
-              (setq tern-command `("​node"​ ,​(executable-find "​tern"​))) +
-              (when (require '​tern-auto-complete nil t) +
-                (tern-ac-setup))) +
-            (add-hook '​js2-mode-hook #'​tern-mode)) +
-        (message "--- tern is NOT installed in this system."​)))) +
-</​code>​ +
- +
-==== csvモード ==== +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(csv-mode) +
-         "​csv-mode"​ nil t) +
- +
-    (push '​("​\\.csv$"​ . csv-mode) auto-mode-alist)) +
-</​code>​ +
- +
-==== asciiモード ==== +
- +
-カーソル下の文字のアスキーコードを別ウィンドウでリアルタイムに確認できます. +
- +
-<code emacs-lisp>​ +
-(autoload-if-found +
- '​(ascii-on ascii-off) +
- "​ascii"​ nil t) +
-</​code>​ +
- +
-==== esモード ==== +
- +
-  * https://​github.com/​dakrone/​es-mode +
- +
-[[https://​www.elastic.co/​products/​elasticsearch|ElasticSearch]] のクエリを編集します.org-mode との連携もできます. +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(es-mode) +
-         "​es-mode"​ nil t) +
- +
-    (push '​("​\\.es$"​ . es-mode) auto-mode-alist)) +
-</​code>​ +
- +
-==== gnuplotモード ==== +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(gnuplot-mode) +
-         "​gnuplot-mode"​ nil t) +
- +
-    (push '​("​\\.plt$"​ . gnuplot-mode) auto-mode-alist)) +
-</​code>​ +
- +
-==== markdown-mode ==== +
- +
-  * [[http://​jblevins.org/​projects/​markdown-mode/​]] +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(markdown-mode) +
-         "​markdown-mode"​ nil t) +
- +
-    (push '​("​\\.markdown$"​ . markdown-mode) auto-mode-alist) +
-    (push '​("​\\.md$"​ . markdown-mode) auto-mode-alist)) +
-</​code>​ +
- +
-==== cmakeモード ==== +
- +
-<code emacs-lisp>​ +
-  (if (executable-find "​cmake"​) +
-      (when (autoload-if-found +
-             '​(cmake-mode) +
-             "​cmake-mode"​ nil t) +
- +
-        (add-to-list '​auto-mode-alist '​("​CMakeLists\\.txt\\'"​ . cmake-mode)) +
-        (add-to-list '​auto-mode-alist '​("​\\.cmake\\'"​ . cmake-mode))) +
-    (message "--- cmake is NOT installed."​)) +
-</​code>​ +
- +
-==== スペルチェック ==== +
- +
-Built-in の ispell を使う.チェックエンジンは,aspell を利用する. +
- +
-^ '​ns ​ ^ sudo port install aspell aspell-dict-en ​                  ^ +
-^ 'x32 ^ installer.exe and aspell-en from http://​aspell.net/​win32/​ ^ +
- +
-  * [[http://​qiita.com/​YutakakINJO/​items/​2c891aff66ef45251893|英語の文章を aspell でスペルチェック - Qiita]] +
- +
-コマンドラインから <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​aspell</​span></​html>​ を使う時は, +
- +
-<code sh> +
-aspell -l en -c <​file>​ +
-</​code>​ +
- +
-とすると, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​~/​.aspell.en.pws</​span></​html>​ を個人辞書と暗黙的に設定して,スペルチェックをしてくれる. <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​hunspell</​span></​html>​ が使える環境ならば,優先して使います.さらに, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​~/​.aspell.conf</​span></​html>​ に,次を書いておきます. +
- +
-<code emacs-lisp>​ +
-lang en_US +
-</​code>​ +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(ispell-region ispell-complete-word) +
-         "​ispell"​ nil t) +
- +
-    (with-eval-after-load "​ispell"​ +
-      (cond +
-       ​((executable-find "​aspell"​) +
-        ;; (message "--- aspell loaded."​) +
-        (setq-default ispell-program-name "​aspell"​) +
-        ;; for English and Japanese mixed +
-        (add-to-list '​ispell-skip-region-alist '​("​[^\000-\377]+"​)) +
-        (add-to-list '​ispell-skip-region-alist +
-                     '​("​^#​\\+BEGIN_SRC"​ . "​^#​\\+END_SRC"​)) +
-        (add-to-list '​ispell-skip-region-alist '​("​~"​ "​~"​)) +
-        (add-to-list '​ispell-skip-region-alist '​("​="​ "​="​)) +
-        (add-to-list '​ispell-skip-region-alist '​(org-property-drawer-re)) +
-        (when (eq window-system '​w32) +
-          (setq-default ispell-program-name +
-                        "​C:/​Program Files/​Aspell/​bin/​aspell.exe"​)) +
-        (setq ispell-dictionary "​english"​) +
-        (setq ispell-personal-dictionary "​~/​Dropbox/​emacs.d/​.aspell.en.pws"​) +
-        ;; This will also avoid an IM-OFF issue for flyspell-mode. +
-        (setq ispell-aspell-supports-utf8 t) +
-        (setq ispell-encoding8-command t) +
-        (setq ispell-local-dictionary-alist +
-              '((nil "​[a-zA-Z]"​ "​[^a-zA-Z]"​ "'"​ t +
-                     ​("​-d"​ "​en"​ "​--encoding=utf-8"​) nil utf-8)))) +
- +
-       ;; flyspell とペアで使う時に incorrect判定が日本語に反応したり,日本語変換時にASCIIに変わってしまうなど希望の動作にならないので,今のところ aspell を優先する. +
-       ​((executable-find "​hunspell"​) +
-        (setenv "​LC_ALL"​ "​en_US"​) +
-        ;; (message "--- hunspell loaded."​) +
-        (setenv "​DICPATH"​ "/​Applications/​LibreOffice.app/​Contents/​Resources/​extensions/​dict-en"​) +
-        (ispell-change-dictionary "​en_US"​ t) ;; 必要.しかも ispell-program-name 指定の前で. +
-        (setq-default ispell-program-name (executable-find "​hunspell"​)) +
-        (setq ispell-local-dictionary "​en_US"​) +
-        (setq ispell-dictionary ispell-local-dictionary) +
-        ;; Not regal way, but it's OK (usually ispell-local-dictionary-alist) +
-        (setq ispell-local-dictionary-alist +
-              '​(("​en_US"​ "​[[:​alpha:​]]"​ "​[^[:​alpha:​]]"​ "​['​]"​ nil +
-                 ​("​-d"​ "​en_US"​) nil utf-8) +
-                ("​ja_JP"​ "​[[:​alpha:​]]"​ "​[^[:​alpha:​]]"​ "​['​]"​ nil +
-                 ​("​-d"​ "​en_US"​) nil utf-8))) +
-        (setq ispell-hunspell-dictionary-alist ispell-local-dictionary-alist) +
-        (setq ispell-personal-dictionary "​~/​Dropbox/​emacs.d/​.hunspell.en.dic"​)) +
-       (t nil)) +
-      ) +
- +
-    ;; Spell checking within a specified region +
-    (global-set-key (kbd "C-c f 7") '​ispell-region) +
-    ;; 補完候補の表示(flyspell が使える時はそちらを優先して <f7> にする. +
-    (global-set-key (kbd "<​f7>"​) '​ispell-word)) +
-  ;; (if (autoload-if-found '​(helm-ispell) "​helm-ispell"​ nil t) +
-  ;;     #'​helm-ispell #'​ispell-word))) +
- +
-</​code>​ +
- +
-<code emacs-lisp>​ +
-  ;;; Use aspell for spell checking instead of ispell. +
-  (when (and (executable-find "​aspell"​) +
-             ​(autoload-if-found +
-              '​(ispell-region ispell-complete-word) +
-              "​ispell"​ nil t)) +
-    (with-eval-after-load "​ispell"​ +
-      (setq-default ispell-program-name "​aspell"​) +
-      (when (eq window-system '​w32) +
-        (setq-default ispell-program-name +
-                      "​C:/​Program Files/​Aspell/​bin/​aspell.exe"​)) +
-      ;; for English and Japanese mixed +
-      (add-to-list '​ispell-skip-region-alist '​("​[^\000-\377]+"​)) +
-      (add-to-list '​ispell-skip-region-alist +
-                   '​("​^#​+BEGIN_SRC"​ . "​^#​+END_SRC"​)) +
-      ;; (setq ispell-dictionarry "​english"​) +
-      ;; (setq ispell-personal-dictionary +
-      ;;       "​~/​Dropbox/​emacs.d/​.aspell.en.pws"​) +
- +
-      ;; This will also avoid an IM-OFF issue for flyspell-mode. +
-      ;;  (setq ispell-aspell-supports-utf8 t) +
-      ;;  (setq ispell-encoding8-command t) +
-      ;; (setq ispell-local-dictionary-alist +
-      ;;       '​((nil "​[a-zA-Z]"​ "​[^a-zA-Z]"​ "'"​ t +
-      ;;              ("​-d"​ "​en"​ "​--encoding=utf-8"​) nil utf-8))) +
-      ) +
- +
-    ;; Spell checking within a specified region +
-    (global-set-key (kbd "C-c f 7") '​ispell-region) +
-    ;; 補完候補の表示 +
-    (global-set-key (kbd "<​f7>"​) '​ispell-word)) +
-</​code>​ +
- +
-==== リアルタイムスペルチェック ==== +
- +
-Built-in の [[http://​www.emacswiki.org/​emacs/​FlySpell|flyspell.el]] を使います.flyspell は内部で <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​ispell</​span></​html>​ を読み込んでいるので,辞書機能自体はそちらの設定が使われます. +
- +
-http://​www.morishima.net/​~naoto/​fragments/​archives/​2005/​12/​20/​flyspell/​ +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(flyspell-prog-mode flyspell-mode) +
-         "​flyspell"​ nil t) +
- +
-    (with-eval-after-load "​flyspell"​ +
-      ;; C-; をオーバーライド +
-      (eval-when-compile +
-        (require '​flyspell nil t)) +
-      (define-key flyspell-mode-map (kbd "​C-;"​) '​comment-dwim) +
-      (setq flyspell-duplicate-distance 0) +
-      (setq flyspell-mode-line-string " F") +
-      ;; (setq flyspell-large-region 200) +
-      (set-face-attribute '​flyspell-duplicate nil +
-                          :foreground "#​EA5506"​ :bold t +
-                          :background nil :underline t) +
-      (set-face-attribute '​flyspell-incorrect nil +
-                          :foreground "#​BA2636"​ :bold nil +
-                          :background nil :underline t) +
-      ;; ispell-complete-word のキーバインドを上書き +
-      (when (and (require 'helm nil t) +
-                 ​(require '​flyspell-correct-helm nil t)) +
-        (global-set-key (kbd "<​f7>"​) '​flyspell-correct-word-generic)) +
-      ;; Auto complete との衝突を回避 +
-      (with-eval-after-load "​auto-complete"​ +
-        (ac-flyspell-workaround)) +
-      (defun my:​flyspell-on () +
-        (cond +
-         ​((memq major-mode major-mode-with-flyspell) +
-          (turn-on-flyspell)) +
-         ​((memq major-mode major-mode-with-flyspell-prog) +
-          (flyspell-prog-mode)) +
-         (t nil))) +
-      (defun my:​flyspell-off () +
-        (when (memq major-mode my:​flyspell-target-modes) +
-          (turn-off-flyspell))) +
-      ;; [FIXME] nextstep+inline-patch版で flyspell すると,日本語nyuuのようになる場合があるので,それを回避(IME が ONになったら一時的に flyspell を止める) +
-      (add-hook '​my:​ime-off-hook '​my:​flyspell-on) +
-      (add-hook '​my:​ime-on-hook '​my:​flyspell-off)) +
- +
-    (defvar major-mode-with-flyspell +
-      '​(text-mode change-log-mode latex-mode yatex-mode +
-                  git-commit-mode org-mode)) +
-    (defvar major-mode-with-flyspell-prog +
-      '​(c-mode-common emacs-lisp-mode perl-mode python-mode)) +
-    (defvar my:​flyspell-target-modes +
-      (append major-mode-with-flyspell +
-              major-mode-with-flyspell-prog)) +
- +
-    ;; バッファ内の全てをチェック対象にするモードの hook に flyspell 起動を登録 +
-    (dolist (hook major-mode-with-flyspell) +
-      (add-hook (intern (format "​%s-hook"​ hook)) +
-                #'​(lambda () (flyspell-mode 1)))) +
-    ;; コメント行のみを対象にする +
-    (dolist (hook major-mode-with-flyspell-prog) +
-      (add-hook (intern (format "​%s-hook"​ hook)) +
-                '​flyspell-prog-mode))) +
-</​code>​ +
- +
-==== [latex-math-preview.el] TeX数式をプレビュー ==== +
- +
-  * http://​www.emacswiki.org/​emacs/​latex-math-preview.el +
-  * http://​transitive.info/​software/​latex-math-preview/​ +
- +
-以下の設定では, 数式で <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;"><​f6></​span></​html>​ を押すとプレビューが走り,さらに <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;"><​f6></​span></​html>​ を押すとプレビューウィンドウを閉じるように動作します.通常,<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​q</​span></​html>​ でプレビューを閉じられます. +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(latex-math-preview-expression +
-           ​latex-math-preview-insert-symbol +
-           ​latex-math-preview-save-image-file +
-           ​latex-math-preview-beamer-frame) +
-         "​latex-math-preview"​ nil t nil) +
- +
-    (eval-when-compile +
-      (require '​latex-math-preview nil t)) +
- +
-    (with-eval-after-load "​latex-math-preview"​ +
-      (setq latex-math-preview-command-path-alist +
-            '​((latex . "​latex"​) +
-              (dvipng . "​dvipng"​) +
-              (dvips . "​dvips"​))) +
-      (define-key latex-math-preview-expression-mode-map (kbd "<​f6>"​) +
-        '​latex-math-preview-delete-buffer)) +
- +
-    (global-set-key (kbd "<​f6>"​) '​latex-math-preview-expression)) +
-</​code>​ +
- +
-==== [po-mode.el] 翻訳ファイルの編集 ==== +
- +
-  * http://​www.emacswiki.org/​emacs/​PoMode +
-  * http://​www.emacswiki.org/​emacs/​po-mode+.el +
- +
-<code emacs-lisp>​ +
-  ;;(autoload '​po-mode "​po-mode+"​ nil nil) +
-  ;;(autoload '​po-mode "​po-mode"​ nil t) +
-  (when (autoload-if-found +
-         '​(po-mode) +
-         "​po-mode"​ nil t) +
- +
-    (push '​("​\\.po[tx]?​\\'​\\|\\.po\\$"​ . po-mode) auto-mode-alist)) +
-</​code>​ +
- +
-==== [word-count.el] リージョン内の文字をカウントする ==== +
- +
-有効な頒布元に変更があった.[[http://​www.emacswiki.org/​emacs/​WordCount|word-count.el]] から新しい頒布元にたどりつける. +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(word-count-mode) +
-         "​word-count"​ "Minor mode to count words."​ t) +
- +
-    (global-set-key (kbd "​M-="​) '​word-count-mode)) +
-</​code>​ +
- +
-と思ったら,ビルドインの simple.el に十分な機能なのがあった. +
- +
-<code emacs-lisp>​ +
-(global-set-key (kbd "​M-="​) '​count-words) +
-</​code>​ +
- +
-==== [yatex.el] YaTeXモード ==== +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(yatex-mode) +
-         "​yatex"​ "Yet Another LaTeX mode" t) +
- +
-    (with-eval-after-load "​yatex"​ +
-      ;; 1=Shift JIS, 2=JIS, 3=EUC, 4=UTF-8 +
-      ;; (setq YaTeX-kanji-code nil) +
-      (modify-coding-system-alist 'file "​\\.tex$'"​ '​utf-8)) +
- +
-    (push '​("​\\.tex$"​ . yatex-mode) auto-mode-alist) +
-    ;; Disable auto line break +
-    (add-hook '​yatex-mode-hook +
-              #'​(lambda () +
-                  (setq auto-fill-function nil)))) +
-</​code>​ +
- +
-==== [auxtex.el] AUCTEXモード ==== +
- +
-<code emacs-lisp>​ +
-(when (autoload-if-found +
-       '​(autotex-latexmk) +
-       "​autotex-latexmk"​ nil t) +
-  (with-eval-after-load "​autotex-latexmk"​ +
-    (setq TeX-auto-save t) +
-    (setq TeX-parse-self t) +
-    (setq-default TeX-master nil) +
-    (setq TeX-PDF-mode t) +
-    (auctex-latexmk-setup)) +
-  (push '​("​\\.tex$"​ . autotex-latexmk) auto-mode-alist)) +
-</​code>​ +
- +
-==== [display-time-world-mode] 世界時計 ==== +
- +
-世界の時刻を確認するために wclock.el がありました(参考:https://​pxaka.tokyo/​wiki/​doku.php?​id<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​emacs)が,現在はビルトインの </​span></​html>​time.el<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​ に </​span></​html>​display-time-world-mode<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​ として吸収されているようです. </​span></​html>​display-time-world-buffer-name= に wclock が設定されているところが名残と思われます. +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(display-time-world) +
-         "​time"​ nil t) +
- +
-    (with-eval-after-load "​time"​ +
-      (define-key display-time-world-mode-map "​q"​ '​delete-window))) +
-</​code>​ +
- +
-==== [yasnippet.el] Emacs用のテンプレートシステム ==== +
- +
-  * [[https://​github.com/​capitaomorte/​yasnippet]] +
-  * http://​yasnippet-doc-jp.googlecode.com/​svn/​trunk/​doc-jp/​index.html +
-  * http://​d.hatena.ne.jp/​IMAKADO/​20080401/​1206715770 +
-  * http://​coderepos.org/​share/​browser/​config/​yasnippet +
-  * https://​github.com/​RickMoynihan/​yasnippet-org-mode +
- +
-[[http://​orgmode.org/​manual/​Conflicts.html|Org-modeとの衝突を避ける]] +
- +
-↑のサイトで紹介されている回避策とは異なり,新たな <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​my:​yas-expand</​span></​html>​ を作ることで,orgバッファのソースブロック中で <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​TAB</​span></​html>​ 押下してもエラーを受けないようにしました.ソースコードは <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​C-c '</​span></​html>​ で開く別バッファで編集します. +
- +
-↑どうやら[[https://​github.com/​joaotavora/​yasnippet/​commit/​0041efedf9f06bfe427d36547f7c4a73ab7405ba|本家で対応]]がされたようです. <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​my:​yas-expand</​span></​html>​ なしで所望の動作になりました.ありがたや,ありがたや. +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(yas-minor-mode yas-global-mode) +
-         "​yasnippet"​ nil t) +
- +
-    (eval-when-compile +
-      (require '​yasnippet nil t)) +
- +
-    (with-eval-after-load "​yasnippet"​ +
-      (setq yas-verbosity 2) +
-      (setq yas-snippet-dirs +
-            (list "​~/​Dropbox/​emacs.d/​yas-dict"​ +
-                  '​yas-installed-snippets-dir)) ;; for Cask +
- +
-      (defun my:​yas-expand-src-edit (&​optional field) +
-        "​Override `yas-expand'​. Kick `org-edit-special'​ directly in src-block."​ +
-        (interactive) +
-        (cond ((and (equal major-mode '​org-mode) +
-                    (org-in-src-block-p t)) +
-               ​(org-edit-special)) +
-              (t +
-               ​(yas-expand field)))) +
- +
-      (defun my:​yas-expand (&​optional field) +
-        "​Disable `yas-expand'​ in src-block."​ +
-        (interactive) +
-        (cond ((and (equal major-mode '​org-mode) +
-                    (org-at-heading-p)) +
-               ​(org-cycle)) +
-              ((and (equal major-mode '​org-mode) +
-                    (org-in-src-block-p t) +
-                    (not (and (fboundp '​org-src-edit-buffer-p) +
-                              (org-src-edit-buffer-p)))) +
-               ​(org-cycle)) +
-              (t (yas-expand field)))) +
- +
-      ;; 本家できちんと対応されたので,不要になった. +
-      ;; (define-key yas-minor-mode-map (kbd "<​tab>"​) '​my:​yas-expand) +
- +
-      (yas-global-mode 1)) +
- +
-    (dolist (hook +
-             ​(list +
-              '​perl-mode-hook '​c-mode-common-hook '​js2-mode-hook '​org-mode-hook +
-              '​python-mode-hook '​emacs-lisp-mode-hook)) +
-      (add-hook hook '​yas-minor-mode))) +
-</​code>​ +
- +
-==== [sdic.el] 英辞郎で英単語を調べる ==== +
- +
-http://​www.namazu.org/​~tsuchiya/​sdic/​index.html +
- +
-Emacs から辞書を使う.lookup を使う方法もあるが,Emacsから使うのは英辞郎に限定. +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(sdic-describe-word sdic-describe-word-at-point) +
-         "​sdic"​ nil t) +
- +
-    (with-eval-after-load "​sdic"​ +
-      (setq sdic-face-color "#​3333FF"​) +
-      (setq sdic-default-coding-system '​utf-8) +
-      ;; Dictionary (English => Japanese) +
-      (setq sdic-eiwa-dictionary-list +
-            '​((sdicf-client "​~/​Dropbox/​Dic/​EIJIRO6/​EIJI-128.sdic"​))) +
-      ;; Dictionary (Japanese => English) +
-      (setq sdic-waei-dictionary-list +
-            '​((sdicf-client "​~/​Dropbox/​Dic/​EIJIRO6/​WAEI-128.sdic"​)))) +
- +
-    ;; カーソルの位置の英単語の意味を調べる +
-    (global-set-key (kbd "​C-M-w"​) '​sdic-describe-word-at-point) +
-    ;; ミニバッファに英単語を入れて英辞郎を使う +
-    (global-set-key (kbd "C-c w") '​sdic-describe-word)) +
- +
-</​code>​ +
- +
-==== [osx-dictionary.el] MacOSのdictionary.appで辞書をひく ==== +
- +
-<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​osx-dictionary</​span></​html>​ なるパッケージが存在します.さくさくと高速に動作します. +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(osx-dictionary-search-pointer osx-dictionary-search-input) +
-         "​osx-dictionary"​ nil t) +
- +
-    (eval-when-compile +
-      (require '​osx-dictionary nil t)) +
- +
-    (with-eval-after-load "​osx-dictionary"​ +
-      (setq osx-dictionary-dictionary-choice "​英辞郎 第七版"​)) +
- +
-    (global-set-key (kbd "C-c f w") #'​osx-dictionary-search-input) +
-    (global-set-key (kbd "​C-M-w"​) #'​osx-dictionary-search-pointer)) +
-</​code>​ +
- +
-COBUILD5をデフォルトで使うには,次のサイト参照してください. +
- +
-  * [[http://​safx-dev.blogspot.jp/​2012/​02/​collins-cobuld-5dictionaryapp.html|Collins COBULD 5をDictionary.appで利用できるようにする]] +
- +
-私の場合は,できあがった辞書を <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">/​Library/​Dictionaries/</​span></​html>​ 以下に置いています.その状態で dictionary.app の設定で辞書の優先順位を変えることで,常にCOBUILD5の情報を引っ張り出せます.もしくは, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​osx-dictionary-dictionary-choice</​span></​html>​ で辞書名を指定します. +
- +
-=== MacOSのdictionary.appでCOBUILD5の辞書をひく(旧) === +
- +
-OS標準の辞書アプリ(dictionary.app)を経由して,バッファにCOBUILD5のデータを流し込むことができます. +
- +
-  * [[http://​sakito.jp/​mac/​dictionary.html#​emacs|辞書(Dictionary).appを使い倒そう]] +
- +
-以下の関数を準備します. +
- +
-#+BEGIN_SRC emacs-lisp :tangle no :exports yes +
-(defun dictionary () +
-"​dictionary.app"​ +
-(interactive) +
- +
-(let ((editable (not buffer-read-only)) +
-(pt (save-excursion (mouse-set-point last-nonmenu-event))) +
-beg end) +
- +
-(if (and mark-active +
-(<<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​ (region-beginning) pt) (<</​span></​html>​ pt (region-end)) ) +
-(setq beg (region-beginning) +
-end (region-end)) +
-(save-excursion +
-(goto-char pt) +
-(setq end (progn (forward-word) (point))) +
-(setq beg (progn (backward-word) (point))) +
-)) +
- +
-(let ((word (buffer-substring-no-properties beg end)) +
-;;            (win (selected-window)) +
-(tmpbuf " * dict-process*"​)) +
-(pop-to-buffer tmpbuf) +
-(erase-buffer) +
-(insert "​Query:​ " word "​\n\n"​) +
-(start-process "​dict-process"​ tmpbuf "​dict.py"​ word) +
-(goto-char 0) +
-;;        (select-window win) +
-))) +
-#+END_SRC +
- +
-これでカーソル以下の単語の情報が別ウィンドウに出ます.チェックし終わったら <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​C-x 1</​span></​html>​ (delete-other-windows) で表示を閉じます. <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​q</​span></​html>​ で閉じられるようにしたり,ツールチップで表示したりもできるはずです. +
- +
-マスタカさんのナイスソリューションをまだ試していないので,こちらの方がエレガントかもしれません. +
- +
-  * [[http://​masutaka.net/​chalow/​2011-05-18-1.html|Emacs で Mac の辞書を sdic っぽく使う ]] +
-  * [[http://​masutaka.net/​chalow/​2012-09-17-1.html|EmacsからMacの辞書をお手軽に使う]] +
- +
-なお,COBUILD5の辞書データをdictionary.appで引けるようにするには以下の操作が必要です. +
- +
-  * [[http://​safx-dev.blogspot.jp/​2012/​02/​collins-cobuld-5dictionaryapp.html|Collins COBULD 5をDictionary.appで利用できるようにする]] +
- +
-私の場合は,できあがった辞書を <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">/​Library/​Dictionaries/</​span></​html>​ 以下に置いています.その状態で dictionary.app の設定で辞書の優先順位を変えることで,常にCOBUILD5の情報を引っ張り出せます. +
- +
-== マイナーモード化 == +
- +
-<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​q</​span></​html>​ で閉じたくなったのでマイナーモードを作りました.これまで通り, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​C-M-w</​span></​html>​ でカーソル下の単語を調べてポップアップで表示.カーソルはその新しいバッファに移しておき, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​q</​span></​html>​ で閉じられます.新しいバッファ内で別な単語を <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​C-M-w</​span></​html>​ で調べると,同じバッファに結果を再描画します. +
- +
-マイナーモード化した elisp は,[[https://​gist.github.com/​takaxp/​9786376|gist]]で公開しています. +
- +
-== キーバインド == +
- +
-マイナーモード化した dict-app を使う場合は以下のようにします.sdic を使っている人は,sdic 用の設定と衝突しないように気をつけます. +
- +
-#+BEGIN_SRC emacs-lisp :tangle no :exports yes +
-(when (autoload-if-found +
-'​(dict-app-search) +
-"​dict-app"​ nil t) +
- +
-;; カーソルの位置の英単語の意味を調べる +
-(global-set-key (kbd "​C-M-w"​) '​dict-app-search)) +
-#+END_SRC +
- +
-==== [lookup.el] 辞書 ==== +
- +
-最近使っていません. +
- +
-<code emacs-lisp>​ +
-  ;; .lookup/​cache.el +
-  (setq lookup-init-directory "​~/​env/​dot_files/​.lookup"​) +
- +
-  (autoload '​lookup "​lookup"​ nil t) +
-  (autoload '​lookup-region "​lookup"​ nil t) +
-  (autoload '​lookup-word "​lookup"​ nil t) +
-  (autoload '​lookup-select-dictionaries "​lookup"​ nil t) +
- +
-  (setq lookup-search-modules +
-        '​(("​default"​ +
-           ​("​ndeb:/​Users/​taka/​Dropbox/​Dic/​COBUILD5/​cobuild"​ :priority t) +
-           ​("​ndeb:/​Users/​taka/​Dropbox/​Dic/​COBUILD5/​wordbank"​ :priority t) +
-           ​("​ndeb:/​Users/​taka/​Dropbox/​Dic/​LDOCE4/​ldoce4"​ :priority t) +
-           ​("​ndeb:/​Users/​taka/​Dropbox/​Dic/​LDOCE4/​bank"​ :priority t) +
-           ​("​ndeb:/​Users/​taka/​Dropbox/​Dic/​LDOCE4/​colloc"​ :priority t) +
-           ​("​ndeb:/​Users/​taka/​Dropbox/​Dic/​LDOCE4/​activ"​ :priority t)))) +
- +
-  (setq lookup-agent-attributes +
-        '​(("​ndeb:/​Users/​taka/​Dropbox/​Dic/​COBUILD5"​ +
-           ​(dictionaries "​cobuild"​ "​wordbank"​)) +
-          ("​ndeb:/​Users/​taka/​Dropbox/​Dic/​LDOCE4"​ +
-           ​(dictionaries "​ldoce4"​ "​bank"​ "​colloc"​ "​activ"​)))) +
- +
-  (setq lookup-dictionary-attributes +
-        '​(("​ndeb:/​Users/​taka/​Dropbox/​Dic/​COBUILD5/​cobuild"​ +
-           ​(title . "​COBUILD 5th Edition"​) +
-           ​(methods exact prefix)) +
-          ("​ndeb:/​Users/​taka/​Dropbox/​Dic/​COBUILD5/​wordbank"​ +
-           ​(title . "​Wordbank"​) +
-           ​(methods)) +
-          ("​ndeb:/​Users/​taka/​Dropbox/​Dic/​LDOCE4/​ldoce4"​ +
-           ​(title . "​Longman 4th Edition"​) +
-           ​(methods exact prefix)) +
-          ("​ndeb:/​Users/​taka/​Dropbox/​Dic/​LDOCE4/​bank"​ +
-           ​(title . "​LDOCE4 Examples and Phrases"​) +
-           ​(methods exact prefix menu)) +
-          ("​ndeb:/​Users/​taka/​Dropbox/​Dic/​LDOCE4/​colloc"​ +
-           ​(title . "​LDOCE4 Collocation"​) +
-           ​(methods exact prefix)) +
-          ("​ndeb:/​Users/​taka/​Dropbox/​Dic/​LDOCE4/​activ"​ +
-           ​(title . "​Longman Activator"​) +
-           ​(methods exact prefix menu)))) +
- +
-  (setq lookup-default-dictionary-options +
-        '​((:​stemmer .  stem-english))) +
-  (setq lookup-use-kakasi nil) +
-  (global-set-key (kbd "<​f6>"​) '​lookup-word) +
- +
-  ;;; lookup for dictionary (require EB Library, eblook, and lookup.el) +
-  ;; package download: http://​sourceforge.net/​projects/​lookup +
-  ;; http://​lookup.sourceforge.net/​docs/​ja/​index.shtml#​Top +
-  ;; http://​www.bookshelf.jp/​texi/​lookup/​lookup-guide.html#​SEC_Top +
-  ;;(load "​lookup-autoloads"​) ; for 1.99 +
-  ;;(autoload '​lookup "​lookup"​ nil t) +
-  ;;(autoload '​lookup-region "​lookup"​ nil t) +
-  ;;(autoload '​lookup-word "​lookup"​ nil t) +
-  ;;(autoload '​lookup-select-dictionaries "​lookup"​ nil t) +
-  ;; Search Agents +
-  ;; ndeb option requries "​eblook"​ command +
-  ;; Use expand-file-name! +
-  ;;(setq lookup-search-agents `((ndeb ,(concat homedir "/​Dropbox/​Dic/​COBUILD5"​)) +
-  ;;                            (ndeb ,(concat homedir "/​Dropbox/​Dic/​LDOCE4"​)))) +
-  ;;(setq lookup-use-bitmap nil) +
-  ;;(setq ndeb-program-name "/​usr/​bin/​eblook"​) +
-  ;;(when (eq window-system 'ns) +
-  ;;  (setq ndeb-program-name "/​opt/​local/​bin/​eblook"​) +
-  ;;  (setq ndeb-program-arguments '​("​-q"​ "​-e"​ "​euc-jp"​)) +
-  ;;  (setq ndeb-process-coding-system '​utf-8)) ; utf-8-hfs +
-</​code>​ +
- +
-==== [cacoo] Cacoo で描く ==== +
- +
-画像をリサイズしてバッファに表示する用途にも使える. +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(toggle-cacoo-minor-mode) +
-         "​cacoo"​ nil t) +
- +
-    (with-eval-after-load "​cacoo"​ +
-      (require '​cacoo-plugins)) +
- +
-    (global-set-key (kbd "​M--"​) '​toggle-cacoo-minor-mode)) +
-</​code>​ +
- +
-==== [iedit] バッファ内の同じ文字列を一度に編集する ==== +
- +
-[[http://​emacswiki.org/​emacs/​iedit.el|iedit.el]] を使うと,バッファ内の同じ文字列を一度に編集することができる.部分重複のない変数名を置き換えるときに有用な場合がある. +
- +
-<code emacs-lisp>​ +
-(require 'iedit nil t) +
-</​code>​ +
- +
-==== [web-mode] HTML編集 ==== +
- +
-HTML編集をするなら [[http://​web-mode.org/​|web-mode]] がお勧めです.古いHTMLモードを使っている方は,移行時期です.以下の <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​my:​web-indent-fold</​span></​html>​ では, タブキーを打つたびにタグでくくられた領域を展開/非表示して整形します.Org-mode っぽい動作になりますが,操作の度にバッファに変更が加わったと判断されるので好みが分かれると思います.自動保存を有効にしているとそれほど気になりません. +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(web-mode) +
-         "​web-mode"​ "​web-mode"​ t) +
- +
-    (eval-when-compile +
-      (require '​web-mode nil t)) +
- +
-    (with-eval-after-load "​web-mode"​ +
-      (defun my:​web-indent-fold () +
-        (interactive) +
-        (web-mode-fold-or-unfold) +
-        (web-mode-buffer-indent) +
-        (indent-for-tab-command)) +
- +
-      ;; indent +
-      (setq web-mode-markup-indent-offset 1) +
- +
-      ;; 色の設定 +
-      (custom-set-faces +
-       ;; custom-set-faces was added by Custom. +
-       ;; If you edit it by hand, you could mess it up, so be careful. +
-       ;; Your init file should contain only one such instance. +
-       ;; If there is more than one, they won't work right. +
-       '​(web-mode-comment-face ((t (:​foreground "#​D9333F"​)))) +
-       '​(web-mode-css-at-rule-face ((t (:​foreground "#​FF7F00"​)))) +
-       '​(web-mode-css-pseudo-class-face ((t (:​foreground "#​FF7F00"​)))) +
-       '​(web-mode-css-rule-face ((t (:​foreground "#​A0D8EF"​)))) +
-       '​(web-mode-doctype-face ((t (:​foreground "#​82AE46"​)))) +
-       '​(web-mode-html-attr-name-face ((t (:​foreground "#​C97586"​)))) +
-       '​(web-mode-html-attr-value-face ((t (:​foreground "#​82AE46"​)))) +
-       '​(web-mode-html-tag-face ((t (:​foreground "##​4682ae"​ :weight bold)))) +
-       '​(web-mode-server-comment-face ((t (:​foreground "#​D9333F"​))))) +
-      (define-key web-mode-map (kbd "<​tab>"​) '​my:​web-indent-fold)) +
- +
-    ;; web-mode で開くファイルの拡張子を指定 +
-    (push '​("​\\.phtml\\'"​ . web-mode) auto-mode-alist) +
-    (push '​("​\\.tpl\\.php\\'"​ . web-mode) auto-mode-alist) +
-    (push '​("​\\.jsp\\'"​ . web-mode) auto-mode-alist) +
-    (push '​("​\\.as[cp]x\\'"​ . web-mode) auto-mode-alist) +
-    (push '​("​\\.erb\\'"​ . web-mode) auto-mode-alist) +
-    (push '​("​\\.mustache\\'"​ . web-mode) auto-mode-alist) +
-    (push '​("​\\.djhtml\\'"​ . web-mode) auto-mode-alist) +
-    (push '​("​\\.html?​\\'"​ . web-mode) auto-mode-alist)) +
-</​code>​ +
- +
-==== [emmet-mode] zencoding の後継 ==== +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(emmet-mode) +
-         "​emmet-mode"​ nil t nil) +
- +
-    (with-eval-after-load "​emmet-mode"​ +
-      (setq emmet-indentation 2) +
-      (setq emmet-move-cursor-between-quotes t)) +
- +
-    (push '​("​\\.xml\\'"​ . nxml-mode) auto-mode-alist) +
-    (push '​("​\\.rdf\\'"​ . nxml-mode) auto-mode-alist) +
-    (dolist (hook +
-             '​(sgml-mode-hook +
-               ​nxml-mode-hook css-mode-hook html-mode-hook web-mode-hook)) +
-      (add-hook hook '​emmet-mode))) +
-</​code>​ +
- +
-==== [zencoding-mode] HTML編集の高速化(旧) ==== +
- +
-zencoding でタグ打ちを効率化します.今は emmet-mode を使います. +
- +
-  * [[http://​www.emacswiki.org/​emacs/​ZenCoding]] +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(zencoding-mode zencoding-expand-line) +
-         "​zencoding-mode"​ "​Zen-coding"​ t) +
- +
-    (with-eval-after-load "​zencoding-mode"​ +
-      (define-key zencoding-mode-keymap +
-        (kbd "​M-<​return>"​) '​zencoding-expand-line)) +
- +
-    (add-hook '​sgml-mode-hook '​zencoding-mode) +
-    (add-hook '​html-mode-hook '​zencoding-mode) +
-    (add-hook '​web-mode-hook '​zencoding-mode)) +
-</​code>​ +
- +
-==== [describe-number] 16進数などを確認 ==== +
- +
-<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​describe-number.el</​span></​html>​ を使うと,16進数表示や文字コードを確認できます. +
- +
-<code emacs-lisp>​ +
-(autoload-if-found +
- '​(describe-number describe-number-at-point) +
- "​describe-number"​ nil t) +
-</​code>​ +
- +
-==== [web-beautify.el] ソースコード整形 ==== +
- +
-ソースコードを読みやすい表示に整形します.バッファの自動時に自動で整形を実施するには, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​after-save-hook</​span></​html>​ を使えばOKですね. +
- +
-^ JavaScript ^ M-x web-beautify-js ​  ^ +
-^ HTML       ^ M-x web-beautify-html ^ +
-^ CSS        ^ M-x web-beautify-css ​ ^ +
- +
-<code emacs-lisp>​ +
-  (if (executable-find "​js-beautify"​) +
-      (when (autoload-if-found +
-             '​(js2-mode) +
-             "​js2-mode"​ nil t) +
- +
-        (eval-when-compile +
-          (require '​js2-mode nil t)) +
- +
-        (with-eval-after-load "​js2-mode"​ +
-          (when (require '​web-beautify nil t) +
-            (define-key js2-mode-map (kbd "C-c b") '​web-beautify-js) +
-            (define-key js2-mode-map (kbd "C-c b") '​web-beautify-css)))) +
- +
-    (message "--- js-beautify is NOT installed."​) +
-    (message "--- Note: npm -g install js-beautify"​)) +
-</​code>​ +
- +
-==== [smartparens.el] 対応するカッコの挿入をアシスト ==== +
- +
-  * http://​smartparens.readthedocs.io/​ +
- +
-<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​helm-config</​span></​html>​ の後に呼んでいるのは,Emacs起動時の単純な高速化対策です. +
- +
-<code emacs-lisp>​ +
-(with-eval-after-load "​helm-config"​ +
-  (when (require '​smartparens nil t) +
-    (setq-default sp-highlight-pair-overlay nil) +
-    (setq-default sp-highlight-wrap-overlay nil) +
-    (setq-default sp-highlight-wrap-tag-overlay nil) +
-    (sp-local-pair '​org-mode "​$"​ "​$"​) +
-    (sp-local-pair '​yatex-mode "​$"​ "​$"​) +
-    (sp-local-pair '​emacs-lisp-mode "​`"​ "'"​) +
-    (sp-pair "​`"​ nil :actions :rem) +
-    (sp-pair "'"​ nil :actions :rem) +
-    (sp-pair "​["​ nil :actions :rem) +
-    (smartparens-global-mode))) +
-</​code>​ +
- +
-==== [replace-from-region.el] 選択領域を別の文字列に置き換える ==== +
- +
-<code emacs-lisp>​ +
-(autoload-if-found +
- '​(query-replace-from-region query-replace-regexp-from-region) +
- "​replace-from-region"​ nil t) +
-</​code>​ +
- +
-==== [selected.el] リージョン選択時のアクションを制御 ==== +
- +
-選択した後に右クリック的な感じでリージョンに対するアクションを制御できます.選択領域に対するスピードコマンドですね.普通にシングルキーを割り当てると,日本語IMEが有効な時に上手くいかないので, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​activate-mark-hook</​span></​html>​ と <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​deactivate-mark-hook</​span></​html>​ に細工しています. +
- +
-  * [[https://​github.com/​Kungsgeten/​selected.el|Kungsgeten/​selected.el:​ Keymap for when region is active]] +
-  * [[https://​www.reddit.com/​r/​emacs/​comments/​4fxnss/​selectedel_keymap_for_when_region_is_active/​|selected.el - Keymap for when region is active : emacs]] +
- +
-<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​helm-config</​span></​html>​ の後に呼んでいるのは,Emacs起動時の単純な高速化対策です. +
- +
-<code emacs-lisp>​ +
-  (with-eval-after-load "​helm-config"​ +
-    (when (require '​selected nil t) +
-      (defvar my:ime-flag nil) +
-      (declare-function my:​ime-active-p "​init"​ nil) +
-      (declare-function my:ime-on "​init"​ (&​optional sticky)) +
-      (declare-function my:ime-off "​init"​ (&​optional sticky)) +
-      (when (fboundp '​mac-set-input-method-parameter) +
-        (add-hook '​activate-mark-hook +
-                  #'​(lambda () +
-                      (if (not (my:​ime-active-p)) +
-                          (setq my:ime-flag nil) +
-                        (setq my:ime-flag t) +
-                        (my:​ime-off)))) +
-        (add-hook '​deactivate-mark-hook +
-                  #'​(lambda () +
-                      (when my:​ime-flag +
-                        (my:​ime-on))))) +
-      (define-key selected-keymap (kbd ";"​) #'​comment-dwim) +
-      (define-key selected-keymap (kbd "​="​) #'​count-words-region) +
-      (define-key selected-keymap (kbd "​f"​) #'​describe-function) +
-      (define-key selected-keymap (kbd "​v"​) #'​describe-variable) +
-      (define-key selected-keymap (kbd "​w"​) #'​osx-dictionary-search-pointer) +
-      (define-key selected-keymap (kbd "​5"​) #'​query-replace-from-region) +
-      (define-key selected-keymap (kbd "​g"​) #'​my:​google-this) +
-      (define-key selected-keymap (kbd "​s"​) #'​osx-lib-say-region) +
-      (setq selected-org-mode-map (make-sparse-keymap)) +
-      (define-key selected-org-mode-map (kbd "​t"​) #'​org-table-convert-region) +
-      (define-key selected-keymap (kbd "​q"​) #'​keyboard-quit) +
- +
-      (when (require '​help-fns+ nil t) +
-        (defun my:​describe-selected-keymap () +
-          (interactive) +
-          (describe-keymap '​selected-keymap)) +
-        (define-key selected-keymap (kbd "​h"​) #'​my:​describe-selected-keymap)) +
-      (selected-global-mode 1))) +
-</​code>​ +
- +
-==== TODO [git-complete.el] GIT grep を使う補完エンジン ==== +
- +
-  * [[https://​github.com/​zk-phi/​git-complete|zk-phi/​git-complete:​ {Emacs} Yet another completion engine powered by "git grep"​]] +
- +
-<code emacs-lisp>​ +
-(when (autoload-if-found +
-       '​(git-complete) +
-       "​git-complete"​ nil t) +
-  (global-set-key (kbd "C-c f <​tab>"​) '​git-complete)) +
-</​code>​ +
- +
-===== 表示サポート ===== +
- +
-==== モードラインのモード名を短くする ==== +
- +
-以前は自作したパッケージを使っていましたが,不具合も多く,調べると <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​diminish.el</​span></​html>​ という素晴らしいパッケージがあったので移行しました.これはマイナーモードの短縮表示なので,メジャーモードは個別にフックで <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​mode-name</​span></​html>​ を書き換えて対応します. <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​use-package.el</​span></​html>​ を使っていると依存関係から自動的にインストールされます. +
- +
- +
-<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​diminish.el</​span></​html>​ を使えば,短縮名に書き換えることも,存在自体を消してしまうこともできます.helm だけ行儀が悪いので,後段での設定時に diminish を呼ぶようにしています.代替パッケージに,[[https://​github.com/​Malabarba/​rich-minority|rich-minority-mode]]があります. +
- +
-メジャーモードの短縮表示は <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​diminish</​span></​html>​ に頼らず,単純に各モードの <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​hook</​span></​html>​ で対処します. +
- +
-<code emacs-lisp>​ +
-  (when (require '​diminish nil t) +
-    (with-eval-after-load "​ggtags"​ (diminish '​ggtags-mode " G")) +
-    (with-eval-after-load "​orgstruct"​ (diminish '​orgstruct-mode " OrgS"​)) +
-    (with-eval-after-load "​centered-cursor-mode"​ +
-      (diminish '​centered-cursor-mode)) +
-    (with-eval-after-load "​volatile-highlights"​ +
-      (diminish '​volatile-highlights-mode)) +
-    (with-eval-after-load "​aggressive-indent"​ +
-      (diminish '​aggressive-indent-mode)) +
-    (with-eval-after-load "​all-the-icons-dired"​ +
-      (diminish '​all-the-icons-dired-mode)) +
-    (with-eval-after-load "​yasnippet"​ (diminish '​yas-minor-mode)) +
-    (with-eval-after-load "​auto-complete"​ (diminish '​auto-complete-mode)) +
-    (with-eval-after-load "​ws-butler"​ (diminish '​ws-butler-mode)) +
-    (with-eval-after-load "​isearch"​ (diminish '​isearch-mode)) +
-    (with-eval-after-load "​autorevert"​ (diminish '​auto-revert-mode)) +
-    (with-eval-after-load "​smooth-scroll"​ (diminish '​smooth-scroll-mode)) +
-    (with-eval-after-load "​whitespace"​ (diminish '​global-whitespace-mode)) +
-    (with-eval-after-load "​emmet-mode"​ (diminish '​emmet-mode)) +
-    (with-eval-after-load "​abbrev"​ (diminish '​abbrev-mode)) +
-    (with-eval-after-load "​doxymacs"​ (diminish '​doxymacs-mode)) +
-    (with-eval-after-load "​editorconfig"​ (diminish '​editorconfig-mode)) +
-    (with-eval-after-load "​rainbow-mode"​ (diminish '​rainbow-mode)) +
-    (with-eval-after-load "​guide-key"​ (diminish '​guide-key-mode)) +
-    (with-eval-after-load "​highlight-symbol"​ (diminish '​highlight-symbol-mode)) +
-    (with-eval-after-load "​which-key"​ (diminish '​which-key-mode)) +
-    (with-eval-after-load "​fancy-narrow"​ (diminish '​fancy-narrow-mode)) +
-    (with-eval-after-load "​smartparens"​ (diminish '​smartparens-mode)) +
-    (with-eval-after-load "​selected"​ (diminish '​selected-minor-mode)) +
-    ;; (with-eval-after-load "​org-autolist"​ (diminish '​org-autolist-mode)) +
-     ;;; ​ (with-eval-after-load "​helm"​ (diminish '​helm-mode " H")) +
-    ) +
- +
-  ;; メジャーモードの短縮 +
-  (add-hook '​c-mode-hook #'​(lambda () (setq mode-name "​C"​))) +
-  (add-hook '​js2-mode-hook #'​(lambda () (setq mode-name "​JS"​))) +
-  (add-hook '​c++-mode-hook #'​(lambda () (setq mode-name "​C++"​))) +
-  (add-hook '​csharp-mode-hook #'​(lambda () (setq mode-name "​C#"​))) +
-  (add-hook '​prog-mode-hook #'​(lambda () (setq mode-name "​Pr"​))) +
-  (add-hook '​emacs-lisp-mode-hook #'​(lambda () (setq mode-name "​El"​))) +
-  (add-hook '​python-mode-hook #'​(lambda () (setq mode-name "​Py"​))) +
-  (add-hook '​perl-mode-hook #'​(lambda () (setq mode-name "​Pl"​))) +
-  (add-hook '​web-mode-hook #'​(lambda () (setq mode-name "​W"​))) +
-  (add-hook '​lisp-interaction-mode-hook #'​(lambda () (setq mode-name "​Lisp"​))) +
-</​code>​ +
- +
-==== モードラインのNarrowを短くする ==== +
- +
-標準では「Narrow」と表示されますが,「N」に短縮します. +
- +
-<code emacs-lisp>​ +
-(with-eval-after-load "​org"​ +
-  (setq mode-line-modes +
-        (mapcar +
-         ​(lambda (entry) +
-           (if (and (stringp entry) +
-                    (string= entry "​%n"​)) +
-               '​(:​eval (if (and (= 1 (point-min)) +
-                                (= (1+ (buffer-size)) (point-max))) ""​ +
-                         "​ N")) entry)) +
-         ​mode-line-modes))) +
-</​code>​ +
- +
-==== モードラインの節約(VC-mode編) ==== +
- +
-定形で表示されている <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​Git</​span></​html>​ を消します. +
- +
-<code emacs-lisp>​ +
-(with-eval-after-load "​vc-hooks"​ +
-  (setcdr (assq '​vc-mode mode-line-format) +
-          '​((:​eval (replace-regexp-in-string "^ Git" " " vc-mode))))) +
-</​code>​ +
- +
-==== モードラインの色をカスタマイズする ==== +
- +
-<code emacs-lisp>​ +
-  (set-face-attribute '​mode-line nil :overline "#​203e6f"​ :box nil) +
-  (set-face-foreground '​mode-line "#​203e6f"​) +
-  (set-face-background '​mode-line "#​b2cefb"​) +
- +
-  (set-face-attribute '​mode-line-inactive nil :overline "#​94bbf9"​ :box nil) +
-  (set-face-foreground '​mode-line-inactive ​ "#​94bbf9"​) +
-  (set-face-background '​mode-line-inactive "#​d8e6fd"​) +
-</​code>​ +
- +
-=== 色セット例 === +
- +
-  * 青/白 +
- +
-^          ^ background ^ foreground ^ overline ^ +
-^ active ​  ^ 558BE2 ​    ^ FFFFFF ​    ^ 566f99 ​  ^ +
-^ inactive ^ 94bbf9 ​    ^ EFEFEF ​    ^ a4bfea ​  ^ +
- +
-  * 青 +
- +
-^          ^ background ^ foreground ^ overline ^ +
-^ active ​  ^ b2cefb ​    ^ 203e6f ​    ^ 203e6f ​  ^ +
-^ inactive ^ 94bbf9 ​    ^ 94bbf9 ​    ^ 94bbf9 ​  ^ +
- +
-  * 緑 +
- +
-^          ^ background ^ foreground ^ overline ^ +
-^ active ​  ^ b1fbd6 ​    ^ 206f47 ​    ^ 206f47 ​  ^ +
-^ inactive ^ 95f9c7 ​    ^ 95f9c7 ​    ^ 95f9c7 ​  ^ +
- +
-==== visible-bell のカスタマイズ ==== +
- +
-http://​www.emacswiki.org/​emacs/​MilesBader を参考にカスタマイズしていました.現在は後継パッケージ([[http://​www.emacswiki.org/​emacs/​echo-bell.el|http://​www.emacswiki.org/​emacs/​echo-bell.el]])があり,MELPAから取れます. +
- +
-visibl-bell を使うと,操作ミスで発生するビープ音を,視覚的な表示に入れ替えられます.ただ,デフォルトではバッファ中央に黒い四角が表示されて少々鬱陶しいので,ミニバッファの点滅に変更します. +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(echo-area-bell) +
-         "​echo-area-bell"​ nil t) +
- +
-    (with-eval-after-load "​echo-area-bell"​ +
-      (setq visible-bell t) +
-      (setq ring-bell-function '​echo-area-bell))) +
- +
- +
-  ;; パッケージ(echo-bell)の場合 +
-  (when (require '​echo-bell nil t) +
-    (echo-bell-mode 1) +
-    (setq echo-bell-string ""​) +
-    (setq echo-bell-background "#​FFDCDC"​) +
-    (setq echo-bell-delay 0.1)) +
-</​code>​ +
- +
-ビープ音も無しかつ視覚効果も無くすには,次のようにします. +
- +
-see http://​yohshiy.blog.fc2.com/​blog-entry-171.html +
- +
-<code emacs-lisp>​ +
-;;  (setq visible-bell nil) ;; default=nil +
-  (setq ring-bell-function '​ignore) +
-</​code>​ +
- +
-==== 常に *scratch* を表示して起動する ==== +
- +
-<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​session.el</​span></​html>​ や <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​desktop.el</​span></​html>​ を使っていても,いつも <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​*scratch*</​span></​html>​ バッファを表示する.そうじゃないと安心できない人向け. +
- +
-使われるメジャーモードと表示する文字列も制御できます. +
- +
-<code emacs-lisp>​ +
-;; Start Emacs with scratch buffer even though it call session.el/​desktop.el +
-(add-hook '​emacs-startup-hook #'​(lambda () (switch-to-buffer "​*scratch*"​))) +
-(setq initial-major-mode '​text-mode) +
-(setq initial-scratch-message +
-      (concat " ​                                                             " +
-              (format-time-string "​%Y-%m-%d (%a.)"​) "​\n"​ +
-              "​-----------------------------------------------------"​ +
-              "​--------------------------\n"​)) +
-</​code>​ +
- +
-最近は,起動用にメジャーモードを書いて対応しています.詳しくはリンク先にて. +
- +
-  * [[http://​qiita.com/​takaxp/​items/​12c01bff4c687b3f242b|高速起動用ミニマム*scratch*バッファ - Qiita]] +
- +
-<code emacs-lisp>​ +
-  (when (require '​empty-booting nil t) +
-    (setq initial-buffer-choice t) +
-    (setq initial-scratch-message nil) +
-    (setq initial-major-mode '​empty-booting-mode) +
-    ;;  :underline "#​203e6f"​ +
-    (set-face-foreground '​header-line "#​FFFFFF"​) ;; "#​203e6f"​ #333333 +
-    (set-face-background '​header-line "#​7e59b5"​) ;; #ffb08c +
-    (set-face-attribute '​header-line nil +
-                        :inherit nil +
-                        :overline nil +
-                        :underline nil) +
-    (setq header-line-format +
-          (concat +
-           "​ GNU Emacs                                                  " +
-           ​(format-time-string "W%U: %Y-%m-%d %a."​)))) +
- +
-  (global-set-key (kbd "​C-M-s"​) #'​(lambda () (interactive) +
-                                    (switch-to-buffer "​*scratch*"​))) +
-</​code>​ +
- +
-==== バッテリー情報をモードラインに表示する ==== +
- +
-<code emacs-lisp>​ +
-;; Show battery information on the mode line. +
-(display-battery-mode t) +
-</​code>​ +
- +
-==== スクロールバーを非表示にする ==== +
- +
-スクロールバーを非表示にするには,nil を指定します. +
-右側に表示したい場合は,'​right とします. +
- +
-<code emacs-lisp>​ +
-;; Show scroll bar or not +
-(when window-system +
-  (set-scroll-bar-mode -1)) ; '​right +
-</​code>​ +
- +
-==== [yascroll] フリンジにスクロールバーを出す ==== +
- +
-<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​yascroll</​span></​html>​ を使います. +
- +
-  * http://​d.hatena.ne.jp/​m2ym/​20110401/​1301617991 +
-  * 2015-03-15: smooth-scroll との組み合わせで重いのを確認. +
- +
-<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​helm-config</​span></​html>​ の後に呼んでいるのは,Emacs起動時の単純な高速化対策です. +
- +
-<code emacs-lisp>​ +
-(with-eval-after-load "​helm-config"​ +
-  (when (require '​yascroll nil t) +
-    (setq yascroll:​delay-to-hide 2) +
-    (setq yascroll:​disabled-modes '​(org-mode)) +
-    (set-face-foreground '​yascroll:​thumb-fringe "#​b2cefb"​) +
-    (set-face-background '​yascroll:​thumb-fringe "#​b2cefb"​) +
-    (global-yascroll-bar-mode 1))) +
-</​code>​ +
- +
-==== ツールバーを非表示にする ==== +
- +
-ツールバーは使わないので非表示にします. +
- +
-<code emacs-lisp>​ +
-;; Disable to show the tool bar. +
-(when window-system +
-  (tool-bar-mode -1)) +
-</​code>​ +
- +
-==== 起動時のスプラッシュ画面を表示しない ==== +
- +
-<code emacs-lisp>​ +
-;; Disable to show the splash window at startup +
-(setq inhibit-startup-screen t) +
-</​code>​ +
- +
-==== カーソル行の行数をモードラインに表示する ==== +
- +
-<code emacs-lisp>​ +
-;; Show line number in the mode line. +
-(with-eval-after-load "​helm-config"​ +
-  (line-number-mode 1)) +
-</​code>​ +
- +
-==== カーソル行の関数名をモードラインに表示する ==== +
- +
-  * emacs24.3 で重く感じるので外している. +
- +
-<code emacs-lisp>​ +
-;; Show function name in the mode line. +
-(which-function-mode t) +
-</​code>​ +
- +
-==== 時刻をモードラインに表示する ==== +
- +
-<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​helm-config</​span></​html>​ の後に呼んでいるのは,Emacs起動時の単純な高速化対策です. +
- +
-<code emacs-lisp>​ +
-;; Show clock in in the mode line +
-(with-eval-after-load "​helm-config"​ +
-  (setq display-time-format "​%H%M.%S"​) ;; %y%m%d. +
-  (setq display-time-interval 1) +
-  (setq display-time-default-load-average nil) +
-  (display-time-mode 1)) +
-</​code>​ +
- +
-==== 対応するカッコをハイライトする ==== +
- +
-Built-in の paren.el が利用できる.拡張版として [[http://​www.emacswiki.org/​emacs/​mic-paren.el|mic-paren.el]] があり,現在はこれを利用している. <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​helm</​span></​html>​ の起動で有効化しています. +
- +
-<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​helm-config</​span></​html>​ の後に呼んでいるのは,Emacs起動時の単純な高速化対策です. +
- +
-<code emacs-lisp>​ +
-(with-eval-after-load "​helm-config"​ +
-  (when (require '​mic-paren nil t) +
-    (setq paren-sexp-mode nil) +
-    (set-face-foreground '​paren-face-match "#​FFFFFF"​) +
-    ;; Deep blue: #6666CC, orange: #FFCC66 +
-    (set-face-background '​paren-face-match "#​66CC66"​) +
-    (paren-activate))) +
-</​code>​ +
- +
-paren.el の場合は以下の設定. +
- +
-<code emacs-lisp>​ +
-(setq show-paren-delay 0) +
-(show-paren-mode t) +
-;; (setq show-paren-style '​expression) ; カッコ内も強調 +
-;;​(set-face-background '​show-paren-match-face "#​5DA4ff"​) ; カーソルより濃い青 +
-(set-face-background '​show-paren-match-face "#​a634ff"​) +
-(set-face-foreground '​show-paren-match-face "#​FFFFFF"​) +
-(set-face-underline-p '​show-paren-match-face nil) +
-(setq show-paren-style '​parenthesis) +
-</​code>​ +
- +
-==== 全角スペースと行末タブ/半角スペースを強調表示する ==== +
- +
-  * [[http://​ubulog.blogspot.jp/​2007/​09/​emacs_09.html]] +
-  * [[https://​beiznotes.org/​200906031244034052-2/​|emacsでタブとEOFと全角空白の表示を。]] +
-  * [[http://​qiita.com/​itiut@github/​items/​4d74da2412a29ef59c3a|whitespace-modeを使って、ファイルの保存時に行末のスペースや末尾の改行を削除する - Qiita]] +
- +
-英語で原稿を書く時に全角スペースが入っているを苦労するので,強調表示して編集中でも気づくようにします.また,行末のタブや半角スペースも無駄なので,入り込まないように強調しています.パッケージを使うと too much かなという印象があったので,個別の設定だけを使わせてもらっています. +
- +
-<code emacs-lisp>​ +
-  (with-eval-after-load "​helm-config"​ +
-    ;; スペース +
-    (defface my:​face-b-1 +
-      '((t (:​background "​gray"​ :bold t :underline "​red"​))) +
-      nil :group '​font-lock-highlighting-faces) +
-    ;; タブだけの行 +
-    (defface my:​face-b-2 +
-      '((t (:​background "​orange"​ :bold t :underline "​red"​))) +
-      nil :group '​font-lock-highlighting-faces) +
-    ;; 半角スペース +
-    (defface my:face-b-3 '((t (:​background "​orange"​))) +
-      nil :group '​font-lock-highlighting-faces) +
- +
-    (defvar my:face-b-1 '​my:​face-b-1) +
-    (defvar my:face-b-2 '​my:​face-b-2) +
-    (defvar my:face-b-3 '​my:​face-b-3) +
-    (defadvice font-lock-mode (before my:​font-lock-mode ()) +
-      (font-lock-add-keywords +
-       ​major-mode +
-       ;; "​[\t]+$"​ 行末のタブ +
-       '​(("​ "​ 0 my:face-b-1 append) +
-         ​("​[ ]+$" 0 my:face-b-3 append) +
-         ​("​[\t]+$"​ 0 my:face-b-2 append)))) +
-    (ad-enable-advice '​font-lock-mode '​before '​my:​font-lock-mode) +
-    (ad-activate '​font-lock-mode)) +
- +
-  ;;show EOF +
-  ;; (defun set-buffer-end-mark() +
-  ;;   (let ((overlay (make-overlay (point-max) (point-max)))) +
-  ;;     ​(overlay-put overlay '​before-string #​("​[EOF]"​ 0 5 (face highlight))) +
-  ;;     ​(overlay-put overlay '​insert-behind-hooks +
-  ;;                  '​((lambda (overlay after beg end &​optional len) +
-  ;;                      (when after +
-  ;;                        (move-overlay overlay (point-max) (point-max)))))))) +
-  ;; (add-hook '​find-file-hooks '​set-buffer-end-mark) +
-</​code>​ +
- +
-==== バッファの終わりをフリンジで明示 ==== +
- +
-以下の設定では,ウィンドウ以下にバッファが続いているかを表す矢印と,続いていないことを示すカギカッコをフリンジに表示します. +
- +
-<code emacs-lisp>​ +
-(setq-default indicate-buffer-boundaries +
-              '((top . nil) (bottom . right) (down . right))) +
-</​code>​ +
- +
-==== [migemo.el] ローマ字入力で日本語を検索する ==== +
- +
-http://​0xcc.net/​migemo/#​download +
- +
-以下は,[[http://​www.kaoriya.net/​software/​cmigemo|cmigemo]] を使う設定です. +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(migemo-init) +
-         "​migemo"​ nil t) +
- +
-    (eval-when-compile +
-      (require '​migemo nil t)) +
- +
-    (with-eval-after-load "​migemo"​ +
-      (setq completion-ignore-case t) ;; case-independent +
-      (setq migemo-command "​cmigemo"​) +
-      (setq migemo-options '​("​-q"​ "​--emacs"​ "​-i"​ "​\a"​)) +
-      (setq migemo-dictionary "/​usr/​local/​share/​migemo/​utf-8/​migemo-dict"​) +
-      (setq migemo-user-dictionary nil) +
-      (setq migemo-regex-dictionary nil) +
-      (setq migemo-use-pattern-alist t) +
-      (setq migemo-use-frequent-pattern-alist t) +
-      (setq migemo-pattern-alist-length 1024) +
-      (setq migemo-coding-system '​utf-8-unix)) +
- +
-    (if (executable-find "​cmigemo"​) +
-        (add-hook '​isearch-mode-hook '​migemo-init) +
-      (message "--- cmigemo is NOT installed."​))) +
-</​code>​ +
- +
-==== [anything.el] 何でも絞り込みインターフェイス(旧) ==== +
- +
-  * helm に移行しました. +
- +
-http://​svn.coderepos.org/​share/​lang/​elisp/​anything-c-moccur/​trunk/​anything-c-moccur.el +
-http://​d.hatena.ne.jp/​IMAKADO/​20080724/​1216882563 +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(anything-other-buffer +
-           ​anything-complete anything-M-x +
-           ​anything-c-moccur-occur-by-moccur) +
-         "​anything-startup"​ nil t) +
- +
-    (with-eval-after-load "​anything-startup"​ +
-      (require '​anything-c-moccur nil t) +
-      ;;  (setq moccur-split-word t) +
-      ;;  (setq anything-c-locate-options `("​locate"​ "​-w"​)) +
- +
-      ;; M-x install-elisp-from-emacswiki recentf-ext.el +
-      ;; http://​www.emacswiki.org/​cgi-bin/​wiki/​download/​recentf-ext.el +
-      ;;  (autoload-if-found '​recentf-ext "​recentf-ext"​ nil t) +
-      ;;              (require '​recentf-ext nil t) +
- +
-      (when (require '​migemo nil t) +
-        (setq moccur-use-migemo t)) +
-      ;; M-x anything-grep-by-name +
-      (setq anything-grep-alist +
-            '​(("​Org-files"​ ("​egrep -Hin %s *.org" "​~/​Dropbox/​org/"​)) +
-              ("​.emacs.d"​ ("​egrep -Hin %s *.el" "​~/​.emacs.d/"​)) +
-              ("​ChangeLog"​ ("​egrep -Hin %s ChangeLog"​ "​~/"​)))) +
-      ;; ("​Spotlight"​ ("​mdfind %s -onlyin ~/​Dropbox/​Documents/​Library/"​ ""​)))) +
- +
-      (defun my:anything () +
-        (interactive) +
-        (anything-other-buffer +
-         '​(anything-c-source-recentf +
-           ​anything-c-source-file-name-history +
-           ​anything-c-source-buffers +
-           ​anything-c-source-emacs-commands +
-           ​anything-c-source-locate) +
-         "​ *my:​anything*"​)) +
- +
-      (defun my:​anything-buffer () +
-        (interactive) +
-        (anything-other-buffer +
-         '​(anything-c-source-buffers) +
-         "​ *my:​anthing-buffer*"​)) +
- +
-      (when (memq window-system '(mac ns)) +
-        (defun my:​anything-spotlight () +
-          "​Spotlight search with anything.el"​ +
-          (interactive) +
-          (anything-other-buffer +
-           '​(anything-c-source-mac-spotlight) +
-           "​ *anything-spotlight*"​))) +
- +
-      (setq anything-candidate-number-limit 50) ; 50 +
-      (setq anything-input-idle-delay 0.1)      ; 0.1 +
-      (setq anything-idle-delay 0.5)            ; 0.5 +
-      (setq anything-quick-update nil))        ; nil +
- +
-    ;; Show ibuffer powered by anything +
-    ;;  (with-eval-after-load "​anything-startup"​ +
-    (global-set-key (kbd "​M-x"​) '​anything-M-x) +
-    (global-set-key (kbd "C-c o") '​anything-c-moccur-occur-by-moccur) +
-    (global-set-key (kbd "​C-M-r"​) '​my:​anything) +
-    (global-set-key (kbd "​C-M-s"​) '​my:​anything-spotlight) +
-    (global-set-key (kbd "C-x C-b") '​my:​anything-buffer)) +
-</​code>​ +
- +
-==== [helm.el] 続・何でも絞り込みインターフェイス ==== +
- +
-<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​M-s</​span></​html>​ を <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​helm-swoop</​span></​html>​ にあてていましたが, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​M-s</​span></​html>​ を入り口にたくさんの検索系コマンドが割り振られているため <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​M-s M-s</​span></​html>​ に変えました. +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(helm-M-x +
-           ​helm-locate helm-recentf helm-buffers-list helm-descbinds +
-           ​helm-occur helm-swoop helm-flycheck helm-bookmarks) +
-         "​helm-config"​ nil t) +
- +
-    (eval-when-compile +
-      (require 'helm nil t) +
-      (require '​helm-config nil t)) +
- +
-    (with-eval-after-load "​helm-config"​ +
-      (helm-mode 1) +
-      (when (require '​diminish nil t) +
-        (diminish '​helm-mode)) ;;  " H" +
- +
-      (when (require '​helm-swoop nil t) +
-        ;; カーソルの単語が org の見出し(*の集まり)なら検索対象にしない. +
-        (setq helm-swoop-pre-input-function +
-              #'​(lambda() +
-                  (unless (thing-at-point-looking-at "​^\\*+"​) +
-                    (thing-at-point '​symbol)))) +
-        ;; 配色設定 +
-        (set-face-attribute +
-         '​helm-swoop-target-line-face nil :background "#​FFEDDC"​) +
-        (set-face-attribute +
-         '​helm-swoop-target-word-face nil :background "#​FF5443"​)) +
- +
-      (when (require '​helm-files nil t) +
-        (define-key helm-find-files-map +
-          (kbd "<​tab>"​) '​helm-execute-persistent-action) +
-        (define-key helm-read-file-map +
-          (kbd "<​tab>"​) '​helm-execute-persistent-action)) +
- +
-      (when (require '​helm-google nil t) +
-        (setq helm-google-tld "​co.jp"​)) +
- +
-      ;; (require '​recentf-ext nil t) +
-      ;; helm-find-files を呼ばせない +
-      ;; (add-to-list '​helm-completing-read-handlers-alist '​(find-file . nil)) +
-      ;; helm-mode-ag を呼ばせない +
-      (add-to-list '​helm-completing-read-handlers-alist '(ag . nil)) +
-      ;; helm-mode-org-set-tags を呼ばせない +
-      (add-to-list '​helm-completing-read-handlers-alist +
-                   '​(org-set-tags . nil)) +
-      (setq helm-display-source-at-screen-top nil) +
-      ;;         (setq helm-display-header-line nil) +
- +
-      ;; helm-autoresize-mode を有効にしつつ 30% に固定 +
-      (helm-autoresize-mode 1) +
-      (setq helm-autoresize-max-height 30) +
-      (setq helm-autoresize-min-height 30) +
-      (set-face-attribute '​helm-source-header nil +
-                          :height 1.0 :family "​Verdana"​ :weight '​normal +
-                          :foreground "#​666666"​ :background "#​DADADA"​) +
-      (when (memq window-system '(mac ns)) +
-        (setq helm-locate-command "​mdfind -name %s %s"​)) +
- +
-      (require '​helm-css-scss nil t) +
-      (require '​helm-emmet nil t) +
-      (require '​helm-bm nil t) +
-      (require '​helm-descbinds nil t)) +
- +
-    ;; この修正が必要 +
-    ;; (when (require '​helm-migemo nil t) +
-    ;;   ​(defun helm-compile-source--candidates-in-buffer (source) +
-    ;;     ​(helm-aif (assoc '​candidates-in-buffer source) +
-    ;;         ​(append source +
-    ;;                 ​`((candidates +
-    ;;                    . ,(or (cdr it) +
-    ;;                           ​(lambda () +
-    ;;                             ;; Do not use `source'​ because other plugins +
-    ;;                             ;; (such as helm-migemo) may change it +
-    ;;                             ​(helm-candidates-in-buffer +
-    ;;                              (helm-get-current-source))))) +
-    ;;                   ​(volatile) (match identity))) +
-    ;;       ​source))) +
- +
-    (global-set-key (kbd "​M-x"​) '​helm-M-x) +
-    (global-set-key (kbd "​C-M-r"​) '​helm-recentf) +
-    (global-set-key (kbd "​C-M-l"​) '​helm-locate) +
-    (global-set-key (kbd "C-c f b") '​helm-bookmarks) +
-    (global-set-key (kbd "C-x C-b") '​helm-buffers-list) +
-    (global-set-key (kbd "M-s M-s") '​helm-swoop) +
-    (global-set-key (kbd "C-c o") '​helm-occur) +
-    (global-set-key (kbd "C-h d") '​helm-descbinds)) +
-</​code>​ +
- +
-==== [stripe-buffer.el] テーブルの色をストライプにする ==== +
- +
-[[https://​github.com/​sabof/​stripe-buffer/​blob/​master/​stripe-buffer.el|stripe-buffer.el]]を使います.重くツリーが多いOrgバッファだと激重になる可能性があります. +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(turn-on-stripe-table-mode) +
-         "​stripe-buffer"​ nil t) +
- +
-    (add-hook '​org-mode-hook '​turn-on-stripe-table-mode)) +
-</​code>​ +
- +
-==== [rainbow-delimiters] 対応するカッコに色を付ける ==== +
- +
-複数のカッコが重なる言語では,カッコの対応関係がひと目で理解し難い場合がありす. <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​rainbow-delimiters</​span></​html>​ を使うと,対応するカッコを七色に色付けして見やすくできます.デフォルトだと色がパステル調で薄いので,パラメータを追加して調整します. +
- +
-<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​org-block</​span></​html>​ 内でうまく動かないようなので,本格導入は様子見中です. +
- +
-<code emacs-lisp>​ +
-  (with-eval-after-load "​rainbow-delimiters"​ +
-    ;; https://​yoo2080.wordpress.com/​2013/​12/​21/​small-rainbow-delimiters-tutorial/​ +
-    (require '​cl-lib) +
-    (require '​color) +
-    (cl-loop +
-     for index from 1 to rainbow-delimiters-max-face-count +
-     do +
-     (let ((face (intern (format "​rainbow-delimiters-depth-%d-face"​ index)))) +
-       ​(cl-callf color-saturate-name (face-foreground face) 50)))) +
- +
-  (add-hook '​prog-mode-hook +
-            #'​(lambda () +
-                (unless (equal (buffer-name) "​*scratch*"​) +
-                  (rainbow-delimiters-mode)))) +
-</​code>​ +
- +
-==== [git-gutter-fringe] 編集差分をフレーム端で視覚化 ==== +
- +
-編集差分の視覚化は元々 git-gutter が提供している機能です.有効にするとフレームの幅が若干広がってしまうので,気になる人は git-gutter-fringe を使えばよいです. +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(git-gutter-mode) +
-         "​git-gutter-fringe"​ nil t) +
- +
-    (with-eval-after-load "​git-gutter-fringe"​ +
-      (setq git-gutter:​lighter ""​) +
-      ;; "​!"​ +
-      (fringe-helper-define '​git-gutter-fr:​modified nil +
-                            "​...XX..."​ +
-                            "​...XX..."​ +
-                            "​...XX..."​ +
-                            "​...XX..."​ +
-                            "​...XX..."​ +
-                            "​........"​ +
-                            "​...XX..."​ +
-                            "​...XX..."​) +
-      ;; "​+"​ +
-      (fringe-helper-define '​git-gutter-fr:​added nil +
-                            "​........"​ +
-                            "​...XX..."​ +
-                            "​...XX..."​ +
-                            "​.XXXXXX."​ +
-                            "​.XXXXXX."​ +
-                            "​...XX..."​ +
-                            "​...XX..."​ +
-                            "​........"​) +
-      ;; "​-"​ +
-      (fringe-helper-define '​git-gutter-fr:​deleted nil +
-                            "​........"​ +
-                            "​........"​ +
-                            "​........"​ +
-                            "​.XXXXXX."​ +
-                            "​.XXXXXX."​ +
-                            "​........"​ +
-                            "​........"​ +
-                            "​........"​) +
-      (setq git-gutter-fr:​side '​left-fringe) +
-      (set-face-foreground '​git-gutter-fr:​added ​   "#​FF2600"​) +
-      (set-face-foreground '​git-gutter-fr:​modified "​orange"​) +
-      (set-face-foreground '​git-gutter-fr:​deleted ​ "​medium sea green"​)) +
- +
-    (add-hook '​emacs-lisp-mode-hook '​git-gutter-mode) +
-    (add-hook '​lisp-mode-hook '​git-gutter-mode) +
-    (add-hook '​perl-mode-hook '​git-gutter-mode) +
-    (add-hook '​python-mode-hook '​git-gutter-mode) +
-    (add-hook '​c-mode-common-hook '​git-gutter-mode) +
-    (add-hook '​nxml-mode-hook '​git-gutter-mode) +
-    (add-hook '​web-mode-hook '​git-gutter-mode)) +
-</​code>​ +
- +
-==== [zlc.el] find-file バッファを zsh ライクにする ==== +
- +
-ファイル選択を zsh ライクに変更できます. +
- +
-<code emacs-lisp>​ +
-(when (require 'zlc nil t) +
-  ;; http://​d.hatena.ne.jp/​mooz/​20101003/​p1 +
-  (zlc-mode 1) +
-  (set-face-attribute '​zlc-selected-completion-face nil +
-                      :foreground "#​000000"​ :background "#​9DFFD2"​ :bold t) +
-  ;;    (setq zlc-select-completion-immediately t) +
-  (let ((map minibuffer-local-map)) +
-    ;; like menu select +
-    (define-key map (kbd "​C-n"​) '​zlc-select-next-vertical) +
-    (define-key map (kbd "​C-p"​) '​zlc-select-previous-vertical) +
-    (define-key map (kbd "​C-f"​) '​zlc-select-next) +
-    (define-key map (kbd "​C-b"​) '​zlc-select-previous) +
-    ;; reset selection +
-    (define-key map (kbd "​C-c"​) '​zlc-reset))) +
-</​code>​ +
- +
-==== [japanese-holidays] カレンダーをカラフルにする ==== +
- +
-ビルドインの <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​holidays</​span></​html>​ と, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​japanese-holidays</​span></​html>​ を使います.土日祝日に色を着けます.土曜日と日曜祝日で異なる配色にできます. +
- +
-<code emacs-lisp>​ +
-  (with-eval-after-load "​calendar"​ +
-    (add-hook '​calendar-today-visible-hook '​calendar-mark-today) +
- +
-    (when (require '​japanese-holidays nil t) +
-      (setq calendar-holidays +
-            (append japanese-holidays +
-                    holiday-local-holidays holiday-other-holidays)) +
-      (setq mark-holidays-in-calendar t) +
-      (setq japanese-holiday-weekend-marker +
-            '​(holiday nil nil nil nil nil japanese-holiday-saturday)) +
-      (setq japanese-holiday-weekend '(0 6)) +
-      (add-hook '​calendar-today-visible-hook '​japanese-holiday-mark-weekend) +
-      (add-hook '​calendar-today-invisible-hook '​japanese-holiday-mark-weekend))) +
-</​code>​ +
- +
-==== [calendar.el] カレンダーで週番号を表示する ==== +
- +
-ビルドインの <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​calendar.el</​span></​html>​ にある <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​calendar-intermonth-text</​span></​html>​ をカスタマイズすると,カレンダーに週番号を表示させることが可能です.ただ, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​calendar.el</​span></​html>​ に記載されている例だと, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​calendar-week-start-day</​span></​html>​ が <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​1</​span></​html>​ 以外の時に計算結果がおかしくなるので,次のように <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​calendar-absolute-from-gregorian</​span></​html>​ に渡す値を補正する必要があります. +
- +
-<code emacs-lisp>​ +
-  (with-eval-after-load "​calendar"​ +
-    (setq calendar-week-start-day 1) +
-    (copy-face '​default '​calendar-iso-week-header-face) +
-    (set-face-attribute '​calendar-iso-week-header-face nil +
-                        :height 1.0 :foreground "#​1010FF"​ +
-                        :background (face-background '​default)) +
-    (setq calendar-intermonth-header +
-          (propertize " w" +
-                      '​font-lock-face '​calendar-iso-week-header-face)) +
- +
-    (copy-face font-lock-constant-face '​calendar-iso-week-face) +
-    (set-face-attribute '​calendar-iso-week-face nil +
-                        :height 1.0 :foreground "​orange"​ +
-                        :background (face-background '​default)) +
- +
-    (setq calendar-intermonth-text +
-          '​(propertize +
-            (format "​%02d"​ +
-                    (car +
-                     ​(calendar-iso-from-absolute +
-                      (calendar-absolute-from-gregorian +
-                       (list month +
-                             (- day (1- calendar-week-start-day)) year))))) +
-            '​font-lock-face '​calendar-iso-week-face))) +
- +
-  (global-set-key (kbd "C-c f c c") '​calendar) +
-</​code>​ +
- +
-==== [guide-key] キーバインドの選択肢をポップアップする ==== +
- +
-<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​which-key</​span></​html>​ に移行しました. +
- +
-自分用の関数にキーバインドを付けたのはいいけど,覚えられない時に使っています.以下の例では, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​helm</​span></​html>​ もしくは <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​org</​span></​html>​ が読み込まれた時についでに有効化し, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​C-c f</​span></​html>​ を押して, 0.5秒経つと,その後ろに続くキーの一覧がポップします.すでに覚えたキーバインドならば,0.5秒以内に打てるでしょうから,ポップ表示無しで通常通りにコマンドが発行します.色分けも効くのでわかりやすいです. +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(guide-key-mode) +
-         "​guide-key"​ nil t) +
- +
-    (with-eval-after-load "​guide-key"​ +
-      (setq guide-key/​guide-key-sequence '​("​C-c f" "C-c f c")) +
-      (setq guide-key/​popup-window-position '​bottom) +
-      (setq guide-key/​idle-delay 0.5) +
-      (setq guide-key/​highlight-command-regexp +
-            '​(("​my:"​ . "​red"​) +
-              ("​takaxp:"​ . "​blue"​)))) +
- +
-    (with-eval-after-load "​org"​ +
-      (guide-key-mode 1)) +
- +
-    (with-eval-after-load "​helm-config"​ +
-      (guide-key-mode 1))) +
-</​code>​ +
- +
-==== [which-key] キーバインドの選択肢をポップアップする ==== +
- +
-<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​guide-key.el</​span></​html>​ の後発. <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​guide-key.el</​span></​html>​ の改良でもあり,ディスパッチャが見やすく,直感的でとても使いやすい. +
- +
-起動時間を短縮するため,設定の読み込みは <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​org-mode</​span></​html>​ か <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​helm</​span></​html>​ 起動時に行うように遅延設定している. +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(which-key-mode) +
-         "​which-key"​ nil t) +
- +
-    (eval-when-compile +
-      (require '​which-key nil t)) +
- +
-    (with-eval-after-load "​which-key"​ +
-      (setq which-key-idle-delay 1.0)) +
- +
-    (add-hook '​org-mode-hook #'​which-key-mode) +
-    (add-hook '​helm-after-initialize-hook #'​which-key-mode)) +
-</​code>​ +
- +
-==== [stock-ticker] 株価をモードラインに表示 ==== +
- +
-日経平均やダウ平均の状況をモードラインに表示します.表示が長くなる傾向があるので, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​stock-ticker--parse</​span></​html>​ を再定義して,銘柄(3桁のみ)と変動率だけを表示しています. +
- +
-起動時には不要なので,ウィンドウにフォーカスが移った時に開始して,さらに1分でモードラインから消えるようにしています. +
- +
-色々と不安定になってきたので,最近は使っていません. +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(my:​activate-stock-ticker stock-ticker-global-mode) +
-         "​stock-ticker"​ nil t) +
-    (eval-when-compile +
-      (require '​stock-ticker nil t)) +
-    (with-eval-after-load "​stock-ticker"​ +
-      (defun stock-ticker--parse (data) +
-        "Parse financial DATA into list of display strings."​ +
-        (let ((qs (assoc-default +
-                   '​quote (assoc-default +
-                           '​results (assoc-default 'query data))))) +
-          (mapcar +
-           ​(lambda (q) +
-             (let ((percent (assoc-default '​PercentChange q)) +
-                   (name (assoc-default 'Name q)) +
-                   ​(symbol (assoc-default '​Symbol q)) +
-                   ​(change (assoc-default '​Change q))) +
-               ​(format " %s:​%s"​ +
-                       ​(substring +
-                        (if (or +
-                             ​(string-match "​="​ symbol) +
-                             ​(string-match "​\\^"​ symbol)) +
-                            name symbol) 0 3) +
-                       (if percent percent ""​)))) +
-           ​qs))) +
-      (setq stock-ticker-display-interval 5) +
-      (setq stock-ticker-symbols '​("​^N225"​ "​DOW"​)) +
-      (setq stock-ticker-update-interval 300) +
- +
-      (defun my:​activate-stock-ticker (&​optional duration) +
-        "​Activate stock-ticker within the given duration."​ +
-        (stock-ticker-global-mode 1) +
-        (unless (numberp duration) +
-          (setq duration 90)) +
-        (run-with-timer duration nil '​stock-ticker-global-mode -1))) +
- +
-    (add-hook '​focus-in-hook '​my:​activate-stock-ticker)) +
-</​code>​ +
- +
-==== [mode-icons] 使用中のモード表示をアイコンで代替 ==== +
- +
-しばらく使ってみたが,統一感が失われるので使用停止中. +
- +
-<code emacs-lisp>​ +
-(when (require '​mode-icons nil t) +
-  ;; アイコンを保存しているディレクトリを指定 +
-  (setq mode-icons--directory +
-        (expand-file-name "​~/​.emacs.d/​.cask/​package/​icons"​)) +
-  (mode-icons-mode 1)) +
-</​code>​ +
- +
-==== [highlight-symbol] 同じ名前のシンボルをハイライトする ==== +
- +
-一定時間が過ぎると,カーソル下のワードをバッファ内で検索し,ハイライトしてくれる.殺風景なバッファに動きが出て良い.また, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​highlight-symbol-nav-mode</​span></​html>​ を使うと,シンボル間を <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​M-n/​M-p</​span></​html>​ で移動できるので,毎度検索しなくてよい. +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(highlight-symbol-mode highlight-symbol-nav-mode) +
-         "​highlight-symbol"​ nil t) +
- +
-    (eval-when-compile +
-      (require '​highlight-symbol nil t)) +
- +
-    (with-eval-after-load "​highlight-symbol"​ +
-      (setq highlight-symbol-idle-delay 0.5)) +
- +
-    (dolist (hook '​(emacs-lisp-mode-hook c-mode-common-hook prog-mode-hook)) +
-      (add-hook hook '​highlight-symbol-mode))) +
-</​code>​ +
- +
-==== [all-the-icons-dired] フォントを使ったアイコンを表示 ==== +
- +
-<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​dired</​span></​html>​ と <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​neotree</​span></​html>​ で,ファイルのアイコンを表示します. <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​all-the-icons</​span></​html>​ をインストール後に, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​M-x all-the-icons-install-fonts</​span></​html>​ を忘れずに実行する必要があります. <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​neotree</​span></​html>​ の設定は別セクションに記載しています. +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(all-the-icons-dired-mode) +
-         "​all-the-icons-dired"​ nil t) +
- +
-    (add-hook '​dired-mode-hook '​all-the-icons-dired-mode)) +
-</​code>​ +
- +
-===== メディアサポート ===== +
- +
-==== [bongo.el] Emacsのバッファで音楽ライブラリを管理する ==== +
- +
-[[https://​pxaka.tokyo/​wiki/​doku.php?​id=emacs|iTunes の代わりに Emacs を使う]] +
- +
-autoload を設定すると, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​*.bango-playlist</​span></​html>​ や <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​*.bongo-library</​span></​html>​ から起動できないので,明示的に require している.なお,bongo-mplayer を使う場合,bongo を先にrequireするとうまく動作しない(bongo.el の最後で,bongo-mplayer が provide されているからだと思われる). +
- +
-以下の設定では,autoload で使いつつ,<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​M-x init-bongo</​span></​html>​ でプレイリストを読み込んでいる.これならば,Emacs起動時は軽量で,かつ,プレイリストの訪問で Bongo を開始できる. +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(bongo) +
-         "​bongo-mplayer"​ nil t) +
- +
-    (with-eval-after-load "​bongo-mplayer"​ +
-      (defun init-bongo () +
-        (interactive) +
-        (bongo) +
-        (find-file "​~/​Desktop/​next/​Tidy/​hoge.bongo-playlist"​)) +
- +
-      ;; Volume control +
-      ;;         ​(require volume.el nil t) +
-      (setq bongo-mplayer-extra-arguments '​("​-volume"​ "​1"​)) +
-      ;; Avoid error when editing bongo buffers +
-      (setq yank-excluded-properties nil) +
-      ;; Use mplayer +
-      (setq bongo-enabled-backends '​(mplayer)))) +
-</​code>​ +
- +
-org-player.el を使えば,org-mode のバッファから Bongo を操作できる. +
- +
-<code emacs-lisp>​ +
-(with-eval-after-load "​org"​ +
-  (require '​org-player nil t)) +
-</​code>​ +
- +
-音量コントロールには,[[https://​github.com/​dbrock/​volume-el|volume.el]]が必要です.設定がうまくいかないので保留中 +
- +
-<code emacs-lisp>​ +
-(autoload '​volume "​volume"​ "Tweak your sound card volume."​ t) +
-</​code>​ +
- +
-==== [GoogleMaps.el] GoogleMaps を Emacs 内で使う ==== +
- +
-[[http://​julien.danjou.info/​software/​google-maps.el]] +
- +
-<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​M-x google-maps</​span></​html>​ で起動します. +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(google-maps) +
-         "​google-maps"​ nil t) +
- +
-    (with-eval-after-load "​google-maps"​ +
-      (require '​org-location-google-maps nil t))) +
-</​code>​ +
- +
-<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​+/​-</​span></​html>​ でズーム, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​矢印</​span></​html>​ で移動, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​q</​span></​html>​ で終了します.また, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​w</​span></​html>​ でURLを取得してコピー, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​t</​span></​html>​ で地図の種別を変更できます. +
- +
-Org-mode を使っている場合には, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​C-c M-L</​span></​html>​ で表示されるプロンプトで検索すると,プロパティにそのキーワードが記録されます.後から <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​C-c M-l</​span></​html>​ すれば,いつでも地図を表示できるようになります. +
- +
-==== [org-google-weather.el] org-agenda に天気を表示する ==== +
- +
-残念ながら Google API が変更になり動かなくなったそうです. +
- +
-[[http://​julien.danjou.info/​software/​google-weather.el]] +
- +
-<​code ​ emacs-lisp>​ +
-(require '​google-weather nil t) +
-(when (require '​org-google-weather nil t) +
-  '​(org-google-weather-use-google-icons t)) +
-</​code>​ +
-==== [japanlaw.el] Emacs 電子六法 ==== +
- +
-Emacs で総務省の「[[http://​law.e-gov.go.jp/​|法令データ提供システム]]」に登録された法令データを閲覧します. <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​w3m</​span></​html>​ が必要です. +
- +
-  * [[http://​www.ne.jp/​asahi/​alpha/​kazu/​laws.html|Emacs 電子六法]] +
-  * [[https://​github.com/​mhayashi1120/​japanlaw.el|mhayashi1120/​japanlaw.el:​ Emacs 電子六法]] +
- +
-<code emacs-lisp>​ +
-  (if (executable-find "​w3m"​) +
-      (autoload-if-found +
-       '​(japanlaw) +
-       "​japanlaw"​ nil t) +
- +
-    (message "--- w3m is NOT installed."​)) +
-</​code>​ +
- +
-==== [sunshine.el] 天気を知る ==== +
- +
-  * https://​openweathermap.org/​ にアカウントを作り,APIを呼び出すための専用IDを発行する必要があります.取得した idを, =sunshine-appid= に格納し, =sunshine-location= で対象地域を設定すれば, =M-x sunshine-forecast= で天気が表示されます. =M-x sunshine-quick-format= を使うと,結果がミニバッファに表示されます. +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(sunshine-forecast sunshine-quick-forecast) +
-         "​sunshine"​ nil t) +
- +
-    (eval-when-compile +
-      (require '​sunshine)) +
- +
-    (with-eval-after-load "​sunshine"​ +
-      ;; (setq sunshine-location "​Tokyo,​ Japan"​) +
-      ;; (setq sunshine-appid "​................................"​) +
-      (setq sunshine-show-icons t) +
-      (setq sunshine-units '​metric))) +
-</​code>​ +
- +
-===== 履歴/ファイル管理 ===== +
- +
-==== [dired] ファイラのサポートツール ==== +
- +
-<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​dired.el</​span></​html>​ をリッチに使うツール群. +
- +
-<code emacs-lisp>​ +
-  (with-eval-after-load "​dired"​ +
-    (when (require 'gited nil t) +
-      (define-key dired-mode-map (kbd "C-x C-g") '​gited-list-branches)) +
-    ;; https://​github.com/​Fuco1/​dired-hacks +
- +
-    (when (require '​dired-narrow nil t) +
-      (define-key dired-mode-map (kbd "/"​) '​dired-narrow)) +
- +
-    (require '​dired-du nil t)) +
-</​code>​ +
- +
-==== Undoバッファを無限に取る ==== +
- +
-<code emacs-lisp>​ +
-(setq undo-outer-limit nil) +
-</​code>​ +
- +
-==== [undo-tree] 編集履歴をわかりやすくたどる ==== +
- +
-Undoのツリーが表示され,履歴をたどれます. <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​C-x u</​span></​html>​ と <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​q</​span></​html>​ に対して,フレームサイズの変更を紐付けています.また, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​auto-save-buffers</​span></​html>​ が org-files をどんどん保存して記録してしまうので,ツリーを選んでいる時に auto-save-buffers が発動するのを別途抑制しています.加えて, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​org-tree-slide</​span></​html>​ でナローイングしていると,タイムスタンプが記録される時に履歴が辿れなくなるので, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​org-tree-slide</​span></​html>​ が有効の時は,タイムスタンプを押させないように別途制限を加えています. +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(my:​undo-tree-visualize) +
-         "​undo-tree"​ nil t) +
- +
-    (eval-when-compile +
-      (require 'moom nil t) +
-      (require '​undo-tree nil t)) +
- +
-    (with-eval-after-load "​undo-tree"​ +
-      (global-undo-tree-mode) +
-      (defvar undo-tree-active nil) +
-      (setq undo-tree-mode-lighter nil) ;; モードライン領域を節約 +
-      (defun my:​undo-tree-visualizer-quit () +
-        (interactive) +
-        (undo-tree-visualizer-quit) +
-        (delete-window) +
-        (when undo-tree-active +
-          (set-frame-width (selected-frame) +
-                           (- (frame-width) 63)) +
-          (setq undo-tree-active nil)) +
-        (when (< (frame-width) moom--target-frame-width) +
-          (set-frame-width (selected-frame) moom--target-frame-width))) +
-      (defun my:​undo-tree-visualize () +
-        (interactive) +
-        (when (and (not undo-tree-active) (not (eq buffer-undo-list t))) +
-          (set-frame-width (selected-frame) +
-                           (+ (frame-width) 63)) +
-          (setq undo-tree-active t)) +
-        (undo-tree-visualize)) +
- +
-      (define-key undo-tree-visualizer-mode-map (kbd "​q"​) +
-        '​my:​undo-tree-visualizer-quit) +
-      ;; undo-tree-map にも必要 +
-      (define-key undo-tree-map (kbd "C-x u") +
-        '​my:​undo-tree-visualize)) +
- +
-    (global-set-key (kbd "C-x u") '​my:​undo-tree-visualize)) +
-</​code>​ +
- +
-==== バッファ保存時にバックアップファイルを生成する ==== +
- +
-バッファが保存されるとき,必ずバックアップを生成する. +
- +
-<code emacs-lisp>​ +
-;; Backup the buffer whenever the buffer is saved +
-(global-set-key (kbd "C-x C-s"​) +
-                #'​(lambda () (interactive) (save-buffer 16))) +
-</​code>​ +
- +
-==== バッファ保存時にバックアップを生成させない ==== +
- +
-<code emacs-lisp>​ +
-;; *.~ +
-(setq make-backup-files nil) +
-;; .#* +
-(setq auto-save-default nil) +
-;; auto-save-list +
-(setq auto-save-list-file-prefix nil) +
-</​code>​ +
- +
-==== ミニバッファの履歴を保存しリストアする ==== +
- +
-<code emacs-lisp>​ +
-(when (require '​savehist nil t) +
-  ;; ヒストリファイルを明示的に指定 +
-  (setq savehist-file "​~/​Dropbox/​emacs.d/​.history"​) +
-  (savehist-mode 1)) +
-</​code>​ +
- +
-==== 履歴サイズを大きくする ==== +
- +
-tで無限大に指定する. +
- +
-<code emacs-lisp>​ +
-(setq history-length 2000) +
-</​code>​ +
- +
-==== Emacs終了時に開いていたバッファを起動時に復元する ==== +
- +
-Built-in の [[http://​www.emacswiki.org/​emacs/​DeskTop|desktop.el]] を使う. +
- +
-org バッファを CONTENT view で大量に開いていると,再起動が非常に遅くなるので利用を中止した.代替手段として,session.el と recentf の組み合わせがある.最近利用したファイルとそのカーソル位置が保持されるため,最後に訪問していたファイルを比較的簡単に復元できる.頻繁に復元するバッファには,別途キーバインドを割り当てておけば問題ない. +
- +
-<code emacs-lisp>​ +
-(with-eval-after-load "​helm-config"​ +
-  (when (require '​desktop nil t) +
-    (setq desktop-files-not-to-save "​\\(^/​tmp\\|^/​var\\|^/​ssh:​\\)"​) +
-    (desktop-save-mode 1))) +
-</​code>​ +
- +
-==== 最近開いたファイルリストを保持 ==== +
- +
-Built-in の [[http://​www.emacswiki.org/​emacs/​RecentFiles|recentf.el]] を使う. +
- +
-http://​d.hatena.ne.jp/​tomoya/​20110217/​1297928222 +
- +
-session.el でも履歴管理できるが,anything のソースとして使っているので併用している. +
- +
-起動直後から有効にするので,autolad-if-load で括る必要はない. +
- +
-recentf-auto-cleanup を <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">'​mode</​span></​html>​ などにすると起動時にファイルのクリーニングが行われるてしまうので,<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">'​never</​span></​html>​ で回避し,アイドルタイマーなどで対応する.これだけで50[ms]ほど起動を高速化できる. +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(rencetf-mode recentf-save-list-without-msg recentf-open-files) +
-         "​recentf"​ nil t) +
- +
-    (with-eval-after-load "​recentf"​ +
-      (defun recentf-save-list-without-msg () +
-        (interactive) +
-        (let ((message-log-max nil)) +
-          (if (require '​shut-up nil t) +
-              (shut-up (recentf-save-list)) +
-            (recentf-save-list))) +
-        (message ""​)) +
-      (defun recentf-cleanup-without-msg () +
-        (interactive) +
-        (let ((message-log-max nil)) +
-          (if (require '​shut-up nil t) +
-              (shut-up (recentf-cleanup)) +
-            (recentf-cleanup))) +
-        (message ""​)) +
-      (add-hook '​focus-out-hook '​recentf-save-list-without-msg) +
-      (add-hook '​focus-out-hook '​recentf-cleanup-without-msg) +
- +
-      (setq recentf-max-saved-items 2000) +
-      (setq recentf-save-file +
-            (expand-file-name "​~/​.emacs.d/​recentf"​)) +
-      (setq recentf-auto-cleanup '​never) +
-      (setq recentf-exclude +
-            '​("​.recentf"​ "​^/​tmp\\.*"​ +
-              "​^/​private\\.*"​ "​^/​var/​folders\\.*"​ "/​TAGS$"​))) +
- +
-    (add-hook '​after-init-hook '​recentf-mode)) +
-</​code>​ +
- +
-==== 深夜にバッファを自動整理する ==== +
- +
-  * http://​www.emacswiki.org/​emacs-zh/​CleanBufferList +
- +
-<code emacs-lisp>​ +
-(when (require '​midnight nil t) +
-  (setq clean-buffer-list-buffer-names +
-        (append clean-buffer-list-kill-buffer-names +
-                '​("​note.txt"​))) +
-  (setq clean-buffer-list-delay-general 1) +
-  (setq clean-buffer-list-delay-special 10)) +
-</​code>​ +
- +
-==== [auto-save-buffers.el] 一定間隔でバッファを保存する ==== +
- +
-  * http://​0xcc.net/​misc/​auto-save/​ +
- +
-同じ機能で比較的新しいパッケージに, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​real-auto-save</​span></​html>​ があります.ただ,私の場合は,以下のようなモードごとの制御がうまくできなかったので移行していません. +
- +
-<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​helm-config</​span></​html>​ の後に呼んでいるのは,Emacs起動時の単純な高速化対策です. +
- +
-<code emacs-lisp>​ +
-(with-eval-after-load "​helm-config"​ +
-  (when (require '​auto-save-buffers nil t) +
-    (defun my:​auto-save-buffers () +
-      (cond ((equal major-mode '​undo-tree-visualizer-mode) nil) +
-            ((equal major-mode '​diff-mode) nil) +
-            ((string-match "Org Src" (buffer-name)) nil) +
-            (t (if (require '​shut-up nil t) +
-                   ​(shut-up (auto-save-buffers)) +
-                 ​(auto-save-buffers))))) +
-    (run-with-idle-timer 1.6 t #'​my:​auto-save-buffers))) +
-</​code>​ +
- +
-==== [backup-dir.el] バックアップファイルを一箇所に集める ==== +
- +
-<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​backup-each-save</​span></​html>​ を使うようになりました. +
- +
-  * http://​www.emacswiki.org/​emacs/​BackupDirectory +
-  * http://​www.northbound-train.com/​emacs-hosted/​backup-dir.el +
-  * http://​www.northbound-train.com/​emacs.html +
- +
-<code emacs-lisp>​ +
-(make-variable-buffer-local '​backup-inhibited) +
-(setq backup-files-store-dir "​~/​.emacs.d/​backup"​) +
-(unless (file-directory-p backup-files-store-dir) +
-  (message "!!! %s does not exist. !!!" backup-files-store-dir) +
-  (sleep-for 1)) +
-(when (require '​backup-dir nil t) +
-  (when (file-directory-p backup-files-store-dir) +
-    ;; backup path +
-    (setq bkup-backup-directory-info '((t "​~/​.emacs.d/​backup"​ ok-create))) +
-    ;; for tramp +
-    (setq tramp-bkup-backup-directory-info bkup-backup-directory-info) +
-    ;; generation properties +
-    (setq delete-old-versions t +
-          kept-old-versions 0 +
-          kept-new-versions 5 +
-          version-control t))) +
-</​code>​ +
- +
-==== [backup-each-save] クラッシュに備える ==== +
- +
-直近のファイルを常にバックアップします. <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​backup-dir.el</​span></​html>​ でも良いですが,バックアップの目的が,バッファ編集中に <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​emacs</​span></​html>​ が落ちる時の保険ならば, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​backup-each-save</​span></​html>​ の方が適切な場合があります.以下の例では,すべてのファイルを保存の度に保存しつつ, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​emacs</​span></​html>​ 終了時に7日前までのバックアップファイルをすべて削除するようにしています. +
- +
-<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​helm-config</​span></​html>​ の後に呼んでいるのは,Emacs起動時の単純な高速化対策です. +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(backup-each-save) +
-         "​backup-each-save"​ nil t) +
- +
-    (with-eval-after-load "​backup-each-save"​ +
-      (setq backup-each-save-mirror-location "​~/​.emacs.d/​backup"​) +
-      (setq backup-each-save-time-format "​%y-%m-%d_%M:​%S"​) +
-      (setq backup-each-save-size-limit 1048576)) +
- +
-    ;; なぜか (backup-each-save) の直接呼び出しだとだめ +
-    (with-eval-after-load "​helm-config"​ +
-      (require '​backup-each-save nil t) +
-      ;; %y-%m-%d_%M:​%S で終わるファイルを本来のメジャーモードで開く +
-      (add-to-list '​auto-mode-alist '​("​-[0-9-]\\{8\\}_[0-9:​]\\{5\\}$"​ nil t))) +
- +
-    (add-hook '​after-save-hook +
-              #'​(lambda () (unless (equal (buffer-name) "​recentf"​) +
-                             ​(backup-each-save))))) +
- +
-  (when (autoload-if-found +
-         '​(recursive-delete-backup-files delete-backup-files) +
-         "​utility"​ nil t) +
- +
-    ;; backup-each-save が作るファイルのうち条件にあうものを終了時に削除 +
-    (add-hook '​kill-emacs-hook +
-              #'​(lambda () +
-                  (when (fboundp '​recursive-delete-backup-files) +
-                    (recursive-delete-backup-files 7))))) +
-</​code>​ +
- +
-==== 特定のファイルを Dropbox 以下にバックアップする ==== +
- +
-複数の端末でEmacsを使うと,稀に端末の環境に依存した設定ファイルが必要になり,それらは端末間で共有しません.私の場合は, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​recentf</​span></​html>​ がそれに該当します.とは言えバックアップしていないのは不安なので,なんとかします.引数にバックアップ対象のファイルリストを渡せます. +
- +
-ちょっとダサいのですが,予め <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​~/​Dropbox/​backup</​span></​html>​ の下に, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​system-name</​span></​html>​ で得られる値のディレクトリを作成する必要があります. <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​my:​backup</​span></​html>​ は [[./​utility.el]] で実装しています. +
- +
-<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​helm-config</​span></​html>​ の後に呼んでいるのは,Emacs起動時の単純な高速化対策です. +
- +
-<code emacs-lisp>​ +
-(with-eval-after-load "​helm-config"​ +
-  (defun my:​backup-recentf () +
-    (my:backup "​~/​.emacs.d/​recentf"​)) +
-  (run-with-idle-timer 180 t '​my:​backup-recentf)) +
-</​code>​ +
- +
-==== [session.el] 様々な履歴を保存し復元に利用する ==== +
- +
-[[http://​emacs-session.sourceforge.net/​]] +
- +
-  * 入力履歴の保持(検索語,表示したバッファ履歴) +
-  * 保存時のカーソル位置の保持 +
-  * キルリングの保持 +
-  * 変更が加えられたファイル履歴の保持 +
- +
-<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​M-x session-save-session</​span></​html>​ +
- +
-session-undo-check を指定していると,保存時ではなくバッファを閉じるときの状態を保持する. +
- +
-Org Mode と併用する場合は,my:​org-reveal-session-jump の設定が必須. +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(session-initialize) +
-         "​session"​ nil t) +
- +
-    (eval-when-compile +
-      (require '​session nil t)) +
- +
-    (with-eval-after-load "​session"​ +
-      (add-to-list '​session-globals-exclude '​org-mark-ring) +
-      ;; Change save point of session.el +
-      (setq session-save-file +
-            (expand-file-name "​~/​Dropbox/​emacs.d/​.session"​)) +
-      (setq session-initialize '​(de-saveplace session keys menus places) +
-            session-globals-include '​((kill-ring 100) +
-                                      (session-file-alist 100 t) +
-                                      (file-name-history 200) +
-                                      search-ring regexp-search-ring)) +
-      (setq session-undo-check -1)) +
- +
-    (add-hook '​after-init-hook '​session-initialize)) +
- +
-  ;; FIXME +
-  ;;  (setq session-set-file-name-exclude-regexp +
-  ;;        "​^/​private/​\\.\\*"​)) +
-  ;;          "​[/​\\]\\.overview\\|[/​\\]\\.session\\|News[/​\\]\\|^/​private\\.*\\|^/​var/​folders\\.*"​)) +
-</​code>​ +
- +
-次はテスト中.orgバッファを開いたらカーソル位置をorg-revealしたいが,time-stampなどと組み合わせたり,org-tree-slideと組み合わせていると,うまくいかない.バッファを表示した時に org-reveal (C-c C-r) を打つのをサボりたいだけなのだが... +
- +
-http://​www.emacswiki.org/​emacs/​EmacsSession +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(session-initialize) +
-         "​session"​ nil t) +
-    (add-hook '​after-init-hook '​session-initialize) +
-    (eval-after-load "​session"​ +
-      '​(progn +
-         ;; For Org-mode +
-         ​(defun my:​maybe-reveal () +
-           ​(interactive) +
-           (when (and (or (memq major-mode '​(org-mode outline-mode)) +
-                          (and (boundp '​outline-minor-mominor-de) +
-                               ​outline-minor-mode)) +
-                      (outline-invisible-p)) +
-             (if (eq major-mode '​org-mode) +
-                 ​(org-reveal) +
-               ​(show-subtree)))) +
- +
-         ​(defun my:​org-reveal-session-jump () +
-           ​(message "​call!"​) +
-           (when (and (eq major-mode '​org-mode) +
-                      (outline-invisible-p)) +
-             ​(org-reveal))) +
- +
-         ;; C-x C-/ +
-         ​(add-hook '​session-after-jump-to-last-change-hook +
-                   '​my:​maybe-reveal)))) +
-</​code>​ +
- +
-==== [wakatime-mode.el] WakaTime を利用して作業記録する ==== +
- +
-  - [[https://​www.wakati.me/​]](API発行とログGUI表示) +
-  - [[https://​github.com/​wakatime/​wakatime]](ログ記録用スクリプト) +
-  - [[https://​github.com/​nyuhuhuu/​wakatime-mode]](Emacs用プラグイン) +
- +
-利用開始前に,ログ表示サイトでルールをカスタマイズしておくとよい.例えば,拡張子が <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​.org</​span></​html>​ なファイルの場合,言語設定を <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​Text</​span></​html>​ にする,という具合に.すると,グラフ表示がわかりやすくなる. +
- +
-<code emacs-lisp>​ +
-  (when (require '​wakatime-mode nil t) +
-    (setq wakatime-api-key "<​insert your own api key>"​) +
-    (setq wakatime-cli-path "/​Users/​taka/​Dropbox/​emacs.d/​bin/​wakatime-cli.py"​) +
-    ;; すべてのバッファで訪問時に記録を開始 +
-;    (global-wakatime-mode) +
-    ) +
-</​code>​ +
- +
-==== [neotree.el] ディレクトリ情報をツリー表示 ==== +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(neotree neotree-toggle) +
-         "​neotree"​ nil t) +
- +
-    (eval-when-compile +
-      (require '​neotree nil t)) +
- +
-    (with-eval-after-load "​neotree"​ +
-      (setq neo-show-hidden-files t) +
-      (setq neo-persist-show t) +
-      (setq neo-theme '​arrow) +
-      ;; (setq neo-window-position '​right) +
-      ;; (setq neo-vc-integration '(face char)) ;; Itls heavy at 2017-08-31 +
-      (setq neo-smart-open t) +
-      (when (require '​all-the-icons-dired nil t) +
-        (setq neo-theme (if (display-graphic-p) 'icons '​arrow))) +
-      (defvar my:​neo-frame-width-single 80) +
-      (defvar my:​neo-frame-width-double my:​neo-frame-width-single) +
-      (when (require 'moom nil t) +
-        (setq my:​neo-frame-width-single moom-frame-width-single) +
-        (setq my:​neo-frame-width-double moom-frame-width-double)) +
-      (defvar my:​neo-adjusted-window-width (+ 3 neo-window-width)) +
-      (defun advice:​neotree-show () +
-        "​Extension to support change frame width when opening neotree."​ +
-        (unless (neo-global--window-exists-p) +
-          (set-frame-width (selected-frame) +
-                           (+ (frame-width) my:​neo-adjusted-window-width)) +
-          ;; override +
-          (when (require 'moom nil t) +
-            (setq moom-frame-width-single +
-                  (+ my:​neo-frame-width-single my:​neo-adjusted-window-width)) +
-            (setq moom-frame-width-double +
-                  (+ my:​neo-frame-width-double my:​neo-adjusted-window-width))))) +
-      (advice-add '​neotree-show :before #'​advice:​neotree-show) +
-      (defun advice:​neotree-hide () +
-        "​Extension to support change frame width when closing neotree."​ +
-        (when (neo-global--window-exists-p) +
-          (set-frame-width (selected-frame) +
-                           (- (frame-width) my:​neo-adjusted-window-width)) +
-          ;; restore +
-          (when (require 'moom nil t) +
-            (setq moom-frame-width-single my:​neo-frame-width-single) +
-            (setq moom-frame-width-double my:​neo-frame-width-double))) +
-        (when (> my:​neo-frame-width-single (frame-width)) +
-          (set-frame-width (selected-frame) my:​neo-frame-width-single))) +
-      (advice-add '​neotree-hide :before #'​advice:​neotree-hide) +
-      (when neo-persist-show +
-        (add-hook '​popwin:​before-popup-hook +
-                  #'​(lambda () (setq neo-persist-show nil))) +
-        (add-hook '​popwin:​after-popup-hook +
-                  #'​(lambda () (setq neo-persist-show t))))) +
- +
-    (global-set-key (kbd "C-c n") '​neotree-toggle)) +
-</​code>​ +
- +
-==== [osx-trash] system-move-file-to-trash を有効にする ==== +
- +
-[[https://​github.com/​lunaryorn/​osx-trash.el|osx-trash]] は,OSXで <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​system-move-file-to-trash</​span></​html>​ を使えるようにする.単独で使うのはあまり考えられないので,読み込みを <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​dired</​span></​html>​ に紐付けます. +
- +
-<code emacs-lisp>​ +
-(with-eval-after-load "​dired"​ +
-  (setq dired-use-ls-dired nil) +
-  (when (require '​osx-trash nil t) +
-    (setq delete-by-moving-to-trash t) +
-    (osx-trash-setup))) +
-</​code>​ +
- +
-==== TODO [helpful] リッチなヘルプページ ==== +
- +
-<code emacs-lisp>​ +
-(when (autoload-if-found +
-       '​(helpful-function) +
-       "​helpful"​ nil t) +
-  (with-eval-after-load "​helpful"​ +
-    (require '​helm-config nil t)) +
-  (global-set-key (kbd "C-h f") '​helpful-function)) +
-</​code>​ +
- +
-==== [keyfreq.el] コマンドログ ==== +
- +
-発行しているコマンドの使用頻度を記録し確認できます.デフォルトで, <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​~/​.emacs.keyfreq</​span></​html>​ に情報が記録されます. +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(keyfreq-mode keyfreq-autosave-mode keyfreq-show) +
-         "​keyfreq"​ nil t) +
- +
-    (with-eval-after-load "​keyfreq"​ +
-      (defun advice:​keyfreq-show () +
-        "​Extension to make the buffer view-only."​ +
-        (interactive) +
-        (if (require '​shut-up nil t) +
-            (shut-up (view-buffer keyfreq-buffer)) +
-        (view-buffer keyfreq-buffer))) +
-      (advice-add '​keyfreq-show :after #'​advice:​keyfreq-show) +
-      ;; (define-key keyfreq-mode-map (kbd "​q"​) +
-      ;;   #'​(lambda () (interactive) +
-      ;;       (when (string= (buffer-name) keyfreq-buffer) +
-      ;;         ​(kill-buffer-and-window)))) +
-      (setq keyfreq-file +
-            (expand-file-name "​~/​Dropbox/​emacs.d/​.keyfreq"​)) +
-      (keyfreq-autosave-mode 1)) +
- +
-    (with-eval-after-load "​helm-config"​ +
-      (keyfreq-mode 1))) +
-</​code>​ +
- +
-===== 開発サポート ===== +
- +
-==== 便利キーバインド ==== +
- +
-<code emacs-lisp>​ +
-(global-set-key (kbd "​C-;"​) '​comment-dwim) ;; M-; is the defualt +
-(global-set-key (kbd "C-c c") '​compile) +
-</​code>​ +
- +
-==== [gist.el] Gist インターフェイス ==== +
- +
-<code emacs-lisp>​ +
-(autoload-if-found '​(gist) "​gist"​ nil t) +
-</​code>​ +
- +
-==== [doxymacs.el] Doxygen のコメントを簡単に入力する ==== +
- +
-  * http://​doxymacs.sourceforge.net/​ +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(doxymacs-mode) +
-         "​doxymacs"​ nil t) +
- +
-    (eval-when-compile +
-      (require '​doxymacs nil t)) +
- +
-    (with-eval-after-load "​doxymacs"​ +
-      (setq doxymacs-doxygen-style "​JavaDoc"​) +
-      (add-hook '​font-lock-mode-hook +
-                #'​(lambda () +
-                    (when (memq major-mode '​(c-mode c++-mode)) +
-                      (doxymacs-font-lock)))) +
-      (define-key doxymacs-mode-map (kbd "C-c C-s") '​ff-find-other-file)) +
- +
-    (add-hook '​c-mode-common-hook '​doxymacs-mode)) +
-</​code>​ +
- +
-==== [matlab.el] Matlab用の設定 ​                                          :Mac: ==== +
- +
-<code emacs-lisp>​ +
-(when (and (memq window-system '(mac ns)) +
-           (> emacs-major-version 23)) +
-  (when (autoload-if-found +
-         '​(matlab-mode matlab-shell) +
-         "​matlab"​ nil t) +
-    (push '​("​\\.m$"​ . matlab-mode) auto-mode-alist))) +
-</​code>​ +
- +
-==== [flycheck.el] 構文エラー表示 ==== +
- +
-  * auto-complete より前に hook設定しておくと余計なエラーが出ないようです. +
- +
-<code emacs-lisp>​ +
-  ;;​http://​qiita.com/​senda-akiha/​items/​cddb02cfdbc0c8c7bc2b +
-  (when (autoload-if-found +
-         '​(flycheck-mode) +
-         "​flycheck"​ nil t) +
- +
-    (with-eval-after-load "​flycheck"​ +
-      (require '​helm-flycheck nil t) +
-      (setq flycheck-gcc-language-standard "​c++11"​) +
-      (setq flycheck-clang-language-standard "​c++11"​) +
-      (when (require '​flycheck-pos-tip nil t) +
-        '​(custom-set-variables +
-          '​(flycheck-display-errors-function +
-            #'​flycheck-pos-tip-error-messages)))) +
- +
-    ;; (flycheck-add-next-checker '​javascript-jshint +
-    ;; '​javascript-gjslint) +
- +
-    (dolist +
-        (hook +
-         '​(js2-mode-hook c-mode-common-hook perl-mode-hook python-mode-hook)) +
-      (add-hook hook '​flycheck-mode))) +
-</​code>​ +
- +
-==== [auto-complete.el] 自動補完機能 ==== +
- +
-http://​cx4a.org/​software/​auto-complete/​manual.ja.html +
- +
-  * 辞書データを使う( =ac-dictionary-directories= ) +
-  * auto-complete.el,​ auto-complete-config.el,​ fuzzy.el, popup.el を使う. +
-  * [[http://​cx4a.org/​software/​auto-complete/​manual.ja.html|日本語マニュアル]] +
-  * ac-auto-start を 4 にしておけば,3文字までは TAB を yasnippet に渡せる. +
- +
-Org-mode ユーザにとって <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​TAB</​span></​html>​ は非常に重要なコマンド.そこに <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​auto-complete</​span></​html>​ と <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​yasnippet</​span></​html>​ が <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​TAB</​span></​html>​ を奪いに来るので,住み分けが重要になる.<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​ac-auto-start</​span></​html>​ を<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​4</​span></​html>​にすると,<​s<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​TAB</​span></​html>​ によるソースブロックの短縮入力を <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​yasnippet</​span></​html>​ で実行できる(この目的だけならば<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​3</​span></​html>​を指定してもいい).<​sys などと4文字入力すると,<​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​auto-complete</​span></​html>​ が動いて <​system>​ などを補完してくれる.もちろん,見出しで <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">​TAB</​span></​html>​ を押すときには,ツリーの表示/非表示の切り替えになる. +
- +
-情報源については,[[http://​cx4a.org/​software/​auto-complete/​manual.ja.html#​.E6.A8.99.E6.BA.96.E6.83.85.E5.A0.B1.E6.BA.90|オンラインマニュアル]]を参照のこと. +
- +
-auto-complete が正しく効いているかは,バッファ内で適当にパスを打ち込んで,補完候補が表示されるかで判定判定できると思います( <​html><​span style="​margin:​0 2px;​padding:​2px 5px;​white-space:​nowrap;​border:​1px solid #​ccc;​background-color:#​f8f8f8;​border-radius:​3px;​-moz-border-radius:​3px;​-webkit-border-radius:​3px;">/​home</​span></​html>​ を入力とか) +
- +
-<code emacs-lisp>​ +
-  (when (autoload-if-found +
-         '​(ac-default-setup ac-org-mode-setup) +
-         "​auto-complete"​ nil t) +
- +
-    (eval-when-compile +
-      (require '​auto-complete nil t)) +
- +
-    (with-eval-after-load "​auto-complete"​ +
-      (require '​auto-complete-config nil t) +
-      (ac-config-default) +
-      ;; 追加のメジャーモードを設定 +
-      (add-to-list '​ac-modes '​objc-mode) +
-      (add-to-list '​ac-modes '​org-mode) +
-      ;; ac-modes にあるメジャーモードで有効にする +
-      ;;lisp, c, c++, java, perl, cperl, python, makefile, sh, fortran, f90 +
-      (global-auto-complete-mode t) +
-      ;; 辞書 +
-      (add-to-list '​ac-dictionary-directories "​~/​.emacs.d/​ac-dict"​) +
-      ;; history +
-      (setq ac-comphist-file "​~/​Dropbox/​config/​ac-comphist.dat"​) +
-      ;; n文字以上で補完表示する("<​s TAB" の場合 yasnippet が呼ばれる) +
-      (setq ac-auto-start 4) +
-      ;; n秒後にメニューを表示 +
-      (setq ac-auto-show-menu 2.0) +
-      ;; ツールチップの表示 +
-      (setq ac-use-quick-help t) +
-      (setq ac-quick-help-delay 2.0) +
-      (setq ac-quick-help-height 10) +
-      ;; C-n/C-p でメニューをたどる +
-