Posso "arrastar" um arquivo para uma janela sem um gerenciador de arquivos?

41

(Estou no Arch Linux, usando o i3 como meu wm e o xterm como meu emulador de terminal, embora não saiba se isso é relevante.)

Ocasionalmente, um site solicita que eu arraste um arquivo com o mouse da área de trabalho para a janela do navegador da Internet. Quase sempre, existe uma alternativa, mas recentemente encontrei algo que quero fazer que requer arrastar e soltar. Infelizmente, eu não tenho um gerenciador de arquivos. Navego no sistema de arquivos do meu computador apenas através do bash.

Existe uma maneira de eu fingir a ação de arrastar e soltar? Posso dizer ao meu navegador "Acabei de colocar este arquivo em você" sem realmente fazer isso?

Na pior das hipóteses, posso baixar um gerenciador de arquivos gráficos exclusivamente para soltar arquivos no meu navegador da Web, mas gostaria de evitar essa solução.

undergroundmonorail
fonte
3
> Posso dizer ao meu navegador "Eu só caiu este arquivo para você", sem realmente fazê-lo "soa como uma grande questão para a comunidade javascript no Stackexchange?.
jayhendren
Veja também www: mecanize ou um derivado. Parece que existem perl e python. Quanto mais soluções, melhor!
Relacionado: Como instalo scripts de usuário no Chrome no Linux?
Gilles 'SO- stop be evil'
1
O dragbox não existe mais. altere sua resposta aceita.
yukashima huksay
1
@yukashimahuksay done, obrigado pelo aviso
undergroundmonorail

Respostas:

19

Eu tive exatamente o mesmo problema há alguns meses e acabei de escrever uma ferramenta para fazer isso por mim. Quando vi isso e descobri que outra pessoa tinha a mesma coceira, limpei-a para que alguém que não fosse eu conseguisse fazê-la funcionar e terminei minha lista de tarefas. O código está disponível agora: https://github.com/mwh/dragon

Para obtê-lo, execute

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

Isso lhe dará um dragonexecutável independente - você pode movê-lo para onde quiser. make installvai colocá-lo $HOME/.local/bin.

De qualquer forma, você pode:

dragon *.jpg

para obter uma janela simples com botões arrastáveis ​​para cada um desses arquivos:

Captura de tela do dragão mostrando alguns arquivos

Você pode arrastar qualquer um deles para um navegador, um gerenciador de arquivos, um editor ou qualquer outro lugar que fale o protocolo padrão de arrastar e soltar.

Se você quer ir para o outro lado, e as coisas arrastar no a ele, o uso --target- que vai ser impresso na saída padrão, ou disponíveis para arrastar para fora outra vez com se você usar --keeptambém.


Para construir você vai precisar de um compilador C e os cabeçalhos de desenvolvimento GTK + 3 - se você estiver em Arch você vai ter aqueles que estão instalando GTK +, mas em outras distribuições você pode ter que apt-get install build-essentials libgtk3-devou yum install gtk3-develou similar em primeiro lugar. Fora isso, é totalmente independente, sem bibliotecas constituintes ou qualquer coisa, e você pode simplesmente colocar o executável onde quiser.

Meu caso de uso é basicamente arrastar apenas alguns arquivos (geralmente apenas um), sem se importar particularmente com o modo como eles aparecem; portanto, se isso não estiver alinhado com o que você deseja, Dragbox (que eu não vi até recentemente) ainda pode ser melhor para você. Ainda ontem, eu adicionei o suporte para usá-lo como um alvo de arrasto, para que essa parte não tenha tido muito uso do meu lado. Fora isso, porém, estou usando isso com sucesso há um tempo. Existem outros modos e opções descritos no arquivo leia-me.

Michael Homer
fonte
Obrigado! Demorou segundos para construir / instalar! Eu vou usar isso! A opção --target é uma explosão!
Bom, pequeno e binário independente. Com pequeno Makefile agradável. Perfeito. Obrigado!
ctn
1
Você é um herói. Essa ferramenta também está disponível no AUR sob o nome dragon-drag-and-drop-git.
FichteFoll
Eu te amo! comunidade arco ama U! obrigado! Eu estava procurando por isso há séculos.
yukashima huksay 29/06
28

Obrigado a @derobert por me recomendar o aplicativo Dragbox.

Dragbox faz exatamente o que eu preciso. Por exemplo, tenho uma pasta com vários arquivos .png que gostaria de poder arrastar para o Chromium. Dentro dessa pasta, a execução dragbox *.pngcria esta janela:

Uma janela da GUI com os nomes de vários arquivos listados

