トップページunix
1001コメント307KB

Emacs Part 44

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。2013/12/14(土) 17:36:04.45
語り合いましょう。

GNU Emacs - GNU Project - Free Software Foundation (FSF)
https://www.gnu.org/software/emacs/

EmacsWiki: サイトマップ
http://www.emacswiki.org/emacs/

前スレ
Emacs Part 43
http://toro.2ch.net/test/read.cgi/unix/1370754332/
0154名無しさん@お腹いっぱい。2013/12/25(水) 23:53:35.64
>>153
なんでそれが「ななし」になるんだ・・・
0155名無しさん@お腹いっぱい。2013/12/26(木) 01:43:31.01
>>137
マジかーショックだわーどうすべー
0156名無しさん@お腹いっぱい。2013/12/26(木) 01:49:25.94
iswitchbの代わりは何になるんだろう
0157名無しさん@お腹いっぱい。2013/12/26(木) 02:33:29.40
ido だよ
0158名無しさん@お腹いっぱい。2013/12/26(木) 02:52:14.55
へーそんなのあるんだ
0159名無しさん@お腹いっぱい。2013/12/26(木) 10:04:52.80
>*** Iswitchb is made obsolete by icomplete-mode.
って書いてあるんだから icomplete-mode なんだろうきっと。
0160名無しさん@お腹いっぱい。2013/12/26(木) 11:05:44.24
icomplete-mode 使ったら describe-function とかのその他の補完系まで
iswitchb みたいになって非常に気色悪い
0161名無しさん@お腹いっぱい。2013/12/26(木) 12:36:33.12
ちなみに ido の読み方は"アイドゥー"だよ
0162名無しさん@お腹いっぱい。2013/12/26(木) 12:48:23.07
つながってるね!
0163名無しさん@お腹いっぱい。2013/12/26(木) 19:40:52.55
日本語の移動から来てると思った
eieioとかも
0164名無しさん@お腹いっぱい。2013/12/26(木) 19:41:19.36
えいえいおー
0165名無しさん@お腹いっぱい。2013/12/27(金) 00:23:06.64
eieio は"イーアイイーアイオー"だよ
0166名無しさん@お腹いっぱい。2013/12/27(金) 02:38:35.47
イーヤイーヤヨー
0167名無しさん@お腹いっぱい。2013/12/27(金) 18:53:00.82
GoogleC++スタイルガイドで紹介さているGoogle謹製の google-c-style.el を
使ってみたけど、スタイルガイド通りにならないじゃん…なんだよこれ
0168名無しさん@お腹いっぱい。2013/12/27(金) 19:01:15.18
C++なのにCというのにも違和感
0169名無しさん@お腹いっぱい。2013/12/27(金) 19:07:08.82
実はc++-style.elもあって、間違ってC用のやつが公開されてるとか
0170名無しさん@お腹いっぱい。2013/12/27(金) 19:15:57.92
いや、Google Codeにホスティングされているcpplint内の1ファイルで、
そこには1つしかない
スタイルガイド内からリンク張られているのも同じ

もちろん直せばいいんだろうけど、だったら今まで通りでいいや…
0171名無しさん@お腹いっぱい。2013/12/30(月) 06:14:34.70
funcall 使いまくると困る事って何かありますか?
0172名無しさん@お腹いっぱい。2013/12/30(月) 06:27:15.77
calc-mode について教えて下さい。
16進数とかのモードにすると、16#A98AC7 って表示になりますが、
この時「16#」部分だけ色を変えたいのですが可能でしょうか?
0173名無しさん@お腹いっぱい。2013/12/30(月) 10:26:44.24
>>171
特にないかと

>>172
可能だろうけど標準でそういう機能は用意されてないから
自分でコード書かないと無理ですね
0174名無しさん@お腹いっぱい。2013/12/30(月) 12:27:33.24
>>172
基数に色付けする関数を作って、
calc-radix-formatter に設定。
0175名無しさん@お腹いっぱい。2013/12/30(月) 20:52:56.92
calc-radix-formatter だと最初のスタックだけ色が付きませんでしたが、
calc-radix と calc-push-list と calc-binary-op のアドバイスで
上手くいきました。
ありがとうございました。よいお年をお迎えください。
0176名無しさん@お腹いっぱい。2014/01/01(水) 13:53:47.13
emacs を start-process してマルチスレッド紛いをやろうと思ったんだけど
emacs -Q -batch で起動するのにかかる時間だの値の共有だの考えると
あんまり美味しいとこないよね
0177名無しさん@お腹いっぱい。2014/01/01(水) 14:46:28.94
>>176
> マルチスレッド紛いをやろうと思ったんだけど

