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`? Their use cases are: press(CTRL + 'a') press(ENTER) press(ALT + 'f', 's') enter("Hello World!") enter("test.txt", into="File name")
Thanks, Michael On Thursday, November 22, 2012 7:00:55 PM UTC+1, Michael Herrmann wrote: > Dear all, > > > > thank you for your replies. After experimenting with your suggestions, we > have arrived at a solution that we believe fits well with our existing API. > However, before we implement this solution, we would like to ask you one last > time to sign off on our proposal or raise any serious problems you see with > it. > > > > We took the fact that naming our one function 'type' was so difficult to name > as an indicator that it may be trying to do too many things: On the one hand, > it allows you to enter plain text as in `type("Hello World!")`; on the other > hand, it lets you press single keys, possibly in combination with control > keys as for instance in `type(CTRL + 'a')`. We believe it won't normally be > necessary to combine the two. For instance, while you could see what > > type(CTRL + 'a' + "Hello World!") > > does, we think you would be more likely to use the two separate calls > > type(CTRL + 'a') > > type("Hello World!") > > > > One of the main goals of our automation product is that using it should feel > like giving instructions to a human being looking over their shoulder at a > screen. For this reason, it's very useful for us if the function names in our > API are short, if possible without underscores, and close to the vocabulary > you would use in an everyday conversation. We hope that by offering an API > with this property, we can not only make it easier to use for experienced > programmers such as yourself, but also be approachable for people from a less > technical background. > > > > In our gut feeling, the words apart from `type` that would most normally be > used in an everyday conversation to express the three examples I have given > in my first mail are: > > press(CTRL + 'a') > > enter("Hello World") > > press(ENTER) > > > > We really quite like the word `type`, and a few people here seem to favour it > too. In particular, Steven: We're glad you accidentally clicked on our mail. > Thank you for your inputs and the great quote by Phil Karlton. We think you > were right in everything you said. However, some people seem to be *really* > put off when you override a built-in function. Even though of course you can > avoid the overriding by saying > > from automa.api import type *as* ..., > > (as Tim pointed out) we'd like to avoid irritating those people. For this > reason, we would rather not use `type`. > > > > Many people here voted for send_keys(...). We agree with Dave and Neil that > `type` may have too many uses already. As Chris and MRAB pointed out, > 'send_keys' is used in many other automation tools. This makes it intuitive > for people with knowledge of such tools. However, as I said above (and should > have probably said earlier), we are also trying to reach users from a less > technical background. Since these people would not normally use 'send_keys' > in an everyday conversion, we are afraid that it would not be an intuitive > name for them. A similar argument applies to some extent to our 'type_keys', > to our 'generate_keystrokes', Ramit's 'simulate_keypress', > 'simulate_key(s)_down', 'send_kb_press', 'fake_typing' and 'send_char(s)' and > Tim's 'feedkeys'. We thank you for your suggestions. Hopefully you can also > agree with our choice! > > > > Some suggestions were very nice, short and pretty unambiguous, such as > Dennis' `emit` and particularly Alan's `strike`. However, they're > unfortunately also rather rarely used and we'd be afraid that it'd be hard to > remember them. Thank you though! > > > > A final point that Evan made and that also we find very important is to have > verbs in our function names. > > > > Our proposed solution is to split what we previously called `type` into two > functions, 'press' and 'enter' (proposed by xDog Walker). 'press' could be > used to press single keys or combinations of them, at once: > > press(CTRL + 'a') > > press(ENTER) > > To open a menu via the keyboard, you could also supply several key > combinations to be pressed, in sequence: > > press(ALT + 'f', 's') > > 'enter' on the other hand would be used to enter longer strings of plain text: > > enter("Hello World!") > > With a functionality we already have, you could supply an optional 'into' > parameter that selects a text field into which the text is entered: > > enter("test.txt", into="File name") > > 'enter' currently does involve generating same system events that are fired > when pressing (and releasing) sequences of keys. However, we did not want to > include this technical detail in the function name - it keeps the name > shorter, makes it more intuitive for users from a less technical background > and also leaves us to change this implementation detail in the future. > > > > These names aren't perfect. As Emile rightly pointed out, several tools > distinguish between 'press' and 'release' and a user might wonder how to > release a key that was pressed using 'press'. That's an ambiguity that is > certainly there, however we hope that once the user has at least seen > > press(ENTER) > > it is clear what is meant. Distinguishing between pressing and releasing > could we think easily be done with, say > > hold_down(SHIFT) > > ... > > release(SHIFT) > > Another ambiguity of 'press' that I pointed out in my original mail is that > it could also be understood as "pressing a button". The current idea is to > raise a ValueError if the user supplies a string that is longer than one > character: > > >>> press("OK") > > ValueError: 'press' generates keystrokes and can only press single > letters at a time. Did you maybe mean click("OK") or press('O', 'K')? > > > > What do you think of this solution? I hope anybody read this far. I probably > shouldn't have written that much but wanted to do justice to your inputs. > > > > Thanks! > > > > Michael > > > > On Tuesday, November 20, 2012 1:18:38 PM UTC+1, Michael Herrmann wrote: > > > Hi, > > > > > > > > > > > > I'm developing a GUI Automation library (http://www.getautoma.com) and am > > having difficulty picking a name for the function that simulates key > > strokes. I currently have it as 'type' but that clashes with the built-in > > function. Example uses of 'type': > > > > > > > > > > > > type(ENTER) > > > > > > > > > > > > type("Hello World!") > > > > > > > > > > > > type(CTRL + 'a') > > > > > > > > > > > > What, in your view, would be the most intuitive alternative name? > > > > > > > > > > > > Here are my thoughts so far: I could call it 'press' but then our GUI > > automation tool also allows you to click things and then "press" might be > > mistaken for "pressing a button". A less ambiguous alternative is > > "type_keys" but that is rather long and doesn't read as well, for instance > > in type_keys(ENTER). > > > > > > > > > > > > Thank you very much! -- http://mail.python.org/mailman/listinfo/python-list