@@ -104,17 +104,17 @@ it is interested in.
104104
105105Requesting data is done by sending an escape code of the form::
106106
107- OSC _dnd_code ; t=r ; MIME type ST
107+ OSC _dnd_code ; t=r:r=request_id ; MIME type ST
108108
109109This will request data for the specified MIME type. The terminal must respond
110110with a series of escape codes of the form::
111111
112- OSC _dnd_code ; t=r ; base64 encoded data ST
112+ OSC _dnd_code ; t=r:r=request_id ; base64 encoded data ST
113113
114114End of data is indicated by an empty payload. If some error occurs while
115115getting the data, the terminal must send an escape code of the form::
116116
117- OSC _dnd_code ; t=R ; POSIX error name ST
117+ OSC _dnd_code ; t=R:r=request_id ; POSIX error name ST
118118
119119Here POSIX error name is a POSIX symbolic error name such as ``ENOENT `` or
120120``EIO `` or the value ``EUNKNOWN `` for an unknown error. Note that if a client
@@ -138,37 +138,41 @@ clients can first request the :rfc:`text/uri-list <2483>` MIME
138138type to get a list of dropped URIs. For every URI in the list, they can
139139send the terminal emulator a data request of the form::
140140
141- OSC _dnd_code ; t=s ; text/uri-list:idx ST
141+ OSC _dnd_code ; t=s:r=request_id ; text/uri-list:idx ST
142142
143143Here ``idx `` is the zero based index into the array of MIME types in
144144the ``text/uri-list `` entry. The terminal will then read the file and
145145transmit the data as for a normal MIME data request.
146146
147- Terminals must reply with ``t=R ; ENOENT `` if the index is out of bounds.
147+ Terminals must reply with ``t=R:r=request_id ; ENOENT `` if the index is out of bounds.
148148If the client does not first request the ``text/uri-list `` MIME type or that
149149MIME type is not present in the drop, the terminal must reply with
150- ``t=R ; EINVAL ``. Terminals must support at least ``file:// `` URIs.
150+ ``t=R:r=request_id ; EINVAL ``. Terminals must support at least ``file:// `` URIs.
151151If the client requests an entry that is not a supported URI type the
152- terminal must reply with ``t=R ; EUNKNOWN ``.
152+ terminal must reply with ``t=R:r=request_id ; EUNKNOWN ``.
153153
154154Terminals must ONLY send data for regular files. Symbolic links must be
155155resolved and the corresponding file read. If the terminal does not have
156- permission to read the file it must reply with ``t=R ; EPERM ``. Terminals
157- must respond with ``t=R ; EINVAL `` if the file is not a regular file after
158- resolving symlinks and ``t=R ; ENOENT `` if the file does not exist. If an
159- I/O error occurs the terminal must send ``t=R ; EIO ``.
156+ permission to read the file it must reply with ``t=R:r=request_id ; EPERM ``. Terminals
157+ must respond with ``t=R:r=request_id ; EINVAL `` if the file is not a regular file after
158+ resolving symlinks and ``t=R:r=request_id ; ENOENT `` if the file does not exist. If an
159+ I/O error occurs the terminal must send ``t=R:r=request_id ; EIO ``.
160160
161- For security reasons, terminals must reply with ``t=R ; EPERM `` if the drag
161+ For security reasons, terminals must reply with ``t=R:r=request_id ; EPERM `` if the drag
162162originated in the same window as the drop, this prevents malicious programs
163163from reading files on the computer by starting their own drag. This is a
164164defense in depth feature since drags can only be started by the terminal, but
165165it helps in case of accidental drag starts and drops into the same window.
166166
167+ Terminals may queue requests with different ids and respond in order, or they
168+ may respond in any order. If too many requests are received, they must deny
169+ the request with ``t:R:r=request_id ; EMFILE `` and end the drop.
170+
167171
168172Reading remote directories
169173+++++++++++++++++++++++++++
170174
171- If the file is actually a directory the terminal must respond with ``t=d:x=idx ; payload ``.
175+ If the file is actually a directory the terminal must respond with ``t=d:x=idx:r=request_id ; payload ``.
172176Here payload is a null byte separated list of entries in the directory that are
173177either regular files, directories or symlinks. The payload must be base64
174178encoded and might be chunked if the directory has a lot of entries. The first
@@ -180,10 +184,10 @@ number.
180184
181185``idx `` is an arbitrary 32 bit integer that acts as a handle to this
182186directory. The client can now read the files in this directory using requests of the form
183- ``t=d:x=idx:y=num ``, here ``num `` is the index into the list of
187+ ``t=d:x=idx:y=num:r=request_id ``, here ``num `` is the index into the list of
184188directory entries previously transmitted to the client. Here, ``1 `` will
185189correspond to the first entry in the directory. Once the client is done
186- reading a directory it should transmit ``t=d:x=idx `` to the terminal. The
190+ reading a directory it should transmit ``t=d:x=idx:r=request_id `` to the terminal. The
187191terminal can then free any resources associated with that directory. The
188192directory handle is now invalid and terminals must return ``EINVAL `` if the
189193client sends a request using and invalid directory handle. It is recommended
@@ -352,7 +356,7 @@ Key Value Default Description
352356 ``P `` - Change drag image or start drag
353357 ``e `` - a drag offer event occurred
354358
355- ``m`` Chunking indicator ``0`` ``0`` or ``i ``
359+ ``m`` Chunking indicator ``0`` ``0`` or ``1 ``
356360
357361``i `` Postive integer ``0 `` This id is for use by multiplexers.
358362 When it is set, all responses from
@@ -363,6 +367,8 @@ Key Value Default Description
363367 means rejected, ``1 `` means copy and
364368 ``2 `` means move.
365369
370+ ``r `` Positive integer ``0 `` The request id
371+
366372**Keys for location **
367373-----------------------------------------------------------
368374``x `` Integer ``0 `` Cell x-coordinate origin is 0, 0 at top left of screen
0 commit comments