2013-06-04 10 views
5

Próbuję zaimplementować keylogger w Emacs (dla własnych, nie-nikczemnych celów).Emacs keylogger

Wydaje się, że mogę wiarygodnie uchwycić ostatnie polecenie przez real-last-command w pre-command-hook

Tak, mogę zrobić coś takiego:

(setq keylog-list nil) 

(defun my-keylogger-function() 
    (setq keylog-list (cons real-last-command keylog-list))) 

(add-hook 'pre-command-hook 'my-keylogger-function) 

Po kilku poleceń ruchowych, otrzymujemy

keylog-list's value is 
(describe-variable left-char left-char previous-line previous-line left-char eval-last-sexp) 

Jednak jestem zainteresowany przechwytywaniem argumentów do tych poleceń (np. Argumenty do left-char, które będą przez domyślnie będzie to 1, ale może być inne, jeśli używane są argumenty prefiksu.

Czy istnieje sposób dostępu do argumentów? Coś takiego jak real-last-command-arglist?

+4

Nie jesteś zadowolony z 'C-h l'? – tripleee

+0

Niezupełnie, ja też chcę mieć sygnatury czasowe. – Ben

Odpowiedz

3

Dlaczego logujesz się do ostatniego (tj. Poprzedniego) polecenia? Jeśli zamiast tego logujesz się this-command, możesz się zalogować current-prefix-arg, co odpowiada używanemu przedrostkowi.

+0

Tak, to działa. Używałem 'real-last-command', ponieważ to właśnie używa pakiet [keyfreq] (https://github.com/dacap/keyfreq), ale to jest lepsze. Dzięki. – Ben

2

Keylogger jest również wbudowany w emacs: (plik open-dribble).