のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:126,805,123人
昨日:no data人
今日:
最近の注目
人気の最安値情報

    元スレEmacs Part 44

    emacs覧 / PC版 /
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
    251 = :

    手元のもろもろのパッケージでは機能の有効化/無効化時に ad-enable/disable-advice を使ってるみたいです。
    enable/disable で問題ない気もするのですがちなみにどんなバグなんでしょう?
    ad-activate が抜けてるとか?

    252 = :

    >>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)

    を切り換える、とか?

    253 = :

    >>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 がついてこなくなるとかなんとか。

    254 = :

    どうでもいいけど、函数ってかなり古い表現だよね
    フォント⇒字母
    アルゴリズム⇒算法
    プログラム⇒算譜
    みたいな

    256 = :

    (defun foo (x)
    (cons 'foo x))

    (defadvice foo (after advice-a)
    (setq ad-return-value `(advice-a ,ad-return-value)))

    (defadvice foo (after advice-b)
    (setq ad-return-value `(advice-b ,ad-return-value)))

    (keu:with-advice 'on 'foo 'after 'advice-a
    (funcall 'foo 100))
    ; => (advice-a
    ; (advice-b
    ; (foo . 100)))
    (foo 100)
    ; => (advice-b
    ; (foo . 100))
    (keu:with-advice 'on 'foo 'after 'advice-b
    (funcall 'foo 100))
    ; => (advice-b
    ; (foo . 100))
    (foo 100)
    ; => (foo . 100)

    257 = :

    ああ, 複数じゃなくてもいいですよね.

    (ad-disable-advice 'foo 'after 'advice-a)
    (ad-activate 'foo)
    (foo 100)
    ; => (foo . 100)
    (keu:with-advice 'on 'foo 'after 'advice-a
    (funcall 'foo 100))
    ; => (advice-a (foo . 100))
    (foo 100)
    ; => (foo . 100)

    (ad-enable-advice 'foo 'after 'advice-a)
    (ad-activate 'foo)
    (foo 100)
    ; => (advice-a (foo . 100))
    (keu:with-advice 'on 'foo 'after 'advice-a
    (funcall 'foo 100))
    ; => (advice-a (foo . 100))
    (foo 100)
    ; => (foo . 100)

    258 = :

    >>250
    なるほど。ある advice の有効/無効状態を取得出来るオフィシャルな方法はあるのかってことですね。
    もともと enable ならなにもしない、って感じで。
    Info みた感じだとなさそう。

    結局 advice の実装見ることになっちゃうけど、ad-get-advice-info あたりを使うしかないのかしらん。
    describe-function なんかでも使ってるから準公式みたいなもんでしょうきっと。

    それと skk-isearch.el なんかでも advice 済みかどうかの判断に ad-get-advice-info を使ってるみたいです。

    259 = :

    >>258
    こういうことか? マクロ書き慣れてないから eval 沢山あってキモい
    (defmacro keu:with-advice (on-or-off func class advice &rest body)
    "[internal] Evaluate BODY with ADVICE enabled/disabled.
    Note that there is a bug that it cannot restore the state of ADVICE.
    Any ideas?"
    (let ((adviced (caddr (assq (eval advice)
    (assq (eval class)
    (ad-get-advice-info (eval func)))))))
    (if (or (and (eq (eval on-or-off) 'on) adviced)
    (and (eq (eval on-or-off) 'off) (not adviced)))
    `(progn
    ,@body)
    `(progn
    ,(pcase on-or-off
    (`'on `(ad-enable-advice ,func ,class ,advice))
    (`'off `(ad-disable-advice ,func ,class ,advice))
    (_ (error "the first argument must be the symol 'on or 'off")))
    (ad-activate ,func)
    (let ((keu:with-advice:return-value ,@body))
    ,(pcase on-or-off
    (`'on `(ad-disable-advice ,func ,class ,advice))
    (`'off `(ad-enable-advice ,func ,class ,advice))
    (_ (error "the first argument must be the symol 'on or 'off")))
    (ad-activate ,func)
    keu:with-advice:return-value)))))

    260 = :

    >>259
    状態チェック入るなら展開時に評価はまずいんじゃないでしょうか。
    pcase のところまで含めて実行時評価になるようにしないといけないかと。

    261 = :

    >>258
    はい! そういうことです. ありがとうございます.

    >>259
    一から書き直してみました.
    funcallの後ろを ',(if ...) としないといけないのはわからなくはないけど納得いかない.


    (defsubst keu:advice-enabled-p (func class name)
    (ad-advice-enabled (ad-find-advice func class name)))

    (defmacro keu:with-advice (on-or-off func class name &rest body)
    "[internal] Evaluate BODY with NAME enabled/disabled."
    (let ((onoff
    (pcase on-or-off
    (`'on t)
    (`'off nil)
    (_ (error "the first argument must be the symol 'on or 'off")))))
    `(let ((enabled (not (not (keu:advice-enabled-p ,func ,class ,name)))))
    (if (eq ,onoff enabled)
    (progn ,@body)
    (prog2 ; return value is that of BODY
    (progn
    (funcall ',(if onoff 'ad-enable-advice 'ad-disable-advice) ,func ,class ,name)
    (ad-activate ,func))
    (progn ,@body)
    (progn
    (funcall ',(if (not onoff) 'ad-enable-advice 'ad-disable-advice) ,func ,class ,name)
    (ad-activate ,func)))))))

    264 = :

    defsubst ありなら
    onoff その他を引数にとって enable と disable と activate までやってくれる toggle みたいなの書いちゃえば
    progn 減ってすごく見やすくなりそうだな

    266 = :

    アドバイスが欲しいってか?

    267 = :

    emacs と vim の advent calendar 見比べてると
    (少なくともあそこら辺界隈での) emacs の息切れ感が伝わってきて切なくなるな

    268 = :

    もう成熟してるからあとは腐るだけ

    269 = :

    化石化してるから腐らないんじゃない

    270 = :

    Mac book 使ってカフェで JavaScript 書いてる層には確実に受け悪そうだよな Emacs は。

    271 = :

    アイコンの可愛いAquamacsちゃんもおるんやで

    272 = :

    (interactive)と(interactive "p")の違いはどういうものですか?

    274 = :

    emacsってjs2-modeあるしmacとも相性良い気がするんだけど理屈じゃないのかな

    275 = :

    >>272
    "p"だと、コマンドを実行するときに指定した前置引数の値が関数の引数になる。

    276 = :

    >>274
    Web 界隈だと vim 使ってる人がクールってイメージなんじゃないだろうか。
    自分の狭い観測範囲だとそんな感じを受ける。

    278 = :

    >>275
    なるほどそういうことですか
    勉強になりました

    279 = :

    打ち合わせの時、メモを Mac Book + iTerm2 + Emacs(黒地フルスクリーン)
    で書いてたら、隣の女の子にじーーーーっと見られて非常にやりづらかった

    280 = :

    なんでなんだろ
    ・Emacs が珍しかった
    ・黒背景ワロス
    ・イケメンだった
    ・ブサメンすぎた
    ・Mac Book(笑)
    ・別にお前を見ていたわけではない

    281 = :

    ・実はゆたぽんフォントを使っていた

    282 = :

    >>280
    ・実はスパイだった

    284 = :

    ・隣の女の子なんていなかった

    285 = :

    ・女の子じゃなくて髪の長いrmsだった

    286 = :

    >>285
    じわじわくるな。

    287 = :

    Emacs絡みの女子ネタとは珍しいなw

    288 = :

    >>285
    優勝

    289 = :

    Emacs 使ってる女の子とか女子力強すぎんだろ

    290 = :

    なんで女子力って「高い」って言うんだ

    291 = :

    前スレには高2の女の子来てたぞ

    292 = :

    こんだけPCが普及してたら女子小学生Emacs使いがいても驚かない

    293 = :

    どういうルートを辿ったら女子小学生が Emacs にリーチするんだろう
    ぶっちゃけ PC なんかよりスマホで動くかどうかだな

    294 = :

    >>290
    「強い」って表現した時点で、たおやかな女子の魅力が損なわれるだろ?
    その自己矛盾に陥ってしまうことを防ぐのが目的の一つ。
    あと、「力が高い」という、ユルいけど嫌味にならない程度の
    頭の悪さを匂わすフレーズを敢えて使うことで、
    さらに女子としての魅力を演出している。

    それはさておき、emacs 使ってたらとりあえずモテるよね。

    295 = :

    別のスレで女子中学生のpython使いを見た。

    296 = :

    >>290
    能力が高いって言うだろ
    つうかそれ位すぐ分かれよ

    297 = :

    戦闘力も「強い」より「高い」な気がするな

    298 = :

    腕力が高い

    299 = :

    そんなことよりお前ら最近 elisp かいてんの?

    300 = :

    毎日書いてはいるけど十数行で簡潔するような小物ばっかり


    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / emacs一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

    類似してるかもしれないスレッド


    トップメニューへ / →のくす牧場書庫について