Difference between revisions of "Os.pullEvent"
(Added event turtle_inventory for 1.55 update) |
(→Event types: Added modem_message) |
||
Line 78: | Line 78: | ||
! rowspan="2" | Name | ! rowspan="2" | Name | ||
! rowspan="2" | Description | ! rowspan="2" | Description | ||
− | ! colspan=" | + | ! colspan="5" | Parameters |
|- | |- | ||
− | ! 1 !! 2 !! 3 | + | ! 1 !! 2 !! 3 !! 4 !! 5 |
|- | |- | ||
! scope="row" | [[char (event)|char]] | ! scope="row" | [[char (event)|char]] | ||
|Fired when text is typed on the keyboard | |Fired when text is typed on the keyboard | ||
| {{type|string}} the letter typed | | {{type|string}} the letter typed | ||
+ | | | ||
+ | | | ||
| | | | ||
| | | | ||
Line 91: | Line 93: | ||
|Fired when a key is pressed on the keyboard | |Fired when a key is pressed on the keyboard | ||
|{{type|number}} numerical keycode | |{{type|number}} numerical keycode | ||
+ | | | ||
+ | | | ||
| | | | ||
| | | | ||
Line 97: | Line 101: | ||
|Fired when a timeout started by [[os.startTimer]]() completes | |Fired when a timeout started by [[os.startTimer]]() completes | ||
|{{type|number}} Value of the timer as returned by os.startTimer() | |{{type|number}} Value of the timer as returned by os.startTimer() | ||
+ | | | ||
+ | | | ||
| | | | ||
| | | | ||
Line 103: | Line 109: | ||
|Fired when a time passed to [[os.setAlarm]]() is reached | |Fired when a time passed to [[os.setAlarm]]() is reached | ||
|{{type|number}} Value of the alarm as returned by os.setAlarm() | |{{type|number}} Value of the alarm as returned by os.setAlarm() | ||
+ | | | ||
+ | | | ||
| | | | ||
| | | | ||
Line 108: | Line 116: | ||
! scope="row" | [[redstone (event)|redstone]] | ! scope="row" | [[redstone (event)|redstone]] | ||
|Fired when the state of any of the redstone inputs change | |Fired when the state of any of the redstone inputs change | ||
+ | | | ||
+ | | | ||
| | | | ||
| | | | ||
Line 115: | Line 125: | ||
|Fired when a combination of keys CTRL and T is pressed and held for three seconds. | |Fired when a combination of keys CTRL and T is pressed and held for three seconds. | ||
You will not normally see this event, as it is handled inside os.pullEvent. | You will not normally see this event, as it is handled inside os.pullEvent. | ||
+ | | | ||
+ | | | ||
| | | | ||
| | | | ||
Line 122: | Line 134: | ||
|Fired when a disk is inserted into an adjacent disk drive | |Fired when a disk is inserted into an adjacent disk drive | ||
|{{type|string}} side | |{{type|string}} side | ||
+ | | | ||
+ | | | ||
| | | | ||
| | | | ||
Line 128: | Line 142: | ||
|Fired when a disk is removed from an adjacent disk drive | |Fired when a disk is removed from an adjacent disk drive | ||
|{{type|string}} side | |{{type|string}} side | ||
+ | | | ||
+ | | | ||
| | | | ||
| | | | ||
Line 134: | Line 150: | ||
|Fired when peripheral is attached | |Fired when peripheral is attached | ||
|{{type|string}} side | |{{type|string}} side | ||
+ | | | ||
+ | | | ||
| | | | ||
| | | | ||
Line 140: | Line 158: | ||
|Fired when peripheral is removed | |Fired when peripheral is removed | ||
|{{type|string}} side | |{{type|string}} side | ||
+ | | | ||
+ | | | ||
| | | | ||
| | | | ||
Line 146: | Line 166: | ||
|Fired when a rednet message is received from the [[Rednet_(API)|rednet API]] | |Fired when a rednet message is received from the [[Rednet_(API)|rednet API]] | ||
|{{type|number}} senderID | |{{type|number}} senderID | ||
+ | |{{type|string}} message | ||
+ | |{{type|number}} distance travelled | ||
+ | | | ||
+ | | | ||
+ | |- | ||
+ | ! scope="row" | [[modem_message (event)|modem_message]] | ||
+ | |Fired when a modem message is received from the [[modem]] | ||
+ | |{{type|string}} side | ||
+ | |{{type|number}} frequency | ||
+ | |{{type|number}} replyFrequency | ||
|{{type|string}} message | |{{type|string}} message | ||
|{{type|number}} distance travelled | |{{type|number}} distance travelled | ||
Line 154: | Line 184: | ||
|{{type|string}} url of the site | |{{type|string}} url of the site | ||
|{{type|table}} text on the site | |{{type|table}} text on the site | ||
+ | | | ||
+ | | | ||
| | | | ||
|- | |- | ||
Line 160: | Line 192: | ||
You will not normally see this event as it is handled inside http.get. | You will not normally see this event as it is handled inside http.get. | ||
|{{type|string}} url of the site | |{{type|string}} url of the site | ||
+ | | | ||
+ | | | ||
| | | | ||
| | | | ||
Line 168: | Line 202: | ||
|{{type|number}} x coordinate | |{{type|number}} x coordinate | ||
|{{type|number}} y coordinate | |{{type|number}} y coordinate | ||
+ | | | ||
+ | | | ||
|- | |- | ||
! scope="row" | [[mouse_scroll (event)|mouse_scroll]] | ! scope="row" | [[mouse_scroll (event)|mouse_scroll]] | ||
Line 174: | Line 210: | ||
|{{type|number}} x coordinate(in screen chars) | |{{type|number}} x coordinate(in screen chars) | ||
|{{type|number}} y coordinate(in screen chars) | |{{type|number}} y coordinate(in screen chars) | ||
+ | | | ||
+ | | | ||
|- | |- | ||
! scope="row" | [[mouse_drag (event)|mouse_drag]] | ! scope="row" | [[mouse_drag (event)|mouse_drag]] | ||
Line 180: | Line 218: | ||
|{{type|number}} x coordinate(in screen chars) | |{{type|number}} x coordinate(in screen chars) | ||
|{{type|number}} y coordinate(in screen chars) | |{{type|number}} y coordinate(in screen chars) | ||
+ | | | ||
+ | | | ||
|- | |- | ||
! scope="row" | [[monitor_touch (event)|monitor_touch]] | ! scope="row" | [[monitor_touch (event)|monitor_touch]] | ||
Line 186: | Line 226: | ||
|{{type|number}} x coordinate(in screen chars) | |{{type|number}} x coordinate(in screen chars) | ||
|{{type|number}} y coordinate(in screen chars) | |{{type|number}} y coordinate(in screen chars) | ||
+ | | | ||
+ | | | ||
|- | |- | ||
! scope="row" | [[monitor_resize (event)|monitor_resize]] | ! scope="row" | [[monitor_resize (event)|monitor_resize]] | ||
|Fired when a monitor resizes | |Fired when a monitor resizes | ||
|{{type|string}} side | |{{type|string}} side | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | | | ||
|- | |- | ||
! scope="row" | [[turtle_inventory (event)|turtle_inventory]] | ! scope="row" | [[turtle_inventory (event)|turtle_inventory]] | ||
|Fired when the inventory on a [[Turtle]] is changed. | |Fired when the inventory on a [[Turtle]] is changed. | ||
|{{type|string}} side | |{{type|string}} side | ||
+ | | | ||
+ | | | ||
| | | | ||
| | | |
Revision as of 19:43, 18 July 2013
Function os.pullEvent | |
Waits (yields) until an event occurs | |
Syntax | os.pullEvent([string filter]) |
Returns | string event, variable parameters(see table below) |
Part of | ComputerCraft |
API | OS |
Examples
Example | |
The program requires to wait for a keypress to do something: | |
Code |
function clear() term.clear() term.setCursorPos (1,1) end while true do clear() print ("Press E to do something.") local event, param1 = os.pullEvent ("char") -- limit os.pullEvent to the char event if param1 == "e" then -- if the returned value was 'e' clear() write ("Name: ") local name = read() print (name) break else clear() print ("Wrong button!") sleep (1.5) -- I don't like a whole 2 seconds but 1 second is too short end end |
Common syntax
event, param1, param2, param3 = os.pullEvent()
Note: This is one of the most commonly used functions that can return multiple values. It works like any other function call (such as "input = read()") except that you can get more than one piece of information back.
How it works
When os.pullEvent() is called, the computer waits until an event occurs. Events can be triggered by several different things, such as a key being pressed or a redstone input changing. They are usually triggered by ComputerCraft itself, when it needs to notify the computer that something happened. They can also be triggered by peripherals, or by your program calling os.queueEvent.
More complicated input, such as "the user typing a line of text," does not correspond to an event. read handles this inside itself by waiting for the user to press a key, then updating the screen, moving the cursor, etc.
Events have a type (which is a string) and 0-5 parameters (which are often but not always strings). No built-in events use more than 3 parameters.
When an event occurs, the event type, followed by the parameters, will be returned. If you have:
event, button, x, y = os.pullEvent()
and the user clicks the mouse at coordinates 5,4 then:
- event will be set to "mouse_click" (the event type)
- button will be set to 0 (the first parameter)
- x will be set to 5 (the second parameter)
- y will be set to 4 (the third parameter)
Note that in this example, we didn't specify a filter. If you specify a filter, then all events of different types will be ignored. If the user inserts a disk, instead of clicking the mouse, then event will be "disk", button will be the side the disk drive is on, and x and y will be nil.
If we wanted to only wait for mouse clicks we could use:
event, button, x, y = os.pullEvent("mouse_click")
which will ignore any events that are not mouse clicks.
If you assign more variables than necessary, the extra ones will be set to nil. If you assign fewer variables than necessary, the extra parameters will be discarded.
Event types
Name | Description | Parameters | ||||
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
char | Fired when text is typed on the keyboard | string the letter typed | ||||
key | Fired when a key is pressed on the keyboard | number numerical keycode | ||||
timer | Fired when a timeout started by os.startTimer() completes | number Value of the timer as returned by os.startTimer() | ||||
alarm | Fired when a time passed to os.setAlarm() is reached | number Value of the alarm as returned by os.setAlarm() | ||||
redstone | Fired when the state of any of the redstone inputs change | |||||
terminate | Fired when a combination of keys CTRL and T is pressed and held for three seconds.
You will not normally see this event, as it is handled inside os.pullEvent. |
|||||
disk | Fired when a disk is inserted into an adjacent disk drive | string side | ||||
disk_eject | Fired when a disk is removed from an adjacent disk drive | string side | ||||
peripheral | Fired when peripheral is attached | string side | ||||
peripheral_detach | Fired when peripheral is removed | string side | ||||
rednet_message | Fired when a rednet message is received from the rednet API | number senderID | string message | number distance travelled | ||
modem_message | Fired when a modem message is received from the modem | string side | number frequency | number replyFrequency | string message | number distance travelled |
http_success | Fired when an attempt to receive text from / post text on a website is successful.
You will not normally see this event as it is handled inside http.get. |
string url of the site | table text on the site | |||
http_failure | Fired when an attempt to receive text from / post text on a website is unsuccessful
You will not normally see this event as it is handled inside http.get. |
string url of the site | ||||
mouse_click | Fired when a mouse button is pressed | number mouse button | number x coordinate | number y coordinate | ||
mouse_scroll | Fired when a mousewheel is scrolled. | number scroll direction (-1 for up, 1 for down) | number x coordinate(in screen chars) | number y coordinate(in screen chars) | ||
mouse_drag | Fired when the mouse is moved after clicking. | number mouse button | number x coordinate(in screen chars) | number y coordinate(in screen chars) | ||
monitor_touch | Fired when a player right click on an advanced monitor connected. | string side | number x coordinate(in screen chars) | number y coordinate(in screen chars) | ||
monitor_resize | Fired when a monitor resizes | string side | ||||
turtle_inventory | Fired when the inventory on a Turtle is changed. | string side |