2014-07-16 1 views
1

인수로 전체 명령 히스토리를 표시하는 방법이 있습니까? 명령에 전달 된 인수를 표시하지 않습니다 (C-x C-k RET에 바인딩) 키 바인딩에서 호출되는 명령을 표시하지 않습니다keys와 arguments에 의해 호출 된 명령을 포함한 Emacs 명령 히스토리

<again>, <redo>, C-x M-:, C-x M-ESC 

kmacro-edit-macro :에 바인딩

repeat-complex-command.

동기 부여. 키보드 매크로를 elisp 함수로 변환하는 것이 더 빠릅니다. 지금은 kmacro-edit-macro을 사용하여 사용할 명령 이름을 확인한 다음 명령의 설명서를 하나씩 읽음으로써 전달할 인수를 알아 냈습니다. (워크 플로 예제 : https://stackoverflow.com/a/24784563/1446335)

참고. elisp 함수에서 키 시퀀스를 프로그래밍 방식으로 누를 수는 있지만 그 유용성은 작습니다.

답변

1

예, 원하는 것을 얻으려면 pre-command-hook을 사용하여 주어진 명령을 extended-command-history에 추가하는 함수를 호출하십시오. 예를 들어,이는 Icicles 코드는이 역사 메뉴에서 실행 명령을 추가하는 무엇이다

;; This is done when you turn on Icicle mode. 
(if icicle-menu-items-to-history-flag 
    (add-hook 'pre-command-hook 'icicle-add-menu-item-to-cmd-history) 
    (remove-hook 'pre-command-hook 'icicle-add-menu-item-to-cmd-history)) 

(defun icicle-add-menu-item-to-cmd-history() 
    "Add `this-command' to command history, if it is a menu item. 
Menu items that are not associated with a command symbol are ignored. 
Used on `pre-command-hook'." 
    (condition-case nil     ; Just in case, since this is on `pre-command-hook'. 
     (when (and (> (length (this-command-keys-vector)) 0) 
       (equal '(menu-bar) (elt (this-command-keys-vector) 0)) 
       ;; Exclude uninterned symbols such as `menu-function-356'. 
       (symbolp this-command) (or (< emacs-major-version 21) (intern-soft this-command))) 
     (pushnew (symbol-name this-command) extended-command-history)) 
    (error nil))) 
+0

명령에 전달 된 인수를 추출하는 방법이 있습니까? 아마 좋은 이름이'this-command-args' 일 수있는 함수일까요? –

+1

@ 지앙 유우 나는 그렇게 생각하지 않는다. 그러나 나는 무언가를 잊어 버릴지도 모른다. 내가 틀렸다면 누군가가 나를 교정 할 것이다. 어떤 시점에서 전역 변수'values'를 가지고 놀아 볼 수도 있습니다. 그러나 완전한 명령 (function + 실제 args)에 접근 할 수있는 코드는'callint.c'에서'call-interactiveively'를위한 C 코드이기 때문에 이것이 도움이 될지는 의문입니다. 그러나 물론 실제 arg에 접근하기 위해서는 * 특정 명령을 조언 할 수 있습니다. – Drew

1

Elisp 코드의 덩어리로 키보드 매크로를 설정하는 방법을 가지고 좋은 것입니다,하지만에 대한 이 Elisp 코드의 덩어리가 유용하기 때문에, 다소 관용적이어야하지만, 많은 경우에, 뭔가를하는 관용적 인 Elisp 코드는 키보드 - 매크로 방식과는 상당히 다릅니다 (예를 들어 관용구 코드는 마크와 텍스트를 추출하고 움직이려면 링을 죽이십시오).

그래서 전사가 간단하지 않습니다. 그러한 것을 작성하는 방법은 "작게 시작하여 100 % 신뢰할 수 없다는 사실을 받아들이는 것"이라고 생각합니다.

관련 문제