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

41

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

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

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

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

undergroundmonorail
источник
3
> Могу ли я сказать своему браузеру: «Я только что бросил этот файл на вас», фактически не делая этого? »Похоже, это отличный вопрос для сообщества javascript на stackexchange.
jayhendren
Также см. Www: механизация или производная. Кажется, есть Perl и Python. Чем больше решений, тем лучше!
Связанный: Как мне установить пользовательские скрипты в Chrome на Linux?
Жиль "ТАК - перестань быть злым"
1
Dragbox больше не существует. Пожалуйста, измените ваш принятый ответ.
Юкашима Хуксай
1
@yukashimahuksay сделано, спасибо за хедз-ап
подземный

Ответы:

20

У меня была точно такая же проблема несколько месяцев назад, и в конце концов я просто написал инструмент, чтобы сделать это для меня. Когда я увидел это и обнаружил, что у кого-то еще был такой же зуд, я вычистил его, чтобы кто-то, кроме меня, мог фактически запустить его, и завершил свой список дел. Код сейчас: 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 описаны другие режимы и опции.

Майкл Гомер
источник
Спасибо! Для сборки / установки потребовались секунды! Я буду использовать это! Опция --target - это взрыв!
Хороший, маленький, автономный двоичный файл. С хорошим маленьким Makefile. Отлично. Спасибо!
ctn
1
Вы герой. Этот инструмент также доступен на AUR под названием dragon-drag-and-drop-git.
FichteFoll
Я люблю тебя! арка сообщество любит U! Спасибо! Я искал это целую вечность.
Юкашима Хуксай
28

Спасибо @derobert за то, что порекомендовали мне приложение Dragbox.

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

GUI окно с именами нескольких файлов в списке

Я могу использовать свою мышь, чтобы перетащить файлы оттуда в Chromium, и это работает безупречно. Однако добраться до этого момента было больно. Насколько мне известно, Dragbox официально поддерживает только системы Debian. Я не мог найти это нигде, что изначально работало на Арка. Итак, я написал пошаговое руководство по работе с 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должно быть сделано с правами суперпользователя (например 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/(с большой буквы). Скопируйте этот каталог в каталог, который вы добавили в свой $PYTHONPATH(например, если вы написали export PYTHONPATH=$PYTHONPATH:~/python/modules, скопируйте Dragbox/каталог для создания ~/python/modules/Dragbox/).

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

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

undergroundmonorail
источник
2
На самом деле, использование /usr/bin/env python2является рекомендуемым способом в наши дни, так как PEP 394 был принят.
Жиль "ТАК - перестань быть злым"
1
Вам не нужно второе исправление. Просто скопируйте Dragboxкаталог PYTHONPATHкуда-нибудь (как в python2 site-packages , как в системе, так и для пользователя). Эта строка выполняется только тогда, когда dragboxне удается импортировать этот пакет.
Бакуриу
@ Сидит, спасибо, наверное. Я сделал скрипт на Python немного другой системой, чем он был разработан, на котором все еще был установлен Python: P Я рад, что это был Python, так как это единственный язык, на котором я достаточно свободно говорил, чтобы сделать это бывает.
подземный
2
С Archlinux реальное решение для такого типа вещей - написать PKGBUILD . Вы в основном делаете то, что сделали, но помещаете это в специальный скрипт, который позволяет вам pacmanуправлять файлами, чтобы вам никогда не приходилось копаться в системе, если вы захотите обновить или удалить ее.
HalosGhost
1
Драгбокс кажется мертвым. Git-репо ушел.
Калейссин
6

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

file:///home/username/blah/blah

Откройте путь в пустой вкладке, и оттуда вы можете перетащить файл. По крайней мере, с хромом / хромом, здесь нет других браузеров, чтобы попробовать.

Мистер Шунц
источник
Это не работает для меня, но я не могу сказать , если это проблема с методом вы описываете или проблемы с userscript , который хочет меня бросить вещи в ...
undergroundmonorail
Я думаю, что есть переключатель командной строки или атрибут в Chrome, который вы должны включить, чтобы разрешить это.
slm
Было chrome://flagsбы правильным местом, чтобы искать что-то подобное? Вот где я сейчас смотрю.
подземный
@undergroundmonorail ммм вы правы, я только что попробовал с демо на dropzonejs.com, и это не работает.
Конечно, это
4

Просто решил проблему сам.

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

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

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

hadthesameproblem
источник
Потрясающе! Не нужно ничего устанавливать. Я использую Firefox, поэтому я не могу щелкнуть меню, но Ctrl + o работает просто отлично.
Милан Бабушков