无需拖动即可拖放

无需拖动即可拖放

我有时需要将文件拖放到应用程序上。 (例子— 但我的问题不是安装 Chrome 用户脚本。)一种解决方案是使用 Dragbox,这将打开一个窗口,我可以从中拖动命令行上指定的文件。

这很好,但我想减少必要的鼠标交互。使用 Dragbox,我必须: 安排 Dragbox 和放置区域均可见;将鼠标光标移动到 Dragbox 显示文件的位置;按鼠标左键;将鼠标光标移动到放置区域;释放光标。

我想要一个更像复制粘贴的界面:运行类似的命令dragbox --more-magic foo,然后单击放置区域。或者运行命令,然后将焦点置于放置区域并按任意键。有一个程序可以做到这一点吗?甚至可以通过 Freedesktop 拖放来完成吗?

答案1

现在已经2019年了,但仍然...

这是我目前的截图工具。 xdotool 命令与如何自动拖动文件相关。

在此输入图像描述

这里是脚本(在示例中通过热键启动):

2.bin$ cat drag_into
#!/usr/bin/env bash
doc="$0 <filename|'shot'>

With filename: Drags given file to where the mouse is using dragon.
               Click to drop it (anywere).
With 'shot'  : File will be a shot of a an area to be selected.
               => 'drag_into shot' on a hotkey combo makes sense. 
"

cmd_shot="shot"
file=

exit_help () { echo -e "$doc"; exit 1; }

select_shot_area () {
    # create screen shot
    notify-send "Select area - we'll shoot it and drag to where the mouse is."
    cd "$HOME/Pictures/shots/" || exit 1
    rm -f "latest.png"
    scrot -s '%Y-%m-%d_$wx$h_scrot.png' -e 'ln -s $f latest.png'
    file="`readlink latest.png`"
}

main () {
    file="$1"
    test -z "$file" -o "$file" == "-h" && exit_help
    eval "$(xdotool getmouselocation --shell)" # into $X and $Y
    test "$file" == "$cmd_shot" && { select_shot_area || return 1; }
    killall dragon 2>/dev/null # No accidential drops of wrong items ...
    dragon --and-exit "$file" &
    while true; do
        xid="$(xdotool search --onlyvisible --class  dragon | head -n 2)"
        test -z "$xid" || break
        sleep 0.05
    done
    xdotool mousemove --sync -w "$xid" 1 1 mousedown 1 mousemove $X $Y
    notify-send "Click to drop $file..."
}

main "$@"

答案2

关于如何使用 drop 的示例

在试图弄清楚如何解决这个问题时发现了这个问题,我最终走上了开发满足我的需求的解决方案的道路。我想将其发布在这里,供将来可能对我提出的解决方案感兴趣的任何人使用。

你可以找到源降低这里。运行它:

$ git clone https://github.com/sillybanaja/drop.git
$ cd drop
$ make

对于上下文,我想要一种简单的方法将文件从终端拖放到窗口中,强制拖放而无需拖动文件或与 GUI 交互。

drop是用 C 语言编写的扩展库,这是一个在类 Unix 系统上广泛使用的轻量级库。drop将文件名列表作为参数,并允许您将它们拖放到任何支持 XDND(X 拖放)的应用程序上,而不需要您拖动文件。耶,少点击一下!

这是基本用法:drop filename ...,这是一个示例:

$ drop ~/Downloads/*.jpg file.txt /usr/local/bin/*

drop允许您使用“~/Downloads/*.jpg”等通配模式。按下 Enter 键后,您可以导航到目标窗口并单击要放置文件的位置。随时按 Esc 键即可关闭程序。

答案3

您可以使用为了这个任务。它是一个与网络浏览器交互的开源工具。假设您使用 Arch Linux 并想用 python 编写,请安装python-seleniumaur 包(或通过 pip: pip install selenium),然后运行pip install webdriver-manager(自动下载与您的浏览器版本匹配的所需驱动程序版本)。

硒偶不需要你拖动所需的文件,只需传递所需文件的绝对路径即可。当然,如果您愿意,您仍然可以模拟单击上传按钮,甚至向其中放置某些内容。

您可以与现存的(之前打开的)浏览器而不是打开新窗口。但在这种情况下,您可能需要使用我的解决方案用于选择当前 GUI 活动选项卡以对应于以编程方式选择的活动选项卡。

相关内容