Можно ли «перетащить» файл в окно без файлового менеджера?

Можно ли «перетащить» файл в окно без файлового менеджера?

(Я работаю на Arch Linux, использую i3 в качестве wm и xterm в качестве эмулятора терминала, хотя не знаю, имеет ли это значение.)

Иногда веб-сайт просит меня перетащить файл с помощью мыши с моего рабочего стола в окно интернет-браузера. Почти всегда есть альтернатива, но недавно я нашел что-то, что я хочу сделать, и это требует перетаскивания. К сожалению, у меня нет файлового менеджера. Я перемещаюсь по файловой системе моего компьютера исключительно через bash.

Есть ли способ подделать действие перетаскивания? Могу ли я сказать браузеру: «Я только что перетащил этот файл на тебя», не делая этого на самом деле?

В худшем случае я могу загрузить графический файловый менеджер, чтобы перетаскивать файлы исключительно в свой веб-браузер, но я бы хотел избежать этого решения.

решение1

У меня была точно такая же проблема несколько месяцев назад, и в конечном итоге я просто написал инструмент, который делал это для меня. Когда я увидел это и обнаружил, что у кого-то еще был такой же зуд, я очистил его, чтобы кто-то другой, кроме меня, мог его запустить, и закончил свой список дел. Код теперь готов:https://github.com/mwh/dragon

Чтобы получить его, запустите

git clone https://github.com/mwh/dragon.git
cd dragon
make

Это даст вам автономный dragonисполняемый файл — вы можете переместить его куда захотите. make installпоместим его в $HOME/.local/bin.

В любом случае, вы можете:

dragon *.jpg

чтобы получить простое окно с перетаскиваемыми кнопками для каждого из этих файлов:

Скриншот дракона, показывающий несколько файлов

Вы можете перетащить любой из них в браузер, файловый менеджер, редактор или любое другое место, поддерживающее стандартный протокол перетаскивания.

Если вы хотите пойти другим путем и перетащить вещивдля этого используйте --target— они будут выведены на стандартный вывод или станут доступны для повторного извлечения, если вы --keepтакже используете .


Для сборки вам понадобится компилятор C и заголовочные файлы разработки GTK+ 3 — если вы используете Arch, вы получите их, просто установив GTK+, но в других дистрибутивах вам, возможно, придется сначала сделать apt-get install build-essentials libgtk3-devили yum install gtk3-develили что-то подобное. В остальном он полностью автономен, без каких-либо библиотек или чего-либо еще, и вы можете просто поместить исполняемый файл туда, куда хотите.

Мой вариант использования — это в основном одноразовые перетаскивания всего нескольких файлов (обычно одного), не особенно заботясь о том, как они отображаются, так что если это не соответствует тому, что вам нужно, то Dragbox (который я не видел до недавнего времени) все равно может быть для вас лучше. Только вчера я добавил поддержку использования его в качестве цели перетаскивания, так что эта часть не особо использовалась с моей стороны. Однако, помимо этого, я успешно использую это уже некоторое время. Есть и другие режимы и опции, описанные в файле readme.

решение2

Спасибо @derobert за рекомендацию мне приложения Dragbox.

Драгбоксделает именно то, что мне нужно. Например, у меня есть папка с несколькими файлами .png, которые я хотел бы перетащить в Chromium. Внутри этой папки выполнение dragbox *.pngсоздает это окно:

Окно графического интерфейса с перечисленными именами нескольких файлов

Я могу использовать мышь, чтобы перетаскивать файлы оттуда в Chromium, и это работает безупречно. Однако, добраться до этого момента было больно. Насколько мне известно, Dragbox официально поддерживает только системы Debian. Я не смог найти нигде, где бы он изначально работал для Arch. Поэтому я написал пошаговое руководство по тому, как заставить Dragbox работать в Arch Linux. Это почти то же самое, что я сделал на своей машине, с парой изменений для следования лучшим практикам. Если где-то есть ошибка, вы можете посмотреть в истории правок этого ответа, чтобы увидетьточночто я сделал на своей машине.

  1. Клонируйте исходный код Dragbox на свой компьютер, выполнив командуgit clone https://github.com/engla/dragbox.git
  2. dragboxВнутри вашего текущего рабочего каталога будет создан новый каталог с именем . Перейдите в него.
  3. Dragbox и установка Dragbox требуют Python 2, который входит в стандартную комплектацию Arch Linux. Однако он ожидает, что Python 2 будет установкой Python по умолчанию, что не так в Arch. Обойдите это, выполнив export PYTHON=/bin/python2. Пока вы не закроете текущее окно терминала, переменная окружения $PYTHONбудет иметь значение /bin/python2. Скрипты установки Dragbox проверяют это и будут использовать его вместо Python 3.
  4. Выполнение ./autogen.sh, ./configure, makeи make install. make installдолжно выполняться с правами root (например sudo make install).
  5. Dragbox теперь установлен на вашем компьютере, но попытается использовать Python 3 для запуска. С правами root откройте /usr/local/bin/dragboxв текстовом редакторе. Измените shebang (первая строка, которая сообщает вашей оболочке, какой исполняемый файл использовать для запуска скрипта) с #!/usr/bin/env pythonна #!/usr/bin/env python2.
  6. Скрипт теперь работает, но он не может найти модуль, содержащий фактическую программу. Есть несколько способов исправить это.

    1. Включите в свой ~/.bashrcили подобный файл строку, читающуюся export PYTHONPATH=$PYTHONPATH:немедленно (например, без пробела) после моего пути к каталогу. Теперь Python будет искать в этом каталоге при попытке импортировать модули. Внутри каталога, созданного на шаге 1, будет каталог с именем Dropbox/(с заглавной буквы D). Скопируйте этот каталог в каталог, который вы добавили в свой $PYTHONPATH(например, если вы написали export PYTHONPATH=$PYTHONPATH:~/python/modules, скопируйте Dragbox/каталог для создания ~/python/modules/Dragbox/).

    2. Возможно, это худшая практика, но вы можете скопировать этот же каталог в каталог, который уже есть в вашем $PYTHONPATH. Например, вы можете скопировать его, чтобы создать /usr/lib/python2.7/site-packages/.

Если вы выполнили эти шаги, Dragbox должен работать! Теперь вы можете выполнить, man dragboxчтобы узнать больше о том, как его использовать, и запустить его, просто набрав dragbox.

решение3

Только что решил эту проблему сам.

Вполне возможно, что самый простой способ — использовать диалог «Открыть файл...». Вы можете просто перетащить файл из диалога файлов gtk, как в файловом менеджере.

Возможно, вам придется открыть отдельное окно, чтобы убедиться, что диалоговое окно не затмевает экран.

Вот и все. Все просто.

решение4

Вы можете запустить диалоговое окно файла GTK с помощью инструмента командной строки, например, zenityи перетащить его оттуда.

Пример:

zenity --file-selection

Связанный контент