[net.emacs] Mlisp function gone astray.

boyd@cadovax.UUCP (Boyd Hays) (03/14/85)

Hello,
	I'm trying to tailor Gosling Emacs to my liking and 
    I am having trouble with the following function.  What 
    I've done is created a "command mode" and an "insertion 
    mode".  The problem is that I have the keys bound other 
    than "self-insert" and need to issue extended commands.  
    The function "execute-extended-command" when executed 
    directly is impossible to talk to due to the fact that 
    all of the keys are bound to other functions.  The first 
    command "\ex command" executes properly but the second
    whose intent is to restore my original keymap does not.
    The escape appears to be being eaten and the string
    "xuse-global-map &current-keymap" is being inserted into
    my buffer.  What am I doing wrong?  Your consideration
    is greatly appreciated.


(defun
    (emacs-extended-command
	(progn command
	    (use-global-map "default-global-keymap")
	    (setq command (get-tty-command ": "))
	    (push-back-string "use-global-map &current-keymap")
	    (push-back-string "\ex")
	    (push-back-string command)
	    (push-back-string "\ex")
	)
    )
)

-- 
Boyd Hays	
213/323-8170 x.2058
cadovax!boyd

conor@Glacier.ARPA (03/17/85)

a copy. 

Maybe someone else has already done this? 

-Conor Rafferty 	conor@su-glacier.ARPA
			conor@su-sierra.ARPA (more reliable)
			...!decwrl!glacier!conor

gallaher@topaz.ARPA (Mike Gallaher) (03/19/85)

The problem is that the strings that are being pushed back need a
terminator, just as when you are really typing them in.  The
string that Emacs sees in the example given is
	\ex<command>\exuse-global-map &current-keymap

The second \e is taken to be the terminator for the command,
and the rest is just seen as text to be inserted.
The corrected code fragment is

	    (push-back-string "use-global-map &current-keymap\e")
	    (push-back-string "\e\ex")
	    (push-back-string command)
	    (push-back-string "\ex")

You can also do fun things like this by using the fact that keymaps
can be executed as if they were functions -- after all, a keymap is
considered a macro; that's why keymaps appear in the list generated
by ESC-x?   Anything that can be bound to a key can be executed.

Mike Gallaher