Blender 无法将文本复制到 WM 剪贴板,如何修复?

Blender 无法将文本复制到 WM 剪贴板,如何修复?

原始问题:如何将文本/数字字段值复制到 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 正常工作的方式清除不必要的内容。

相关内容