unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
From: Greg Novak <novak@ucolick.org>
Subject: Re: Is Emacs becoming Word?
Date: Thu, 31 Mar 2005 12:52:08 -0800	[thread overview]
Message-ID: <20050331205208.GA9378@dionysus.ucolick.org> (raw)
In-Reply-To: <ubr941psi.fsf@att.net>

* Thomas A. Horsley <tom.horsley@att.net> wrote:
>>I think it probably wouldn't be too ungodly hard to write a
>>`what-just-happened' function (but I'm not sure).  
> I don't know about that. Certainly the lisp interpreter should know
> what function slots it has been executing through. Seems like it would
> be primarily a job of adding a gazillion entry "recently called functions"
> array together with some AI for filtering which functions in the
> array are important to describe "what just happened" 
> ...

Hmm.  I was thinking of something considerably simpler.  It would be
incumbent upon the programmer to identify things that the user might
find confusing.  At the end of this mail I've included very simple
code that defines a new major mode to do what I was imagining. 

I'm relatively new to elisp, so don't laugh too hard.  I'd appreciate
comments on the code if anyone has them to offer, but it'd probably be
best to send them directly to me rather than to the whole list.

I also took a shot at implementing the "last-function" command by
advising eval, apply, and/or funcall.  Advising funcall didn't seem to
do much that was interesting.  Advising eval worked, but I only got
the top level form.  Ie, giving eval before-advice to print its
arguments to a buffer before evaluating them, then evaluating 
(+ (* 1 2) (* 3 4))
Results in the buffer containing this:
 (+ (* 1 2) (* 3 4))
not this (as I might have hoped):
 (+ (* 1 2) (* 3 4))
 (* 1 2)
 (* 3 4)

Looking through the code for eval, it looks like it calls eval
recursively on each argument, so I'd expect the latter behavior. 
However, it doesn't seem to be getting the advice on the subsequent
calls.

Finally, it seems that ad-activate calls apply, so trying to advise
apply doesn't work so well... the max recursion depth is exceeded, in
spite of fiddling with flags to try to get it to stop the recursion.

Also, should this discussion be moved to emacs-devel at this point?
I've left it here to preserve continuity in the mailing list archive.

Greg

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; The "what just happened" stuff:
(defvar just-happened nil) ; list of recent interesting functions

(defun docstring (f)
  "Return the docstring of a function"
  (caddr (symbol-function f)))

(defun this-just-happened (f)
  "Record an interesting event by consing the function's docstring
  into just-happened"
  (setq just-happened (cons (docstring f) just-happened)))

(defun what-just-happened ()
  "Pop a buffer with a list of recent intersting events along with 
   information about how to turn the features off, etc.  The list is
   ordered so that the most recent event is last."
  (interactive)
  (pop-to-buffer "*What Just Happened*")
  (erase-buffer)
  (mapc (lambda (x) (insert (concat "*** " x "\n"))) 
        (reverse just-happened)))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; An odd editing mode that substitutes "star" for "*" and 
; "dollar" for "$".

; if non-nil, substitute "star" for "*"
(defvar write-out-mode-star-substitution t)
; if non-nil, substitute "dollar" for "$"
(defvar write-out-mode-dollar-substitution t)

(define-derived-mode odd-mode
  text-mode "odd"
  "Major mode for odd editing.
          \\{odd-mode-map}"
  (setq case-fold-search nil))

(defun write-out-star ()
  "Substitute \"star\" for \"*\".  To turn this behavior off, put 
  (setq write-out-mode-star-substitution nil) in your .emacs file"
  (interactive)
  (if (not write-out-mode-star-substitution)
      (insert "*")
    (this-just-happened 'write-out-star)
    (insert "star")))

(defun write-out-dollar ()
  "Substitute \"dollar\" for \"$\".  To turn this behavior off, put 
  (setq write-out-mode-dollar-substitution nil) in your .emacs file"
  (interactive)
  (if (not write-out-mode-dollar-substitution)
      (insert "*")
    (this-just-happened 'write-out-dollar)
    (insert "dollar")))

(define-key odd-mode-map "*" 'write-out-star)
(define-key odd-mode-map "$" 'write-out-dollar)

  parent reply	other threads:[~2005-03-31 20:52 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-03-25 18:05 Is Emacs becoming Word? Greg Novak
2005-03-25 18:21 ` Joe Corneli
2005-03-25 18:35 ` nfreimann
     [not found] ` <mailman.224.1111776025.28103.help-gnu-emacs@gnu.org>