そういうときは emacs に make-network-process で server/client 作っていろいろやるとよさげ。
kiwanami 氏がそんなことやってたような。
0178名無しさん@お腹いっぱい。2014/01/01(水) 15:27:59.30
なるほど立ちあげっぱなしにすればいいのか。
ローカルでパイプでつなぐってのはあんまりよろしくないのかな
0179名無しさん@お腹いっぱい。2014/01/02(木) 21:01:40.33
esr が bzr オワタから git に移れやって言ってる
http://lists.gnu.org/archive/html/emacs-devel/2014-01/msg00005.html

前は rms が一人だけ反対したから移行できなかったって聞いたけどどうなるやら
0180名無しさん@お腹いっぱい。2014/01/03(金) 08:17:44.10
今回はrmsも強く反対しているわけではなさそう
0181名無しさん@お腹いっぱい。2014/01/03(金) 10:40:37.02
世界的にもgit一人勝ちみたいだな
0182名無しさん@お腹いっぱい。2014/01/03(金) 10:45:15.17
Windows の Cygwin では git は死んでるんだが
0183名無しさん@お腹いっぱい。2014/01/03(金) 10:52:38.33
日本語名にしなければ大丈夫? > Windows の Cygwin では git
0184名無しさん@お腹いっぱい。2014/01/03(金) 10:55:54.16
github から clone するぐらいの使い方しかしてなかったけど
やっぱ日本語でコミットログとか書こうとすると死にかけるんかね、cygwin の git は。
0185名無しさん@お腹いっぱい。2014/01/03(金) 11:01:30.12
バージョンが古い(1.7.9)っていう話ではなくて?
cygportsに1.8.3.4がある
日本語ファイル名もコミットログも問題なし
0186名無しさん@お腹いっぱい。2014/01/03(金) 13:22:56.98
cygwinのgit-1.7.9で使ってるがとくに問題無く使えてるぞ?
コミットメッセージの日本語とかも問題無い
俺の周辺ではファイル名に日本語は使わないからその辺かな?
0187名無しさん@お腹いっぱい。2014/01/03(金) 13:25:46.70
俺はファイル名に日本語使ってるけど普通に使えてるなぁ
そう見えるだけなのかな?
0188名無しさん@お腹いっぱい。2014/01/03(金) 15:55:31.41
font-lockでprependとappendの両方を指定した場合
どちらの方が優先的に表示されるのですか?
0189名無しさん@お腹いっぱい。2014/01/04(土) 16:38:03.27
RMS が折れた
0190名無しさん@お腹いっぱい。2014/01/04(土) 18:27:16.51
RMS って意外に OL っぽいとこあるよな。。。
0191名無しさん@お腹いっぱい。2014/01/04(土) 18:34:02.38
べ、別にずっとbzrのままがいいなんて言ってないんだからね!!
0192名無しさん@お腹いっぱい。2014/01/04(土) 19:36:10.28
これか。bzrはオワコンになりつつあるな・・・
ttp://lists.gnu.org/archive/html/emacs-devel/2014-01/msg00014.html
0193名無しさん@お腹いっぱい。2014/01/04(土) 19:44:33.61
英語の読めない哀れな僕に日本語で解説してください
0194名無しさん@お腹いっぱい。2014/01/04(土) 21:16:22.76
esr : そろそろbzrはあきらめてgitにしねーと、若モンはやる気無くすだろ。
RMS : べ、別にbzrにこだわる必要ないんだけどね。
0195名無しさん@お腹いっぱい。2014/01/04(土) 22:06:35.23
移行に本気になったら gnu/git と呼びはじめて linus 苦笑か
0196名無しさん@お腹いっぱい。2014/01/05(日) 01:25:30.72
なんでGNUつけろって言ってたのか、理解してないヤツキター
0197名無しさん@お腹いっぱい。2014/01/05(日) 12:11:29.78
>>194
クソわろたwww
0198名無しさん@お腹いっぱい。2014/01/05(日) 20:57:15.39
使っている英字フォントと日本語フォントを1:2の幅にしたいのですが日本語フォントの幅が
微妙に狭くて1:2になりません
face-font-rescale-alist を使って日本語フォントを 1.1 倍にすると幅は一致するのですが
高さも変わってしまい英字のみだった行に日本語を加えると数ピクセル動いて気持ちが悪い状態です