Posso usar o mouse para arrastar arquivos de lá para o Chromium, e ele funciona perfeitamente. No entanto, chegar a esse ponto foi uma dor. Pelo que sei, o Dragbox suporta oficialmente apenas sistemas Debian. Não consegui encontrá-lo em nenhum lugar que funcionasse nativamente para Arch. Então, escrevi um guia passo a passo para fazer o Dragbox funcionar no Arch Linux. Isso é quase exatamente o que eu fiz na minha máquina, com algumas modificações para seguir as melhores práticas. Se houver algum erro em algum lugar, você pode procurar no histórico de edições desta resposta para ver exatamente o que fiz na minha máquina.

  1. Clone a fonte do Dragbox para o seu computador executando git clone https://github.com/engla/dragbox.git
  2. Haverá um novo diretório chamado dragboxcriado dentro do seu diretório de trabalho atual. Ir para dentro.
  3. A instalação do Dragbox e Dragbox requer o Python 2, que é padrão no Arch Linux. No entanto, espera que o Python 2 seja a instalação padrão do Python, o que não é verdade no Arch. Contornar esta executando export PYTHON=/bin/python2. Até você fechar sua janela de terminal atual, a variável de ambiente $PYTHONterá o valor /bin/python2. Os scripts de instalação do Dragbox verificam isso e o usarão no Python 3.
  4. Executar ./autogen.sh, ./configure, makee make install. make installdeve ser feito com privilégios de root (por exemplo sudo make install).
  5. O Dragbox agora está instalado no seu computador, mas tentará usar o Python 3 para executar. Com privilégios de root, abra /usr/local/bin/dragboxem um editor de texto. Modifique o shebang (a primeira linha, que informa ao seu shell com qual executável executar o script) de #!/usr/bin/env pythonpara #!/usr/bin/env python2.
  6. O script está funcionando agora, mas não consegue encontrar o módulo que contém o programa real. Existem algumas maneiras de corrigir isso.

    1. Inclua no seu ~/.bashrcou semelhante uma linha de leitura export PYTHONPATH=$PYTHONPATH:imediatamente (como em, nem mesmo um espaço no meio) seguiu o meu caminho para um diretório. O Python agora procurará nesse diretório ao tentar importar módulos. Dentro do diretório criado na etapa 1, haverá um diretório chamado Dropbox/(com D maiúsculo). Copie esse diretório para o diretório que você adicionou ao seu $PYTHONPATH(por exemplo, se você escreveu export PYTHONPATH=$PYTHONPATH:~/python/modules, copie o Dragbox/diretório para criar ~/python/modules/Dragbox/).

    2. Provavelmente é uma prática pior, mas você pode copiar esse mesmo diretório para um diretório já existente no seu $PYTHONPATH. Por exemplo, você pode copiá-lo para criar /usr/lib/python2.7/site-packages/.

Se você seguiu essas etapas, o Dragbox deve estar funcionando! Agora você pode executar man dragboxpara aprender mais sobre como usá-lo e iniciá-lo simplesmente digitando dragbox.

undergroundmonorail
fonte
2
Na verdade, a utilização /usr/bin/env python2é a maneira recomendada atualmente, desde que o PEP 394 foi adotado.
Gilles 'SO- stop be evil'
1
Você não precisa da segunda correção. Simplesmente copie o Dragboxdiretório para PYTHONPATHalgum lugar (como no python2 site-packages , no sistema ou por usuário). Essa linha é executada apenas quando dragboxnão é possível importar esse pacote.
Bakuriu
@ Beth Bem, eu acho. Eu criei um script python executado em um sistema ligeiramente diferente do que foi projetado, que ainda continha python: P Fico feliz que seja python, no entanto, já que é a única linguagem na qual sou fluente o suficiente para fazer isso acontecer.
Undergroundmonorail
2
Com o Archlinux, a solução real para esse tipo de coisa é criar um PKGBUILD . Você faz o que fez em grande parte, mas o coloca em um script especial que permite pacmangerenciar os arquivos para que você não precise mexer no sistema, caso deseje atualizá-lo ou removê-lo.
HalosGhost
1
Dragbox parece estar morto. O git-repo se foi.
kaleissin 21/03
6

Você pode navegar facilmente pelo sistema de arquivos no seu navegador, usando a sintaxe:

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

Abra o caminho em uma guia vazia e de lá você pode arrastar e soltar seu arquivo. Pelo menos com chrome / chromium, não há outros navegadores aqui para experimentar.

Mr Shunz
fonte
Isto não está funcionando para mim, mas não posso dizer se é um problema com o método que você descrever ou um problema com o userscript que quer me deixar cair coisas no ...
undergroundmonorail
Eu acho que há uma opção de linha de comando ou um atributo no chrome que você precisa habilitar para permitir isso.
slm
Seria chrome://flagso lugar certo para procurar algo assim? É para onde estou olhando no momento.
Undergroundmonorail
@undergroundmonorail mmm você está certo, eu apenas tentei com a demo em dropzonejs.com e não funciona. Definitivamente, poderia ser um problema de permissão
Sr. Shunz 18/06/2014
4

Apenas resolvi o problema sozinho.

Muito possivelmente, a maneira mais fácil é usar a caixa de diálogo "Abrir arquivo ...". Você pode simplesmente arrastar e soltar na caixa de diálogo do arquivo gtk, como um gerenciador de arquivos.

Pode ser necessário abrir uma janela separada para garantir que a caixa de diálogo não roube a tela.

É isso aí. Tão fácil.

tinha o mesmo problema
fonte
Impressionante! Não há necessidade de instalar nada. Estou usando o Firefox, então não consigo clicar no menu, mas Ctrl + o funciona muito bem.
Milan Babuškov 06/10