-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathclipstack.py
More file actions
35 lines (31 loc) · 1.07 KB
/
clipstack.py
File metadata and controls
35 lines (31 loc) · 1.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import sqlite3, pyperclip, os.path, subprocess, sys
conn = sqlite3.connect(os.path.expanduser("~/.local/share/clipstack.sqlite3"))
conn.executescript("""CREATE TABLE IF NOT EXISTS stack (pos INTEGER PRIMARY KEY, data BLOB NOT NULL)""")
def push(data):
c = conn.cursor()
c.execute("SELECT max(pos) FROM stack")
res = c.fetchone()[0]
if res == None: nxt = 0
else: nxt = res + 1
c.execute("INSERT INTO stack VALUES (?, ?)", (nxt, data))
conn.commit()
def pop():
c = conn.cursor()
c.execute("SELECT * FROM stack ORDER BY pos DESC LIMIT 1")
res = c.fetchone()
if not res: return
pos, data = res
c.execute("DELETE FROM stack WHERE pos = ?", (pos,))
return data
conn.commit()
mode = sys.argv[1]
if mode == "push":
proc = subprocess.run(["xclip", "-selection", "clipboard", "-o"], stdout=subprocess.PIPE)
if proc.returncode == 0:
push(proc.stdout)
print("push")
elif mode == "pop":
data = pop()
if data:
proc = subprocess.run(["xclip", "-selection", "clipboard"], input=data)
print("pop")