文字の大きさも感覚的に日本語のほうが大きくなってしまうので
文字間を少し広くすることでピッチを合わせたいと思っているのですがフォントをいじることなく
変更することは可能でしょうか

Ubuntu 13.10 の Emacs 24.3 を使っています
0199名無しさん@お腹いっぱい。2014/01/05(日) 21:15:58.95
>>198
自分は色々した結果、日本語と英字を同じフォントにすることにした。
0200名無しさん@お腹いっぱい。2014/01/05(日) 21:39:56.15
>>198
emacs だけだと結局無理だったはず。
自分も数ピクセル高さが合わないのを我慢して使ってる。
0201名無しさん@お腹いっぱい。2014/01/05(日) 21:47:20.35
ありがとう
やっぱりできないか
0202名無しさん@お腹いっぱい。2014/01/05(日) 22:57:08.90
以下の行にカーソルが乗っている場合、

* foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo.

\M-q で

* foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo
foo foo foo foo.

みたいに整形されるけど、

* foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo
foo foo foo foo.

のように "* " の長さも次行のインデントに含めて欲しい場合、どう設定すれば良いですか?
adaptive-fill-regexp, adaptive-fill-first-line-regexp 等試しましたが、上手くいきません。
0203名無しさん@お腹いっぱい。2014/01/05(日) 23:10:00.15
>>202
text-modeだと後者のように整形されるよ。
24.3
0204名無しさん@お腹いっぱい。2014/01/05(日) 23:41:55.79
後者?
0205名無しさん@お腹いっぱい。2014/01/06(月) 00:23:07.28
>>203
確かに text-mode デフォルトだと

* foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo.
(\M-q) →
* foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo
foo foo foo foo.

が達成できますが、それだと全角スペースやコメント等に対応しておらず、例えば

 * foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo.

は \M-q で下記のように整形されるわけです。

 * foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo
foo foo foo foo.

これを訂正しようと、" " のケースを adaptive-fill-regexp に追加すると、

 * foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo
foo foo foo foo.

までにしかならず、 "* " のインデント分は考慮されなくなるというイタチごっこで。。。
02062052014/01/06(月) 00:31:27.89
あっ、すみません、自己解決しました。

adaptive-fill-regexp のデフォルト値を参照して変更加えてたら、
やりたい事全部できちゃいました。
0207名無しさん@お腹いっぱい。2014/01/06(月) 02:45:29.06
>>198
フォントまわりは悩ましいよね。
俺も>>199さんと同じで日本語と英字で同じフォントにしてる。
それでもフォントの大きさによってずれることがあるので、
うまく合う大きさを指定してる感じ。
0208名無しさん@お腹いっぱい。2014/01/06(月) 09:15:03.00
ttf 編集出来るソフトで俺俺フォント作っちゃったほうが色々楽になりそうだ
0209名無しさん@お腹いっぱい。2014/01/06(月) 09:42:57.10
Cocoa Emacs のフォント設定について - my-misc.blog
http://d.hatena.ne.jp/setoryohei/20110117/1295336454
0210名無しさん@お腹いっぱい。2014/01/06(月) 12:32:36.57
>>209
結局 face-font-rescale-alist って高さも幅もリスケールしちゃうから
どう頑張ってもずれるフォントはずれるんだよね。
強制的に高さと幅指定してそれに満たない部分は空白で埋めるとかできればなあ。
0211名無しさん@お腹いっぱい。2014/01/06(月) 13:36:39.61
話の流れぶった切るけどと取り敢えず貼っとく
Emacsの標準機能だとminibufferにカーソル位置の単語を初期入力に
してないものがあったりしてイラついたんで汎用的なのを作った

