about summary refs log tree commit diff stats
path: root/examples/plugin_ipc.py
diff options
context:
space:
mode:
authorWojciech Siewierski <wojciech.siewierski@onet.pl>2015-06-21 10:46:43 +0200
committerWojciech Siewierski <wojciech.siewierski@onet.pl>2015-06-21 10:47:54 +0200
commiteed176768789208537b6bb8e97f08ef3d4b148fe (patch)
tree970704f15aeb0d81f205fc224353f1a82b6fe0c3 /examples/plugin_ipc.py
parentdb7c728b71bce950b4683dca16d85fbc55bd2c42 (diff)
downloadranger-eed176768789208537b6bb8e97f08ef3d4b148fe.tar.gz
added examples/plugin_ipc.py
Diffstat (limited to 'examples/plugin_ipc.py')
-rw-r--r--examples/plugin_ipc.py45
1 files changed, 45 insertions, 0 deletions
diff --git a/examples/plugin_ipc.py b/examples/plugin_ipc.py
new file mode 100644
index 00000000..a9e79205
--- /dev/null
+++ b/examples/plugin_ipc.py
@@ -0,0 +1,45 @@
+# Tested with ranger 1.7.0 through ranger 1.7.*
+#
+# This plugin creates a FIFO in /tmp/ranger-ipc.<PID> to which any
+# other program may write. Lines written to this file are evaluated by
+# ranger as the ranger :commands.
+#
+# Example:
+#   $ echo tab_new ~/images > /tmp/ranger-ipc.1234
+
+import ranger.api
+
+old_hook_init = ranger.api.hook_init
+def hook_init(fm):
+    try:
+        # Create a FIFO.
+        import os
+        IPC_FIFO = "/tmp/ranger-ipc." + str(os.getpid())
+        os.mkfifo(IPC_FIFO)
+
+        # Start the reader thread.
+        try:
+            import thread
+        except ImportError:
+            import _thread as thread
+        def ipc_reader(filepath):
+            while True:
+                with open(filepath, 'r') as fifo:
+                    line = fifo.read()
+                    fm.execute_console(line.strip())
+        thread.start_new_thread(ipc_reader, (IPC_FIFO,))
+
+        # Remove the FIFO on ranger exit.
+        def ipc_cleanup(filepath):
+            try:
+                os.unlink(filepath)
+            except IOError:
+                pass
+        import atexit
+        atexit.register(ipc_cleanup, IPC_FIFO)
+    except IOError:
+        # IPC support disabled
+        pass
+    finally:
+        old_hook_init(fm)
+ranger.api.hook_init = hook_init