最新情報

2016年8月29日Emacs
【Emacs初級者から中級者への階段】テキスト表示スペースを広くする3つの方法
2016年8月28日Emacs
Emacs: ミニバッファでyesとかnoとか入力するのが面倒な方はこの一撃!
2016年8月27日Emacs
うっかりEmacsを終了することを二度となくす超簡単な方法
2016年8月26日メルマガ
【るびきち塾メルマガ#248】世界一易しいEmacsメモ講座(2)
2016年8月25日Emacs
emacs loop.el : ループでbreak/continue/returnを使えるようにする | MELPA Emacs Lisp Elisp パッケージ インストール 使い方

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

【Emacs初級者から中級者への階段】テキスト表示スペースを広くする3つの方法

Emacs初級者と中級者の境目って何だと思いますか?
僕はそのひとつとしてツールバー・メニューバーなしでもEmacsを使えるかどうかだと考えています。
それらはスペースを占有するため、なくしてしまえば表示行数が増えます。
このわずかな差が心理的に大きな影響を及ぼします。

20160829110654.png
Fig1: ツールバー・メニューバー・スクロールバー有

20160829110706.png
Fig2: ツールバーをなくす

20160829110714.png
Fig3: メニューバーをなくす

20160829110729.png
Fig4: スクロールバーをなくす

以下の設定を加えてください。

(tool-bar-mode -1)     ;ツールバーをなくす
(menu-bar-mode -1)     ;メニューバーをなくす
;;; これはお好みで
(scroll-bar-mode -1)   ;スクロールバーをなくす

徐々にテキストの表示スペースが広くなってくるのがわかるでしょう。

タグ

2016/08/29 | コメント/トラックバック(0) |

カテゴリー:Emacs

Emacs: ミニバッファでyesとかnoとか入力するのが面倒な方はこの一撃!

Emacsがあなたにyesかnoを尋ねるとき、
この2種類あることに気付いていますか?

  • yかn
  • yesかno

前者はあまり重要ではない選択、
後者は重要な選択です。

重要な選択のうち代表的なものは
ファイルを保存する前に削除するような場合です。

/tmp/hoge.txtとかを開き、
適当に文字を入力し、
C-x k RETと押してください。

すると、

Buffer hoge.txt is modified; kill anyway? (yes or no)

と聞いてきます。

保存していないバッファがあるときや
シェルなどのプロセスが残っているときにも

Modified buffers exist; exit anyway? (yes or no)

とか

Active processes exist; kill them and exit anyway? (yes or no)

と聞いてきます。

ここでyes RETの4文字打つのはかったるいですよね。
できることならばyかnで済ませたいと思いませんか?

それならばこの一撃で!

(defalias 'yes-or-no-p 'y-or-n-p)

僕は10年以上前からこの設定を入れています。

あなたもよかったらどうぞ。

タグ

2016/08/28 | コメント/トラックバック(0) |

カテゴリー:Emacs

うっかりEmacsを終了することを二度となくす超簡単な方法

http://nagayasu-shinya.seesaa.net/article/emacs-confirm-kill-emacs.html

ご存知の通りEmacs のファイル保存のコマンドはC-x C-s です。また、終了コマンドは C-x C-c です。このせいで、Emacs使いなら一度は経験があるのではと思うミスが「ファイルを保存しようとしたらうっかりEmacsを終了してしまった」というやつです。キーボードのxとsとcが近すぎるゆえに起こる不幸……C-x C-s とタイプしたつもりが C-x C-c とタイプミスしてしまうというかなしい事故。

変更をしたけど未保存状態のファイルがある場合は Emacs が「本当に終了してええの?変更した未保存のファイルあるけど?」と聞いてくれますが、それがない場合はそのまま終了してしまいます。scratch バッファを使っている場合なども無慈悲に終了してしまい、泣きそうになります。

るびきち塾塾生の永安さんの人気ページからです。

僕はもうひとつの方法を提案します。

ここであなたに質問です。

