`xdotools type`은 캐리지 리턴을 파괴합니다.

`xdotools type`은 캐리지 리턴을 파괴합니다.

복사된 텍스트(예: 스크립트 및 구성 파일)를 가상 게스트 및 그래픽 클라이언트(예: VNC)를 실행하는 원격 세션을 포함하여 모든 종류의 애플리케이션에 붙여넣을 수 있는 붙여넣기 기능을 설정하고 싶습니다. 불가능합니다).

이를 달성하기 위해 Desktop Manager의 바로 가기를 다음 명령과 연결했습니다.

sh -c 'sleep 1; xdotool type -- "$(xsel -bo)"'

이것은 작동하지만 특정 응용 프로그램에서만 작동합니다(슬프게도 VNC는 응용 프로그램의 일부가 아닙니다. 잔인한 세상입니다!).

  • 이것을 사용하여 localhost vi실행 에 텍스트를 붙여 넣으면 xterm완벽하게 작동합니다. 파일의 내용이 예상대로 보존되고 작성됩니다. 이것은 또한 에서 완벽하게 작동하는 것 같습니다 gnome-terminal.
  • 예를 들어, localhost 에서 계속 실행 중인 경우 vi모든 캐리지 리턴이 손상됩니다.xfce4-terminal
  • 마찬가지로 VNC를 통해 임의의 애플리케이션(포함)에 텍스트를 붙여넣으려고 하면 xterm텍스트가 올바르게 입력되지만 여기서는 모두 한 줄에 표시됩니다.

이상한 점은 다음 명령을 다른 키보드 단축키에 추가하는 것입니다.

sh -c 'sleep 1; xdotool key Return'

이렇게 하면 xdotool모든 응용 프로그램에 캐리지 리턴 문자를 입력할 수 있으므로 기술적으로 가능합니다.

나는 캐리지 리턴을 강제하는 추악한 해결 방법으로 이것을 구축하려고 시도했습니다.

sh -c 'sleep 1; xsel -bo | { while read -r LINE; do xdotool type -- "$LINE"; xdotool key Return; done; }'

이제 캐리지 리턴이 "작동"하므로 이 해결 방법은 이제 탭을 깨뜨리고 항상 최종 캐리지 리턴을 원하지 않기 때문에 모든 경우에 마음에 들지 않습니다(예: 제출 시 즉시 없이 웹 양식 필드를 작성할 때). .

나도 같은 문제가 있는 것 같아이 남자, 하지만 불행히도 스레드에는 설명이 없습니다.

뭐가 문제 야? 어떻게 해야 하나요? 아니면 어떤 이유로든 불가능하다면 다른 방법은 없을까요?초기 요구 사항에 대한 대안은 무엇입니까?

답변1

역사적인 이유로 줄 바꿈을 나타내는 두 가지 문자가 있습니다. 즉, 줄 바꿈 문자(일반적으로 LF, \n, \012, Ctrl+J,...로 표시됨)와 캐리지 리턴 문자(CR, \r, \015, Ctrl+M)입니다. Unix는 LF를 줄 종결자로 사용하지만 키보드는 를 누르면 CR을 보냅니다 Return. 일부 응용 프로그램은 Linefeed키(PC 시장용으로 설계되지 않은 일부 희귀 키보드에 있음)를 인식할 수 있지만 이는 드뭅니다.

Linefeed실험적으로 xdotool은 문자열에 개행 문자가 있을 때 키를 보냅니다 . 일부 앱이 이를 인식하지 못한다는 사실은 놀랍지 않습니다. Return줄바꿈을 캐리지 리턴으로 대체하여 전송하도록 할 수 있습니다 .

sleep 1; xdotool type -- "$(xsel -bo | tr \\n \\r | sed s/\\r*\$//)"

해결 방법도 효과가 있을 수 있습니다. IFSNULL로 설정합니다 . 그렇지 않으면 read각 줄에서 앞뒤 공백이 제거됩니다(그래서 탭이 사라집니다). 그리고 Return마지막 줄 이후에는 보내지 마세요 . (이것은 명령 대체 방법과 엄격하게 동일하지 않습니다. 명령 대체를 사용하면 모든 후행 공백 행이 제거됩니다. 다음 방법을 사용하면 마지막 개행 문자(있는 경우)만 무시됩니다.

sleep 1
xsel -bo | {
  IFS= read -r LINE;
  xdotool type -- "$LINE";
  while IFS= read -r LINE; do
    xdotool key Return;
    xdotool type -- "$LINE";
  done;
}

참고: VNC에서는 아무것도 시도하지 않았으므로 상황이 다를 수 있습니다.

관련 정보