diff --git a/kittens/dnd/main.go b/kittens/dnd/main.go index b05d33c4a..4a1aa5079 100644 --- a/kittens/dnd/main.go +++ b/kittens/dnd/main.go @@ -351,11 +351,11 @@ func dnd_main(cmd *cli.Command, opts *Options, args []string) (rc int, err error } var uri_list []uri_list_item for _, arg := range args { - st, err := os.Stat(arg) + st, err := os.Lstat(arg) if err != nil { return 1, err } - if st.IsDir() || st.Mode().IsRegular() { + if st.IsDir() || st.Mode().IsRegular() || st.Mode().Type()&os.ModeSymlink != 0 { path, err := filepath.Abs(arg) if err != nil { return 1, err diff --git a/kitty_tests/dnd_kitten.py b/kitty_tests/dnd_kitten.py index 62f5f362f..fa170dcda 100644 --- a/kitty_tests/dnd_kitten.py +++ b/kitty_tests/dnd_kitten.py @@ -333,7 +333,8 @@ class TestDnDKitten(BaseTest): self.img_drag_data = os.urandom(10113) f.write(self.img_drag_data) create_fs(self.src_data_dir) - self.finish_setup(cli_args=(f'--drag=image/png:{img_drag_path}', self.src_data_dir)) # ))) + tl = tuple(os.path.join(self.src_data_dir, x) for x in os.listdir(self.src_data_dir)) + self.finish_setup(cli_args=(f'--drag=image/png:{img_drag_path}', ) + tl) # ))) self.dnd_kitten_drag(False, img_drag_path) self.exit_kitten() self.img_drag_data = None @@ -387,5 +388,13 @@ class TestDnDKitten(BaseTest): self.send_dnd_command_to_kitten('DRAG_STATUS') self.wait_for_responses('text/uri-list:2:true') self.assertEqual(self.img_drag_data, self.read_drag_data('image/png')) - # self.read_drag_data('text/uri-list') + uri_list = self.read_drag_data('text/uri-list').decode().splitlines() + paths = set() + for line in uri_list: + line = line.strip() + if line and not line.startswith('#'): + purl = urlparse(line) + if purl.scheme == 'file': + paths.add(purl.path) + self.assertEqual(set(os.listdir(self.src_data_dir)), {os.path.basename(x) for x in paths}) end_drag(False)