(defun minibuffer-insert-word-at-point ()
"Get a word at point in original buffer and insert it to minibuffer."
(interactive)
(when (window-minibuffer-p)
(let ((word-at-point (with-current-buffer (window-buffer (minibuffer-selected-window))
(thing-at-point 'word))))
(when word-at-point
(insert word-at-point)))))
(define-key minibuffer-local-map [(control ?.)] 'minibuffer-insert-word-at-point)

これでminibufferでC-.でカーソル位置の単語をコピってくる
ちなみにminibuffer.elのケツに似た様なのがあったんでそれをパクった
0212名無しさん@お腹いっぱい。2014/01/06(月) 19:57:57.71
自分自身の関数名を取得する方法ってありますかね?

(defmacro my-debug (msg)
`(message "%s - %s:%s" (current-time-string) 関数名 msg))

みたいなことができたらデバッグメッセージ埋め込んだりするのが楽だと思ったのですが、
それらしいものがみつかりませんでした。
0213名無しさん@お腹いっぱい。2014/01/06(月) 22:02:19.67
format での # 指定時の仕様が気持ち悪い

(format "%#6x" 15) とかやると " 0xf" になるのはいいんだけど
(format "%#06x" 15) にしたときに "0000xf" はおかしいよ・・0x の後に0足してくれよ
C の printf だと"%#06x" で "0x000f" になってくれる
0214名無しさん@お腹いっぱい。2014/01/06(月) 23:35:51.41
うーんこの
0215名無しさん@お腹いっぱい。2014/01/06(月) 23:48:16.50
>>212
backtrace-frame を使えばできるかもしれない。
常に関数の先頭で使うという前提なら、関数名のところで、

(if (car (backtrace-frame 1))
(cadr (backtrace-frame 1))
(cadr (backtrace-frame 4)))

かも。

>>213
バグでしょう。

(format "%#.04x" 15)

で回避。
0216名無しさん@お腹いっぱい。2014/01/07(火) 00:31:04.64
>>215
ありがとうございます。backtrace は自分で呼び出せるんですねー。
呼び出し元でどれだけ遡るかを決めなくてはいけないのは致し方ないですね。
0217名無しさん@お腹いっぱい。2014/01/07(火) 00:31:17.67
元々sjis(?)でエンコードされたファイルがUTF-8で表示されるようになって
しまって、それをセーブしたら、ファイルの文字が以下のように壊れてしまいました。

\343\202\253\343\203\274\343\202\275 ...

これを元の文字に直す方法はありませんか? 再現できればsjisでもutf-8でも問題ありません。
0218名無しさん@お腹いっぱい。2014/01/07(火) 01:16:08.98
C-x C-m c utf-8 C-x C-v

カーソ (?)
0219名無しさん@お腹いっぱい。2014/01/08(水) 10:26:20.98
eval-when-compile と eval-and-compile の使い分けは以下の認識であってますでしょうか?

前提) コンパイル時に素の require は実行されない。

・eval-when-compile
通常ロード時は他とかわらず普通に eval される。
バイトコンパイル時は eval した結果に置き換わり元の式の形では残らない。
→事前に複雑な定数式の計算をさせたり、
コンパイル時に置き換えてしまって残したくない内部的なマクロ定義をしたり、
コンパイル時に必要な定数値や関数定義をロードするのに使う。

・eval-and-compile
通常ロード時は他とかわらず普通に eval される。
バイトコンパイル時に eval されるが、コンパイル結果は元の式のまま残る。
→コンパイル時/実行時共に必要な定数値や関数定義をロードするのに使う。
0220名無しさん@お腹いっぱい。2014/01/08(水) 11:15:55.78
>>219
あってると思う。
0221名無しさん@お腹いっぱい。2014/01/08(水) 11:35:01.04
eval-and-compile は使いどころが難しいな
マクロの式組み立てに使う関数を require するのぐらいしか使ったこと無い
0222名無しさん@お腹いっぱい。2014/01/08(水) 20:24:25.57
SKK は今どこにあるんですか?
0223名無しさん@お腹いっぱい。2014/01/08(水) 21:20:35.34
openlabですよ。
0224名無しさん@お腹いっぱい。2014/01/09(木) 11:55:11.89
あけおめー
0225名無しさん@お腹いっぱい。2014/01/09(木) 11:59:40.93
>>222
http://www.ring.gr.jp/archives/elisp/skk/maintrunk/
0226名無しさん@お腹いっぱい。2014/01/09(木) 13:14:28.50
ASCII.jp:ストールマン氏が語る「巨大な監視エンジンと民主主義の危機」 (1/2)
http://ascii.jp/elem/000/000/856/856012/
フリーソフトウェア以外は拒否すべき
0227名無しさん@お腹いっぱい。2014/01/09(木) 14:02:28.33
腹が…
0228名無しさん@お腹いっぱい。2014/01/09(木) 15:16:30.30
RMSは腹の中にGNUを貯めてるから
0229名無しさん@お腹いっぱい。2014/01/10(金) 03:55:06.00
>>175
俺も calc-mode 改造したぜ!
↓この4行をそのままコピーしてペーストしても

0x1869F円
298,000円
100円
¥10,000

↓スタックにはこう入って超便利!

99999
298000
100
10000
0230名無しさん@お腹いっぱい。2014/01/10(金) 09:28:22.41
なんか mhc を思い出したわ
いまだと twittering-mode とか eww → org へインポートみたいな作りになるんだろうかね
0231名無しさん@お腹いっぱい。2014/01/10(金) 11:00:15.51
>>229
packageにしてupしてくれ!
0232名無しさん@お腹いっぱい。2014/01/10(金) 11:17:36.57
calc-language-input-filter を定義すりゃいいのかね
0233名無しさん@お腹いっぱい。2014/01/10(金) 11:19:27.95
calc 実際便利だよな
0234名無しさん@お腹いっぱい。2014/01/10(金) 12:55:30.97
定数について質問です。
C の #define のように、コンパイル時に完全に置き換わってシンボル名を残さない定数定義は可能でしょうか?

defconst の場合、コンパイルしても置き換えは起こりませんでした。
defmacro は eval-when-compile と組み合わせればシンボル名を残さずに定義できますが、
関数呼び出しの形で書かなくていけないのがいまいちな感じです。
0235名無しさん@お腹いっぱい。2014/01/10(金) 13:56:19.41
(eval-and-compile (defconst hogehoge "HOGE!"))

こうじゃなかったっけ?
0236名無しさん@お腹いっぱい。2014/01/10(金) 14:13:54.03
>>235
elc を見てみましたがやっぱり置き換えは発生しておりませんでした。
(eval-and-compile (defconst test-hogehoge "HOGE"))
(defun test-func () test-hogehoge)
=>
(defconst test-hogehoge "HOGE")
(defalias 'test-func #[nil "^H\207" [test-hogehoge] 1])
0237名無しさん@お腹いっぱい。2014/01/10(金) 14:52:48.48
>>236 あ、ほんとだ。消えない。すまぬ。

(eval-when-compile (defconst test-hogehoge "HOGE"))
(defun test-func ()
(eval-when-compile test-hogehoge))

eval-when-compile で全部包むと消えるみたいけど、めんどくさいかな。
0238名無しさん@お腹いっぱい。2014/01/10(金) 16:01:53.67
>>234
cl-symbol-macrolet はどうだろう。clパッケージに依存するけれど。

(require 'cl-macs)

(cl-symbol-macrolet ((hoge "HOGE")
(fuga "FUGA"))
(defun f ()
(list hoge fuga)))

(symbol-function 'f)
;=> (lambda nil (list "HOGE" "FUGA"))
0239名無しさん@お腹いっぱい。2014/01/10(金) 19:19:36.12
>>237
やっぱりその場で eval させないとだめっぽいですね。

>>238
おおおー
スコープ絞ればかなり期待通りの動作です。
ありがとうございます。
cl 奥が深いなあ
0240名無しさん@お腹いっぱい。2014/01/11(土) 11:37:09.14
二つのリストを与えてそれをemacs lispで処理したいです
このようなものです
(mapc (lambda (a b) (print (+ a b)))
'(2 3 4) '(3 4 5))
想定しているのはcommon lispのmapcのようなことなのですが、できないものでしょうか
0241名無しさん@お腹いっぱい。2014/01/11(土) 11:45:17.84
>>240
cl の mapc がそのまんま common lisp の挙動だね。
(require 'cl-lib)
(cl-mapc (lambda (a b) (print (+ a b))) '(2 3 4) '(3 4 5))
0242名無しさん@お腹いっぱい。2014/01/11(土) 13:30:42.74
>>241
!ばっちりです!ありがとうございました
0243名無しさん@お腹いっぱい。2014/01/12(日) 06:01:18.50
auto-save-hook で *scratch* の内容を保存してるのですが
保存時に出るこのエコーを無効にしたいです。

Saving file /usr/home/jk2/.emacs.d/.scratch…
Wrote /usr/home/jk2/.emacs.d/.scratch

「Saving file〜」は message の defadvice で消せました。
「Wrote〜」はどこで無効にすればよいのでしょうか?
0244名無しさん@お腹いっぱい。2014/01/12(日) 10:22:18.85
write-region の第5引数になんか指定すれば黙るよ。
0245名無しさん@お腹いっぱい。2014/01/12(日) 13:41:13.85
>>244
ありがとうございます!静かになりました。
0246名無しさん@お腹いっぱい。2014/01/14(火) 00:34:38.41
signal を投げるとデバッガが起動しますが、
デバッガを終了した後に signal を投げた箇所から再開させるよう
デバッガの操作ではなくコード側から指示することは可能でしょうか?

(let ((count 100))
(while (> count 0)
;; do something
(when something-happened
(signal 'some-error nil))
;; do something ;; <= エラーが起きてもここから再開したい & ignore-errors でシグナルを無視はしたくない & ループも抜けたくない
(setq count (1- count))))
0247名無しさん@お腹いっぱい。2014/01/14(火) 02:59:39.10
>>246
(debug 'some-error)
にする
0248名無しさん@お腹いっぱい。2014/01/14(火) 10:10:16.95
>>247
ありがとうございます。
(debug 'hoge) でシグナルと同じようにデバッガに入れるんですね。

いま気がついたんですけど ignore-errors でもどちらにせよエラー起きた場所で止まっちゃうんですね。
(ignore-errors
(signal 'error nil)
(message "ppp") ;; <= ここまで到達はしない
)

basic とかにある、on error resume next みたいなのは無理かー
0249名無しさん@お腹いっぱい。2014/01/14(火) 20:04:25.19
set-process-filter で設定したフィルタ関数内で
accept-process-output したりすると、(プロセスの出力があれば)フィルタ関数内で
フィルタ関数が呼ばれることになるんでしょうか?
0250名無しさん@お腹いっぱい。2014/01/14(火) 21:52:26.73
>>212
Gaucheのリーダマクロ #?= みたいにprintfデバッグを書くのに debug-print.el というのを作ったのですが,
可能であれば函数名を読み取って表示するので要望に合うかもです.
現状では debug-print を上書きすれば表示は変えられるけど, もうちょい変えやすくしますかね.
(debug-printという関数名は twittering-mode.el も使ってるんで現状では少し注意.)
何か要望出してもらえれば反映するかもです.


丁度いい機会なのでいくつか質問を.

1. 既存の函数の戻り値に一時的に少し手を加えたい場合はどうするのが良いのでしょうか.

adviseされた函数をfletで上書きするとエラーが出るのでadviceを使うのが正しいのでしょうが,
常にそのadviceを有効にしたいわけではないのです. 大域変数を使ってadvice内部で
その変数を見て動作を切り替えるというのが標準的なんですかね?

2. そのやり方で何か不都合が出るかどうかが気になります.

因みに上のやり方がパッと思いつかなかったので現状では ad-enable-advice と ad-disable-advice
でadviceの有効/無効を切り替えています. こちらは既にバグがあることがわかっています.
0251名無しさん@お腹いっぱい。2014/01/14(火) 22:44:00.16
手元のもろもろのパッケージでは機能の有効化/無効化時に ad-enable/disable-advice を使ってるみたいです。
enable/disable で問題ない気もするのですがちなみにどんなバグなんでしょう?
ad-activate が抜けてるとか?
0252名無しさん@お腹いっぱい。2014/01/14(火) 22:52:00.69
>>250
> 丁度いい機会なのでいくつか質問を.
>
> 1. 既存の函数の戻り値に一時的に少し手を加えたい場合はどうするのが良いのでしょうか.

advice 使わないなら

(defconst original-FUNC (symbol-function 'FUNC))

(defun temporary-FUNC (&rest args)
(let ((retval (apply 'original-FUNC args))
....))

みたいにして

(fset 'FUNC 'original-FUNC) と (fset 'FUNC 'temporary-FUNC)

を切り換える、とか?
0253名無しさん@お腹いっぱい。2014/01/14(火) 23:04:51.41
>>252
advice された関数に対してそれをするとアカンのですよ。

(defun dump-me ()
"me me")

(defadvice dump-me (after test-ad activate)
(setq ad-return-value (concat ad-return-value "??")))

(defconst original-dump-me (symbol-function 'dump-me))

(defun temporary-dump-me (&rest args)
(let ((retval (apply original-dump-me args)))
(concat retval "!!"))
)

(fset 'dump-me original-dump-me)
(fset 'dump-me 'temporary-dump-me)

(dump-me) ;; => スタック使い果たす

24.4 では fset 時に advice がついてこなくなるとかなんとか。
■ このスレッドは過去ログ倉庫に格納されています