mirror of
https://github.com/kovidgoyal/kitty
synced 2026-07-27 18:51:41 +02:00
Change how directories and symlinks in directories are handled when reading drop data
Needs implementation.
This commit is contained in:
@@ -151,8 +151,8 @@ MIME type is not present in the drop, the terminal must reply with
|
|||||||
If the client requests an entry that is not a supported URI type the
|
If the client requests an entry that is not a supported URI type the
|
||||||
terminal must reply with ``t=R:r=request_id ; EUNKNOWN``.
|
terminal must reply with ``t=R:r=request_id ; EUNKNOWN``.
|
||||||
|
|
||||||
Terminals must ONLY send data for regular files. Symbolic links must be
|
Terminals must ONLY send data for regular files or directories. Symbolic links must be
|
||||||
resolved and the corresponding file read. If the terminal does not have
|
resolved and the corresponding file or directory read. If the terminal does not have
|
||||||
permission to read the file it must reply with ``t=R:r=request_id ; EPERM``. Terminals
|
permission to read the file it must reply with ``t=R:r=request_id ; EPERM``. Terminals
|
||||||
must respond with ``t=R:r=request_id ; EINVAL`` if the file is not a regular file after
|
must respond with ``t=R:r=request_id ; EINVAL`` if the file is not a regular file after
|
||||||
resolving symlinks and ``t=R:r=request_id ; ENOENT`` if the file does not exist. If an
|
resolving symlinks and ``t=R:r=request_id ; ENOENT`` if the file does not exist. If an
|
||||||
@@ -175,17 +175,12 @@ Reading remote directories
|
|||||||
If the file is actually a directory the terminal must respond with ``t=d:x=idx:r=request_id ; payload``.
|
If the file is actually a directory the terminal must respond with ``t=d:x=idx:r=request_id ; payload``.
|
||||||
Here payload is a null byte separated list of entries in the directory that are
|
Here payload is a null byte separated list of entries in the directory that are
|
||||||
either regular files, directories or symlinks. The payload must be base64
|
either regular files, directories or symlinks. The payload must be base64
|
||||||
encoded and might be chunked if the directory has a lot of entries. The first
|
encoded and might be chunked if the directory has a lot of entries.
|
||||||
entry in the list must be a unique identifier for the directory, to prevent
|
|
||||||
symlink loops. Terminals may use whatever identifier is most suitable for their platforms, clients should
|
|
||||||
not re-request the contents of a directory whose identifier they have seen
|
|
||||||
before. On POSIX platforms the identifier would typically be device and inode
|
|
||||||
number.
|
|
||||||
|
|
||||||
``idx`` is an arbitrary 32 bit integer that acts as a handle to this
|
``idx`` is an arbitrary 32 bit integer that acts as a handle to this
|
||||||
directory. The client can now read the files in this directory using requests of the form
|
directory. The client can now read the files in this directory using requests of the form
|
||||||
``t=d:x=idx:y=num:r=request_id``, here ``num`` is the index into the list of
|
``t=d:x=idx:y=num:r=request_id``, here ``num`` is the 0-based index into the list of
|
||||||
directory entries previously transmitted to the client. Here, ``1`` will
|
directory entries previously transmitted to the client, where, ``0`` will
|
||||||
correspond to the first entry in the directory. Once the client is done
|
correspond to the first entry in the directory. Once the client is done
|
||||||
reading a directory it should transmit ``t=d:x=idx:r=request_id`` to the terminal. The
|
reading a directory it should transmit ``t=d:x=idx:r=request_id`` to the terminal. The
|
||||||
terminal can then free any resources associated with that directory. The
|
terminal can then free any resources associated with that directory. The
|
||||||
@@ -196,6 +191,15 @@ the terminal. Terminals may deny directory traversal requests if too many
|
|||||||
resources are used, in order to prevent denial or service attacks. In such
|
resources are used, in order to prevent denial or service attacks. In such
|
||||||
cases the terminal must respond with ``ENOMEM``.
|
cases the terminal must respond with ``ENOMEM``.
|
||||||
|
|
||||||
|
When transmitting a symlink that is inside a directory,
|
||||||
|
the terminal responds with escape code of the form::
|
||||||
|
|
||||||
|
OSC _dnd_code ; t=r:r=request_id:X=1 ; base64 encoded symlink target ST
|
||||||
|
|
||||||
|
Here, the presence of ``X=1`` indicates that the file is a symlink, not a
|
||||||
|
regular file.
|
||||||
|
|
||||||
|
|
||||||
Starting drags
|
Starting drags
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
@@ -355,6 +359,7 @@ Key Value Default Description
|
|||||||
``p`` - present data for drag offers
|
``p`` - present data for drag offers
|
||||||
``P`` - Change drag image or start drag
|
``P`` - Change drag image or start drag
|
||||||
``e`` - a drag offer event occurred
|
``e`` - a drag offer event occurred
|
||||||
|
``E`` - a drag offer data error occurred
|
||||||
|
|
||||||
``m`` Chunking indicator ``0`` ``0`` or ``1``
|
``m`` Chunking indicator ``0`` ``0`` or ``1``
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user