(Я работаю на 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. Это почти то же самое, что я сделал на своей машине, с парой изменений для следования лучшим практикам. Если где-то есть ошибка, вы можете посмотреть в истории правок этого ответа, чтобы увидетьточночто я сделал на своей машине.
- Клонируйте исходный код Dragbox на свой компьютер, выполнив команду
git clone https://github.com/engla/dragbox.git
dragbox
Внутри вашего текущего рабочего каталога будет создан новый каталог с именем . Перейдите в него.- Dragbox и установка Dragbox требуют Python 2, который входит в стандартную комплектацию Arch Linux. Однако он ожидает, что Python 2 будет установкой Python по умолчанию, что не так в Arch. Обойдите это, выполнив
export PYTHON=/bin/python2
. Пока вы не закроете текущее окно терминала, переменная окружения$PYTHON
будет иметь значение/bin/python2
. Скрипты установки Dragbox проверяют это и будут использовать его вместо Python 3. - Выполнение
./autogen.sh
,./configure
,make
иmake install
.make install
должно выполняться с правами root (напримерsudo make install
). - Dragbox теперь установлен на вашем компьютере, но попытается использовать Python 3 для запуска. С правами root откройте
/usr/local/bin/dragbox
в текстовом редакторе. Измените shebang (первая строка, которая сообщает вашей оболочке, какой исполняемый файл использовать для запуска скрипта) с#!/usr/bin/env python
на#!/usr/bin/env python2
. Скрипт теперь работает, но он не может найти модуль, содержащий фактическую программу. Есть несколько способов исправить это.
Включите в свой
~/.bashrc
или подобный файл строку, читающуюсяexport PYTHONPATH=$PYTHONPATH:
немедленно (например, без пробела) после моего пути к каталогу. Теперь Python будет искать в этом каталоге при попытке импортировать модули. Внутри каталога, созданного на шаге 1, будет каталог с именемDropbox/
(с заглавной буквы D). Скопируйте этот каталог в каталог, который вы добавили в свой$PYTHONPATH
(например, если вы написалиexport PYTHONPATH=$PYTHONPATH:~/python/modules
, скопируйтеDragbox/
каталог для создания~/python/modules/Dragbox/
).Возможно, это худшая практика, но вы можете скопировать этот же каталог в каталог, который уже есть в вашем
$PYTHONPATH
. Например, вы можете скопировать его, чтобы создать/usr/lib/python2.7/site-packages/
.
Если вы выполнили эти шаги, Dragbox должен работать! Теперь вы можете выполнить, man dragbox
чтобы узнать больше о том, как его использовать, и запустить его, просто набрав dragbox
.
решение3
Только что решил эту проблему сам.
Вполне возможно, что самый простой способ — использовать диалог «Открыть файл...». Вы можете просто перетащить файл из диалога файлов gtk, как в файловом менеджере.
Возможно, вам придется открыть отдельное окно, чтобы убедиться, что диалоговое окно не затмевает экран.
Вот и все. Все просто.
решение4
Вы можете запустить диалоговое окно файла GTK с помощью инструмента командной строки, например, zenity
и перетащить его оттуда.
Пример:
zenity --file-selection