omz:forum

    • Register
    • Login
    • Search
    • Recent
    • Popular

    Welcome!

    This is the community forum for my apps Pythonista and Editorial.

    For individual support questions, you can also send an email. If you have a very short question or just want to say hello — I'm @olemoritz on Twitter.


    Disable word completion suggestion/pop-up feature

    Pythonista
    4
    22
    7055
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • mieq
      mieq @cvp last edited by

      @cvp haha,never mind.

      cvp 2 Replies Last reply Reply Quote 0
      • cvp
        cvp @mieq last edited by

        @mieq you could always foresee your js snippets in the snippets settings and edit your js file renamed as a .py, and rename it into .js at the end.

        1 Reply Last reply Reply Quote 1
        • cvp
          cvp @mieq last edited by

          @mieq I just spent more than one hour to try to find a way in objectiveC by analyzing some methods of the tab editor view but without any success.

          mieq 1 Reply Last reply Reply Quote 0
          • mieq
            mieq @cvp last edited by

            @cvp Never Mind,I will try the rename method.Thanks a lot.

            cvp 2 Replies Last reply Reply Quote 0
            • cvp
              cvp @mieq last edited by

              @mieq Just to prove that I have made progress, although quite useless since without success.
              Try this

              from objc_util import *
              
              @on_main_thread
              def main():
              	win = UIApplication.sharedApplication().keyWindow()
              	root_vc = win.rootViewController()
              	tabs_vc = root_vc.detailViewController()
              	tab = tabs_vc.selectedTabViewController()
              	for snippet in tab.editorView().completionProvider().snippets():
              		print(snippet)
              		
              if __name__ == '__main__':
              	main()
              
              1 Reply Last reply Reply Quote 0
              • cvp
                cvp @mieq last edited by cvp

                @mieq could I have some of your js snippets? And about how much snippets do you want to use?

                mieq 1 Reply Last reply Reply Quote 0
                • mieq
                  mieq @cvp last edited by

                  @cvp In fact, I just discovered Pythonista's snippets and thought it would be great if it worked on all files. (But even apart from that, Pythonista is a very good text editor.) So I didn't actually create any snippets.

                  cvp 1 Reply Last reply Reply Quote 0
                  • cvp
                    cvp @mieq last edited by cvp

                    @mieq Haha 😂
                    Anyway, could you try this script as wrench/tool and tap it when you are editing an html or JavaScript file.
                    It will provide you a keyboard with additional keys, instead of snippets, to generate some lines.
                    Try each additional keys, given as example.

                    import editor
                    from   objc_util import *
                    import ui
                    
                    
                    def key_pressed(sender):
                    		import ui
                    		from objc_util import ObjCClass
                    		tv = sender.objc_instance.firstResponder()	# associated TextView
                    		tv.insertText_(sender.data)	
                    		return
                    		
                    class MyView(ui.View):
                    	def __init__(self, pad, *args, **kwargs):
                    		#super().__init__(self, *args, **kwargs)	
                    		self.width = ui.get_screen_size()[0]			# width of keyboard = screen
                    		self.background_color = 'lightgray'#(0,1,0,0.2)
                    		self.h_button = 32	
                    		self.pad = pad
                    		
                    		# build buttons
                    		for pad_elem in self.pad:
                    			if pad_elem['key'] in ('nul', 'new row'):		#  free space or new row
                    				continue
                    			button = ui.Button()									# Button for user functionnality
                    			button.name = pad_elem['key']
                    			button.background_color = 'white'			# or any other color
                    			button.tint_color = 'black'
                    			button.corner_radius = 5		
                    			button.font = ('<system>',self.h_button - 8)
                    			button.title = pad_elem['key']
                    			if 'icon' in pad_elem:
                    				button.image = ui.Image.named(pad_elem['icon']).with_rendering_mode(ui.RENDERING_MODE_ORIGINAL)
                    			if 'data' in pad_elem:
                    				button.data = pad_elem['data']
                    			else:
                    				button.data = button.title
                    
                    			if '\n' in button.title:
                    				ObjCInstance(button).button().titleLabel().setLineBreakMode(0) # NSLineBreakByWordWrapping)
                    			button.action = key_pressed
                    			retain_global(button) # see https://forum.omz-software.com/topic/4653/button-action-not-called-when-view-is-added-to-native-view
                    			self.add_subview(button)	
                    		self.layout()		
                    
                    	def layout(self):
                    		import ui
                    		#print('layout')
                    		# supports changing orientation
                    		#print(ui.get_screen_size())
                    		dx = 8
                    		dy = 2
                    		x0 = 15
                    		y0 = 10
                    		dx_middle = 25 
                    		y = y0
                    		x = x0
                    		w_button = (ui.get_screen_size()[0] - 2*x0 - 17*dx - dx_middle)/18
                    		for pad_elem in self.pad:
                    			nw = pad_elem.get('width', 1)
                    			wb = w_button*nw + dx*(nw-1)
                    			if (x + wb + dx) > self.width:
                    				y = y + self.h_button + dy
                    				x = x0
                    			if pad_elem['key'] == 'nul':					# let free space	
                    				x = x + wb + dx	
                    				continue
                    			elif pad_elem['key'] == 'new row':		# new row
                    				y = y + self.h_button + dy
                    				x = x0
                    				continue
                    			button = self[pad_elem['key']]
                    			xb = x + dx_middle if (x+wb) > self.width/2 else x
                    			button.frame = (xb,y,wb,self.h_button)
                    			if button.title != '':
                    				font_size = self.h_button - 8
                    				while True:
                    					d = ui.measure_string(button.title,font=(button.font[0],font_size))[0]+4
                    					if d <= wb:
                    						break
                    					font_size = font_size - 1			
                    			button.font = (button.font[0],font_size)
                    			x = x + wb + dx
                    		self.height = y + self.h_button + dy	
                    	
                    @on_main_thread	
                    def AddButtonsToPythonistaKeyboard(pad=None):
                    	if not pad:
                    		pad = [
                    		{'key':'<html>\n\n</html>','width':1},
                    		{'key':'<head>\n\n</head>','width':1},
                    		{'key':'<style>\n\n</style>','width':1},
                    		{'key':'<body>\n\n</body>','width':1},
                    		{'key':'<script>\n\n</script>','data':'<script>...</script>','width':1},
                    		{'key':'nul'},
                    		{'key':'for','data':'for () { \n}'},
                    		{'key':'if','data':'if () {\n\n} else {\n\n}'},
                    
                    #		{'key':'new row'},
                    #		{'key':'nul'},
                    #		{'key':'nul'},
                    #		{'key':'nul'}
                    		]
                    		
                    	ev = editor._get_editor_tab().editorView()
                    	tv = ev.textView()
                    	#print(tv._get_objc_classname())
                    	#print(dir(tv))
                    	
                    	# create ui.View for InputAccessoryView above keyboard
                    	v = MyView(pad)												# view above keyboard
                    	vo = ObjCInstance(v)									# get ObjectiveC object of v
                    	retain_global(v) # see https://forum.omz-software.com/topic/4653/button-action-not-called-when-view-is-added-to-native-view
                    	tv.setInputAccessoryView_(vo)	# attach accessory to textview
                    	tv.strfind = ''
                    			
                    if __name__ == '__main__':	
                    	AddButtonsToPythonistaKeyboard()
                    

                    mieq 1 Reply Last reply Reply Quote 1
                    • mieq
                      mieq @cvp last edited by

                      @cvp This is awesome,😍 Thank you so much!

                      cvp 1 Reply Last reply Reply Quote 0
                      • cvp
                        cvp @mieq last edited by

                        @mieq of course, my script is not very professional and you have to know you can add your own keys, even on several rows.
                        Keys have their face with the text of 'key' (or an icon) and generates the text of 'data' if present, else of 'key'.

                        1 Reply Last reply Reply Quote 0
                        • cvp
                          cvp last edited by cvp

                          Inverting data and key for <script> with double width

                          		{'data':'<script>\n\n</script>','key':'<script>...</script>','width':2},
                          

                          Gives

                          And generates

                          <script>
                          
                          </script>
                          
                          mieq 1 Reply Last reply Reply Quote 2
                          • mieq
                            mieq @cvp last edited by

                            @cvp understand,thanks.

                            1 Reply Last reply Reply Quote 0
                            • First post
                              Last post
                            Powered by NodeBB Forums | Contributors