by shigemk2

当面は技術的なことしか書かない

Emacs Lisp

連想配列とキーバリューの取得

21-074904.el

アルドノア・ゼロの5話で出てきたエラー画面のコードを元ネタと見比べてみた

アルドノア・ゼロの5話で出てきたエラー画面、これ https://t.co/xsT683Ljao の「PS: bug test code follows, for best results」以降のやつです pic.twitter.com/USzV1w9z5Z— Wataru MIYAGUNI (@gongoZ) 2014, 8月 3 こんなツイートが出てきたので、アルド…

after-save-hookのヒント

shell-commandを実行する一時的なafter-save-hookを追加するelisp - 屋根さえあればよかったのに モダン hook 入門。 - 日々、とんは語る。

今日の日付をぶっこむ

Emacs Lisp: Date/Time String (できれば時間も突っ込みたかった)

6桁の数字をランダムでぶっこむ

Emacs Lisp Examples ₁

helm-imenuのキーバインド

;; Anything (require 'anything-startup) (define-key global-map (kbd "C-r") 'helm-imenu) ;; Anything (require 'anything-startup) (define-key global-map (kbd "s-a") 'helm-imenu) Emacs - anything-imenuって便利ですね - Qiita [キータ]

OSで場合わけする

;; open (defun open () "Let's open file!!" (interactive) (cond ((eq system-type 'darwin) (shell-command (concat "open " (buffer-file-name)))) ((eq system-type 'cygwin) (message "It's Cygwin")) ) ) (global-set-key "\C-co" 'open) emacs - How…

背景の透明度を変更する

change background alpha (defun alpha (parameter) (interactive "sChange Background Alpha:") (set-frame-parameter nil 'alpha (string-to-number parameter)) ) まるっとalphaコマンドを実行したらいいんです。

正規表現でインクリメント

Emacs でバッファ中の数値をインクリメントquesty-replace-string [0-9]\{2\}\,(1+ (string-to-number \&)) 僕のEmacs24では\1だと全く何も出なかった。後方参照ェ… \,(sexp) が一番のキモで、この中にS式をぶっこんで後方参照と掛け合わせれば、 評価結果を…

今日のelisp

init.elにて。 もう面倒だからoccurをcommand-fで実行できるようにした。 C-s ってSKKの日本語入力と相性悪い気がする。 ;; occurをコマンド入力できるようにするお (define-key global-map (kbd "s-f") 'occur)

gist.elのコードを読んでみる(ちょっとだけ)

defunkt/gist.el · GitHub (defun gist-print-current-url () "Display the currently selected gist's url in the echo area and put it into `kill-ring'." (interactive) (let* ((id (tabulated-list-get-id)) (gist (gist-list-db-get-gist id))) (kill-…

今日のemacs lisp

こちらから。 はてなダイアリーにEmacsから投稿 - 貳佰伍拾陸夜日記毎回hatene:d:new-draftを実行するのは微妙に骨なので、キーバインドを定義してみる。 ;;hatena (require 'hatena-diary) (global-set-key (kbd "C-x v f") #'hatena:d:new-draft) (global-…

buffer-name と buffer-file-name

buffer-nameではなくてbuffer-file-nameだよ - (rubikitch loves (Emacs Ruby CUI Books))buffer-nameがファイル名だけ buffer-file-nameがフルパスを取ってくる。

cond

昨日のエントリーから。 a ; => 3 b ; => 4 (cond ((= a 4) 6) ((= b 4) (+ 6 7 a)) (t 25)) ; => 16 (* (cond ((> a b) a) ((< a b) b) (t -1)) (+ a 1)) ; => 16(最終的にb*(a+1)=>4*4) cond 条件式1 結果 条件式2 結果 t(else) 結果のような感じ。

リージョン内をソートするEmacs Lisp

リージョン内をソートする - Nosの日記リージョン内をソートするEmacs Lisp。ポイントは、shell-command-on-regionだと思われる。 (defvar sort-script "sort") (defun sort-region () (interactive) (shell-command-on-region (region-beginning) (region-e…

番兵

非同期プロセス終了時に処理を行わせるには「番兵(番人)」を使う。 ;; 終了ステータスによる状態文字列を得る (defun exit-status-test (n) (lexical-let (status) (set-process-sentinel (start-process "test" nil "ruby" "-e" (format "exit %d" n)) (lam…

非同期プロセス

Emacsのすごいところは外部プログラムと協調して動作するところである。 Emacsと同時に動くプロセスのことを「非同期プロセス」という。 Emacsから非同期プロセスに指示を送ることで、細かく制御できるようになる。Emacs Lispテクニックバイブル作者: るびき…

関数の別名定義

好き勝手な拡張が出来るのがelispの魅力だが、 名前空間がフラットであるために、すべての関数が どこからでも呼び出せる。勝手に関数名を変更したらファイル内の全ての処理に 影響が及ぶ。elispは、githubとかもあるから 他の人が拡張しやすいから、勝手に…

マイナーモード

マイナーモード メジャーモードとは独立に有効・無効にできる機能を提供する。 マイナーモードはバッファローカルな「ローカルマイナーモード」と Emacs全体に影響を及ぼす「グローバルマイナーモード」がある。ローカルマイナーモードの多くはメジャーモー…

メジャーモード作成

(define-derived-mode oreore-mode nil "OreOre" "オレオレモード!" (define-key oreore-mode-map (kbd "C-c C-m") 'oreore-message)) (defvar oreore-message "初めてのモード" "'oreore-message'で表示するメッセージ") (defun oreore-message () "メッセ…

アドバイス after around など

;; オリジナルの関数が呼び出された後に挙動を追加する ;; (defadvice 関数名 (クラス アドバイス名 activate ;; アドバイス本体)) ;; アドバイス名は単一ならば何でもよい (defun g1 () (princ "g1")) (defadvice g1 (after after-test activate) (princ "/…

beforeアドバイス

アドバイスとは、関数を再定義することなく関数の挙動を変更する仕組みである。たいていの場合はフックを使えば間に合うが、適切なフックがない場合は 関数を変更するしかない。 ;; オリジナルの関数が呼び出される前に挙動を追加するにはbeforeアドバイスを…

フック

特定のタイミングで実行する関数群を登録する機能のことをフック という。具体的にはファイルセーブ前、ファイルセーブ後、最初にバッファに編集したときなどなど。フックを登録することにより、Emacsに自分好みの挙動をさせられる。多くのメジャーモードで…

loop3

;; 事前処理 ;; バッファの各行を文字列のリストで返す (save-excursion (loop initially (goto-char (point-min)) until (eobp) collect (thing-at-point 'line) do (forward-line 1))) ;; ループの最後まで処理したあと、返り値を指定するには、finally re…

loop2

(loop for x in '(1 2 3) collect (list x (* x x))) ; => ((1 1) (2 4) (3 9)) (loop for x in '(1 2 3) append (list x (* x x))) ; => (1 1 2 4 3 9) ;; 1から10までの総和を得る (loop for i from 1 to 10 sum i) ; => 55 ;; 1から10までの二乗和を得る …

loop1

;; 1-5のリストを得る (loop for i from 1 to 5 collect i) ; => (1 2 3 4 5) ;; 1-5の二乗のリストを得る (loop for i from 1 to 5 collect (* i i)) ; => (1 4 9 16 25) ;; リストの各要素をエコーエリアに表示する (loop for x in '(3 9 6) do (princ x))…

構造体

Common Lispなので、 setqじゃだめですね。 構造体を定義する 構造体のインスタンスを作成する 構造体のメンバにアクセスする (defstruct person name age (sex 'unknown)) ; sexのデフォはunknown (setq tom (make-person :name "Tom" :age 10 :sex 'male))…

ブロック

;; 最後まで実行される例 (block block1 (setq a 1) (1+ a)) ; => 2 ;; 脱出 (block block2 (setq a 1) (return-from block2 (+ a 5)) ; => "Not reached!") ; => 6 (defun* block-test () 1 (return-from block-test 2) ;関数名をブロック名に指定して脱出 …

値による場合分け

caseとかtypetestとか使うといいんだよねー (defun case-test (value) (case value (1 "one") ((2 3) "two or three") ((t) "true") (t "other"))) (case-test 1) ; => "one" (case-test 3) ; => "two or three" (case-test t) ; => "true" (case-test 9) ; …

一時的な関数再定義

fletを使う (defun f (x) (* x 2)) (defun g (x) (f x)) (defun i (x) (h x)) (f 9) ; => 18 (g 9) ; => 18 (flet ((f (x) (1+ x)) (h (x) (* 10 x))) (f 9) ; => 10 ;; gの内部でfを呼ぶ (g 9) ; => 10 ;; iの内部でhを呼ぶ (ignore-errors (i 4)) ; => 40 …