Kann ich eine Datei ohne Dateimanager in ein Fenster ziehen?

41

(Ich bin auf Arch Linux und verwende i3 als mein wm und xterm als meinen Terminalemulator, obwohl ich nicht weiß, ob irgendetwas davon relevant ist.)

Gelegentlich fordert mich eine Website auf, eine Datei mit der Maus von meinem Desktop in das Fenster des Internetbrowsers zu ziehen. Fast immer gibt es eine Alternative, aber kürzlich habe ich etwas gefunden, das ich tun möchte und das Drag & Drop erfordert. Leider habe ich keinen Dateimanager. Ich navigiere im Dateisystem meines Computers ausschließlich durch Bash.

Gibt es eine Möglichkeit, die Drag & Drop-Aktion zu fälschen? Kann ich meinem Browser mitteilen, dass ich diese Datei gerade auf Sie abgelegt habe, ohne dies tatsächlich zu tun?

Im schlimmsten Fall kann ich einen grafischen Dateimanager exklusiv herunterladen, um Dateien in meinen Webbrowser zu laden, aber ich möchte diese Lösung vermeiden.

untergrundbahn
quelle
3
> Kann ich meinem Browser mitteilen, dass ich diese Datei nur auf Sie abgelegt habe, ohne dies tatsächlich zu tun? "Klingt nach einer großartigen Frage für die JavaScript-Community bei stackexchange.
Jayhendren
Siehe auch www: mechanisieren oder eine Ableitung. Es scheint Perl und Python zu geben. Je mehr Lösungen desto besser!
Verwandte Themen
Gilles 'SO - hör auf, böse zu sein'
1
Dragbox existiert nicht mehr. Bitte ändern Sie Ihre akzeptierte Antwort.
Yukashima Huksay
1
@yukashimahuksay getan, danke für die Köpfe nach oben
U-

Antworten:

19

Vor ein paar Monaten hatte ich genau das gleiche Problem und schrieb letztendlich nur ein Tool, um es für mich zu tun. Als ich dies sah und feststellte, dass eine andere Person das gleiche Problem hatte, räumte ich es auf, damit eine andere Person als ich es tatsächlich zum Laufen bringen konnte, und schloss meine To-Do-Liste ab. Der Code ist jetzt verfügbar: https://github.com/mwh/dragon

Um es zu bekommen, renne

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

Dadurch erhalten Sie eine eigenständige dragonausführbare Datei, die Sie beliebig verschieben können. make installwird es in setzen $HOME/.local/bin.

In jedem Fall können Sie dann:

dragon *.jpg

So erhalten Sie ein einfaches Fenster mit ziehbaren Schaltflächen für jede dieser Dateien:

Screenshot des Drachen mit einigen Dateien

Sie können diese in einen Browser, einen Dateimanager, einen Editor oder an eine andere Stelle ziehen, die das Standard-Drag-and-Drop-Protokoll unterstützt.

Wenn Sie in die andere Richtung gehen wollen, und ziehen Sie die Dinge in ihm, Gebrauch --target- sie werden auf die Standardausgabe gedruckt werden, oder zur Verfügung ziehen Sie wieder mit , wenn Sie verwenden --keepauch.


So erstellen Sie einen C - Compiler benötigen und die GTK + 3 Entwicklungs - Header - wenn Sie auf Arch sind , werden Sie die , die gerade durch die Installation von GTK +, aber auf anderen Distributionen können Sie haben apt-get install build-essentials libgtk3-devoder yum install gtk3-develoder ähnliches erster Stelle . Davon abgesehen ist es vollständig in sich geschlossen, es gibt keine konstituierenden Bibliotheken oder ähnliches, und Sie können die ausführbare Datei einfach dort ablegen, wo Sie möchten.

Mein Anwendungsfall sind meistens einmalige Verschiebungen von nur wenigen Dateien (normalerweise nur einer), ohne besonders darauf zu achten, wie sie angezeigt werden. Wenn dies nicht mit den gewünschten Ergebnissen übereinstimmt, wird Dragbox (die ich erst gesehen habe) verwendet vor kurzem) ist vielleicht noch besser für dich. Erst gestern habe ich die Unterstützung für die Verwendung als Ziehziel hinzugefügt, so dass dieses Teil für mich nicht viel brauchte. Davon abgesehen benutze ich das jetzt schon eine Weile erfolgreich. In der Readme-Datei sind weitere Modi und Optionen beschrieben.

