2009-04-15 13 views
14

Quando si utilizza insert-kbd-macro di salvare una macro di tastiera di nome ottengo codice Lisp "illeggibile" comeEmacs: ottenere leggibili keyboard-macro

(fset 'ppsql 
    (lambda (&optional arg) "Keyboard macro." (interactive "p") (kmacro-exec-ring-item (quote ([134217788 134217765 44 return 44 17 10 return 33 134217765 102 102 backspace 114 111 109 return 17 10 102 111 109 backspace backspace 114 111 return 33] 0 "%d")) arg))) 

avrei preferito qualcosa di simile a quanto segue:

(fset 'move-line-down 
     [?\C-a ?\C-k delete down ?\C-y return up]) 

IIRC Ho utilizzato lo stesso metodo per registrare, denominare e inserire entrambi i tasti della tastiera: F3, F4, name-last-kbd-macro.

È possibile ottenere la prima macro in un formato leggibile?

risposta

13

La funzionalità macro della tastiera in Emacs è composta da due modalità: macros e kmacros. Il primo restituisce la macro in un modo che ti piace, la forma simbolo, quest'ultima fornisce la forma lambda. In questo modo, se si chiama name-last-kbd-macro si ottiene un modulo simbolo, se si chiama kmacro-name-last-macro, si ottiene un modulo lambda.

-3

Non ho mai visto il primo modulo. La seconda forma è ciò a cui sono abituato. Hai provato a ri-registrare la prima macro per vedere cosa succede se sei sicuro di registrare, quindi nominare, quindi inserire?

L'altra cosa da provare è "C-X (", che richiama kmacro-start-macro e "C-X)" kmacro-end-macro, piuttosto che F3/F4, che stanno facendo qualcosa di estraneo riguardo il mantenimento di un contatore. Forse il comando macro della tastiera più semplice funzionerà in modo più diretto.

1

Grazie per quello!

Così il denominazione della macro determina il formato in cui si inserisce ?

Ho condotto altri esperimenti e ho notato che M-x insert-kbd-macro RET RET mi avrebbe dato il "simbolo".

Considerando che M-x insert-kbd-macro RET pp2sql RET fornisce il "modulo labmda" (dopo aver assegnato un nome con name-last-kbd-macro).

Ora mi rendo conto che ho utilizzato tutto il modo name-last-kbd-macro nei miei precedenti esperimenti ...?

+2

Quando si controlla la definizione della funzione di kmacro-name-last-macro' ('Ch f kmacro-name-last-macro'), si vedrà nell'ultima riga che chiama' kmacro-lambda-form' sulla macro - ecco perché ottieni la forma lambda. (la prossima volta è meglio modificare la domanda, quindi pubblicare una nuova risposta). –