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

Reply via email to