Michael Homer
quelle
Danke! Der Aufbau / die Installation dauerte Sekunden! Ich werde das benutzen! Die Option --target ist ein Knaller!
Schöne, kleine, eigenständige Binärdatei. Mit nettem kleinen Makefile. Perfekt. Danke!
ctn
1
Du bist ein Held. Dieses Tool ist auch in der AUR unter dem Namen verfügbar dragon-drag-and-drop-git.
FichteFoll
Ich liebe dich! Erzgemeinschaft liebt U! Dankeschön! Ich hatte lange danach gesucht.
Yukashima Huksay
28

Vielen Dank an @derobert, der mir die Dragbox-Anwendung empfohlen hat.

Dragbox macht genau das, was ich brauche. Ich habe beispielsweise einen Ordner mit einer Reihe von PNG-Dateien, die ich in Chromium ziehen möchte. In diesem Ordner dragbox *.pngerstellt das Ausführen dieses Fensters:

Ein GUI-Fenster mit den Namen mehrerer aufgelisteter Dateien

Ich kann meine Maus benutzen, um Dateien von dort in Chromium zu ziehen, und es funktioniert einwandfrei. Es war jedoch ein Schmerz, an diesen Punkt zu gelangen. Soweit mir bekannt ist, unterstützt Dragbox Debian-Systeme nur offiziell. Ich konnte nirgendwo etwas finden, das ursprünglich für Arch gearbeitet hatte. Daher habe ich eine Schritt-für-Schritt-Anleitung geschrieben, um Dragbox in Arch Linux zum Laufen zu bringen. Dies ist fast genau das, was ich auf meiner Maschine gemacht habe, mit ein paar Modifikationen, um besseren Praktiken zu folgen. Wenn irgendwo ein Fehler auftritt, können Sie im Bearbeitungsverlauf dieser Antwort genau nachlesen , was ich auf meinem Computer getan habe.

  1. Klonen Sie die Quelle von Dragbox auf Ihren Computer, indem Sie ausführen git clone https://github.com/engla/dragbox.git
  2. In dragboxIhrem aktuellen Arbeitsverzeichnis wird ein neues Verzeichnis mit dem Namen erstellt. Gehen hinein.
  3. Für die Installation von Dragbox und Dragbox ist Python 2 erforderlich, das in Arch Linux standardmäßig enthalten ist. Es wird jedoch erwartet, dass Python 2 die Standard-Python-Installation ist, was in Arch nicht der Fall ist. Umgehen Sie dies, indem Sie ausführen export PYTHON=/bin/python2. Bis Sie Ihr aktuelles Terminalfenster schließen, hat die Umgebungsvariable $PYTHONden Wert /bin/python2. Die Installationsskripte von Dragbox prüfen dies und verwenden es über Python 3.
  4. Führen Sie ./autogen.sh, ./configure, makeund make install. make installmuss mit root-Rechten erfolgen (zB sudo make install).
  5. Dragbox ist jetzt auf Ihrem Computer installiert, wird jedoch versuchen, Python 3 zum Ausführen zu verwenden. Öffnen Sie mit Root-Rechten /usr/local/bin/dragboxin einem Texteditor. Ändern Sie den shebang (die erste Zeile, die Ihrer Shell mitteilt, mit welcher ausführbaren Datei das Skript ausgeführt werden soll) von #!/usr/bin/env pythonnach #!/usr/bin/env python2.
  6. Das Skript funktioniert jetzt, kann jedoch das Modul mit dem eigentlichen Programm nicht finden. Es gibt verschiedene Möglichkeiten, dies zu beheben.

    1. Fügen Sie in Ihre ~/.bashrcoder eine ähnliche Zeile ein, in der export PYTHONPATH=$PYTHONPATH:unmittelbar (wie in, nicht einmal ein Leerzeichen dazwischen) der Pfad zu einem Verzeichnis angegeben ist. Python sucht jetzt in diesem Verzeichnis, wenn Sie versuchen, Module zu importieren. In dem in Schritt 1 erstellten Verzeichnis befindet sich ein Verzeichnis mit dem Namen Dropbox/(mit einem Großbuchstaben D). Kopieren Sie dieses Verzeichnis in das Verzeichnis, das Sie zu Ihrem hinzugefügt haben $PYTHONPATH(z. B. export PYTHONPATH=$PYTHONPATH:~/python/moduleskopieren Sie das Dragbox/zu erstellende Verzeichnis, wenn Sie geschrieben haben ~/python/modules/Dragbox/).

    2. Wahrscheinlich schlechtere Praxis, aber Sie können dasselbe Verzeichnis in ein Verzeichnis kopieren, das sich bereits in Ihrem befindet $PYTHONPATH. Sie können es beispielsweise kopieren, um es zu erstellen /usr/lib/python2.7/site-packages/.

