[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Stumped by pasting to another application in linux
From: |
Bill Rising |
Subject: |
Stumped by pasting to another application in linux |
Date: |
Wed, 15 Nov 2017 13:38:36 -0600 |
Hi all,
I've been getting very vexed by the following.
Goal: Take the clipboard contents and paste them into another application by
using a shell script called by Emacs, followed by a Return. [This is for
entering a command in another application.]
Problem: A shell script using automation tools (to simulate typing) which works
from a Terminal window acts goofy when called by Emacs, because all paste
actions happen only after the Emacs function has completed, so the Return
precedes the pasting. [Negating the value of entering the command from Emacs.]
I put steps to illustrate the problem below.
The simplified example uses -xdotool-, but I had the same problem when using
-xte-. The example pastes into gedit, but the problem exists for other
applications as well. Finally, I tried both (shell-command) and
(call-process-shell-command) and tried all possible settings of
select-enable-clipboard and select-enable-primary, all to no avail. If only I
could trip the paste before the Return, I would be happy.
FWIW, I've tried such things as shell-scripts calling shell-scripts and emacs
functions calling emacs functions, but all I can get is having the paste happen
at the very end. I'm clearly very lost.
Any ideas about how to get the paste to happen when it happens in the script?
Thanks,
Bill
Steps to duplicate problem, because the explanation above is likely not
sufficient.
Here is hunh.sh---copy, paste, save it, make it executable.
---------------------------- cut here ----------------------------
#!/bin/bash
xdotool search --name --onlyvisible "gedit" windowactivate
# select text to replace
xdotool key ctrl+a
# paste in the clipboard
xdotool key ctrl+v
# do stupid stuff before finally hitting Return, so that it's clear
# that the paste (ctrl-v) gets misplaced
xdotool key space space h u n h
sleep 1
xdotool key BackSpace BackSpace BackSpace BackSpace BackSpace BackSpace
sleep 1
xdotool key Return
---------------------------- cut here ----------------------------
Here is in hunh.el. Copy it, paste it, save it as hunh.el, then load it in Emacs
---------------------------- cut here ----------------------------
(defun hunh ()
(interactive)
(funcall interprogram-cut-function "Fighting with clipboards is no fun")
(shell-command "hunh.sh")
)
---------------------------- cut here ----------------------------
Be sure that you have xdotool.
Assuming you have it, open a single window for gedit.
Type a bunch of garbage in the gedit window so that it can get replaced later.
Run the script hunh.sh from the place you're working
./hunh.sh
--> Everything will work fine, with the text being replaced, some extra typing
and deleting, and then a Return.
Start emacs
Within emacs, load hunh.el, then run its one function
M-x hunh
--> The text in gedit will be replaced with the extra typing and deleting, then
a Return, and finally the paste of the text.
smime.p7s
Description: S/MIME cryptographic signature
- Stumped by pasting to another application in linux,
Bill Rising <=