我有时需要将文件拖放到应用程序上。 (例子— 但我的问题不是安装 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
在试图弄清楚如何解决这个问题时发现了这个问题,我最终走上了开发满足我的需求的解决方案的道路。我想将其发布在这里,供将来可能对我提出的解决方案感兴趣的任何人使用。
你可以找到源降低这里。运行它:
$ 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-selenium
aur 包(或通过 pip: pip install selenium
),然后运行pip install webdriver-manager
(自动下载与您的浏览器版本匹配的所需驱动程序版本)。
硒偶不需要你拖动所需的文件,只需传递所需文件的绝对路径即可。当然,如果您愿意,您仍然可以模拟单击上传按钮,甚至向其中放置某些内容。
您可以与现存的(之前打开的)浏览器而不是打开新窗口。但在这种情况下,您可能需要使用我的解决方案用于选择当前 GUI 活动选项卡以对应于以编程方式选择的活动选项卡。