Wenn Sie diese Schritte befolgt haben, sollte Dragbox funktionieren! Sie können jetzt ausführen man dragbox, um mehr über die Verwendung zu erfahren, und es durch einfaches Eingeben starten dragbox.

untergrundbahn
quelle
2
Tatsächlich /usr/bin/env python2wird heutzutage die Verwendung von empfohlen, da PEP 394 übernommen wurde.
Gilles 'SO - hör auf böse zu sein'
1
Sie brauchen den zweiten Fix nicht. Kopieren Sie einfach das DragboxVerzeichnis in PYTHONPATHirgendwo (wie in python2 site-packages , entweder auf dem System oder pro Benutzer). Diese Zeile wird nur ausgeführt, wenn dragboxdas Paket nicht importiert werden kann.
Bakuriu
@Seth Nun, danke, denke ich. Ich habe ein Python-Skript auf einem etwas anderen System als dem entworfenen ausgeführt, auf dem noch Python installiert war: P Ich bin jedoch froh, dass es Python war, da dies die einzige Sprache ist, die ich fließend genug beherrsche, um dies zu tun geschehen.
Undergroundmonorail
2
Mit Archlinux besteht die wirkliche Lösung für diese Art von Dingen darin, ein PKGBUILD zu schreiben . Sie tun größtenteils das, was Sie getan haben, aber Sie schreiben es in ein spezielles Skript, mit pacmandem Sie die Dateien für Sie verwalten können, damit Sie sich nie im System herumärgern müssen, wenn Sie es aktualisieren oder entfernen möchten.
HalosGhost
1
Dragbox scheint tot zu sein. Das Git-Repo ist weg.
Kaleissin
6

Mit der folgenden Syntax können Sie problemlos im Dateisystem Ihres Browsers navigieren:

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

Öffnen Sie den Pfad in einer leeren Registerkarte, und ziehen Sie die Datei von dort aus per Drag & Drop. Zumindest bei Chrom / Chrom haben Sie hier keine anderen Browser, die Sie ausprobieren könnten.

Herr Shunz
quelle
Das funktioniert bei mir nicht, aber ich kann nicht sagen, ob es ein Problem mit der von Ihnen beschriebenen Methode oder mit dem Userscript ist, das mich dazu bringt, Dinge einzuspielen ...
undergroundmonorail
Ich denke, es gibt eine Befehlszeilenoption oder ein Attribut in Chrome, das Sie aktivieren müssen, um dies zuzulassen.
slm
Wäre chrome://flagsdas der richtige Ort, um so etwas zu suchen? Dort schaue ich gerade hin.
Undergroundmonorail
@undergroundmonorail mmm du hast recht, ich habe es gerade mit der Demo bei dropzonejs.com versucht und es funktioniert nicht. Könnte aber definitiv ein Berechtigungsproblem sein
Mr Shunz
4

Habe das Problem einfach selbst gelöst.

Möglicherweise ist es am einfachsten, den Dialog "Datei öffnen ..." zu verwenden. Sie können das Dialogfeld "gtk-Datei" wie einen Dateimanager einfach per Drag & Drop öffnen.

Möglicherweise müssen Sie ein separates Fenster öffnen, um sicherzustellen, dass das Dialogfeld den Bildschirm nicht stiehlt.

Das ist es. So einfach.

hatte das gleiche Problem
quelle
Genial! Es muss nichts installiert werden. Ich benutze Firefox, kann also nicht auf das Menü klicken, aber Strg + o funktioniert einwandfrei.
Milan Babuškov