2011-03-24 2 views
2

emacs에서 나의 전형적인 SQL 모드는 다음과 같습니다.Emacs : 모든 sql-mode 버퍼를 방문하여 적절한 sql 버퍼를 설정하는 방법

a. foo.sql 파일을 열고 편집을 시작하십시오.

b. sql-send-region에 대한 키 바인딩을 사용하여 실행할지 결정하십시오.

c. 적절한 사용자 정의 (db-connect) 함수를 실행하여 적절한 db에 연결하고 * SQL * 버퍼를 만듭니다.

그러나 foo.sql은 환경을 새로 고치고 이와 같은 버퍼가 있음을 감지하기 위해 버퍼에서 "mx sql-mode"를 수행하지 않으면 * SQL * 버퍼의 존재에 대해 알지 못합니다 포인트. 내 사용자 지정 db 연결 함수에 sql-mode를 사용하여 모든 버퍼를 방문하고 sql-buffer 변수를 업데이트하는 코드를 포함하고 싶습니다. 여러 스택 오버플로 멤버가 이전에 이와 비슷한 작업을 수행 했음에 틀림 없습니다. 난 당신이 인수와 같은 'SQL 모드를 전달할 수 있습니다

(defun buffer-mode (buffer-or-name) 
    (with-current-buffer buffer-or-name major-mode)) 


(defun filter-buffers-by-mode (mode) 
    (delq nil 
     (mapcar 
     (lambda (x) (and (eq (buffer-mode x) mode) x)) 
     (buffer-list)))) 

전공 모드로 버퍼를 필터링 할 수있는이 작은 도우미 함수를 구현했습니다

답변

4

sql.el 파일의 빠른보기에서 sql-set-sqli-buffer-generally 명령이 나왔습니다. 아마도이게 뭔가요?

당신이 이것을 건네 줄 수있는 또 다른 방법은 sql-buffer의 버퍼 - 로컬 변종을 당신의 메이저 - 모드 후크에서 kill-local-variable으로 호출하여 죽이는 것입니다. 그런 식으로 모든 SQL 버퍼가 최신 SQL 버퍼와 통신하게됩니다.

면책 조항 : SQL 또는 SQL 모드에 대해서는 알지 못합니다. 일반적으로 이맥스 만 알면됩니다.

2

감사합니다,

setjmp는 열려있는 모든 sql 버퍼 목록을 얻습니다.

+0

이 코드는 Emacs의 일부 이전 버전 용입니까? Emacs 23.3.1 (OS X)에서 (void-function buffer-mode) 실패합니다. 나는 버퍼의 주요 모드를 추출한다는 것을 추측하고있다. 버퍼 로컬 인'major-mode' 변수에서 사용할 수 있습니다. – vpit3833

+0

아니요, 오래되었습니다. 그저 쓴 것인데 완전히 잊어 버렸습니다. (버퍼 모드 (버퍼 또는 이름 제외) (현재 버퍼 버퍼 또는 이름 메이저 모드 사용)) –

관련 문제