<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Zach Dwiel &#187; script</title>
	<atom:link href="http://dwiel.net/blog/category/script/feed/" rel="self" type="application/rss+xml" />
	<link>http://dwiel.net</link>
	<description>Repository of code snippits and ideas</description>
	<lastBuildDate>Fri, 06 Jan 2012 03:36:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Single Instance Application with command line interface</title>
		<link>http://dwiel.net/blog/single-instance-application-with-command-line-interface/</link>
		<comments>http://dwiel.net/blog/single-instance-application-with-command-line-interface/#comments</comments>
		<pubDate>Wed, 18 Feb 2009 01:39:36 +0000</pubDate>
		<dc:creator>dwiel</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[script]]></category>

		<guid isPermaLink="false">http://dwiel.net/?p=95</guid>
		<description><![CDATA[I wanted a python gtk application to open a new window on its first execution and then have subsequent executions send their command line arguments to the initial application rather than starting a new one. Here is the template which provides that functionality: download singleinstanceapp.py &#160; &#34;&#34;&#34; This will only spawn one gtk application at [...]]]></description>
			<content:encoded><![CDATA[<p>I wanted a python gtk application to open a new window on its first execution and then have subsequent executions send their command line arguments to the initial application rather than starting a new one.  Here is the template which provides that functionality:</p>
<p>download <a href="http://dwiel.net/files/singleinstanceapp.py">singleinstanceapp.py</a></p>
<pre class="python">&nbsp;
<span style="color: #483d8b;">&quot;&quot;</span><span style="color: #483d8b;">&quot;
This will only spawn one gtk application at a time.  If this command is executed
while an instance is already running, the command line arguments are sent to the
already running application.
&quot;</span><span style="color: #483d8b;">&quot;&quot;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">sys</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">import</span> pygtk
pygtk.<span style="color: black;">require</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'2.0'</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">import</span> gtk
&nbsp;
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">socket</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">threading</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">SocketServer</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> ThreadedTCPRequestHandler<span style="color: black;">&#40;</span><span style="color: #dc143c;">SocketServer</span>.<span style="color: black;">BaseRequestHandler</span><span style="color: black;">&#41;</span>:
	<span style="color: #ff7700;font-weight:bold;">def</span> handle<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
		data = <span style="color: #008000;">self</span>.<span style="color: black;">request</span>.<span style="color: black;">recv</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">1024</span><span style="color: black;">&#41;</span>
		cur_thread = <span style="color: #dc143c;">threading</span>.<span style="color: black;">currentThread</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;"># do something with the request:</span>
		<span style="color: #008000;">self</span>.<span style="color: black;">server</span>.<span style="color: black;">app</span>.<span style="color: black;">label</span>.<span style="color: black;">set_label</span><span style="color: black;">&#40;</span>data<span style="color: black;">&#41;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;"># could instead of the length of the input, could return error codes, more</span>
		<span style="color: #808080; font-style: italic;"># information (if the request was a query), etc.  Using a length function</span>
		<span style="color: #808080; font-style: italic;"># as a simple example</span>
		response = <span style="color: #483d8b;">'string length: %d'</span> % <span style="color: #008000;">len</span><span style="color: black;">&#40;</span>data<span style="color: black;">&#41;</span>
&nbsp;
		<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'responding to'</span>,data,<span style="color: #483d8b;">'with'</span>,response
		<span style="color: #008000;">self</span>.<span style="color: black;">request</span>.<span style="color: black;">send</span><span style="color: black;">&#40;</span>response<span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> ThreadedTCPServer<span style="color: black;">&#40;</span><span style="color: #dc143c;">SocketServer</span>.<span style="color: black;">ThreadingMixIn</span>, <span style="color: #dc143c;">SocketServer</span>.<span style="color: black;">TCPServer</span><span style="color: black;">&#41;</span>:
	stopped = <span style="color: #008000;">False</span>
	allow_reuse_address = <span style="color: #008000;">True</span>
&nbsp;
	<span style="color: #ff7700;font-weight:bold;">def</span> serve_forever<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
		<span style="color: #ff7700;font-weight:bold;">while</span> <span style="color: #ff7700;font-weight:bold;">not</span> <span style="color: #008000;">self</span>.<span style="color: black;">stopped</span>:
			<span style="color: #008000;">self</span>.<span style="color: black;">handle_request</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
	<span style="color: #ff7700;font-weight:bold;">def</span> force_stop<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
		<span style="color: #008000;">self</span>.<span style="color: black;">server_close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
		<span style="color: #008000;">self</span>.<span style="color: black;">stopped</span> = <span style="color: #008000;">True</span>
		<span style="color: #008000;">self</span>.<span style="color: black;">create_dummy_request</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
	<span style="color: #ff7700;font-weight:bold;">def</span> create_dummy_request<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
		client<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">server_address</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>, <span style="color: #008000;">self</span>.<span style="color: black;">server_address</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span>, <span style="color: #483d8b;">'last message for you'</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> client<span style="color: black;">&#40;</span>ip, port, message<span style="color: black;">&#41;</span>:
	sock = <span style="color: #dc143c;">socket</span>.<span style="color: #dc143c;">socket</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">socket</span>.<span style="color: black;">AF_INET</span>, <span style="color: #dc143c;">socket</span>.<span style="color: black;">SOCK_STREAM</span><span style="color: black;">&#41;</span>
	sock.<span style="color: black;">connect</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span>ip, port<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
	sock.<span style="color: black;">send</span><span style="color: black;">&#40;</span>message<span style="color: black;">&#41;</span>
	response = sock.<span style="color: black;">recv</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">1024</span><span style="color: black;">&#41;</span>
	<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Received: %s&quot;</span> % response
	sock.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> start_server<span style="color: black;">&#40;</span>host, port<span style="color: black;">&#41;</span>:
&nbsp;
	server = ThreadedTCPServer<span style="color: black;">&#40;</span><span style="color: black;">&#40;</span>host, port<span style="color: black;">&#41;</span>, ThreadedTCPRequestHandler<span style="color: black;">&#41;</span>
	ip, port = server.<span style="color: black;">server_address</span>
&nbsp;
	<span style="color: #808080; font-style: italic;"># Start a thread with the server -- that thread will then start one</span>
	<span style="color: #808080; font-style: italic;"># more thread for each request</span>
	server_thread = <span style="color: #dc143c;">threading</span>.<span style="color: black;">Thread</span><span style="color: black;">&#40;</span>target=server.<span style="color: black;">serve_forever</span><span style="color: black;">&#41;</span>
	<span style="color: #808080; font-style: italic;"># Exit the server thread when the main thread terminates</span>
	server_thread.<span style="color: black;">setDaemon</span><span style="color: black;">&#40;</span><span style="color: #008000;">True</span><span style="color: black;">&#41;</span>
	server_thread.<span style="color: black;">start</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
	<span style="color: #ff7700;font-weight:bold;">return</span> server
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> SingleInstanceApp:
	<span style="color: #ff7700;font-weight:bold;">def</span> destroy<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, widget, data=<span style="color: #008000;">None</span><span style="color: black;">&#41;</span>:
		<span style="color: #008000;">self</span>.<span style="color: black;">server</span>.<span style="color: black;">force_stop</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
		gtk.<span style="color: black;">main_quit</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
		<span style="color: #808080; font-style: italic;">#exit(1) # I'm sorry but mozembed is making a huge pain in my ass</span>
&nbsp;
	<span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, server<span style="color: black;">&#41;</span>:
		<span style="color: #008000;">self</span>.<span style="color: black;">server</span> = server
&nbsp;
		<span style="color: #808080; font-style: italic;"># create a new window</span>
		<span style="color: #008000;">self</span>.<span style="color: black;">window</span> = gtk.<span style="color: black;">Window</span><span style="color: black;">&#40;</span>gtk.<span style="color: black;">WINDOW_TOPLEVEL</span><span style="color: black;">&#41;</span>
		<span style="color: #008000;">self</span>.<span style="color: black;">window</span>.<span style="color: black;">set_default_size</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">300</span>,<span style="color: #ff4500;">30</span><span style="color: black;">&#41;</span>
		<span style="color: #008000;">self</span>.<span style="color: black;">window</span>.<span style="color: black;">connect</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;destroy&quot;</span>, <span style="color: #008000;">self</span>.<span style="color: black;">destroy</span><span style="color: black;">&#41;</span>
&nbsp;
		<span style="color: #008000;">self</span>.<span style="color: black;">label</span> = gtk.<span style="color: black;">Label</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;hello world&quot;</span><span style="color: black;">&#41;</span>
		<span style="color: #008000;">self</span>.<span style="color: black;">window</span>.<span style="color: black;">add</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">label</span><span style="color: black;">&#41;</span>
&nbsp;
		<span style="color: #008000;">self</span>.<span style="color: black;">window</span>.<span style="color: black;">show_all</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;"># and the window</span>
		<span style="color: #008000;">self</span>.<span style="color: black;">window</span>.<span style="color: black;">show</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
	<span style="color: #ff7700;font-weight:bold;">def</span> main<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
		gtk.<span style="color: black;">gdk</span>.<span style="color: black;">threads_init</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
		gtk.<span style="color: black;">main</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">if</span> __name__ == <span style="color: #483d8b;">&quot;__main__&quot;</span>:
	<span style="color: #808080; font-style: italic;"># pick some high port number here.  Should probably put this into a file</span>
	<span style="color: #808080; font-style: italic;"># somewhere.</span>
	HOST, PORT = <span style="color: #483d8b;">&quot;localhost&quot;</span>, <span style="color: #ff4500;">50010</span>
&nbsp;
	server = <span style="color: #008000;">None</span>
	<span style="color: #ff7700;font-weight:bold;">try</span> :
		client<span style="color: black;">&#40;</span>HOST, PORT, <span style="color: #483d8b;">' '</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">sys</span>.<span style="color: black;">argv</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
		<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'an insance was already open'</span>
	<span style="color: #ff7700;font-weight:bold;">except</span> <span style="color: #dc143c;">socket</span>.<span style="color: black;">error</span> :
		exceptionType, exceptionValue, exceptionTraceback = <span style="color: #dc143c;">sys</span>.<span style="color: black;">exc_info</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
		<span style="color: #ff7700;font-weight:bold;">if</span> exceptionValue<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span> == <span style="color: #ff4500;">111</span> :
			<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'this is the first instance'</span>
			server = start_server<span style="color: black;">&#40;</span>HOST, PORT<span style="color: black;">&#41;</span>
		<span style="color: #ff7700;font-weight:bold;">else</span> :
			<span style="color: #808080; font-style: italic;"># don't actually know what happened ...</span>
			<span style="color: #ff7700;font-weight:bold;">raise</span>
&nbsp;
		app = SingleInstanceApp<span style="color: black;">&#40;</span>server<span style="color: black;">&#41;</span>
		server.<span style="color: black;">app</span> = app
		app.<span style="color: black;">main</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;</pre>
<p>The first execution of this script starts an asynchronous server on a predetermined port.  This port is checked each time the script is run to see if another instance has already been started.  If it has, the command line arguments are sent to the existing instance which can react to them however you want.</p>
<p>download <a href="http://dwiel.net/files/singleinstanceapp.py">singleinstanceapp.py</a></p>
]]></content:encoded>
			<wfw:commentRss>http://dwiel.net/blog/single-instance-application-with-command-line-interface/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Script to center the current window (linux)</title>
		<link>http://dwiel.net/blog/script-to-center-the-current-window-linux/</link>
		<comments>http://dwiel.net/blog/script-to-center-the-current-window-linux/#comments</comments>
		<pubDate>Sat, 08 Nov 2008 02:49:05 +0000</pubDate>
		<dc:creator>dwiel</dc:creator>
				<category><![CDATA[script]]></category>
		<category><![CDATA[desktop]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[patch]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[wmctrl]]></category>

		<guid isPermaLink="false">http://dwiel.net/?p=55</guid>
		<description><![CDATA[Just remembered that I hadn't published this script that I use fairly often which centers the currently active window on the screen using wmctrl (requires the patch provided) wmctrl-patch center_active_window.py]]></description>
			<content:encoded><![CDATA[<p>Just remembered that I hadn't published this script that I use fairly often which centers the currently active window on the screen using wmctrl (requires the patch provided)</p>
<p><a href="http://dwiel.net/wp-content/uploads/2008/11/wmctrl.diffs">wmctrl-patch</a></p>
<p><a href="http://dwiel.net/wp-content/uploads/2008/11/center_active_window.py">center_active_window.py</a></p>
]]></content:encoded>
			<wfw:commentRss>http://dwiel.net/blog/script-to-center-the-current-window-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

