1 名前:デフォルトの名無しさん [2007/10/09(火) 05:39:53 ] Emacs Lisp の専用スレ。 少数派による互助を中心に、初心者の相談も気が向けば受け付けます。 単なる Emacs ユーザーは別板の Emacs 関連スレにどうぞ。 過去スレ Emacs Lisp pc2.2ch.net/test/read.cgi/tech/1004551074/ Emacs Lisp 2 pc11.2ch.net/test/read.cgi/tech/1068467385/ 関連スレ Emacs part 22 pc11.2ch.net/test/read.cgi/unix/1180828013/ 【叩かれて】Emacs Lisp道場【強くなれ】 pc11.2ch.net/test/read.cgi/unix/1063880951/ Lisp Scheme Part18 pc11.2ch.net/test/read.cgi/tech/1186922295/
2 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 15:42:41 ] (message ">>1 乙")
3 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 01:16:09 ] (setq >>1 "乙")
4 名前:デフォルトの名無しさん mailto:sage [2007/10/13(土) 00:14:53 ] System.out.println(">>1 乙");
5 名前:デフォルトの名無しさん mailto:sage [2007/10/13(土) 00:17:01 ] スパイがいるぞ
6 名前:デフォルトの名無しさん mailto:sage [2007/10/13(土) 22:02:03 ] ここまでバレバレだとスパイというより罠だな そんなことよりコンスセルの話をしようぜ
7 名前:デフォルトの名無しさん mailto:sage [2007/10/13(土) 22:37:42 ] いやでゴンス
8 名前:デフォルトの名無しさん mailto:sage [2007/10/14(日) 18:51:50 ] ところで、lexbindはもうtrunkにマージされた?
9 名前:デフォルトの名無しさん mailto:sage [2007/10/14(日) 19:43:25 ] elisp で perl みたいなテキスト処理をしたいんだけど、 ファイルから一行読み込む、ってどうやるの? ファイルは馬鹿でかいから、バッファに全部は読み込めない。
10 名前:デフォルトの名無しさん mailto:sage [2007/10/14(日) 20:13:06 ] insert-file-contents かな
11 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 23:54:17 ] リージョン内の文字列を対象に、ファイルサイズを知りたいです。 リージョンを指定して M-| wc -c だと、改行コードなどがバッファのものと違う、 string-width だと TAB が 8 にカウントされる、改行がカウントされない、 length だとマルチバイト文字も 1 文字とカウントする、 など、どれもちょっと期待と違います。 ちなみに、最終的には mode-line に表示させたいので、 外部プロセスなどは使わずにすませたいところです。 何かいい方法ないでしょうか?
12 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 02:23:12 ] buffer-file-coding-system に encode-coding-string して length 取る、とか…
13 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 11:33:17 ] 毎回やるのか、それ。遅そう……。
14 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 00:20:40 ] >>11 です。 >>12 を参考にコードを書いてみましたが、 1MBくらいのファイルになるとスクロールに影響がありました。 私の組み方も悪かったのかも知れませんね。 バッファ全体を substring して temp-buffer に insert して encode して length… だったので。 きっと、もちょっと効率良くできるのでしょう。 で、mode-line の表示をどうしたものかと xdisp.c を眺めていたのですが、 mode-line-format に %i や %I が使えることが分かったので、 もうこれでいいコトにします。 ありがとうございました。
15 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 23:46:14 ] > 1MBくらいのファイルになるとスクロールに影響がありました。 変更がなければ再計算する必要ないと思うが。
16 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 01:15:53 ] バッファに変更がないことを知るのは難しいよね? undo-list はアテにならないから使えないと思うんだけど、 バッファに変更があったことをどうやって知ればいい?
17 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 03:27:25 ] buffer-modified-tickとか。 buffer-undo-listじゃどうアテにならないのかおせーて。
18 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 23:30:07 ] buffer-undo-list って、メジャーモードによっては消えたりするじゃない、 …と思ったけど、変化したら再計算するんだから、十分アテになるね。
19 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 10:58:58 ] after-change-functions
20 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 23:59:32 ] >>19 おお、これなら…、と思ってやってみましたが、 少し速くタイプすると描画がついてきませんでした。これは CPU の性能のせいかな? もちろん、スクロールには影響なかったですよ。ありがとうございます。 after-change-functions 自体は便利そうなので、別の何かに使います。
21 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 23:44:53 ] 昨日からelispを勉強しています。 Rubyが一応は書けます。 OSはUbuntu7.10を使っています。 質問なのですが yatexは.elファイルをどっかに置いているのだと思いますが これはどこに置いてあるのですか? rpm系を使っていて rpm -ql yatexのような事が出来ればいいのですが良く分かりません。 まずこれについて方法を教えていただければと思います。 次に、 例えば/usr/libとかに.elファイルが置いてあるとして emacsはどこに書いてある命令でこれを読みに行くのでしょうか? 最後に .emacsというのにelispを書くとemacsをカスタマイズ出来るそうですが .emacsに例えば (set-language-environment "Japanese") (set-default-coding-systems 'euc-japan) (set-terminal-coding-system 'euc-japan) と書いた場合、確認した中では 何もファイルを指定せずにファイルを開いた場合と .rbファイルを開いた場合に設定が反映されましたが、 .texの時は変わらず、JISのままでした。 例えば/usr/libにyatex.elというのがあると仮定して、 おそらくここにJISにしなさいという命令が書いてあるものと思われ それにより上書きされているものと思われますが、 同一種の命令の場合、 .emacsの設定の方を優先順序を上にするにはどうすればいいですか?
22 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 23:54:29 ] >>21 ライブラリの場所は M-x locate-library でわかるよ
23 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 00:02:34 ] ありがとうございます。 無理やりですが locate yatexで調べました。 /usr/share/emacs/site-lisp とかにそれらしきパッケージが入っていますね。 しかしどうやって読み込んでるのかとか どうやってyatexを使用した場合でも.emacsに書いたeuc-jpを使いなさい という命令を優先させる事が出来るのかが分かりません・・・
24 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 03:19:52 ] yatexが入っているならそのinfoも入っているはずなので、 C-h iでyatexを探して読んでみるといい。 文字エンコーディングの設定方法はそこに書いてある。
25 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 13:07:15 ] このスレはEmacs設定スレじゃないと思うんだが……
26 名前:デフォルトの名無しさん mailto:sage [2007/12/09(日) 06:15:49 ] Emacs Lispの成分解析結果 : Emacs Lispの55%は陰謀で出来ています。 Emacs Lispの39%は祝福で出来ています。 Emacs Lispの6%は成功の鍵で出来ています。
27 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 23:00:49 ] リストの n 番目の要素を置き換えるような関数はありますか? &optional な引数で、上書きと挿入を切り替えることができると嬉しいです。 (setq test '(A B C D E)) (func test 3 X) => (A B C X E) (func test 3 X t) => (A B C X D E) みたいなものがあったら嬉しいのですが、標準関数でこれと同じようなものはありますか? 自分でやると (append (reverse (nthcdr (- (length lst) n ) (reverse lst))) X (nthcdr n lst)) みたいになってしまうのです。
28 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 01:45:09 ] ;; 破壊的挿入 (setf (nthcdr n lst) (cons new (nthcdr n lst))) ;; 非破壊的挿入 (let ((lst (copy-list lst))) (setf (nthcdr n lst) (cons new (nthcdr n lst))) lst) ;; 破壊的上書き (setcar (nthcdr n lst) new) ;; 非破壊的上書き (let ((lst (copy-list lst))) (setcar (nthcdr n lst) new) lst) or (substitute-if new 'identity lst :count 1 :start n) setfとsubstitute-ifはCL。あとは詳しい人が降臨するのを待とう。 おれもここは苦手なんだ。
29 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 09:05:50 ] >>27 仕様バグ。使い方は (setq test (func test 3 x t)) でないとダメ。 なぜなら0番目に挿入がありえるから。
30 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 04:04:57 ] >>29 ??? そういうこともあるから値返してんじゃないの? どのへんがバグなのか分からないオレははんぶん素人です。
31 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 13:25:22 ] 変更箇所を色分けするhighlight-changes-modeで、 保存のたびに色が変化する(tomato→black)ようにしたくて、以下を.emacsに書いたのですが、エラーが出てしまいます。 小関氏の『入門Meadow/Emacs』に載っているソースを真似たのですが、どこが問題なのでしょうか? よろしくお願いします。 ●.emacs (setq highlight-changes-colours (let ((r 255)(g 99)(b 71) ret) ;初期値tomato (while (> (+ r g b) 0) ;だんだん色褪せる (setq ret (append ret (list (format "#%02x%02x%02x" r g b)))) (setq r (* (/ r 10) 8) g (* (/ g 10) 8) b (* (/ b 10) 8))) ret)) ●エラー Wrong type argument: symbolp, (* (/ b 10) 8)
32 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 14:07:35 ] じっと目を凝らしても君には見えないんだろうな。
33 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 19:21:51 ] >>31 Emacsが日本語でやさしく教えてくれるようになるまで別のもの使っときw
34 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 19:35:30 ] >>31 setqのgの後ろに幽霊が居るぞ
35 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 20:41:01 ] develockで赤くしました。
36 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 15:44:35 ] develockって一度有効にしちゃったらoffにできないよね……
37 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 19:23:27 ] バージョンが古いんじゃないの?
38 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 19:30:05 ] と思ったら、なんか変だね…
39 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 17:03:58 ] 関数内で、自身の関数名を取得する方法はありますか?
40 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 18:17:53 ] backtrace-frame()
41 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 20:18:00 ] >>40 (defun hoge() (interactive) (setq self (second (backtrace-frame 3))) (message "%s" self) ) お、できた。 サンクス
42 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 17:30:07 ] let使えよ selfが汚染されるだろ
43 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 23:27:54 ] 変数 arg が string で空ではない事を判定するのは こんな感じだと思うんですが (and (stringp arg) (not (string= arg ""))) これに相当する標準のコマンドってありますか?
44 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 23:34:22 ] (equal arg "")じゃダメなん?
45 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 23:37:09 ] ああnonempty stringで真にしたいのか。ない、そんなの。
46 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 02:30:34 ] lisp のファイル内に時々 ^L (Control-L) だけの行があるけど あれ何のためにあるの?
47 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 04:11:13 ] 改ページ
48 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 10:15:45 ] Lispに限らず見かけるけど。 a2ps-j とかはそれを認識して改ページしてくれるので、 見やすくするために入れる。
49 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 13:19:31 ] EmacsのCソースコードにも入ってるよ。 一つのソースファイルをいくつかのセクションに分けたいときに使ってるね。 Emacsではbackword-page (C-x [), forward-page (C-x ])でページ単位で移動できる。
50 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 00:51:29 ] >>47-49 なるほど。勉強になりました。
51 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 02:29:22 ] 文字列を N 回結合する関数ってありますか? (defun foo (str num) (let (i result) (dotimes (i num result) (setq result (concat result str))))) こんなのを作るしかないんですかね?
52 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 02:48:27 ] ないんじゃないかな、こんなのやってみたけど (defun X (s n) (apply 'concat (make-list n s)))
53 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 03:10:46 ] >>52 おお、素晴らしい。 そっちの方が色々応用できそうですね。
54 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 03:21:42 ] >> 53 カキコしたあと思い出したんだけど、前スレで同じ質問あったな。いくつかレスがついてる。 pc11.2ch.net/test/read.cgi/tech/1068467385/936 > perl の x 演算子みたいな関数って無い? > make-string の文字列版というか、 > (hogefunc 3 "abc") > => "abcabcabc" > みたいなやつ。
55 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 03:31:06 ] >>53 mapconcat の方がいろいろ対応できるよ
56 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 03:36:39 ] >>54 確認しました。 ありがとうございます。 941 :デフォルトの名無しさん:2007/09/08(土) 00:20:18 ということは、まとめると (mapconcat 'identity (make-vector 3 "abc") nil) が一番速いのかね >>55 みたいですね。 こういうコードをさらっと書けるように修行します。
57 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 08:20:28 ] (reduce 'concat (make-vector 3 "abc")) ;; ==> "abcabcabc" ぱっとみて思いついた。
58 名前:Zeno ◆5nZQbNmQPs [2008/03/28(金) 09:47:16 ] >>57 でもそれは >>51 のように順々に concat していくのと同様だから遅すぎである。 (reduce 'concat (make-vector 10000 "abc")) Time: 5182 ms (mapconcat 'identity (make-vector 10000 "abc") nil) Time: 2 ms
59 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 10:29:12 ] >>58 さっさと本スレで初心者にやさしく答えてあげてください。
60 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 22:07:36 ] こっちの方が速かった。 (mapconcat (lambda (x) "abc") (make-bool-vector 10000 nil) nil) くり返し回数が十分大きい場合はこっちのが速い (with-temp-buffer (let* ((n 10000) (s "abc") (l nil)) (while (/= n 0) (setq l (cons (= 1 (logand n 1)) l)) (setq n (lsh n -1))) (while (progn (if (car l) (insert s)) (setq l (cdr l))) (insert-buffer-substring (current-buffer) (point-min) (point-max))) (buffer-string)))
61 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 22:50:02 ] >>60 思いつく柔軟さはいいと思うけど、 そんなコード氾濫してたら嫌だというのが正直なとこだな
62 名前:デフォルトの名無しさん [2008/03/29(土) 14:02:44 ] ならinline functionにすればいいじゃない
63 名前:デフォルトの名無しさん [2008/04/19(土) 05:38:06 ] Perlの $foo =~ s/abc/def/; みたいにして変数の中身を正規表現を使って置換することはEmacsLispで出来ますか? perfume-replaceをどう使っていいのか分かりません
64 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 06:58:41 ] >>63 replace-regexp-in-string
65 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 06:58:49 ] >>63 replace-regexp-in-string でいいんじゃね? と思ったが、 s/abc/def/ じゃなくて s/abc/def/g になっちまうな。 (let ((foo "abc123abc")) (setq foo (replace-regexp-in-string "abc" "def" foo))) ⇒ "def123def" replace-match なら s/abc/def/ になるかな。 (let ((foo "abc123abc")) (string-match "abc" foo) (setq foo (replace-match "def" nil nil foo))) ⇒ "def123abc"
66 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 07:09:01 ] >>65 あー s/abc/def/gでいいんです。すいません とりあえずreplace-regexp-in-stringとstring-matchの使い方を覚えます どうもありがとうございました
67 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 07:34:32 ] ヘルプでcount-mathesの説明を見るとhow-manyのアライアスだということで how-manyのソースを見てみたところ (defun how-many (regexp &optional rstart rend) と、引数を3つしかとらないみたいなのですが バッファ内で(how-many "aa" nil nil nil)と引数を4つ渡して評価しても何故か 普通に動作します。 どうして引数を4つ渡しても動作するんでしょうか? emacsのバージョンは22です
68 名前:67 mailto:sage [2008/04/27(日) 07:50:01 ] すみません 使ってるバージョン(22)と見たソースのバージョン(21)が異なってただけでした。orz 22のソースだとちゃんと引数は4になってました。 あともう1つわからない点があって、22のcount-matchesの説明をc-h fで見ると the function behaves in all respects has if it had been called interactively. という英文があるんですが、これはどういう意味なんでしょうか? 特にin all respects has という部分がわかりません。
69 名前:Zeno ◆5nZQbNmQPs [2008/04/27(日) 08:12:30 ] >>68 その英文は少々不自然である。 例えばそれは if interactive is t, the function behaves as if it had been called interactively (in every respect). (もし `interactive' が t であるならば、この関数は interactive に呼ばれた時と同じ動作をする。) と訂正されるべきだろう。 "has" は "as" であって、単純なタイポである。
70 名前:67 mailto:sage [2008/04/27(日) 08:23:11 ] >>69 変な英文だと思ったらtypoだったんですね。 わかりました、ありがとうございます。
71 名前:Zeno ◆5nZQbNmQPs [2008/04/27(日) 08:40:00 ] >>70 貢献できて嬉しいよ。
72 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 03:42:36 ] 関数のカリー化はできないのでしょうか?
73 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 03:52:54 ] プ
74 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 20:39:14 ] emacs lisp からcommon lispのcl-whoなどのパッケージを使う方法ないでしょうか?
75 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 15:16:22 ] Google Desktop の検索結果に time というプロパティがあり、それを通常の日付/時間表示に変換する方法が分かりません。どうすればいいのでしょうか? ;Google Deskitop の time の値(milie second): 128542440648970000 ; 試してみたこと。 ; current-time-string に渡すため (high low)のフォーマットにしようとこころみた。 (let* ((second 128542440648970) (high (/ second 65535)) (low (logand second 65535))) (List high low)) ;こんな結果になる。 (-380 28938)
76 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 19:21:47 ] (let* ((second "128542440648970") (high (calc-eval (concat second " / 65535"))) (low (calc-eval (concat "and(" second ",65535")))) (list high low)) => ("1961431916.52" "28938") で結果は正しい?
77 名前:デフォルトの名無しさん [2008/05/08(木) 12:32:31 ] >>76 レスありがとう。 'high' が integer じゃないって怒られた。だめみたいです。
78 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 13:15:07 ] それくらい自分で型変換しようぜ…
79 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 14:11:31 ] >(concat second " / 65535") 65535 じゃなくて 65536 じゃないか?
80 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 16:53:42 ] emacs21 --batch --eval "(hoge ...) " の出力が日本語を含むリストのはずなのですが \222 が連続して並んでます nkfでも変換できないみたいです どうすれば普通の日本語にできるのでしょうか?
81 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 17:05:32 ] >>80 --batch の出力は必ず iso-2022 になるはず。
82 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 18:02:06 ] emacsで.emacs.elファイルが開かれている場合、閉じるときにeval(してエラーがあれば警告し)たいのですが、良い方法をお分かりの方、教えてくださると幸いです。 ちなみに、 www.jaist.ac.jp/~n-yoshi/tips/junk_elisp.html#bytecompile の、保存時に自動バイトコンパイルするよう設定を参考に、(byte-compile-file "~/.emacs.el")を(eval-current-buffer)に書き換えたりしてみたのですが、それだと、Emacsが重くなってダメでした。 高林哲氏のauto-save-buffersを使っているせいもあるんでしょうが。
83 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 22:45:10 ] >>82 その真上にある終了時に byte-compile ってやつはダメなの?
84 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 02:51:56 ] >>82 kill-buffer-query-functions で eval してはどうでしょうか。 (add-to-list 'kill-buffer-query-functions (lambda () (when (string= (expand-file-name "~/.emacs.el") (buffer-file-name)) (eval-buffer)) t))
85 名前:82 mailto:sage [2008/05/12(月) 05:10:30 ] >>84 的確なレスありがとうございます。 さっそく試したところ、うまいこと動きました。 ただ、やはり、バッファ終了時ではなく、手動保存時に add-hookすることができればそれがベストかなと、 思い直した次第です。 つまり、'after-save-hookだとauto-save時にも適用されてしまいますが、自分でC-x C-sした時だけeval-bufferするようなことって、できますでしょうか? たびたびすいませんです。これで最後の質問にいたします。
86 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 08:28:30 ] >>85 eval-bufferして本来の動作をするようなelispを定義して C-xC-s のコマンドに上書きすればいいだけじゃないか。
87 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 08:28:31 ] そういうコマンド書いて C-x C-s に割り当てればいいんじゃないかな。
88 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 08:58:59 ] >>85 interactive-p で auto-save かどうかを判定できるかも。
89 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 09:30:03 ] 選択範囲内のすべての行の先頭にタブを入れたいのですが, どうすればいいですか? わかる方がいましたら教えてください。
90 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 09:43:01 ] >>89 マークして C-x r t C-q TAB RET 基本的な操作は本スレで質問しような。
91 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 15:52:28 ] >>81 なぜかうちの環境ではならない ubuntu7.10
92 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 12:03:29 ] >>90 そんな長いコマンドがちょっといやで, C-c C-tあたりでできるようにしたいです
93 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 13:28:35 ] >>92 じゃあチラシの裏に書く前にさっさとそうしてください。
94 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 07:24:04 ] opensuse11 初心者だけど、manページが文字化けする。。。。
95 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 09:18:57 ] elispでもマクロがあるんだねぇ。しらなかった。試しに作ったけど (defmacro definsert (name str) (let ((dstr (gensym)) (len (gensym))) `(defun ,name () (let* ((,dstr (concat ,str ,str)) (,len (length ,str))) (insert ,dstr) (backward-char ,len))))) ( definsert insert-double-aho "aho") (insert-double-aho) => ahoaho カーソルの位置 最初のahoの後ろ インデントは適当になおしてね。また、これは車輪の再発明でinsert-pairが 標準であることを付け加えておきますね。
96 名前:デフォルトの名無しさん [2008/09/28(日) 07:16:03 ] 一行コピーの一番エレガントな実装を教えてください。 取り合えず手元にあるものではこんな感じ。 (defun duplicate-line (n) (interactive "p") (save-excursion (copy-region-as-kill (line-beginning-position) (progn (forward-line 1) (point))) (dotimes (i n) (yank)))) ちなみに、コピー後のカーソル位置は任意です。(カラムが移動するのはイヤン)
97 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 08:05:33 ] ;; エレガントかどうか知らんけど、最終行でも動作が変わらないようにしてみました (defun duplicate-line (n) (interactive "p") (save-excursion (let ((str (concat (buffer-substring (line-beginning-position) (line-end-position)) "\n"))) (forward-line) (when (= (line-end-position) (point-max)) (insert "\n")) (dotimes (i n) (insert str)))))
98 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 10:44:45 ] (fset 'duplicate-line [?\C-a ?\C- ?\C-e escape ?w ?\C-m ?\C-y ?\C-a ?\C-p])
99 名前:96 mailto:sage [2008/09/28(日) 11:13:49 ] ありがとうございます。 >>97 確かに最終行が改行で終わってないと動作がおかしいですが、 ある意味正しいというか、あまりないことなので現状でも いいかなという気もします… >>98 マクロも考えたんですが、カーソルのカラム位置が移動しちゃうのと 一回のUndoで元に戻らないのがちょっと微妙です。
100 名前:96のお父さん [2008/09/28(日) 11:34:40 ] (insert (save-excursion (concat (buffer-substring (line-beginning-position) (line-end-position)) "\n")))
101 名前:96のお父さん [2008/09/28(日) 11:36:45 ] 失礼。 × (insert (save-excursion (concat (buffer-substring (line-beginning-position) (line-end-position)) "\n"))) ○ (save-excursion (insert (concat (buffer-substring (line-beginning-position) (line-end-position)) "\n"))) どっちでもいいけどな。