原始问题:如何将文本/数字字段值复制到 Linux 上的 Blender v2.93.4 的剪贴板?https://blender.stackexchange.com/questions/239139/how-to-copy-a-text-numeric-field-value-to-clipboard-on-linux-for-blender-v2-93-4
我打开搅拌机,
单击立方体,
显示它的变换,
单击维度 X,
它选择文本“2 m”,
我输入 5,按 Enter 键,它显示“5 m”,我再次单击它,它选择“ 5 m”,
当鼠标位于“5”所选数字上方时,我按 ctrl+c,
我按 TAB(转到 Y 字段),
我按 ctrl+v 但粘贴了之前剪贴板上的内容,而不是“5 m” ”!如果我尝试的话,连“5”都没有!问题是它不能复制到剪贴板,它可以粘贴但不能复制到!
我为“text.copy”操作添加了几个键盘映射(除了 ctrl+c ctrl+insert 之外),例如鼠标移动、F5 等,但问题似乎是搅拌机无法将任何内容发送到 X 剪贴板。
我试图找到一种方法让它转储到终端或搅拌机信息,但我找不到一种方法让它精确地发生。
如果我运行搅拌机,blender --log "*undo*"
它会转储不精确的显示值,如“2.12 m”,而不是精确的完整值“2.12345”,它有帮助,但还不够。
如果可以精确地记录,如果可以精确地显示显示的值,也许它可以工作。
您还能想到任何其他可以让它发生的技巧吗?
gcore ... |strings
可以找到我在那里输入的唯一“纯文本”数字(选择文本时输入 3 次,未选择文本时输入一次),但附近没有可用作所选文本的线索/提示/挂钩的常量文本文本。可能是十六进制的东西?
我认为这可能是一些Python错误?但我还找不到搅拌机代码中的位置。
搅拌机 2.93.4 ubuntu 20.04
有关的:https://blender.stackexchange.com/questions/124294/clipboard-not-working-on-ubuntu-18-04-in-blender-2-79b,但没有任何帮助。
答案1
这是一个与 相关的问题parcellite
。
要使 Blender 和 Parcellite 兼容,您必须禁用 Parcellite 的“剪贴板/使用复制(Ctrl+C)”选项,并让它仅使用“Primary(选择)”来工作。
旧的矫枉过正的答案:
下面的脚本做了什么?
- 从鼠标选择中截取屏幕截图,
- 光学字符识别,
- 将其发送到剪贴板
- 或告知失败。
完全矫枉过正,但也可能适用于其他应用程序:
cat >copyThruOCR.sh
#!/bin/bash
echo "HELP:"
echo "depends on: scrot, tesseract, yad, xterm"
echo "bind this script to ex.: Alt+C using xbindkeys-config (remember to run xbindkeys just after)"
echo "use dark mode for best contrast on the application, so ex.: clicking the the field in blender will make it black background and white text!"
echo "tip: select more to the left than the limit of the text/number, works better"
echo "tip: select just below the text/number, if it is too much below it may just fail"
echo "it may still fail sometimes..."
set -x
FUNC() {
strFl="/tmp/`basename $0`.png";
rm "$strFl" "$strFl.txt"
bFail=false
str=""
strP=""
fSleep=0.25
iScrotRetryMax=8; # 2s
for((iScrotRetry=0;iScrotRetry<iScrotRetryMax;iScrotRetry++));do
if scrot -s "${strFl}";then break;fi
declare -p iScrotRetry
sleep $fSleep;
done
if [[ -f "${strFl}" ]];then
# if tesseract --dpi 300 --psm 8 "${strFl}" "$strFl";then
# if tesseract --dpi 300 "${strFl}" "$strFl";then
if tesseract --psm 6 "${strFl}" "$strFl" -c tessedit_char_whitelist="+-.0123456789" >/dev/null 2>&1;then
str="$(head -n 1 "${strFl}.txt")" #1st line
str="$(echo "$str" |cut -d " " -f1)" #1st word/column
str="$(echo "$str" |tr -d "\r\n ")" #remove anything invalid
echo "RESULT:"
echo "$str"
echo
echo "TextFile:"
cat "${strFl}.txt"
echo
if [[ -z "`echo -n "${str}" |tr -d '[:digit:].+-'`" ]];then #COMMENT this number check if you prefer everything
echo "COPYING TO CLIPBOARD: '${str}'"
echo -n "$str" |xclip -i -selection primary -rmlastnl;
echo -n "$str" |xclip -i -selection secondary -rmlastnl;
echo -n "$str" |xclip -i -selection clipboard -rmlastnl;
else
strP="PROBLEM: not a number"
bFail=true
fi
else
strP="PROBLEM: tesseract fail"
bFail=true
fi
else
strP="PROBLEM: scrot fail"
bFail=true
fi
echo "$strP"
if $bFail;then yad --geometry=100x50+0+0 --title "`basename $0` FAILED" --text "$strP. '$str'" --timeout 1 --ontop --center;fi #COMMENT to get no warning
read -p "press a key to exit (2s)..." -t 2 -n 1
};export -f FUNC;
xterm -geom 50x100+0+0 -e bash -c FUNC;exit #COMMENT to not show terminal log
FUNC
如果您可以改进它(使其更可靠),请留下您的提示以提供帮助!
我想让它自动抓取鼠标位置周围的矩形,问题是如何以 OCR 正常工作的方式清除不必要的内容。