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

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

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

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

Existe uma maneira de 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áfico exclusivamente para colocar arquivos em meu navegador, mas gostaria de evitar essa solução.

Responder1

Eu tive exatamente o mesmo problema há alguns meses e, finalmente, escrevi uma ferramenta para fazer isso por mim. Quando vi isso e descobri que outra pessoa estava com a mesma coceira, limpei-o para que outra pessoa além de mim pudesse colocá-lo em funcionamento e terminei minha lista de tarefas. O código está ativo agora:https://github.com/mwh/dragon

Para obtê-lo, corra

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 colocar $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, gerenciador de arquivos, editor ou qualquer outro lugar que utilize o protocolo padrão de arrastar e soltar.

Se você quiser ir para o outro lado e arrastar as coisasempara ele, use --target- eles serão impressos na saída padrão ou estarão disponíveis para serem arrastados novamente, se você usar --keeptambém.


Para compilar você precisará de um compilador C e dos cabeçalhos de desenvolvimento GTK+ 3 - se você estiver no Arch, você os obterá apenas instalando o GTK+, mas em outras distribuições você pode precisar apt-get install build-essentials libgtk3-devou yum install gtk3-develsimilar primeiro. Fora isso, é totalmente independente, sem bibliotecas constituintes nem nada, e você pode simplesmente colocar o executável onde quiser.

Meu caso de uso consiste principalmente em arrastar apenas alguns arquivos (geralmente apenas um), sem me importar particularmente com como eles aparecem, então se isso não estiver alinhado com o que você deseja, então o Dragbox (que eu não vi até recentemente) ainda pode ser melhor para você. Ontem mesmo adicionei o suporte para usá-lo como alvo de arrastar também, então essa parte não teve muita utilidade para mim. Fora isso, porém, já uso isso com sucesso há algum tempo. Existem outros modos e opções descritos no arquivo leia-me.

Responder2

Obrigado a @derobert por me recomendar o aplicativo Dragbox.

Caixa de arrastofaz 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 GUI com os nomes de vários arquivos listados

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

  1. Clone a fonte do Dragbox para o seu computador executandogit 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 do Dragbox requer Python 2, que vem como 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. Contorne isso executando export PYTHON=/bin/python2. Até você fechar a janela do terminal atual, a variável de ambiente $PYTHONterá o valor /bin/python2. Os scripts de instalação do Dragbox verificam isso e irão usá-lo no Python 3.
  4. Execute ./autogen.sh, ./configure, makee make install. make installdeve ser feito com privilégios de root (por exemplo sudo make install).
  5. Dragbox agora está instalado no seu computador, mas tentará usar o Python 3 para rodar. 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 agora está funcionando, 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 similar uma leitura de linha export PYTHONPATH=$PYTHONPATH:imediatamente (como em, nem mesmo um espaço entre) seguindo o caminho para um diretório. O Python agora irá 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 o mesmo diretório para um diretório que já esteja no seu arquivo $PYTHONPATH. Por exemplo, você pode copiá-lo para criar um arquivo /usr/lib/python2.7/site-packages/.

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

Responder3

Acabei de resolver 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. Tão fácil.

Responder4

Você pode iniciar a caixa de diálogo do arquivo GTK usando uma ferramenta de linha de comando e zenityarrastar e soltar a partir daí.

Exemplo:

zenity --file-selection

informação relacionada