Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python3
- import sys
- #this encodes key layout on a wired, extended silver apple keyboard, european style
- #(euro key, mark-sign-and-cmd, alt-and-junction-sign, ctrl, §± left-top, `~ next to
- # small shift in left-bottom)
- keyskip=1.9 #normal small keys
- rowheight=1.85
- keywid=1.5
- keyhei=1.5
- rightedge=27.2
- bottomedge=8.9
- layoutlist=[] #list of (lowercase char,(x,y,w,h))
- for i,c in enumerate("§1234567890-="):
- layoutlist.append((c,(keyskip*i,0,keywid,keyhei)))
- layoutlist.append(("\b",(keyskip*13,0,2.5,keyhei)))
- layoutlist.append(("\t",(0,rowheight,2.5,keyhei)))
- for i,c in enumerate("qwertyuiop[]"):
- layoutlist.append((c,(2.8+keyskip*i,rowheight,keywid,keyhei)))
- layoutlist.append(("caps",(0,2*rowheight,3,keyhei)))
- for i,c in enumerate("asdfghjkl;'\\"):
- layoutlist.append((c,(3.3+keyskip*i,2*rowheight,keywid,keyhei)))
- layoutlist.append(("\n",(3.3+keyskip*12,rowheight,1.1,rowheight+keyhei)))
- layoutlist.append(("shift",(0,3*rowheight,2,keyhei)))
- for i,c in enumerate("`zxcvbnm,./"):
- layoutlist.append((c,(2.4+keyskip*i,3*rowheight,keywid,keyhei)))
- layoutlist.append(("shift",(2.4+keyskip*11,rowheight*3,3.8,keyhei)))
- layoutlist.append(("ctrl",(0,rowheight*4,2.5,keyhei)))
- layoutlist.append(("alt",(2.8,rowheight*4,2.1,keyhei)))
- layoutlist.append(("cmd",(5.2,rowheight*4,2.5,keyhei)))
- layoutlist.append((" ",(8,rowheight*4,11.1,keyhei)))
- layoutlist.append(("cmd",(19.4,rowheight*4,2.5,keyhei)))
- layoutlist.append(("alt",(22.2,rowheight*4,2.1,keyhei)))
- layoutlist.append(("ctrl",(24.6,rowheight*4,2.5,keyhei)))
- for i,v in enumerate(layoutlist):
- layoutlist[i]=(v[0],tuple(round(x,2) for x in v[1]))
- layoutdict=dict(layoutlist)
- modkeys=["shift","ctrl","alt","cmd","caps"]
- uptolow={"±":"§","!":"1","@":"2","#":"3","$":"4","%":"5","^":"6","&":"7","*":"8","(":"9",")":"0","_":"-","+":"=","Q":"q","W":"w","E":"e","R":"r","T":"t","Y":"y","U":"u","I":"i","O":"o","P":"p","{":"[","}":"]","A":"a","S":"s","D":"d","F":"f","G":"g","H":"h","J":"j","K":"k","L":"l",":":";","\"":"'","|":"\\","~":"`","Z":"z","X":"x","C":"c","V":"v","B":"b","N":"n","M":"m","<":",",">":".","?":"/"}
- lowtoup=dict((low,up) for up,low in uptolow.items())
- capslockenabled=False
- def keybyxy(x,y):
- for (key,pos) in layoutlist:
- if x>=pos[0] and x<=pos[0]+pos[2] and y>=pos[1] and y<=pos[1]+pos[3]:
- return key
- mindistsq=float("inf")
- minat=None
- for (key,pos) in layoutlist:
- distsq=(pos[0]+pos[2]/2-x)*(pos[0]+pos[2]/2-x)+(pos[1]+pos[3]/2-y)*(pos[1]+pos[3]/2-y)
- if distsq<mindistsq:
- mindistsq=distsq
- minat=key
- return key
- def flipkey(c):
- global capslockenabled
- try:
- c=uptolow[c]
- return flipkey("shift")+flipkey(c)
- except:
- pass
- try: x,y,w,h=layoutdict[c]
- except: return c
- key=keybyxy(rightedge-(x+w/2),bottomedge-(y+h/2))
- assert key!=None
- if key=="caps":
- capslockenabled=not capslockenabled
- if key in modkeys: key=""
- if capslockenabled: key=key.upper()
- return key
- for line in sys.stdin:
- print("".join(flipkey(c) for c in line[:-1]))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement