[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: patch: {append,prepend}-to-register on empty register
From: |
Thien-Thi Nguyen |
Subject: |
Re: patch: {append,prepend}-to-register on empty register |
Date: |
Mon, 05 Nov 2007 09:30:29 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/23.0.50 (gnu/linux) |
() Miles Bader <address@hidden>
() Mon, 05 Nov 2007 15:54:52 +0900
Thien-Thi Nguyen <address@hidden> writes:
> i would prefer `(set-register register (cond ...))'.
> likewise for other hunk.
(let ((reg (get-register register))
(text (filter-buffer-substring start end)))
(cond ((stringp reg)
(setq text (concat reg text)))
(reg
(error "Register does not contain text")))
(set-register register text))
i like this better than the original, but not as
much as the (more) functional, approach, due to setq.
fwiw, following is a *scratch* snapshot. i read it as
"you win some, you lose some, ..." :-/
thi
______________________________________________________________
(defun ttn-a (register start end)
(let ((reg (get-register register))
(text (filter-buffer-substring start end)))
(cond ((stringp reg)
(setq text (concat reg text)))
(reg
(error "Register does not contain text")))
(set-register register text)))
(defun ttn-b (register start end)
(let ((reg (get-register register))
(text (filter-buffer-substring start end)))
(set-register
register (cond ((not reg) text)
((stringp reg) (concat reg text))
(t (error "Register does not contain text"))))))
(byte-compile 'ttn-a)
(byte-compile 'ttn-b)
(disassemble 'ttn-a) ; write output to file A
(disassemble 'ttn-b) ; write output to file B
(shell-command "echo ; diff -y A B -W 78" t)
783
byte code for ttn-a: | byte code for ttn-b:
args: (register start end) args: (register start end)
0 constant get-register 0 constant get-register
1 varref register 1 varref register
2 call 1 2 call 1
3 constant filter-buffer-subst 3 constant filter-buffer-subst
4 varref start 4 varref start
5 varref end 5 varref end
6 call 2 6 call 2
7 varbind text 7 varbind text
8 dup | 8 varbind reg
9 varbind reg | 9 constant set-register
10 stringp | 10 varref register
11 goto-if-nil 1 | 11 varref reg
14 varref reg | 12 goto-if-not-nil 1
15 varref text 15 varref text
16 concat2 | 16 goto 3
17 varset text | 19:1 varref reg
18 goto 2 | 20 stringp
21:1 varref reg | 21 goto-if-nil 2
22 goto-if-nil 2 | 24 varref reg
25 constant error | 25 varref text
26 constant "Register does..." | 26 concat2
27 call 1 | 27 goto 3
28 discard | 30:2 constant error
29:2 constant set-register | 31 constant "Register does..."
30 varref register | 32 call 1
31 varref text | 33:3 call 2
32 call 2 | 34 unbind 2
33 unbind 2 | 35 return
34 return <