2005-03-25 21:20   ` David Kastrup
2005-03-25 21:30     ` Joe Corneli
2005-03-26 12:44       ` Eli Zaretskii
     [not found]     ` <mailman.238.1111787876.28103.help-gnu-emacs@gnu.org>
2005-03-25 22:29       ` David Kastrup
2005-03-25 22:58         ` Joe Corneli
2005-03-26  9:55           ` Gian Uberto Lauri
2005-03-26 11:24             ` Joe Corneli
     [not found]           ` <mailman.260.1111832868.28103.help-gnu-emacs@gnu.org>
2005-03-26 11:24             ` David Kastrup
2005-03-26 17:42             ` Bad iso-2022-jp encoding (was: Is Emacs becoming Word?) Reiner Steib
     [not found]         ` <mailman.245.1111792713.28103.help-gnu-emacs@gnu.org>
2005-03-25 23:37           ` Is Emacs becoming Word? David Kastrup
2005-03-26  1:30       ` Henrik Enberg
2005-03-26  2:06         ` Joe Corneli
2005-03-26 12:37         ` Eli Zaretskii
2005-03-26 12:53 ` Eli Zaretskii
2005-03-26 17:11   ` Joe Corneli
2005-03-26 17:32     ` Eli Zaretskii
2005-03-27  1:08   ` Greg Novak
2005-03-27  4:35     ` Eli Zaretskii
     [not found]   ` <mailman.300.1111886723.28103.help-gnu-emacs@gnu.org>
2005-03-27  2:02     ` David Kastrup
2005-03-27 10:05     ` Steinar Børmer
2005-03-27 17:08       ` Joe Corneli
2005-03-28  0:17         ` Greg Novak
2005-03-28  0:54           ` Joe Corneli
     [not found]           ` <mailman.370.1111972552.28103.help-gnu-emacs@gnu.org>
2005-03-28  2:13             ` Thomas A. Horsley
2005-03-28  3:13               ` Henrik Enberg
2005-03-28  4:39                 ` Joe Corneli
2005-03-31 20:52               ` Greg Novak [this message]
2005-03-31 21:26                 ` Joe Corneli
     [not found]               ` <mailman.808.1112304527.28103.help-gnu-emacs@gnu.org>
2005-04-01  0:35                 ` Thien-Thi Nguyen
     [not found] ` <mailman.272.1111843857.28103.help-gnu-emacs@gnu.org>
2005-03-26 16:45   ` Thomas A. Horsley
     [not found] <mailman.223.1111775070.28103.help-gnu-emacs@gnu.org>
2005-03-25 21:37 ` David Kastrup
2005-03-25 23:30   ` Jochen Küpper
2005-03-26  7:15   ` Greg Novak
2005-03-26 11:43     ` Eli Zaretskii
2005-03-26 12:04     ` Peter Dyballa
     [not found]   ` <mailman.257.1111822540.28103.help-gnu-emacs@gnu.org>
2005-03-26 11:08     ` Chong Yidong
2005-03-26 11:14     ` David Kastrup
2005-03-28 10:50 ` Olive
2005-03-28 21:04   ` Miles Bader
2005-03-28 22:52   ` David Kastrup

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20050331205208.GA9378@dionysus.ucolick.org \
    --to=novak@ucolick.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).