X 창 선택
X Window selection선택, 절단 버퍼 및 드래그 앤 드롭은 사용자가 한 창에서 다른 창으로 데이터를 전송할 수 있도록 하기 위해 X 윈도우 시스템에서 사용되는 메커니즘이다.선택과 절단 버퍼는 일반적으로 사용자가 텍스트나 기타 데이터를 창의 텍스트나 다른 데이터로 선택하고 붙여넣을 때 사용된다.드래그 앤 드롭은 사용자가 창에서 어떤 것을 선택한 다음 선택 항목을 클릭하고 다른 창으로 끌 때 사용된다.
두 개의 창은 서로 다른 두 개의 애플리케이션에 의해 처리될 수 있기 때문에, 이러한 메커니즘은 데이터를 교환하기 위해 동일한 X 서버에 연결된 두 개의 다른 클라이언트를 필요로 한다.X 윈도 시스템 코어 프로토콜은 선택 교환에 특유한 일부 요청과 이벤트를 포함하지만, 주로 선택 전송에 특유하지 않은 이벤트 전송과 창 속성을 이용하여 전송한다.
다른 유형의 데이터 전송이 가능하다: 보통 텍스트일 수도 있지만 이미지, 숫자, 객체 목록 등이 될 수도 있다.이하에서는 본문의 사례만을 고려한다.
능동 및 수동 선택
선택된 데이터를 취급하는 클라이언트가 다음 사항을 요청하는 클라이언트로의 전송에 적극적으로 참여해야 하는지에 따라 데이터를 전송하는 방법은 능동형과 수동형으로 분류할 수 있다.
- 수동적
- 일부 데이터가 선택되면 이 선택 작업이 완료된 창을 처리하는 클라이언트가 데이터를 다른 곳으로 전송하므로 더 이상 신경쓸 필요가 없다.
- 활동적인
- 고객에게 데이터를 이전하려면 고객이 적극적으로 거래소에 참여하기 위해 선택을 "보유"해야 한다.
선택과 끌어서 놓기는 활성 메커니즘이다. 창에서 일부 텍스트를 선택한 후, 창을 처리하는 클라이언트는 데이터를 요청하는 응용프로그램으로 전송하기 위한 프로토콜을 적극적으로 지원해야 한다.반대로 절단 버퍼는 수동적 메커니즘으로, 일부 텍스트를 선택한 후 절단 버퍼로 전송되어 윈도우를 처리하는 애플리케이션이 종료되고 윈도우가 파괴되더라도 그대로 유지된다.X 클립보드는 선택을 보류하는 클라이언트가 인식하는 수동적 메커니즘이지만xclipboard
후속 데이터 전송을 적극적으로 지원하는 고객
활성 메커니즘의 장점은 전송 전에 데이터를 다른 형식으로 변환할 수 있다는 것이다.특히 데이터를 받는 고객은 선택 데이터를 적절한 형태로 변환해 달라고 요청할 수 있다.발신 고객이 거부하면 수신자는 다른 포맷을 요청할 수 있다.예를 들어 HTML코드를 렌더링하는 텍스트는 텍스트로만 처리할 수 있는 요청자에게 텍스트로 전송할 수 있지만, 요청자가 처리할 수 있는 경우 HTML 코드로도 전송할 수 있다.그러한 형식의 협상은 선택을 보유(그리고 의미론적 부여)하는 클라이언트가 선택을 이전하고, 그것을 요청하는 클라이언트로의 추가 이전에는 관여하지 않는 수동적 메커니즘에 의해 수행될 수 없다.
활성 메커니즘의 또 다른 장점은 큰 데이터 조각이 단일 전송이 아닌 일련의 전송으로 전송될 수 있다는 것이다.수동적 메커니즘은 대신 모든 데이터를 선택 소유자로부터 어딘가로 전송한 다음, 그것을 요청하는 고객에게 다시 전송하도록 요구한다.
수동적 메커니즘의 장점은 데이터를 보유한 클라이언트가 종료된 후에도 전송이 가능하다는 것이다.데이터를 보유한 클라이언트가 전송에 적극적으로 참여해야 하는 활성 메커니즘에서는 이것이 불가능하다.
선택 사항
X Window 시스템은 임의의 수의 선택 항목을 지원하며, 모든 선택 항목은 문자열로 식별된다(더 정확히 말하면,atom
가장 많이 사용되는 선택은PRIMARY
선발의
이전에는 다른 요청도 포함되지만, 다음 요청은 선택 이전에만 한정된다.
- 선택 영역을 소유하는 창을 알려 달라고 요청하다.
- 선택 영역을 소유하는 창 설정 요청
- 선정 전환을 요청하다
선택 영역의 소유자는 일반적으로 선택한 텍스트가 있는 경우 해당 창이 된다.사용자가 창에서 일부 텍스트를 선택할 때, 창을 처리하는 클라이언트는 선택사항의 소유자임을 서버에 알려야 한다.
사용자가 선택 영역을 다른 창에 붙여넣으려고 하면, 해당 창의 핸들러는 다른 클라이언트에서 선택한 텍스트를 가져오기 위한 프로토콜을 시작한다.이 프로토콜은 위의 목록의 두 번째와 세 번째 요청을 포함하며, X 프로토콜에 의해 지정되지 않고 클라이언트간 통신 규약 매뉴얼(ICCCM)에 있는 규약으로 지정된다.
특히 대상 클라이언트는 서버에게 어떤 창이 선택 항목을 소유하는지 질문하는 것으로 시작한다.그런 다음 두 클라이언트는 서버를 통해 선택 항목을 전송한다.이 교환은 윈도우의 속성, 그리고 윈도우에 임의의 데이터 조각을 포함한다.한 번에 모두 전송될 수 있을 정도로 선택 내용이 작은 것으로 간주되는 경우, 수행되는 단계는 다음과 같다.
- 선택 영역의 수신인이 창의 속성을 지정하여 선택 영역을 변환하도록 요청(이 창은 텍스트를 붙여넣어야 하는 창일 수 있음)
- 응답하여 서버는 선택사항의 현재 소유자에게 a를 발송한다.
SelectionRequest
사건; - 소유자는 요청자가 다음을 전송하여 지정한 창의 속성에 선택한 텍스트를 배치한다.
ChangeProperty
; 서버에 요청 - 소유자는 서버에 요청자에게 요청서를 발송한다.
SelectionNotify
선택권이 이전되었음을 통지하다 - 요청자는 이제 하나 이상을 전송하여 창의 속성에서 선택 항목을 읽을 수 있다.
GetProperty
서버에 대한 요청. - 요청자는 재산을 파괴하고, 소유자가 이 사실을 알려달라고 요청하면, 그 소유자는 그 재산을 압류한다.
PropertyNotify
사건
내용이 크면 덩어리로 옮겨야 한다.이 경우, 두 고객 모두 에 관심을 표명한다.PropertyNotify
events: 이렇게 하면 선택 소유자는 선택 항목을 읽은 시기를 알 수 있고 요청자는 해당 자산에 다른 덩어리가 배치된 시기를 알 수 있다.
XFixes 확장을 통해 고객은 선택 변경 사항을 청취할 수 있다.[1]
클립보드
가장 많이 사용되는 선택은PRIMARY
선택 및 사용자가 일부 데이터를 선택할 때 사용된다.그CLIPBOARD
사용자가 일부 데이터를 선택하고 애플리케이션의 "편집" 메뉴에서 "복사본"을 호출하는 등 클립보드에 "복사"를 명시적으로 요청할 때 선택한다."붙여넣기"의 관련 요청은 의 데이터를 생성한다.CLIPBOARD
사용 중인 선택
핵심 프로토콜의 레벨에서,PRIMARY
그리고CLIPBOARD
선택은 다르지 않다.하지만 더xclipboard
고객은 그들이 다르게 행동하도록 만든다.특히 다른 의뢰인이 소유권을 주장할 때CLIPBOARD
선택, 이 프로그램은 그것을 요청하고 창에 표시한다.이 선택에 대한 추가 요청은 다음에서 처리한다.xclipboard
이렇게 하면, 선택 내용의 내용이 복사한 클라이언트에서 살아남는다.
버퍼 절단
절단 버퍼는 데이터를 전송하기 위한 또 다른 메커니즘, 특히 선택된 텍스트.루트 창의 창 속성이며 이름이 지정됨CUT_BUFFER1
, 등. 선택사항과 달리 컷 버퍼는 클라이언트 간의 직접적인 상호작용을 수반하지 않는다.오히려 창에서 텍스트를 선택하면 창 소유자가 이 텍스트를 호출하는 루트 창의 속성에 복사한다.CUT_BUFFER1
사용자가 텍스트를 다른 창에 붙여넣으면 창 소유자는 루트 창의 이 속성을 읽는다.
그xcutsel
프로그램에서는 선택 항목과 잘라낸 버퍼 간에 데이터를 전송하며xcb
프로그램은 절단된 버퍼에 대한 다양한 종류의 접근을 허용한다.
절단 버퍼는 쓸모없는 것으로 간주된다.[2]
XDND
X 창 시스템의 드래그 앤 드롭은 Xdnd 규약에 의해 규제된다.[3]사용자가 선택한 텍스트를 창으로 끌어다 놓고 마우스 버튼을 놓으면 기본 선택과 마찬가지로 데이터 교환이 이루어진다.드래그 앤 드롭은 드래그 앤 드롭 동안에 일어나는 일로 복잡하다.즉, 사용자가 데스크탑이나 창의 다른 부분으로 선택을 끌 때, 사용자는 텍스트가 삭제될 수 있는지 여부를 알 수 있을 것으로 기대한다.특히 표적은 드롭을 받아들일지 여부에 대한 시각적 피드백을 표시해야 하며, 커서는 복사나 이동과 같이 취할 행동을 나타내도록 변경해야 한다.
Xdnd 프로토콜에서 텍스트가 선택되고 드래그가 시작되는 창을 소스라고 하고, 커서가 맴도는 창을 대상이라고 한다.소스와 대상 사이의 통신은 소스가 커서를 "그래브"하기 때문에 소스에 의해 구동된다.그러므로 대상자가 드래그 앤 드롭이 일어나고 있다는 것을 알기 위해서는 소스와 대상 사이의 교환이 필요하다.소스가 커서 모양을 결정하므로, 소스를 업데이트하려면 대상으로부터 응답을 받아야 한다.또한, 표적은 낙하 지점을 표시하기 위해 폭격조명을 그릴 필요가 있을 수 있고 낙하물의 수용은 커서의 정확한 위치에 따라 달라질 수 있으므로, 커서가 움직일 때 반복적으로 이 교환이 이루어져야 한다.실제로 커서가 움직이지 않더라도 커서가 보기 영역의 가장자리 근처에 있을 때 대상을 스크롤할 수 있도록 메시지를 교환해야 한다.그렇지 않으면 사용자는 대상의 눈에 보이는 부분에만 떨어질 수 있다.
프로그램은 이름이 지정된 속성을 생성하여 창이 드롭 대상이 될 수 있음을 명시할 수 있다.XdndAware
프로그램이 지원하는 프로토콜의 가장 높은 버전을 포함하는.이러한 방식으로, 새로운 버전을 지원하는 애플리케이션은 올바르게 상호 운용하기 위해 이전 버전으로 되돌아갈 수 있다.또한 Xdnd에 대한 지원 없이 작성된 모든 애플리케이션은 무시된다.
커서가 대상 창에 들어가면 소스가 의 존재를 확인한다.XdndAware
저 창문에 있는 재산이야이 속성이 존재하면 교환이 시작된다.
- 소스는 이벤트를 전송하여 일부 데이터를 끌면서 커서가 대상에 들어갔음을 대상에게 알린다.
XdndEnter
- 대상은 이 이벤트를 보고 소스와의 추가 상호작용을 통해 어떤 종류의 데이터가 끌리는지 알아낼 수 있다(텍스트, 이미지 등).
커서가 대상 창 안에 있는 동안:
- 출처가 보내다
XdndPosition
대상에게 커서가 현재 있는 위치를 알려주는 이벤트 - 과녁이 대답하다.
XdndStatus
현재 위치에서 데이터를 삭제할 수 있는지 여부를 소스에 알려주는 이벤트 - 출처에서 전갈을 보내다.
XdndLeave
또는XdndDrop
커서가 윈도우를 벗어나거나 버튼이 해제된 경우,
사용자가 삭제하면 대상은 평소와 같이 소스에 선택을 요청한다.선택사항의 전송이 종료되면 대상자는 다음 정보를 전송한다.XdndFinish
전송에 성공했음을 출처에 알리는 이벤트
요약하면, 프로토콜은 소스에 의해 구동되어, 대상에게 커서로 무슨 일이 일어나고 있는지 계속 알려준다.답신에서, 대상은 출처에게 드롭이 받아들여질지 안 될지를 알려준다.또한 사용자가 마우스 버튼을 해제할 때 대상에게 알려야 한다. 이 이벤트는 대상이 주도하는 프로토콜인 선택 요청을 정기적으로 시작하기 때문이다.
위 내용은 드래그 앤 드롭을 위한 Xdnd 규약에 대한 설명이다.모티프, 오프iX, 부적에는 드래그 앤 드롭에 대한 서로 다른 규칙이 사용된다.
XDS
다이렉트 세이브 프로토콜(Direct Save Protocol, X Window Direct Save Protocol의 경우)은 파일을 파일 관리자 창으로 끌어서 저장하는 것을 지원하는 소프트웨어 프로토콜이다.XDS는 XDND 프로토콜 위에 구축된다.[4][5]
프로그램
다음 프로그램은 특별히 데이터 전송 메커니즘에서 작동한다.
- xcutsel은 선택 항목에서 절단 버퍼로 데이터 전송 또는 그 반대로 전송
- xclipboard, glipper(Gnome), parcellite(LXDE), klipper(KDE)는 클립보드 관리자(wmcliphist)일 수도 있다.
- xcb는 절단 버퍼의 내용을 표시하며 사용자가 이를 조작할 수 있도록 허용한다.
- xselection, xclip, xsel 및 xcopy는 X 선택으로 데이터를 복사하는 명령줄 프로그램이다.xcopy에는 X 선택 문제를 디버깅하는 데 도움이 되는 상세 옵션이 있다.파셀라이트는 또한 명령줄에서 특정 X 선택 항목을 읽고 쓸 수 있는 기능을 가지고 있다.
- 시너지(synergy)는 여러 운영 체제를 실행하는 여러 컴퓨터에서 클립보드를 공유할 수 있는 교차 플랫폼 툴이다.
- Xfce4-clipman-plugin은 "Xfce4 패널용 클립보드 히스토리 플러그인"이며 클립보드 관리자
- xtranslate 다국어 사전에서 Xselection에서 단어 검색
- Autocutsel 동기화 절단 버퍼 및 선택 버퍼
참고 항목
참조
- ^ "c - X11 Wait for and Get Clipboard Text". Stack Overflow. Retrieved 2021-07-27.
- ^ 자윈스키, J. W. (2002)X 선택, 절단 버퍼, 킬 링.http://www.jwz.org/doc/x-cut-and-paste.html에서 2010년 7월 13일 검색
- ^ X Window 시스템용 드래그 앤 드롭 프로토콜(http://johnlindal.wix.com/xdnd
- ^ Lindal, John. "Saving Files Via Drag-and-Drop: The Direct Save Protocol for the X Window System". Archived from the original on 5 March 2016.
- ^ "Saving Files Via Drag-and-Drop: The Direct Save Protocol for the X Window System". freedesktop.org. Archived from the original on 22 March 2015.