2013-08-13 2 views
0

클립 보드에 무엇인가가 입력되면 함수를 실행하고 싶습니다 (예 : strg + c).tcl/tk 클립 보드 관찰

TCL/TK에서 클립 보드를 관찰하여 무언가가 켜지면 알림을 처리 할 수 ​​있습니다 (이벤트 기반).

나는 약간의 조사를했고, 명령은 after이 아니었다.

proc observeClipboard {} { 

     set lClipboardContent [clipboard get] 
     # do something with clipboard content 
     after 1000 observeClipboard 
} 

예상대로 작동하지 않으며 이벤트 구동 (더 매끄러운) 솔루션이 아닙니다.

답변

2

가장 간단한 방법은 항상 클립 보드 선택 항목을 소유하는 것입니다.
여기에는 몇 가지 단점이 있습니다. 클립 보드에 책임이 있으며 일부 클립 보드 내용이 손실 될 수 있습니다. 따라서 이것은 방탄이 아닙니다. 호출 될 때 readclip

proc readclip {} { 
    after 50 { 
     puts [set cnt [clipboard get]] 
     clipboard clear 
     clipboard append $cnt 
     selection own -command readclip -selection CLIPBOARD . 
     selection handle . [list string range $cnt] 
    } 
} 
selection own -command readclip -selection CLIPBOARD . 

, 새로운 응용 프로그램은 클립 보드를 통해 소유권을 요청했지만 아직 소유권이없는, 그래서 우리는 등이 그것을 얻을 수 있도록하는 비트 설정 모든

을 기다립니다

두 개 이상의 응용 프로그램에서이 작업을 수행하는 경우 두 응용 프로그램 모두 클립 보드의 소유권에 "싸움"한다는 점에 유의하십시오. 이는 잘못된 것입니다.

+0

AFAIK, X Server, 1 응용 프로그램은 클립 보드 선택을 유지합니다. 선택 영역을 검색하면이 응용 프로그램에 데이터를 요청합니다. 원하는 시점에서 데이터가 변경 될 수 있으므로 선택 소유자가 변경되지 않은 경우에도 클립 보드의 "내용"이 변경 될 수 있습니다. –

+1

여러 형식으로 클립 보드를 검색하는 작업은 많이 있지만 가능하지는 않습니다. 선별 및 클립 보드 관리는 적절한 이유로 ICCCM의 자체 섹션이며, 모든 응용 프로그램이 모든 상황에서 올바른 작업을 수행하는 것은 아닙니다. (나는 Tk가 가끔 잘못 이해한다고 확신하지만, 지난 몇 년 동안 남은 문제들을 쫓아 갈 시간이 없었습니다.) –

+0

고마워요. 나는 내가 원하는대로 지금 그것을 얻었다. – JustCoding