2013-04-04 98 views
2

我在Ubuntu 12.04上的WINE上运行Foxit Reader。我想将文本复制并粘贴到书签中,但我需要将其大写(例如,融合变为Fusion)。我想按F5并运行一个python脚本。我知道这是可能的Autokey,但后者有一个documented bug剪贴板处理。在Linux中获取和设置X11剪贴板

所以,现在我正在寻找Autokey的剪贴板替代品。如果我的python脚本运行一个shell,那么shell可能会访问剪贴板? xclip看起来很有希望,但其文档中提到:“从标准或一个或多个文件中读取数据,并将数据作为X选择粘贴到X应用程序中。”我不需要标准或文件;我需要适当的X11剪贴板(又名选择)。

简而言之,python或shell如何读取现有的X11剪贴板?

回答

2
xclip -o | sed 's/^./\U&/g' | xclip -i 

这将读取X剪贴板,利用的内容和覆盖它

+0

我用下面的缩进代码为SE:'XCLIP -o | sed's:^::g'| xclip选择剪贴板。 – 2013-04-04 22:51:36

+0

这比我的详细。谢谢! – 2013-04-04 22:57:50

+0

@醇厚 - 黄色,如果没有更好的表现出来,它解决了你的问题,可以自由地接受它作为答案;-)(p.s.我删除了-e,因为它是没有必要的) – 2013-04-05 10:07:17

1

我意识到-o参数读取的选择,但你必须指定你需要:

xclip -selection clipboard -o 

从那里,我用这个StackOverflow answer。它很好地工作。

#read clipboard, avoid autokey's get_selection bug 
tag = subprocess.Popen(["xclip","-selection", "clipboard", "-o"],stdout=subprocess.PIPE).communicate()[0] 

#https://stackoverflow.com/questions/764360/a-list-of-string-replacements-in-python 
mapping = { "'":'', ',':'', '"':'', ';':'', '(':'', ')':'', '.':'', '-':' '} 
for k, v in mapping.iteritems(): 
    tag = tag.replace(k, v) 

#Camelcase, remove spaces, and append Caesar tag 
tag=tag.title().replace(' ','')+"_"