def main(): v = CharsView(frame=(0, 0, 320, 40)) if keyboard.is_keyboard(): keyboard.set_view(v, 'current') else: v.name = 'Keyboard Preview' v.present('sheet')
def input(): inputdata = request.forms.getunicode( 'input') # 以unicode编码获取提交的数据,否则中文将会是乱码 print(inputdata) # 输出以便在控制台调试时观察 if keyboard.is_keyboard(): # 判断是否是在键盘中运行 keyboard.insert_text(inputdata) # 将提交的数据插入当前光标位置 return redirect('/') # 重定向到输入页面,今后将前端页面的数据提交以Ajax异步提交来实现以后可省去重定向
def main(): if not keyboard.is_keyboard(): return text = keyboard.get_selected_text() clipboard.set(text)
def main(): if not keyboard.is_keyboard(): return delete_selection() move_to_first_letter_of_line() delete_line()
def main(): if not keyboard.is_keyboard(): return text = clipboard.get() if not text: return keyboard.insert_text(text)
def main(): if not keyboard.is_keyboard(): return text = keyboard.get_selected_text() clipboard.set(text) if text: # clear selection keyboard.insert_text(' ') keyboard.backspace(1)
def main(): if not keyboard.is_keyboard(): return text = keyboard.get_selected_text() if not text: dialogs.hud_alert('No text selected', 'error') return new_text = text.title() keyboard.insert_text(new_text)
def main(): if not keyboard.is_keyboard(): return text = keyboard.get_selected_text() if not text: dialogs.hud_alert('No text selected', 'error') return newText = quote(text, safe=':/') keyboard.insert_text(newText)
def main(): if not keyboard.is_keyboard(): return selected_text = keyboard.get_selected_text() if selected_text: keyboard.backspace(1) tpl = keyboard.get_input_context() left = tpl[0] delete_count = len(left) keyboard.backspace(delete_count)
def main(): if not keyboard.is_keyboard(): return selected_text = keyboard.get_selected_text() if selected_text: keyboard.backspace(1) tpl = keyboard.get_input_context() right = tpl[1] delete_count = len(right) keyboard.move_cursor(delete_count) keyboard.backspace(delete_count)
def main(): if not keyboard.is_keyboard(): return text = keyboard.get_selected_text() if not text: dialogs.hud_alert('No text selected', 'error') return url = f'shortcuts://run-shortcut?name=テキストを連携&input={text}' newUrl = quote(url, safe=':/') webbrowser.open(newUrl)
def main(): if PythonistaVersion >= 3.3: if keyboard.is_keyboard(): v = BrailleKeyboardInputAccessoryViewForTextField() v.custom_keyboard = True keyboard.set_view(v, 'expanded') return # Before Pythonista supporting keyboard or run in Pythonista app w, h = ui.get_screen_size() mv = ui.View() mv.name = 'Test keyboard in Pythonista' mv.background_color = 'white' tf = ui.TextField() tf.text = '' tf.frame = (2, 2, w - 4, 32) mv.add_subview(tf) tfo = ObjCInstance( tf).textField() # UITextField is subview of ui.TextField kv = ui.View() kv.frame = (0, 0, w, min(363, h * (3 / 5))) unused = ' unused, only to simulate height of custom keyboard with Pythonista 3.3' kv.add_subview(ui.Label(frame=(0, 0, w, kv.height / 7), text=unused)) kv.background_color = 'lightgray' frame = (0, kv.height / 7, w, kv.height * 5 / 7) v = BrailleKeyboardInputAccessoryViewForTextField(frame=frame) v.custom_keyboard = False kv.add_subview(v) kv.add_subview( ui.Label(frame=(0, v.y + v.height, w, kv.height / 7), text=unused)) tfo.setInputView_(ObjCInstance(kv)) v.tf = tf v.tfo = ObjCInstance( tf).textField() # UITextField is subview of ui.TextField # view of keyboard retain_global( v ) # see https://forum.omz-software.com/topic/4653/button-action-not-called-when-view-is-added-to-native-view # remove undo/redo/paste BarButtons above standard keyboard tfo.inputAssistantItem().setLeadingBarButtonGroups(None) tfo.inputAssistantItem().setTrailingBarButtonGroups(None) mv.present('full_screen') tf.begin_editing() mv.wait_modal()
def button_action(self, sender): if sender.title == '⏎': self.bw = 125 FILE = open(f'Options.txt', "r+", encoding="utf-8") for line in FILE: line = line.replace('\n', '') self.dict[line] = 'Options' self.Rebuild(self.dict, 125) return if sender.title == 'Faces': self.bw = 125 FILE = open(f'{sender.title}.txt', "r+", encoding="utf-8") for line in FILE: line = line.replace('\n', '') if line.strip() == '': continue self.dict[line] = line self.Rebuild(self.dict, 40) return if sender.name == 'Options': self.bw = 125 FILE = open(f'{sender.title}.txt', "r+", encoding="utf-8") for line in FILE: line = line.replace('\n', '') if line.strip() == '': continue if ':' in line: k, v = line.split(':') self.dict[k] = '⏎' + v else: self.dict[line[0]] = '⏎' + line self.Rebuild(self.dict, 40) return if sender.name == sender.title: self.bw = 40 if keyboard.is_keyboard(): keyboard.insert_text(sender.name) return else: print('Keyboard input:', sender.title) return if ':' not in sender.name: self.dict.clear() for char in sender.name: self.dict[char] = char self.Rebuild(self.dict, 40) return
def main(): if not keyboard.is_keyboard(): return dics = get_dics('Snippet Regular Expression.txt') items = [d['title'] + ' ' + d['desc'] for d in dics] selected_item = dialogs.list_dialog('select', items) if not selected_item: return idx = items.index(selected_item) new_text = dics[idx]['title'] keyboard.insert_text(new_text)
def main(): if not keyboard.is_keyboard(): return selected_text = keyboard.get_selected_text() left, right = keyboard.get_input_context() delete_selection() move_to_first_letter_of_line() delete_line() # if column == 0, returns '\n' if left == '\n': left = '' cut_text = left + selected_text + right + '\n' clipboard.set(cut_text)
def main(): if not keyboard.is_keyboard(): print('This script is meant to be run in the Pythonista keyboard.') return # (phrase, shortcut) all = keyboard.get_text_replacements() snippets = [s[0] for s in all if s[1] == '☻'] snippets.sort() if len(snippets) == 0: dialogs.hud_alert('No Text Replacements') return selected = dialogs.list_dialog('Text Replacements', snippets) if selected: keyboard.insert_text(selected)
def run_search(): v['imageview1'].image = ui.Image('./src/logo.png') now = datetime.datetime.now() strnow = now.strftime('%H:%M:%S') v['nowtime'].text = strnow uitime = v['datepicker'].date minutes = uitime.strftime('%M') iminutes = int(minutes) if 0 < iminutes < 30: v['datepicker'].date = v['datepicker'].date + datetime.timedelta( minutes=30 - iminutes) elif 30 < iminutes < 60: v['datepicker'].date = v['datepicker'].date + datetime.timedelta( minutes=60 - iminutes) if keyboard.is_keyboard() == True: keyboard.set_view(v) else: v.present('sheet')
def __init__(self, server, localIP, port): self.server = server self.name = 'Keyboard Preview' # 仅在调试窗口中才看到窗口名 self.flex = 'WHTBLF' # 尺寸边距都设为自动,以便填充满整个键盘 # 创建iplabel以显示当前服务器运行的ip及端口 iplabel = ui.Label() iplabel.flex = 'WHTBLF' iplabel.text = "请在浏览器打开:" + localIP + ":" + str(port) iplabel.background_color = "#ffffff" iplabel.alignment = ui.ALIGN_CENTER # 之后还可以继续开发更多组件件加入主窗口 self.add_subview(iplabel) # 判断是否是在键盘中运行 if keyboard.is_keyboard(): keyboard.set_view(self, 'expanded') else: # 当在pythonista主应用中调试时启动: self.frame = (0, 0, 500, 200) self.present('sheet')
def main(): if not keyboard.is_keyboard(): return text = keyboard.get_selected_text() if not text: dialogs.hud_alert('No text selected', 'error') return snippets = get_dics('Surround Text.txt') selected = dialogs.list_dialog('select Replacements', snippets) if not selected: return m = re.match(r'^(.*)〜(.*)$', selected) if not m: return g = m.groups() left = g[0] right = g[1] newText = left + text + right keyboard.insert_text(newText)
def run_pass_auto(): global oldimg_url global oldtweet_id global oldtweet_name global oldtweet_text global exrep global switch global new global error_script global alpha_mode,img_mode,speed try: with open('./.option.csv', 'r', encoding='utf8') as (f): reader = csv.reader(f) for i in reader: alpha_mode = i[0] img_mode = i[1] sleep_time = 0.21-float(i[2])*0.2 print("***設定読み込み完了***") print("****オート起動****") except: console.alert('Pythonistaで先に設定して下さい。') sys.exit(3) try: f = open('.tw.txt', 'r') for row in f: settingtxt = row.strip() f.close() codes = re.split('#', settingtxt) au = convert_from_hash(codes[4]) except: print('Twitter連携が無効です\n') sys.exit() if not au==str(send_code*33): print('購入者コードが無効です\n') sys.exit() userid = url2id(url) add_api(1,userid) for i in range(2,6): tt = threading.Thread(target=add_api, args=(i,userid)) tt.start() time.sleep(0.15) tt.join() #print("****連携済み"+str(len(tw_api))+"個****") start_time = time.time() stpcount = 0 if len(tw_api) == 0: print("連携不足エラー") sys.exit() old = tweet_get(tw_api[0], userid, True) while old[1] == 'err': old = tweet_get(tw_api[0], userid, True) stpcount += 1 if stpcount == 5: print("ツイート取得できませんでした。") sys.exit() oldtweet_id = old[0] oldtweet_text = old[1] oldtweet_name = old[2] oldimg_url = old[3] print(oldtweet_name + 'のパスツイ待機中•••') new = tweet_get(tw_api[0], userid) mtweet_id = new[0] mtweet_text = new[1] mtweet_name = new[2] mimg_url = new[3] elapsed_time = 0 api_switch = 0 loop_count = 0 list_get = False while switch == 0: api_switch = api_switch%len(tw_api) if list_switch: list_get = not list_get t = threading.Thread(target=t_tweet_get, args=(tw_api[api_switch], userid, list_get)) t.start() mtweet_id = new[0] mtweet_text = new[1] mtweet_name = new[2] mimg_url = new[3] if not keyboard.is_keyboard(): print(mtweet_text) flag = check_passtweet(mtweet_text) if flag: ps = pass_auto(mtweet_id, mtweet_text, mimg_url) if keyboard.is_keyboard(): keyboard.backspace(10) keyboard.insert_text(ps) keyboard.insert_text('\n') print('****取得成功****\n' + ps) sound.play_effect('arcade:Coin_2', 0.10) switch = 1 try: mememe=tw_api[0].me() nowt = str(datetime.datetime.now()) error_script = "atweet_id x"+str(error_script.count('atweet_id'))+" ltweet_id x"+str(error_script.count('ltweet_id'))+error_script error_script = re.sub("local variable 'atweet_id' referenced before assignment","",error_script) error_script = re.sub("local variable 'ltweet_id' referenced before assignment","",error_script) stext = nowt[:nowt.find(".")]+'\nリストスイッチ:'+str(list_switch)+"\nエラー文\n"+error_script+"\nuser:@"+mememe.screen_name+"\nsleeptime:"+str(sleep_time)+"\ntweet:"+oldtweet_name+"\n"+oldtweet_text+"\n処理前テキスト\n"+mtweet_text+"\n処理後テキスト\n"+ps stext = urllib.parse.quote(stext) requests.get() except Exception as e: #print(e) pass api_switch+=1 time.sleep(sleep_time)
def main(): if not keyboard.is_keyboard(): return keyboard.move_cursor(1) keyboard.backspace(1)
def main(): if not keyboard.is_keyboard(): return url = 'copied://' webbrowser.open(url)
def run(ar1="",ar2="",ar3="1"): if keyboard.has_full_access()==False: console.hud_alert("フルアクセスを有効にしてください。","error") sys.exit() if __file__.count('Documents/XAUTO/master.py')==0: console.hud_alert("ファイル名もしくはDL場所が異なります。","error") sys.exit() impc=0 try: import requests_oauthlib except: shutil.move('./lib/oauthlib',libdir) impc += 1 try: import tweepy except: shutil.move('./lib/tweepy',libdir) impc += 1 try: from requests_oauthlib import OAuth1Session from urllib.parse import parse_qsl except: shutil.move('./lib/requests_oauthlib',libdir) shutil.move('./lib/socks.py',libdir) shutil.move('./lib/sockshandler.py',libdir) impc += 1 if impc > 0: print("+++++++++++++++\nタスクを切って\nPythonistaを再起動してください。\n+++++++++++++++") import sys sys.exit() if not keyboard.is_keyboard(): try: f = open('.tw.txt', 'r') for row in f: settingtxt = row.strip() f.close() codes = re.split('#', settingtxt) CK = convert_from_hash(codes[0]) CS = convert_from_hash(codes[1]) AT = convert_from_hash(codes[2]) AS = convert_from_hash(codes[3]) auth = tweepy.OAuthHandler(CK, CS) auth.set_access_token(AT, AS) tw_api = tweepy.API(auth) abc=tw_api.me() if not ar3 == "1": import sys import firstset firstset.link(ar1,ar2,ar3) sys.exit() except Exception as e: #print(e) import sys import firstset if len(ar1)==0: firstset.run_ui(e) sys.exit() else: firstset.link(ar1,ar2) sys.exit() import mainset mainset.main() else: import xauto
def main(): text = keyboard.get_selected_text() text = re.sub("^ ", "", text) text = re.sub(" <br>$", "", text) text = re.sub("<br>$|^<br>", "", text) text = re.sub("<u>|</u>", "", text) text = re.sub( "<td>|</td>|<tr>|</tr>|<tbody>|</tbody>|<table>|</table>|{|}", "", text) text = re.sub(r"(\D)(\d|\d\S\d|\d\S\S\S\d)(\s|$| |,\D|;|<)", r"\1<sup>\2</sup>\3", text) '''text = re.sub(" | ","",text)''' text = re.sub(" - | -- | –– ", " — ", text) text = re.sub("--|––", "—", text) text = text.replace("-", "–") text = text.replace("...", "…") text = re.sub("<div>", "<br>", text, 1) text = re.sub(r"(\S\D)(c|d|g|h|l|m|n|r|t|v)ize", r"\1\2ise", text) text = text.replace("avor", "avour") text = text.replace("honor", "honour") text = text.replace("color", "colour") text = text.replace("成语 saw", "idiom") text = re.sub( " </div><div>| <br>| <br>|</div><div>|<br />|<br/>", "<br>", text) text = text.replace("<br><br><br>", "<br><br>") text = re.sub("<div>|</div>", "", text) text = text.replace(" ", " ") text = text.replace(" / ", "/") text = re.sub(r"( |^)'(\b|<)", r"\1‘\2", text) text = re.sub(r"(\b|>)'(\s|\.|,|\))", r"\1’\2", text) text = text.replace("'", "’") text = re.sub(r"( |^)\"(\b|<)", r"\1“\2", text) text = re.sub(r"(\b|>)\"(\s|\.|,|\)|$)", r"\1”\2", text) text = re.sub( "\(Jyutping\)|\(jyutping\)", "[<a href=\"http://www.cantonese.sheik.co.uk/dictionary/characters/751/\">粵</a>]", text) text = re.sub( "\(Pinyin\)|\(pinyin\)", "[<a href=\"http://www.cantonese.sheik.co.uk/dictionary/characters/331/\">國</a>]", text) text = text.replace("msg–", "msg-") text = re.sub("<br>$|^<br>| $", "", text) text = re.sub("<br>$|^<br>| $", "", text) text = re.sub(" ", " ", text) if keyboard.is_keyboard(): keyboard.play_input_click() keyboard.insert_text(text) else: # For debugging in the main app: print(f'Keyboard input: {text}')
def main(): if not keyboard.is_keyboard(): return v = MyView() keyboard.set_view(v, 'expanded')