Posso "trascinare" un file in una finestra senza un file manager?


41

(Sono su Arch Linux, usando i3 come mio wm e xterm come mio emulatore di terminale, anche se non so se questo sia rilevante.)

Di tanto in tanto, un sito Web mi chiede di trascinare un file con il mouse dal desktop nella finestra del browser Internet. Quasi sempre, c'è un'alternativa, ma recentemente ho trovato qualcosa che voglio fare che richiede il trascinamento della selezione. Sfortunatamente, non ho un file manager. Navigo il file system del mio computer esclusivamente attraverso bash.

Esiste un modo per simulare l'azione di trascinamento della selezione? Posso dire al mio browser "Ho appena lasciato questo file su di te" senza farlo?

Nel peggiore dei casi, posso scaricare un file manager grafico esclusivamente per rilasciare i file nel mio browser web, ma vorrei evitare quella soluzione.


3
> Posso dire al mio browser "Ho appena lasciato questo file su di te" senza farlo? "Sembra un'ottima domanda per la comunità javascript su stackexchange.
jayhendren,

Vedi anche www: meccanizzare o un derivato. Sembra che ci sia perl e pitone. Più soluzioni meglio è!


1
dragbox non esiste più. per favore cambia la tua risposta accettata.
yukashima huksay,

1
@yukashimahuksay fatto, grazie per il testa a testa
undergroundmonorail

Risposte:


19

Ho avuto esattamente lo stesso problema qualche mese fa e alla fine ho appena scritto uno strumento per farlo per me. Quando l'ho visto e ho trovato che qualcun altro aveva lo stesso prurito, l'ho ripulito in modo che qualcuno diverso da me potesse effettivamente farlo funzionare e ho finito la mia lista di cose da fare. Il codice è ora disponibile: https://github.com/mwh/dragon

Per farlo, corri

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

Questo ti darà un dragoneseguibile autonomo : puoi spostarlo dove vuoi. make installlo inserirà $HOME/.local/bin.

Ad ogni modo, puoi quindi:

dragon *.jpg

per ottenere una semplice finestra con pulsanti trascinabili per ciascuno di quei file:

Schermata del drago che mostra alcuni file

Puoi trascinare uno di questi in un browser, un file manager, un editor o in qualsiasi altro luogo che parla il protocollo standard di trascinamento della selezione.

Se vuoi andare dall'altra parte e trascinare le cose su di esso, usa --target: saranno stampate sull'output standard o disponibili per trascinarle di nuovo con se lo usi --keepanche.


Per costruire avrete bisogno di un compilatore C e le intestazioni di sviluppo GTK + 3 - se siete su Arch si otterrà quelli appena con l'installazione di GTK +, ma su altre distribuzioni potrebbe essere necessario apt-get install build-essentials libgtk3-devo yum install gtk3-develo simile prima. A parte questo è completamente autonomo, senza librerie costituenti o altro, e puoi semplicemente posizionare l'eseguibile dove vuoi.

Il mio caso d'uso è per lo più un trascinamento unico di pochi file (di solito solo uno), senza preoccuparsi particolarmente di come vengono visualizzati, quindi se questo non si allinea con quello che vuoi, allora Dragbox (che non ho visto fino a di recente) potrebbe essere ancora meglio per te. Proprio ieri ho aggiunto il supporto per usarlo anche come obiettivo di trascinamento, quindi quella parte non ha avuto molto uso da parte mia. A parte questo, però, lo sto usando con successo da un po 'di tempo. Esistono altre modalità e opzioni descritte nel file Leggimi.


Grazie! Ci sono voluti pochi secondi per compilare / installare! Lo userò! L'opzione --target è un vero spasso!

Bello, piccolo, binario autonomo. Con un bel piccolo Makefile. Perfezionare. Grazie!
CTN

1
Sei un eroe. Questo strumento è disponibile anche sull'AUR sotto il nome dragon-drag-and-drop-git.
FichteFoll

Ti amo! la community di arch ama U! grazie! Lo cercavo da anni.
yukashima huksay,

28

Grazie a @derobert per avermi consigliato l'applicazione Dragbox.

Dragbox fa esattamente quello di cui ho bisogno. Ad esempio, ho una cartella con un numero di file .png che vorrei poter trascinare in Chromium. All'interno di quella cartella, l'esecuzione dragbox *.pngcrea questa finestra:

Una finestra della GUI con i nomi di diversi file elencati

