[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Dynamically constructing advice behaves strangely
From: |
Marcin Borkowski |
Subject: |
Dynamically constructing advice behaves strangely |
Date: |
Sun, 14 Feb 2016 15:59:50 +0100 |
User-agent: |
mu4e 0.9.13; emacs 25.1.50.2 |
Hi list,
I want to be able to construct advice dynamically. Here is a "minimal
example":
--8<---------------cut here---------------start------------->8---
;;; -*- lexical-binding: t; -*-
(defun add-constructed-advice (fun)
"Add a constructed advice to function foo."
(let* ((fun-name (symbol-name fun))
(length-sym
(make-symbol (concat "length-of-" fun-name)))
(piece-of-advice-sym
(make-symbol (concat "advice-for-" fun-name)))
(piece-of-advice (lambda (orig-fun &rest args)
(apply orig-fun args)
(message "This function's name had length %s."
(symbol-value length-sym)))))
(set length-sym (length (symbol-name fun)))
(fset piece-of-advice-sym piece-of-advice)
(advice-add fun :around piece-of-advice-sym)))
(defun foo-fun ()
""
(message "Function foo-fun run."))
(add-constructed-advice 'foo-fun)
--8<---------------cut here---------------end--------------->8---
This works (i.e., M-: foo-fun properly runs the advice), but I expected
the symbol `advice-for-foo-fun' to have this piece of advice in its
function cell - and it does not. Why?
TIA,
--
Marcin Borkowski
http://octd.wmi.amu.edu.pl/en/Marcin_Borkowski
Faculty of Mathematics and Computer Science
Adam Mickiewicz University
- Dynamically constructing advice behaves strangely,
Marcin Borkowski <=