애플리케이션 사이의 정보 교환 범용 수단으로, Copy & Paste 가 있습니다. Tk 에는 Copy & Paste를 처리하기 위한 커맨드로, selection과 clipboard 가 준비되어 있습니다.
selection
selection 커맨드는, 윈도우의 선택 범위에 관한 조작을 기능케 합니다. 옵션은 전부 생략 가능하며, -displayof는 윈도우의 패스를 지정합니다. -selection은 PRIMARY, CLIPBOARD 중에 지정하며, 기본값은 PRIMARY입니다. -type은, STRING, ATOM, INTEGER 중에 지정하며, 기본값은 STRING입니다.
# 선택 범위 해제
selection clear -displayof window -selection selection
# 선택 범위의 문자열 얻기
selection get -selection selection -type type
# 선택 범위가 있는 윈도우의 패스 얻기
selection own -displayof window -selection selection
clipboard
clipboard 커맨드는, 클립 보드에 관한 조작을 가능케 합니다. 옵션은 전부 생략 가능하며, -displayof는 윈도우의 패스를 지정합니다. -type은 STRING, ATOM, INTEGER 중에 지정하며, 기본값은 STRING입니다.
# 클립 보드 삭제
clipboard clear -displayof window
# 클립 보드에 문자열 추가
clipboard append -displayof window -type type string
가상 이벤트
텍스트 위젯과 엔트리 위젯은, 표준으로 Copy & Paste 를 위한 가상 이벤트를 갖고 있습니다. 보통, Copy는 Ctrl+C, Cut은 Ctrl+X, Paste는 Ctrl+V 에 바인드 되어 있습니다. 텍스트 위젯의 Copy & Paste의 가상 이벤트 정의는 아래와 같이 되어 있습니다.
bind Text <<Copy>> {
tk_textCopy %W
}
bind Text <<Cut>> {
tk_textCut %W
}
bind Text <<Paste>> {
tk_textPaste %W
}
# Copy
proc tk_textCopy w {
if {![catch {set data [$w get sel.first sel.last]}]} {
clipboard clear -displayof $w
clipboard append -displayof $w $data
}
}
# Cut
proc tk_textCut w {
if {![catch {set data [$w get sel.first sel.last]}]} {
clipboard clear -displayof $w
clipboard append -displayof $w $data
$w delete sel.first sel.last
}
}
# Paste
proc tk_textPaste w {
global tcl_platform
catch {
if {[string compare $tcl_platform(platform) "unix"]} {
catch {
$w delete sel.first sel.last
}
}
$w insert insert [selection get -displayof $w -selection CLIPBOARD]
}
}
위의 예 에서는, Copy와 Cut으로 선택된 문자열을 얻어내는데, 텍스트 위젯의 get 커맨드를 사용하고 있습니다. 아래와 같이 selection 커맨드를 사용하여 동일한 처리를 할 수 있습니다.
# Copy
proc tk_textCopy w {
if {![catch {set data [selection get -displayof $w]}]} {
clipboard clear -displayof $w
clipboard append -displayof $w $data
}
}