Posso usare il mouse per trascinare i file da lì in Chromium e funziona perfettamente. Tuttavia, arrivare a questo punto è stato un dolore. Per quanto ne so, Dragbox supporta ufficialmente solo i sistemi Debian. Non riuscivo a trovarlo da nessuna parte che funzionasse in modo nativo per Arch. Quindi, ho scritto una guida passo-passo per far funzionare Dragbox in Arch Linux. Questo è quasi esattamente quello che ho fatto sulla mia macchina, con un paio di modifiche per seguire le migliori pratiche. Se c'è un errore da qualche parte, puoi guardare nella cronologia delle modifiche di questa risposta per vedere esattamente cosa ho fatto sulla mia macchina.

  1. Clona la sorgente di Dragbox sul tuo computer eseguendola git clone https://github.com/engla/dragbox.git
  2. Ci sarà una nuova directory chiamata dragboxcreata all'interno della directory di lavoro corrente. Andare all'interno.
  3. L'installazione di Dragbox e Dragbox richiede Python 2, fornito di serie su Arch Linux. Tuttavia, si aspetta che Python 2 sia l'installazione predefinita di Python, che non è vera su Arch. Aggira questo eseguendo export PYTHON=/bin/python2. Fino a quando non si chiude la finestra del terminale corrente, la variabile di ambiente $PYTHONavrà il valore /bin/python2. Gli script di installazione di Dragbox lo verificano e lo useranno su Python 3.
  4. Esegui ./autogen.sh, ./configure, makee make install. make installdeve essere fatto con i privilegi di root (ad es sudo make install.).
  5. Dragbox è ora installato sul tuo computer, ma proverà a utilizzare Python 3 per l'esecuzione. Con i privilegi di root, apri /usr/local/bin/dragboxin un editor di testo. Modifica lo shebang (la prima riga, che dice alla tua shell con quale eseguibile eseguire lo script) da #!/usr/bin/env pythona #!/usr/bin/env python2.
  6. Lo script ora funziona, ma non riesce a trovare il modulo contenente il programma attuale. Ci sono un paio di modi per risolvere questo problema.

    1. Includi nella tua ~/.bashrco simile una riga che legge export PYTHONPATH=$PYTHONPATH:immediatamente (come in, nemmeno uno spazio tra) seguito il mio percorso verso una directory. Python ora cercherà in quella directory quando tenterà di importare moduli. All'interno della directory creata nel passaggio 1, ci sarà una directory chiamata Dropbox/(con la D maiuscola). Copia quella directory nella directory che hai aggiunto alla tua $PYTHONPATH(ad es. Se hai scritto export PYTHONPATH=$PYTHONPATH:~/python/modules, copia la Dragbox/directory da creare ~/python/modules/Dragbox/).

    2. Probabilmente pratica peggiore, ma puoi copiare quella stessa directory in una directory già nella tua $PYTHONPATH. Ad esempio, è possibile copiarlo per creare /usr/lib/python2.7/site-packages/.

Se hai seguito questi passaggi, Dragbox dovrebbe funzionare! Ora puoi eseguire man dragboxper saperne di più su come usarlo e avviarlo semplicemente digitando dragbox.


2
In realtà, l'utilizzo /usr/bin/env python2è il modo raccomandato in questi giorni, da quando è stato adottato PEP 394 .
Gilles 'SO- smetti di essere malvagio' il

1
Non hai bisogno della seconda correzione. Copia semplicemente la Dragboxdirectory PYTHONPATHda qualche parte (come in python2 site-packages , sia di sistema che per utente). Quella riga viene eseguita solo quando dragboxnon è possibile importare quel pacchetto.
Bakuriu,

@Seth Beh, grazie credo. Ho fatto eseguire uno script Python su un sistema leggermente diverso da quello per cui era stato progettato, che conteneva ancora Python: P Sono contento che fosse Python, però, poiché è l'unico linguaggio in cui sono abbastanza fluente da averlo fatto accadere.
undergroundmonorail

2
Con Archlinux, la vera soluzione per questo tipo di cose è scrivere un PKGBUILD . In gran parte fai quello che hai fatto, ma lo metti in uno script speciale che ti consente pacmandi gestire i file per te in modo da non dover mai andare in giro nel sistema se vuoi aggiornarlo o rimuoverlo.
HalosGhost,

1
Dragbox sembra essere morto. Il git-repo non c'è più.
Kaleissin,

6

Puoi facilmente navigare nel filesystem nel tuo browser, usando la sintassi:

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

Apri il percorso in una scheda vuota e da lì puoi trascinare e rilasciare il tuo file. Almeno con chrome / chromium, non hai altri browser qui da provare.


Questo non funziona per me, ma non posso dire se si tratta di un problema con il metodo che descrivi o di un problema con lo script utente che mi vuole far cadere roba in ...
undergroundmonorail

Penso che ci sia un'opzione da riga di comando o un attributo all'interno di Chrome che devi abilitare per consentirlo.
slm

Sarebbe chrome://flagsil posto giusto per cercare qualcosa del genere? Ecco dove sto guardando il momento.
undergroundmonorail,

@undergroundmonorail mmm hai ragione, ho appena provato con la demo su dropzonejs.com e non funziona. Potrebbe essere definitivamente un problema di autorizzazione, però
Shunz, il


4

Ho appena risolto il problema da solo.

Molto probabilmente il modo più semplice è usare la finestra di dialogo "Apri file ...". Puoi semplicemente trascinare e rilasciare dalla finestra di dialogo del file GTK, proprio come un file manager.

Potrebbe essere necessario aprire una finestra separata per assicurarsi che la finestra di dialogo non rubi lo schermo.

Questo è tutto. Così facile.


Eccezionale! Non è necessario installare nulla. Sto usando Firefox, quindi non posso fare clic sul menu, ma Ctrl + o funziona perfettamente.
Milano Babuškov,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.