そもそもEmacsを終了することって多いですか?
基本的に一度立ち上げたらずっとひきこもって使うのがEmacsではないでしょうか。

そもそもめったにEmacsを終了しないのであれば
C-x C-cのキー割り当てを外してしまうことを提案します。

C-x C-cは save-buffers-kill-emacs という長いコマンドですので、
いざ終了するときにM-x save-buffers-kill-emacsと打ち込むのは面倒ですよね。

それならばM-x exitで終了できるように別名をつけてあげると、終了するときは楽です。

C-x C-cには別なコマンドを割り当てれば幸せになれます。

(global-unset-key (kbd "C-x C-c"))
(defalias 'exit 'save-buffers-kill-emacs)
;;; なんでもいいよ
;; (global-set-key (kbd "C-x C-c") 'some-command)

タグ

【るびきち塾メルマガ#248】世界一易しいEmacsメモ講座(2)

「るびきちさーん、ここどうすればいいの?」
『ああ、これはEmacsではなくて別なツールだな』
「あっ、こんな方法あるのですね!
 なんでもEmacsで解決しないように注意します」
『わはは(笑) Emacsはなんでもこなしてしまうからねぇ』
「本当にね、そう思わせるほど…」
『Emacsは多機能なんだよ』

今回のメルマガは前回に引き続きorg-captureについてです。
前回はただ大見出しで追記するだけでしたね。

今回のメルマガであなたが得られる結果は、

  • 様々なメモの追記の方法
  • 簡単に日記・週記をつけられる方法
  • 買い物リストなどの日々のリストを記録する方法

です。

org-captureは設定こそ難しいけれど、
使いこなせれば超絶強力なツールとなります。

今回のメルマガではorg-captureの難しいところを
手を動かすことで具体的な形に落とし込む内容なので
一度挫折してしまったとしても再挑戦してみてください。

人生においてメモを取るというのは重要な習慣でありスキルです。

過去のメモを読み返すことで類似の問題に難なく対処できたり、
新たな教訓を学ぶことができるからです。

あなたもorg-captureで効率的なメモを取ってみませんか?

豪華な入塾特典付きで、初月無料月々527円のるびきち塾。
Emacsについて、人生の質を上げる方法について
メルマガでも個別メールでも懇切丁寧に指導します。
絶対に損はさせませんので、ぜひとも登録してください。
http://www.mag2.com/m/0001373131.html
1週間あたり缶ジュース1本分の投資で、僕があなたのメンターになります。

タグ

2016/08/26 | コメント/トラックバック(0) |

カテゴリー:メルマガ

emacs loop.el : ループでbreak/continue/returnを使えるようにする | MELPA Emacs Lisp Elisp パッケージ インストール 使い方

パッケージ名 loop
概要(原文) friendly imperative loop structures
リポジトリ MELPA
取得先 https://github.com/Wilfred/loop.el
バージョン 20160813.707
関連記事 package:loop package:cl package:dash

Emacsの素のループ制御構造は単体ではループを中断する機能が用意されていません。
たいていの言語には組み込みで用意されていますが、
Emacs Lispで実現するためにはcatchで囲む必要があって面倒です。
そこで loop.el はbreak/continue/returnが使えるループ制御構造を用意します。

標準で用意されているCommon Lispのloopマクロ cl-loop を使えば書けるものですが、
loopマクロに苦手意識を持つならば使ってみてはいかがでしょうか。
慣れ親しんだ感覚でループが記述できるのは安心感があります。

各定義は簡単なマクロになっているので、ソースコードを読んでみると勉強になります。

loop インストール

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

M-x package-refresh-contents
M-x package-install loop

使用例 160825054100.loop.el(以下のコードと同一)

;;; 0〜9の総和
(let ((x 0)
      (sum 0))
  (loop-while (< x 10)
    (setq sum (+ sum x))
    (setq x (1+ x)))
  sum)                                ; => 45
(cl-loop with x = 0
         with sum = 0
         while (< x 10)
         do
         (setq sum (+ sum x))
         (setq x (1+ x))
         finally return sum)          ; => 45
(cl-loop for x from 0 below 10 sum x) ; => 45

;;; 0〜5の総和
(let ((x 0)
        (sum 0))
    (loop-while (< x 10)
      (setq sum (+ sum x))
      (setq x (1+ x))
      (when (= x 6)
        (loop-break)))
    sum)                                ; => 15
(cl-loop with x = 0
         with sum = 0
         while (< x 10)
         do
         (setq sum (+ sum x))
         (setq x (1+ x))
         when (= x 6)
         return sum)                    ; => 15
(cl-loop with sum = 0
         for x from 0 below 10
         when (= x 6) return sum
         do (setq sum (+ sum x)))       ; => 15
;;; 1+3+4+5
(let ((x 0)
      (sum 0))
  (loop-while (< x 5)
    (setq x (1+ x))
    (when (= x 2)
      (loop-continue))
    (setq sum (+ sum x)))
  sum)                                  ; => 13
(cl-loop with x = 0
         with sum = 0
         while (< x 5)
         do
         (setq x (1+ x))
         if (= x 2)
           do (ignore)
         else
           do (setq sum (+ sum x))
         finally return sum)                    ; => 13
;;; do-while
(let ((x 0)
      (sum 0))
    ;; our condition is false on the first iteration
    (loop-do-while (and (> x 0) (< x 10))
      (setq sum (+ sum x))
      (setq x (1+ x)))
    sum)                                ; => 45
(cl-loop with x = 0
         with sum = 0
         do
         (setq sum (+ sum x))
         (setq x (1+ x))
         while (and (> x 0) (< x 10))
         finally return sum)            ; => 45
;;; until
(let ((x 0)
        (sum 0))
    ;; sum the numbers 0 to 9
    (loop-until (= x 10)
      (setq sum (+ sum x))
      (setq x (1+ x)))
    sum)                                ; => 45
(cl-loop with x = 0
         with sum = 0
         until (= x 10)
         do
         (setq sum (+ sum x))
         (setq x (1+ x))
         finally return sum)            ; => 45
;;; foreach
(let ((sum 0))
    ;; sum the numbers 1 to 5
    (loop-for-each x (list 1 2 3 4 5 6 7 8 9)
      (setq sum (+ sum x))
      (when (= x 5)
        (loop-break)))
    sum)                                ; => 15
(cl-loop with sum = 0
         for x in (list 1 2 3 4 5 6 7 8 9)
         do
         (setq sum (+ sum x))
         when (= x 5) return sum)       ; => 15
;;; for-each-line (バッファ各行についてループする)
(with-temp-buffer
  (insert "foo\nbar\nbaz")
  (let ((lines nil))
    (loop-for-each-line
      (let ((line-start (progn (beginning-of-line) (point)))
            (line-end (progn (end-of-line) (point))))
        (push (buffer-substring line-start line-end) lines)
        ;; This line should have no effect.
        (forward-line 1)))
    (nreverse lines)))                ; => ("foo" "bar" "baz")

(with-temp-buffer
  (cl-loop with lines
           with line-start
           with line-end
           initially
           (insert "foo\nbar\nbaz")
           (goto-char (point-min))
           do
           (save-excursion
             (setq line-start (progn (beginning-of-line) (point)))
             (setq line-end (progn (end-of-line) (point)))
             (push (buffer-substring line-start line-end) lines)
             (forward-line 1))
           (forward-line 1)
           until (eobp)
           finally return (nreverse lines)))     ; => ("foo" "bar" "baz")
;;; for-each-line は it で各行の内容を参照できる
(with-temp-buffer
  (insert "foo\nbar\nbaz")
  (let ((lines nil))
    (loop-for-each-line
      (push it lines))
    (nreverse lines)))                  ; => ("foo" "bar" "baz")

実行方法

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

タグ

emacs refine.el : リストの値をvi風コマンドで編集する | MELPA Emacs Lisp Elisp パッケージ インストール 設定 使い方 スクリーンショット

パッケージ名 refine
概要(原文) interactive value editing
リポジトリ MELPA
取得先 https://github.com/Wilfred/refine
バージョン 20160726.2025
関連記事 package:refine package:edit-list

refine.el は、リストの値を編集するのに便利なユーザーインターフェースを提供します。
昨日紹介したedit-list.el(レビュー) はemacs-lisp-modeで直接編集する形ですが、
M-x refine を実行すると、viのようにコマンドベースで編集する画面が出てきます。

p(refine-previous) とn(refine-next)で要素を移動し、
RETあるいはe(refine-edit) で編集します。
「k(refine-delete)」で要素を削除します。
「i(refine-insert)」や「a(refine-insert-after)」で要素を追加するあたりがvi風味です。
また、M-<up> (refine-move-forward) 、M-<down> (refine-move-backward) のように
org-modeを思わせる要素の移動も可能です。

リストの編集コマンドは即座に変数に反映されます。
編集が終われば「q(kill-this-buffer)」でrefineから抜け出します。

refineはフックのような大きいリストを編集するのに便利です。
また、kill-ringの要素を入れ替えるとデバッグツールとして使えます。

edit_hook.gif
Fig1: 本家スクリーンショット(prog-mode-hook)

kill_ring.gif
Fig2: 本家スクリーンショット(kill-ring)

っと、ここまで書いてきましたが、edit-list.el
どちらかがいいかというと好みの問題だと思いました。

edit-list.elはemacs-lisp-modeのままで編集できるので
学習コストがほぼゼロであるメリットがあります。

refine インストール

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

M-x package-refresh-contents
M-x package-install refine

タグ

emacs edit-list.el : 【初級者向け】リストの値を自由に編集して反映させる | MELPA Emacs Lisp Elisp パッケージ インストール 設定 使い方 スクリーンショット

パッケージ名 edit-list
概要(原文) edit a single list
リポジトリ MELPA
取得先 https://github.com/emacsmirror/edit-list
バージョン 20100930.743
関連記事 package:edit-list package:refine

あなたは、リスト変数に意図しない値を設定して困ったことはありませんか?
僕はあります。

たとえばファイル名の正規表現とメジャーモードを関連付けるauto-mode-alistという変数があります。
この正規表現をいい加減に書いてしまったら
意図しないファイルとメジャーモードが関連付けられてしまいます。

間違った直前ならば

(setq auto-mode-alist (cdr auto-mode-alist))

で取り消せます。

しかし次々とadd-to-listやpushで設定を加えていくと間違ったリスト要素がどんどん奥に入り込んでしまいます。
これを修正するのはやっかいです。

こんなときに便利なのがedit-list.elです。

使い方はたった5ステップと簡単です。

  1. M-x edit-listを実行する
  2. 変数名を聞いてくるのでauto-mode-alistと入力する
  3. auto-mode-alistの値が書かれたバッファがポップアップする
  4. 自由に編集する
  5. C-c C-cあるいはC-x C-sで保存する!

これで編集結果がauto-mode-alistに反映されます。

20160823140018.png
Fig1: M-x edit-list auto-mode-alist

このedit-list.elはとてもシンプルなEmacs Lispですが、
いろいろな操作ができるようになった強力版refine.el(レビュー) が存在します。
+そのうち紹介します。<2016-08-24 Wed>紹介しました。

edit-list インストール

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

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

設定 160823140041.edit-list.el(以下のコードと同一)

(autoload 'edit-list "edit-list" nil t)

実行方法

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

タグ

emacs flimenu.el : 【関数定義ジャンプ】imenuをちょっぴり使いやすくする | MELPA Emacs Lisp Elisp パッケージ インストール 設定 使い方 スクリーンショット

パッケージ名 flimenu
概要(原文) Flatten imenu automatically
リポジトリ MELPA
取得先 https://github.com/IvanMalison/flimenu
バージョン 20160818.1053
関連記事 package:flimenu package:imenus package:idomenu package:imenu-list package:imenu-anywhere package:ido package:helm package:dumb-jump

Emacsには標準機能でM-x imenuという簡易関数・変数定義ジャンプ機能が備わっています。
現在のファイルに限定されるものの、タグジャンプとは違いタグファイルなしでお手軽に定義に移動できます。
お手軽に定義へジャンプするパッケージといえばdumb-jump(レビュー) がありますが、外部プログラムに頼らない場合ならimenuも手軽でいいものです。

ところが、imenuは階層構造になっているため、候補選択まで時間がかかってしまう欠点があります。
そこで flimenu.el はimenuのインデックスを平滑化(FLatten)します。

相異点をわかりやすくするため、idomenuによりido化したimenuで比較してみます。

20160822043510.png
Fig1: 平滑化されていない

20160822043519.png
Fig2: 平滑化されている

なお、helmユーザならばM-x helm-imenuを使えば平滑化されたimenuが使えます。
idoでもimenus.el(レビュー)によって平滑化されています。

flimenu インストール

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

M-x package-refresh-contents
M-x package-install flimenu

実行方法

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

タグ

2016/08/22 | コメント/トラックバック(0) |

カテゴリー:Emacs helm ido

あなたがzsh/bash/eshellからfishに乗り換えるべき17の理由

これからfishというシェルについてお話します。

あなたがfishを使うべき理由は以下になります。

  1. ユーザーインターフェース、マニュアル、スクリプトに至るまで使い易さを第一に開発されている開発陣の真心!
  2. 補完が超強力
  3. 独自機能であるsuggestion(予測入力)がゲロ強!
  4. 無設定で強力機能の恩恵に与れる
  5. 覚えることが少ない
  6. マニュアルが具体的で超絶わかりやすい
  7. fishシェルスクリプトは読み書きしやすい
  8. 仕様が必要十分
  9. Emacsからデータを渡して起動できる
  10. 終了時にEmacsでログを参照できる(tmux使用)
  11. 設定ファイルをいじらなくても関数や変数の設定を永続化できる
  12. カラフル
  13. Webインターフェースで設定できる…なんという大胆さ
  14. 新しいシェルだが10年の歴史があり実績もある
  15. fish-mode(レビュー) でEmacsでも快適にfishスクリプトが書ける
  16. 補完時に説明が出てくる
  17. fish自体でPCRE含む強力な文字列操作ができる

それでは僕がfishとの出会って一目惚れしたストーリーをお楽しみください。

21世紀のシェル

あなたは、シェルといったら何を思い浮かべますか?
bash? sh? csh? tcsh? zsh? eshell? pry? irbsh?(笑)
いろいろありますね。
僕はひょうんなことから1週間前にfishというシェルに出会いました。
User-Friendly Interactive Shellの略で、使い易さを全面に押し出している最後発シェルです。
最強のシェルとして名高いzshも1990年生まれと、もうかなり古いです。
それに対しfishは2005年生まれと、まさに21世紀型のシェルです。
新しいもの好きで好奇心がある僕は、あっさりとfishにのめりこみました。

zshは古いし難しい

僕は15年もの間zshを使ってきました。
コマンドラインスタックとか、補完が強力で使いやすいと当時思いました。
当時は機能が多ければ多いほどいいと信仰していたので、
とても高機能なところにも惚れていました。
しかし、高機能とは裏をかえせば学習コストが高く、
覚えるのに時間がかかることが問題です。
しかも使用頻度の低い機能というのはすぐに忘れてしまいます。
これではらちがあかんと思いました。

僕はシェルスクリプトが苦手で、ちょっと複雑な処理をしたければbetter shell scriptとしてRubyを使っています。
とくにクオートがからんでくると頭が混乱してしまいます。
構文もとっつきにくく、なかなか覚えられませんでした。

eshellとの出会い

そのまま何年もたち、Emacsひきこもり生活が当たり前になりました。
そんな中で見付けたシェルとしてeshellがあります。
すべてEmacs Lispで書かれたシェルです。
Emacs Lispで書かれているということは、eshellのすべてを自分好みにいじれるということです。
しかもWindows含めすべてのOSで動きます。
Emacs Lispにはそれなりに自信のある僕は、すっかり使い熟すようになりました。
Emacs Lisp力に比例して強くなるeshellは、僕向けのシェルです。

使い始めてすぐにeshellを強化し始めました。
まずはzshのように無限のヒストリを持つようにしました

これで大昔に実行したコマンドラインをanythingやhelmでいつでも呼び出せるようになりました。
履歴の絞り込み検索は他のシェルにはないので俺仕様eshellの主力武器です。
zshの履歴もeshellの履歴に突っ込んだのでコマンドラインヒストリは資産そのものです。
これはとても使いやすいです。
また、Emacsのシェルらしく、Emacs Lisp式を評価できる点も好感をもてます。
M-:やielmの代わりとしても重宝しています。

また、パーサを乗っ取れるのでプレフィクスによってRubyやzshを呼び出すこともできるようにしました。
たとえば、「rb」を前置して「rb 3+4」と実行すると「ruby -e 'p 3+4'」に展開されます。
eshellそのものは入力リダイレクトやバイナリデータに対応できないなど機能が貧弱です。
それを外部プログラム呼び出しによってカバーできる俺仕様eshellはかなりいいものです。

eshellの限界

しかし、それでも弱点は残っています。
大量の出力があるとフリーズしたかのように遅くなったり、補完がとても弱いことです。
eshellの補完はpcompleteが担っていますが、対応コマンドは少なく、今更補充したところで焼け石に水です。
そこでeshellにも限界が見えてきました。

理想のシェルを探して

そこで、理想のシェルを探そうと旅に出ました。
出会ったのがfishでした。
何も設定しなくても便利な機能が最初から有効になっていることにものすごい好感を持てました。
zshは確かに超高機能ですが、多くの機能が無効になっているため、高機能を活かすにはわざわざ設定で有効にする必要があります。
これでは設定を知らないとzshを活かせないということです。
fishは最初からフルパワーであるように設定されています。
例えてれみれば最初からRPGで最強の武器を持ちながら旅に出るようなものです。
普通の装備だと苦戦するような敵をあっさり仕留めまくるのは想像に難くありません。
「強くてニューゲーム」ともいえます。

使いやすいfish

fishはとにかく使い易さを最重視して設計しています。
その姿勢は一貫しています。
補完は超強力で、しかもsuggestionといって入力を予測してくれる機能がめちゃくちゃ便利です。
それなしでは生きていけないほどです。

マニュアルも平易な英語で書かれていて、しかも具体例がたくさん載っています。
多くのツールのマニュアルはただ抽象的事実しか書いてなくて、それを使うったらどうなるうのかが書いていません。
そのため使い方がわからず、イメージつかめません。
人は具体例があるおかげですんなり理解できるようになります。

シェルスクリプトも他のシェルとは一線を画していて、まったく違う構文です。
スクリプトはLua似のクリーンでコンパクトな仕様です。
シェルスクリプトでありながらシェルスクリプトではない、それがfishシェルスクリプトです。

fishにおいてはめったに使われない複雑な機能は存在せず、それを実現するためには外部プログラムにお任せするという潔いスタンスです。
必要十分な仕様なので覚えるのは難しくありません。
僕はたった2日で英語マニュアルを読破し、全容を把握できました。
他のシェルだと何ヶ月かかるかわかったものではありません。
この学習コストの低さはありがたい限りです。

シェル革命!

僕はあっさりzshを捨て、ログインシェルをfishに乗り換えました。

僕はfishと出会ったことでシェルそのものの見方が変わりました。
僕はEmacs引きこもり族なので、シェルもEmacsと連携できないと気がすみません。
Emacsの機能を使ってシェルコマンドを入力し、出力をすぐにEmacsの編集機能で取り込めないといけません。
それができないととても苦痛です。
それができるからこそ、補完が貧弱で重くなるeshellを我慢してまで使っていました。

ところが、eshellを長く使ってくるにつれて、出力がいつまでも残っていること自体に大したメリットを感じなくなってしまいました。
eshellバッファが増えまくると、逆に煩わしさすら感じました。

そこで新しいfishをどう僕に適応させるか…すこし考えました…結論はあっさりと出ました。
fishを立ち上げるときは常に新しい端末で立ち上げます。
そして、Emacsからbuffer-file-nameや最近扱ったバッファのファイル名などの情報をfishに渡し、default-directoryにcdした状態で起動すれば十分だと気付きました。
ログがEmacsで参照できないという問題については、tmuxのcaputure機能を使ってログをファイルに保存して、後でEmacsで見られるようにすればいいことがわかりました。
fishに入るときと出るときにEmacsとのやりとりができれば十分だったのです。

これがわかればeshellに固執する必要がなくなりました。
メインシェルの座をあっさりfishに明け渡し、長年メインシェルに降臨していたeshellはあっさりサブシェルに成り下がりました。
eshellはeshellでEmacs Lispを実行できたり、過去に実行したコマンドを再実行するくらいはできます。
複数のキルリングの内容を使ってコマンドを実行するのもeshellが有利です。
今や専らそれらの目的でしかeshellは使っていません。
今の僕のEmacsにおいて、M-!はfishの端末を立ち上げるコマンドに置き換わっています(笑)

というわけで今はfishとeshellの二刀流です。

fishの良さは多くの人に分かち合いたいので、そのうちfishのサイトを立ち上げることも考えています。

長文をお読みいただき、ありがとうございます。

タグ

2016/08/21 | コメント/トラックバック(0) |

カテゴリー:Emacs fish

ミニバッファでSKKが使えなくなったらこれをやれ!

SKKを使っている人へ。

あなたはミニバッファでSKKを使おうとC-jを押したのに
なぜかミニバッファを終了してしまって困ったことはありませんか?

僕はいくつかのパッケージで経験がありますが、
最近覚えているものといえばvisual-regexp(レビュー) を使おうとしたときです。

日本語を置換しようとC-jでSKKで日本語を入力しようとしたら、
置換先を聞かれてしまい、困ってしまいました。

原因はvisual-regexp等は

(copy-keymap minibuffer-local-map)

によって古いミニバッファのキーマップをコピーするからです。

解決策は以下のコードで真っ先にminibuffer-local-mapにskk-kakuteiを割り当てることです。

(define-key minibuffer-local-map (kbd "C-j") 'skk-kakutei)

ただし、後から割り当てても遅いので再起動してください。

新たにminibuffer-local-mapにキーを割り当てても
コピーされたキーマップには反映されないからです。

先程手元で「copy-keymap minibuffer-local-map」を検索してみたところ、
以下のパッケージが該当しました。

  • anything-config.el
  • anything.el
  • bookmark.el
  • bpath.el
  • contentswitch.el
  • elscreen-gf.el
  • elscreen.el
  • ert.el
  • ertn.el
  • exec-abbrev-cmd.el
  • globalff.el
  • gnus-spotlight.el
  • helm-bookmark.el
  • irbsh.el
  • isearch-x.el
  • iswitchb.el
  • mew-key.el
  • mhc-minibuf.el
  • org-occur-goto.el
  • org-search-goto-ml.el
  • org-search-goto.el
  • supercite.el
  • tagger.el
  • view-kill.el
  • vip.el
  • viper-cmd.el
  • viper-ex.el
  • visual-regexp.el
  • wuxch-buffer.el
  • xscheme.el

それでは落とし穴紹介でした。

SKKで手書きのような入力を楽しんでください。

タグ

2016/08/20 | コメント/トラックバック(0) |

カテゴリー:Emacs SKK

このページの先頭へ