10 sec poll - please reply!

Michael Herrmann michael.herrmann at getautoma.com
Sat Nov 24 21:56:12 CET 2012


Hi Steven,

press('s') is allowed. So is press('S') - it presses shift for you and is thus equivalent to press(SHIFT + 's'). You can write press('f', 's'). You cannot write press('fs') because that's what enter(...) is for. If you try - or, as I would deem more likely, happen do to it by mistake - you get the following warning:
	>>> press('fs')
	ValueError: 'press' generates single keystrokes and is not intended to be used for typing in long plain-text strings. Did you maybe mean one of the following?
	 * enter("fs")
	 * click("fs")
	 * press('f', 's')
I'm not aware of CTRL + i having a connection with TAB. You cannot use it to get a tab. We haven't decided on what to do when you press('\t'). If you want three tabs, you can write
	press(TAB, TAB, TAB)
If you want a tab, a letter and a newline, you can do
enter("""\tA 
\tB 
\tC 
""")
The reasoning is that you are entering plain text, that is a string that you would like to appear in the window you are typing into in the same way as you are supplying it to `enter`.

If you want to type "Hello World!" without entering it, you call
	enter("Hello World!")
Yes, I did write "call *enter* to do X *without entering*". You are hinting at a valid ambiguity with `enter` that Chris already pointed out. I don't think it's worse than the ambiguity of
	>>> type("Hello World!")
	<type 'str'>

We would need a new function for holding down keys to release them later. You are again pointing out an imho valid ambiguity. However, you were just happily using `press` with the understanding that it presses and releases keys, so I hope this one isn't too bad.

As I said, I opened a new thread solely for overriding `type` in the context of a GUI automation library: https://groups.google.com/forum/?fromgroups=#!topic/comp.lang.python/GjZ2hAS1Wyk. So far, 4/4 people there advised against it. If only Python hadn't defined `type`...

Michael

On Friday, November 23, 2012 11:30:04 PM UTC+1, Steven D'Aprano wrote:
> On Fri, 23 Nov 2012 05:42:22 -0800, Michael Herrmann wrote:
> 
> 
> 
> > Dear all,
> 
> > 
> 
> > the emails are getting kind of long so to ask you briefly: What do you
> 
> > think of splitting `type` into two functions `press` and `enter`?
> 
> 
> 
> This invites confusion as to the rules of when you can call `press` and 
> 
> when you can call `enter`. Especially since you haven't explained the 
> 
> rules, just given a bunch of non-exhaustive examples and invited people 
> 
> to extrapolate what the rules are.
> 
> 
> 
> (By the way, they aren't use-cases, they're examples.)
> 
> 
> 
> 
> 
> > Their use cases are:
> 
> >         press(CTRL + 'a')
> 
> >         press(ENTER)
> 
> >         press(ALT + 'f', 's')
> 
> >         enter("Hello World!")
> 
> >         enter("test.txt", into="File name")
> 
> 
> 
> 
> 
> Is `press('s')` allowed?
> 
> 
> 
> What about `press('S')`, or do I have to write `press(SHIFT + 's')`?
> 
> 
> 
> If I can write `press(ALT + 'f', 's')`, can I write `press('f', 's')`? If 
> 
> not, why not?
> 
> 
> 
> Can I write `press('fs')` as a simpler version of `press('f', 's')`? If 
> 
> not, why not?
> 
> 
> 
> Can I write `press(CTRL + 'i')` to get a tab? How about `press('\t')`?
> 
> 
> 
> If I want three tabs, can I write `press('\t\t\t')`, or do I have to write
> 
> 
> 
> press(CTRL + 'i')
> 
> press(CTRL + 'i')
> 
> press(CTRL + 'i')
> 
> 
> 
> If I want a tab, a letter, and a newline, repeated three times, can I do 
> 
> this?
> 
> 
> 
> press("""\tA
> 
> \tB
> 
> \tC
> 
> """)
> 
> 
> 
> Or do I have to do this?
> 
> 
> 
> press(CTRL + 'i')
> 
> enter('A')
> 
> press(CTRL + 'i')
> 
> enter('B')
> 
> press(CTRL + 'i')
> 
> enter('C')
> 
> 
> 
> Speaking of enter, how do I type "Hello World!" without entering it? If I 
> 
> want to type "Hello World!" without ENTER, do I have to do this?
> 
> 
> 
> press('H')
> 
> press('e')
> 
> press('l')
> 
> press('l')
> 
> ... you get the picture
> 
> 
> 
> 
> 
> With a function named "press", I would expect to be able to say:
> 
> 
> 
> press('a')
> 
> time.sleep(5)
> 
> release('a')
> 
> 
> 
> How do I do something like that?
> 
> 
> 
> 
> 
> 
> 
> -- 
> 
> Steven


More information about the Python-list mailing list