Difference between revisions of "Os.pullEvent"

From ComputerCraft Wiki
Jump to: navigation, search
m (Updated error with only listing two event mouse_drag parameters, and not three.)
(Expanded/rewrote "how it works" more like a tutorial, moved "common syntax" above "how it works", added a note about multiple return values, added a note to events that won't normally be seen by programs)
Line 2: Line 2:
 
{{Function
 
{{Function
 
  |name=os.pullEvent
 
  |name=os.pullEvent
  |args=([[string]]) only-event-to-accept
+
  |args=([[string]]) filter
 
  |api=OS
 
  |api=OS
 
  |returns=(string)event, variable parameters(see table below)
 
  |returns=(string)event, variable parameters(see table below)
 
  |addon=ComputerCraft
 
  |addon=ComputerCraft
  |desc=Yields computer until event occurs
+
  |desc=Waits (yields) until an event occurs
 
  |examples=
 
  |examples=
 
{{Example
 
{{Example
Line 33: Line 33:
 
}}
 
}}
  
== How it Works ==
+
=== Common syntax ===
When os.pullEvent() is called, regardless of whether it has variables to set, the computer is yielded until an event occurs. An event is anything the computer can use as input, such as a button being pushed on the keyboard or a redstone input.
+
When said event occurs, the event's name is placed in the first variable (the variable 'event' in the section below). With the event comes returned values, and, depending on the event type, there can be different amounts and different data types of returned values.
+
  
For example, the event "char" returns "char" as the event and (let's say E was pressed) the first parameter will be set to "e", although whether or not Shift was pressed can change that "e" to an "E" as well.
+
  event, param1, param2, param3 = os.pullEvent()
  
The event "redstone" only returns the event type since any other information needed can be retrieved with [[redstone.getInput]].
+
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.
  
=== Common Syntax ===
+
== How it works ==
<pre>
+
When os.pullEvent() is called, the computer waits until an event occurs.
event, param1, param2, param3 = os.pullEvent()
+
Events can be triggered by several different things, such as a key being pressed or a redstone input changing.
</pre>
+
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]].
  
==Event Types==
+
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 less variables than necessary, the extra parameters will be discarded.
 +
 
 +
==Event types==
 
{| class="wikitable" width="100%"
 
{| class="wikitable" width="100%"
 
! rowspan="2" | Name
 
! rowspan="2" | Name
Line 87: Line 115:
 
|-
 
|-
 
![[terminate (event)|terminate]]
 
![[terminate (event)|terminate]]
|Fired when a combination of keys CTRL and T is pressed and held for three seconds. It is handled by default by os.pullEvent() and causes calling of two other functions: error() - To terminate the program; and print() to inform the user that the program he or she was running has been terminated.
+
|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.
 
|
 
|
 
|
 
|
Line 123: Line 152:
 
|-
 
|-
 
![[http_success (event)|http_success]]
 
![[http_success (event)|http_success]]
|Fired when an attempt to receive text from / post text on a website is successful
+
|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
 
|(string)url of the site
 
|(table)text on the site
 
|(table)text on the site
Line 130: Line 160:
 
![[http_failure (event)|http_failure]]
 
![[http_failure (event)|http_failure]]
 
|Fired when an attempt to receive text from / post text on a website is unsuccessful
 
|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
 
|(string)url of the site
 
|
 
|

Revision as of 17:08, 7 January 2013


Grid Redstone.png  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

Grid paper.png  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 less variables than necessary, the extra parameters will be discarded.

Event types

Name Description Parameters
1 2 3
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
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)

Guides

Onionnion's Guide on os.pullEvent()