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 -- http://mail.python.org/mailman/listinfo/python-list