ardggy's blog

Esc - Meta - Alt - Ctrl - Shift

Emacs

1行で終わる php-mode のインデント

いろいろ設定するより php-mode で提供しているのをそのまま設定するのがよかった。結局ソース嫁という話。 (add-hook 'php-mode-hook 'php-enable-default-coding-style) c-mode で c-set-style している場合、その設定を継承してしまう可能性があるのでそ…

view-mode とディレクトリ変数

プロジェクトルートに、下の内容の .dir-locals.el を入れておく。 すると、プロジェクト下のファイルを開いたときに view-mode になっている。 ライブラリとかカーネルとかを読むときはありがたい。 ((nil . ((eval . (view-mode 1))))) find-file-hook に…

標準拡張は view-mode で読みたい

find-library とか describe-function でライブラリのファイルに飛ぶときに、view-mode になっているといいなあと思って設定した。 地味にありがたい存在。 (add-hook 'find-function-after-hook 'view-mode-when-el) (add-hook 'xref-after-jump-hook 'view…

scheme-send-last-sexp

直前の式を評価するコマンドで、おなじみ C-x C-e にバインドされている。 cmuscheme.el の定義を読んだら、単にプロセスに対してリージョンを送るというものだった。 save-excursion 内で一時的に前のS式に戻って、戻ったところの位置をリージョン開始にし…

repeat.el とウィンドウ幅の調整

ウィンドウ幅の調整コマンドは C-x }, C-x {, C-x ^ に割り当てられていて、連続的に押下するには不便なキーバインドになっている。 ネットを見るといろいろ対策はあって、インタラクティブに調整できるようなコマンドをつくったり、必要なときにキーボード…

タイトルバーをモダンな感じにする

モダンな見た目になって大変よいです。 (when (eq window-system 'ns) (add-to-list 'default-frame-alist '(ns-transparent-titlebar . t)) (add-to-list 'default-frame-alist '(ns-appearance . dark))) すぐに適用したい場合は *scratch* なり M-: なり…

フォーカスがあたったときの入力ソースを英数にする

Emacs にフォーカスがあたったときに日本語入力になっていて、M-x あたりを入力すると大変イライラする。 であれば、フォーカスがあたったときに、英数キー (キーコード102) を入力するような何かを実行すればいい。 こういうときは Applescript で調べると…

init.el を gist に上げる

dotfiles 的なリポジトリ運用はめんどくさすぎて、はるか昔にやめていた。 普段は Dropbox に入れてシンボリックリンクで参照するだけにしている。 gist にあげるだけならカジュアルかなあと思って (C-x h M-w でコピペする)、そうすることにした。 clone し…

system-type とバイトコンパイル

init.el を見てると、system-type 変数で分岐をとるケースがあったりするけど、これはコンパイル時には判明してるわけで、実行時に分岐するのはどうかなと思った。 もちろん微々たるものではあるし、使いどころも極めて限られているので、なんでもかんでもや…

tool-bar-mode と menu-bar-mode をオフにしておくやつ

(tool-bar-mode -1) みたいにしてオフにするのが定番ですが、ツールバーが消えるときにウィンドウがガチャガチャしてかっこ悪いし、消すだけでも 100ms くらいはかかるわけで、最初の最初からオフにできないかなーと思っていた。 github.com 以下の設定は Ma…

Emacs の起動高速化の試み(2)

ardggy.hatenablog.jp el-get をやめて、標準の package.el に切り替えた だいたい 300ms ほど削れた。 そもそも自分の場合 el-get である必要がなかった……。 exec-path をキャッシュするようにした 毎回 exec-path-from-shell-initialize を実行していて、…

雑な init.el の括弧バリデーション

check-parens 関数をセーブ前に噛ませればいい。 (add-hook 'emacs-lisp-mode-hook 'check-parens-before-save) (defun check-parens-before-save () (add-hook 'write-contents-functions 'check-parens nil t) ; local-hook )

雑な JSON のバリデーション

syohex.hatenablog.com わざわざ jsonlint いれるのもいやだし、jq のエラーメッセージをパースするのもだるいしと思っていたら、json-pretty-print-buffer がエラーを吐いてくれるという。 バッファの中身を整形されるのが問題なら、テンポラリバッファでや…

前回終了時のフレームサイズで起動する

毎回左上の隅っこにちんまり起動するのは気が利かないと思う。 終了時点でのフレームサイズを保存しておいて、起動時に参照すればよろしいのではなかろうか。 というわけで下の設定を書いてみた。 ;;; last-frame ;; Emacs 終了時にフレームパラメータ top, …

Emacs の起動高速化の試み(1)

1,000 行ある init.el でも1秒ほどで起動できるようになった。 (M-x emacs-init-time 調べ) 結局のところ、いかにパッケージの読み込みを遅らせるかがキモなわけで、具体的には autoload, with-eval-after-load, after-init-hook, emacs-startup-hook, wind…

mouse-avoidance-mode

(mouse-avoidance-mode 'none) Emacs 26.1 にしてから、ドラッグしたフレームがあさっての方向に行ってばかりで困っていた。 emacs -Q & すると起こらないから、自分の init.el が悪い。 設定を一個ずつ評価していくと (mouse-avoidance-mode 'banish) に突…

shell-command-on-region で置換する

バッファに 1 + 1 と書いておいて、2 で置換できないかと思ったのでトライ。 置換処理はむしろ外部にまかせたい。vim における '<,'>! である。 C-u M-| CMD <RET> を使えばいけそうであるが、リージョン末尾が改行でない場合に、コマンドが受け付けてくれない場</ret>…

exec-path-from-shell

ログインシェル ($SHELL) をテンポラリバッファ内で起動して、$PATH を吐き出す 吐き出した $PATH をコロンで split して exec-path に append する

MySQL のコメント構文に対応する

MySQL は -- と /* */ だけじゃなくて # スタイルのコメントもサポートしている。 Emacs の sql-mode だと # スタイルはサポートしていないので、構文テーブルをどうにかする必要がある。 (add-hook 'sql-mode-hook 'mysql-comment-syntax) (defun mysql-com…

helm-info で Gauche のリファレンスを読む

info からマニュアル見れるよということで下の設定を紹介していただいた。 紫ログ:Emacs上でGaucheのinfoを引く - livedoor Blog(ブログ) helm から引けるといいなあと思って sources を書き始めたら、そのまんま helm-info-gauche-refe というコマンドを…

eww で Gauche のリファレンスを読む

gauche-manual.el を入れて eww で読めるように設定した。取得は el-get 経由で、レシピをインラインで設定している。 gauche-manual-el - jump to gauche online manual - Google Project Hosting キーバインドを M-g に当てたのは、下の記事の影響。 #:g1:…

scheme-mode の Gauche 対応

Gauche のライブラリを読もうとしたら、正規表現リテラル内の | が悪さをしてるらしくハイライトがめちゃくちゃになっていた。gauche-mode というのがあるようだけど、Emacs が構文をどう扱うかを知りたかったので、自前でなんとかしてみることに。 modify-s…

ledger で帳簿をつけるようになった

テキストで帳簿をつけられるってだけで気が楽になる。 Emacs から org-capture でつけるだけである。テンプレートは簡潔に以下のようにしている。 (use-package ledger-mode :mode '(("\\.ledger$" . ledger-mode))) (with-eval-after-load 'org (add-to-lis…

単語全体を選択する

thingopt.el が解決してくれそうだったんだけど、subword-mode とか superword-mode を使ってたりするとちょっとイマイチかなあと思ったので自前でなんとかすることに。 (defadvice mark-word (before mark-word-around activate) (beginning-of-thing 'word…

kill-whole-line

C-a C-k することが多いのなら、dd 相当を割り当てるほうがいいと思う。 (global-set-key (kbd "C-k") 'kill-whole-line)

Emacs にも kindle みたいな辞書機能ができた

Mac とか kindle を使っていると、ポップアップで英和辞書が引けるので英文でもなんとか読める。Emacs でも似たようなことができないかなあと思っていたら、google-translate.el という素敵なパッケージを見つけたのでインストールした。 (el-get-bundle goo…

Org-capture のキーバインドを変えた

C-c C-c でタグを打ちたいので、終了されるとちょっと困る。 (defun my-org-capture-mode-header () (setq-local 'header-line-format "Capture buffer. Finish `C-x C-s', refile `C-c C-w', abort `C-c C-k'.")) (with-eval-after-load 'org-capture (defi…

Emacs とコーディングシステム

cp932 なファイルを修正しなくてはならなくて、Emacs から保存したら UTF-8 になってしまった。 これでは困るので、腰を上げてコーディングシステムについて調べた。 以下のとおりに理解した。 Emacs は指定した言語環境について、いくつかのコーディングシ…

ミニバッファでも C-h したい

ミニバッファで C-h するとつっかえるのが嫌だったので修正した。 (defun minibuffer-delete-backward-char () (local-set-key (kbd "C-h") 'delete-backward-char)) (add-hook 'minibuffer-setup-hook 'minibuffer-delete-backward-char) (define-key isear…

Org-mode で日誌をタイムライン化した

org-mode の info で紹介されているテンプレートが気に入らなくて調整中である。 orgmode.org テンプレート中に %T を置いたら、メモが org-agenda でタイムライン化した。twitter みたいでちょっとおもしろい。twitter はもうやめたんだけど。 ; 日付ごとに…