나는 *terminal<1>*
, *terminal<2>*
, *terminal<3>*
등의 버퍼를 가지고있다. 숫자에 대한 인수를 취할 키 조합을 바인드하는 방법이 있습니까? 즉, C-c 1
을 *terminal<1>*
및 C-c 2
으로 전환하여 *terminal<2>*
으로 전환하는 등의 작업을 수행합니다. 이 작업을 직접 수행 할 수 없다면 Elisp에서 모든 기능을 정의하는 메타 프로그래밍을 수행 할 수 있습니까?Emacs에서 키와 변수를 바인딩 할 수 있습니까?
답변
당신은 평소와 같이 키를 바인딩 할 수 있습니다 :
(global-set-key (kbd "C-c 1") (lambda()
(interactive)
(switch-to-buffer "*terminal<1>*")))
우리가 macros를 사용하는 것이 1에서 9까지의 모든 바로 가기를 만들 수 있습니다.
편집 :이 버그가 많은 버전은 나를 트랙에 넣을 수 있습니다. 내가 :(
(defmacro gototerminal (count)
`(global-set-key (kbd ,(concat "C-c " (number-to-string count)))
;; with the comma I want to evaluate what is inside concat
(lambda() (interactive)
(switch-to-buffer (concat "*terminal<" ,count ">*"))))
)
(progn (setq count 1)
(while (< count 10)
(gototerminal count)
(setq count (1+ count))
))
PS를 포기 :. elisp 디버거가 edebug입니다 구리 CMX이 제안에
게시하기 전에 귀하의 버전과 비슷한 것을 보았습니다. 계속 조정하고 결과를 게시 할 것입니다. –
나는 기능은 미니 버퍼의 숫자 읽는 것을 나타냅니다 n
인수 interactive
를 호출하는 함수를 작성합니다 : 당신이 미니에 숫자를 입력하게됩니다
(defun test (x)
(interactive "nNumber of buffer to visit: ")
(message (concat "received number: " (number-to-string x))))
핵심이 바인딩을 완충기.
또 다른 방법은 숫자 인수를 사용하는 것입니다
(defun test (x)
(interactive "P")
(message (concat "received number: " (number-to-string x))))
당신이
C-c c
이 기능을 결합 말을, 당신은 다음
C-u 2 C-c c
를 눌러 인수로 그것을 숫자 2를 전달할 수 있습니다.
고려해 볼 수있는 두 가지 접근 방식을 가지고있어 주셔서 감사하지만, 둘 다 내가 원하는 것보다 더 많은 키 스트로크가 필요합니다. 대화 형 기능은 숫자 뒤에 Enter 키를 눌러야합니다. 'C-u 2 C-c c'는 더 길다. 나는 수동으로 여분의 키 스트로크를 끊임없이 만들어야하는 9 가지 기능을 수동으로 정의하고자한다. –
FWIW,'(interactive "NTerminal number :")'("n"대신에 "N")을 사용하면 숫자 접두사 arg가 있으면 프롬프트를 우회하여 두 접근법을 결합합니다. 또한 'M-2 C-c c'는 타이핑하기가 조금 더 빠릅니다. – phils
로 설정, 대화 형 switch-to-terminal
예를 들어 접두사 인수 C-u 2
중 하나를 수행하거나 사용자에게 메시지를 표시합니다 .
매크로는 다음 좀 더 쉽게 키 바인딩을 설정합니다.
마지막으로 내가*terminal<1>*
012로 전환
C-c 4
에
C-c 1
바인딩.
(defun switch-to-terminal (buf-num)
(interactive "NNumber of buffer to visist: ")
(let* ((buf-name (format "*terminal<%d>*" buf-num))
(buf (get-buffer buf-name)))
(unless buf
(error "No buffer %s" buf-name))
(switch-to-buffer buf)))
(defmacro bind-switch-to-terminal (num)
`(global-set-key
,(kbd (format "C-c %d" num))
(lambda()
(interactive)
(switch-to-terminal ,num))))
(bind-switch-to-terminal 1)
(bind-switch-to-terminal 2)
(bind-switch-to-terminal 3)
(bind-switch-to-terminal 4)
이러한 변화는 동일한 switch-to-terminal
함수를 사용하지만 기능 bind-switch-to-terminal
대체한다. lexical-let*
은 클로저를 생성하여 고유 한 터미널 스위칭 기능을 만들 수 있도록하기 위해 dotimes
루프는 C-c 1
을 C-c 9
으로 바인드합니다.
(defun bind-switch-to-terminal (num)
(lexical-let* ((buf-num num)
(switch-func
(lambda()
(interactive)
(switch-to-terminal buf-num))))
(global-set-key
(kbd (format "C-c %d" buf-num))
switch-func)))
(dotimes (num 9)
(bind-switch-to-terminal (1+ num)))
Andrew, 당신의 대답은 좀 더 완벽한 답변이지만, Ehvince는 올바른 방향으로 이끌어 준 부분적인 대답으로 당신을 이길 수있었습니다. –
당신은 예를 들어, 하나의 키 누르기와 명령을 실행할 수 C-C 같은 기존의 접두사 키의 사용을 피할 경우 F9. 이 명령은 단일 키를 입력으로 가질 수 있습니다.
예 : http://ergoemacs.org/emacs/elisp_basics :
(defun test (k)
(interactive "K")
(message "Pressed key: %d" (- (aref k 0) ?0)))
(local-set-key [f9] 'test)
- 1. C-를 어떻게 바인딩 할 수 있습니까? -nw로 시작한 Emacs에서?
- 2. 변수를 사용하여 뷰를 바인딩 할 수 있습니까?
- 3. emacs에서 함수를 축소 할 수 있습니까?
- 4. Emacs에서 CTRL로 기능 키 바인딩
- 5. Emacs에서 C-RET에 명령을 바인딩
- 6. deviceready에서 팩토리 바인딩 된 변수를 호출 할 수 있습니까?
- 7. 템플릿 바인딩에 선택적 바인딩 매개 변수를 추가 할 수 있습니까?
- 8. ListView에서 바인딩 문자열 안에 변수를 포함 할 수 있습니까?
- 9. Silverlight에서 매개 변수를 포함하는 속성에 데이터를 바인딩 할 수 있습니까?
- 10. 개체의 멤버 변수에 PDO 매개 변수를 바인딩 할 수 있습니까?
- 11. groovlet에 내 클로저와 변수를 바인딩 할 수 있습니까?
- 12. Canvas.Children에 바인딩 할 수 있습니까?
- 13. 인덱서에 바인딩 할 수 있습니까?
- 14. Grid.RowProperty를 바인딩 할 수 있습니까?
- 15. emacs에서 최상위 전역 변수를 나열하십시오.
- 16. emacs에서 어떻게 여러 줄에 같은 텍스트를 추가 할 수 있습니까?
- 17. emacs에서 터미널 모드로 작동하지 않는 블록 바인딩?
- 18. emacs에서 split-window-below를 실행 취소 할 수 있습니까?
- 19. Emacs에서 C++/Java의 폴드는 어떻게 할 수 있습니까?
- 20. 어떻게 Emacs에서 Clojure를 지능적으로 들여 쓰기 할 수 있습니까?
- 21. Emacs에서 미리 준비된 find-grep을 스크립트 할 수 있습니까?
- 22. Emacs에서 line-sparator를 어떻게 입력 할 수 있습니까?
- 23. Emacs에서 변경된 행을 어떻게 표시 할 수 있습니까?
- 24. Emacs에서 헤더 파일을 자동으로 따라갈 수 있습니까?
- 25. Emacs에서 메뉴 항목을 선택적으로 숨길 수 있습니까?
- 26. Emacs에서 전체 버퍼를 평가할 수 있습니까?
- 27. emacs에서 * Messages * 버퍼가 꼬리가되도록 설정할 수 있습니까?
- 28. jQuery는 키와 값으로 변수를 전송합니다.
- 29. emacs에서 버퍼 로컬 변수를 설정하는 방법
- 30. Emacs에서 TRAMP와 함께 Ropemacs를 사용할 수 있습니까?
여기에 명령 인수에 좋은 튜토리얼입니다.htaccess Admin Home English Language Content – Ehvince