Changing Clipboard Data From The Shell

From WebOS Internals

Jump to: navigation, search


Changing Clipboard Data From The Shell

When you use the copy and paste function on your Pre the string has to go somewhere. Right? Well, from what I learned from tharris which was that the string goes to a file called webkit-clipboard which is located in the /tmp directory.


Manual Steps

Step One: Access the Linux portion of your Pre

Step Two: Edit your clipboard file (you need to at least copy and paste something once for the file to show up)

vi /tmp/webkit-clipboard

Step Three: Save it.

Tip: for more info on how to use vi, remember Google is your friend...

By: JRG


WebOS Clipboard Buddy

WebOS Clipboard Buddy is a very simple pyGTK app that allows you to easily copy data between your desktop's clipboard and the Pre's clipboard. Feel free to improve upon it. Currently this is Linux only, though it should be trivial to get working under windows. It currently requires that you have the SDK installed (specifically that novacom is functional and available at /usr/local/bin/novacom/novacom).

#!/usr/bin/env python

# Copyright (c) 2009 James Hines

# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation
# files (the "Software"), to deal in the Software without
# restriction, including without limitation the rights to use,
# copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following
# conditions:

# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.

# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
# OTHER DEALINGS IN THE SOFTWARE.


import gtk
import pygtk
import commands
from subprocess import *

DEBUG=True

def quit_cb(widget, data = None):
    if data:
        data.set_visible(False)
        gtk.main_quit()
        
def popup_menu_cb(widget, button, time, data = None):
    if button == 3:
        if data:
            data.show_all()
            data.popup(None, None, None, 3, time)
            pass

def pre_to_clipboard_cb(widget):
    clipboard = gtk.clipboard_get(gtk.gdk.SELECTION_CLIPBOARD)
    result = commands.getstatusoutput('/usr/local/bin/novacom/novacom get file:///tmp/webkit-clipboard')
    if DEBUG:
        print result
    text = result[1]
    clipboard.set_text(text)

def clipboard_to_pre_cb(widget):
    clipboard = gtk.clipboard_get(gtk.gdk.SELECTION_CLIPBOARD)
    clipboard.request_text(push_to_pre)

def push_to_pre(clipboard, text, data):
    pre = Popen(["/usr/local/bin/novacom/novacom", "put", "file:///tmp/webkit-clipboard"], stdin=PIPE, stdout=PIPE)
    pre_output = pre.communicate(text)
    if DEBUG:
        print pre_output
    

def about_icon_cb(widget, data = None):
    msgBox = gtk.MessageDialog(parent = None, buttons = gtk.BUTTONS_OK, message_format = "WebOS Clipboard Agent\nVersion 1.1.0\nCopyright 2009, James Hines.")
    msgBox.run()
    msgBox.destroy()
    
statusIcon = gtk.StatusIcon()
    
menu = gtk.Menu()
menuItem = gtk.MenuItem(label = "Copy from Pre")
menuItem.connect('activate', pre_to_clipboard_cb)
menu.append(menuItem)
menuItem = gtk.MenuItem(label = "Copy to Pre")
menuItem.connect('activate', clipboard_to_pre_cb)
menu.append(menuItem)
menuItem = gtk.SeparatorMenuItem()
menu.append(menuItem)
menuItem = gtk.ImageMenuItem(gtk.STOCK_ABOUT)
menuItem.connect('activate', about_icon_cb)
menu.append(menuItem)
menuItem = gtk.ImageMenuItem(gtk.STOCK_QUIT)
menuItem.connect('activate', quit_cb, statusIcon)
menu.append(menuItem)
    
statusIcon.set_from_stock(gtk.STOCK_PASTE)
statusIcon.set_tooltip("WebOS Clipboard Agent")
statusIcon.connect('popup-menu', popup_menu_cb, menu)
statusIcon.set_visible(True)
    
gtk.main()
Personal tools
Google AdSense