@appendix Emacs and unconventional input devices
@cindex other input devices
- Emacs was originally developed with the assumption that users will
-be sitting in front of a desktop computer, with a keyboard and perhaps
-a suitable pointing device such as a mouse.
+ Emacs was originally developed with the assumption that its users
+have access to a desktop computer or computer terminal, with a
+keyboard and perhaps a suitable pointing device such as a mouse.
- However, recent developments in the X Window System, and in other
-operating systems such as Android, mean that this assumption no longer
-holds true. As a result, Emacs now has support for other kinds of
-input devices, which is detailed here.
+ However, recent developments in the X Window System and operating
+systems such as Android mean that this assumption no longer holds
+true. Emacs supports input from various other kinds of input devices,
+which is detailed here.
@menu
* Touchscreens:: Using Emacs on touchscreens.
@section Using Emacs on touchscreens
@cindex touchscreens
- Touchscreen input works by having the user press tools onto the
-screen, which can be his own fingers, or a pointing device such as a
-stylus, in order to manipulate the contents there in.
+ Touchscreen input works by pressing and moving tools (which include
+fingers and some pointing devices--styluses, for example) onto a frame
+in order to manipulate its contents.
When running under the X Window System or Android, Emacs
-automatically detects and maps the following touchscreen gestures to
-common actions:
+automatically detects and maps the following sequences of movements
+(``gestures'') to common actions:
@itemize @bullet
@item
@cindex tapping, touchscreens
- ``Tapping'', meaning to briefly place and lift a tool from the
-display, will result in Emacs selecting the window that was tapped,
-and executing any command bound to @code{mouse-1} at that location in
-the window. If the tap happened on top of a link (@pxref{Mouse
+ ``Tapping'', briefly placing and lifting a tool from the display,
+will result in Emacs selecting the window that was tapped, and
+executing any command bound to @code{mouse-1} at that location in the
+window. If the tap happened on top of a link (@pxref{Mouse
References}), then Emacs will follow the link instead.
@item
@item
@cindex dragging, touchscreens
@cindex long-press, touchscreens
- ``Dragging'', meaning to perform a @dfn{long-press} (placing a tool
-on the display and leaving it there for a while) before moving the
-tool around, will make Emacs set the point to where the tool was and
-begin selecting text under the tool as it moves around, much like what
-would happen if @code{mouse-1} were to be held down. @xref{Mouse
-Commands}.
+ ``Dragging'', which is performing a @dfn{long-press} by placing a
+tool on the display and leaving it there for a while prior to moving
+the tool around will make Emacs set the point to where the tool was
+and begin selecting text under the tool as it moves around, as if
+@code{mouse-1} were to be held down. @xref{Mouse Commands}.
@end itemize
@vindex touch-screen-delay
@vindex touch-screen-display-keyboard
The user option @code{touch-screen-display-keyboard} forces Emacs to
-always display the on screen keyboard; it may also be bound buffer
-locally, meaning to always display the keyboard when the buffer is
-selected.
+always display the on screen keyboard; it may also be set buffer
+locally, which means that Emacs should always display the keyboard
+when the buffer is selected.
Emacs also provides a set of functions to show or hide the on-screen
keyboard. For more details, @pxref{On-Screen Keyboards,,, elisp, The
@cindex quitting, without a keyboard
Since it may not be possible for Emacs to display the on screen
-keyboard when it is executing a command, Emacs implements a feature on
-devices with only an on-screen keyboard, by which two rapid clicks of
-a hardware button that is always present on the device results in
+keyboard while it is executing a command, Emacs implements a feature
+on devices with only an on-screen keyboard, by which two rapid clicks
+of a hardware button that is always present on the device results in
Emacs quitting. @xref{Quitting}.
@vindex x-quit-keysym
- The exact button is used to do this varies by system: on X, it is
-defined in the variable @code{x-quit-keysym}, and on Android, it is
-always the volume down button.
+ Which button is used to do this depends on the window system in use:
+on X, it is defined in the variable @code{x-quit-keysym}, and on
+Android, it is always the volume down button.
@cindex text conversion, keyboards
Most input methods designed to work with on-screen keyboards perform
performs an edit to one or more buffers.
@vindex text-conversion-edits
-Once the event is sent, the input method may already have made
-changes to multiple buffers inside many different frames. To
-determine which buffers have been changed, and what edits have
-been made to them, use the variable
-@code{text-conversion-edits}, which is set prior to each
-@code{text-conversion} event being sent; it is a list of the
-form:
+Once the event is sent, the input method may already have made changes
+to multiple buffers inside many different frames. To determine which
+buffers have been changed, and what edits have been made to them, use
+the variable @code{text-conversion-edits}, which is set prior to each
+@code{text-conversion} event being sent; it is a list of the form:
@example
@w{@code{((@var{buffer} @var{beg} @var{end} @var{ephemeral}) ...)}}
Where @var{ephemeral} is the buffer which was modified, @var{beg} and
@var{end} are markers set to the positions of the edit at the time it
was completed, and @var{ephemeral} is either a string, containing any
-text which was inserted, or any text before point which was deleted,
+text which was inserted (or any text before point which was deleted),
@code{t}, meaning that the edit is a temporary edit made by the input
-method, and @code{nil}, meaning that some text was deleted after
-point.
+method, or @code{nil}, meaning that some text was deleted after point.
@vindex text-conversion-style
Whether or not this event is sent depends on the value of the
@item action
This means that the input method will be enabled, but @key{RET} will
-be sent wherever the input method wanted to insert a new line.
+be sent whenever the input method wants to insert a new line.
@item t
This, or any other value, means that the input method will be enabled
-and make edits terminated by @code{text-conversion} events.
+and make edits followed by @code{text-conversion} events.
@end table
@findex disable-text-conversion
-Changes to the value of this variable will only take effect upon
-the next redisplay after the buffer becomes the selected buffer
-of a frame. If you need to disable text conversion in a way
-that takes immediate effect, call the function
-@code{set-text-conversion-style} instead. This can potentially
-lock up the input method for a significant amount of time, so do
-not do this lightly!
+Changes to the value of this variable will only take effect upon the
+next redisplay after the buffer becomes the selected buffer of a
+frame. If you need to disable text conversion in a way that takes
+immediate effect, call the function @code{set-text-conversion-style}
+instead. This has the potential to lock up the input method for a
+significant amount of time, and should be used with care.
@vindex disable-inhibit-text-conversion
In addition, text conversion is automatically disabled after a prefix
-key is read by the command loop, or through @code{read-key-sequence}.
-This can be disabled by setting or binding the variable
+key is read by the command loop or @code{read-key-sequence}. This can
+be disabled by setting or binding the variable
@code{disable-inhibit-text-conversion} to a non-@code{nil} value.
@cindex @code{delete-frame} event
;; Show a message instead.
(condition-case nil
(if touch-screen-precision-scroll
- (if (> dy 0)
- (pixel-scroll-precision-scroll-down-page dy)
- (pixel-scroll-precision-scroll-up-page (- dy)))
+ (progn
+ (if (> dy 0)
+ (pixel-scroll-precision-scroll-down-page dy)
+ (pixel-scroll-precision-scroll-up-page (- dy)))
+ ;; Now set `lines-vscrolled' to an value that will result
+ ;; in hscroll being disabled if dy looks as if a
+ ;; significant amount of scrolling is about to take
+ ;; Otherwise, horizontal scrolling may then interfere with
+ ;; precision scrolling.
+ (when (> (abs dy) 10)
+ (setcar (nthcdr 7 touch-screen-current-tool) 10)))
;; Start conventional scrolling. First, determine the
;; direction in which the scrolling is taking place. Load the
;; accumulator value.
\f
-/* When calling the system's faccessat, make sure to clear the flag
- AT_EACCESS.
-
- Android's faccessat simply fails upon using AT_EACCESS, so replace
- it with zero here. This isn't caught during configuration as Emacs
- is being cross compiled.
-
- This replacement is only done when building for Android 16 or
- later, because earlier versions use the gnulib replacement that
- lacks these issues.
-
- This is unnecessary on earlier API versions, as gnulib's
- rpl_faccessat will be used instead, which lacks these problems. */
-
/* Like faccessat, except it also understands DIRFD opened using
android_dirfd. */
}
#if __ANDROID_API__ >= 16
+ /* When calling `faccessat', make sure to clear the flag AT_EACCESS.
+
+ Android's faccessat simply fails if FLAGS contains AT_EACCESS, so
+ replace it with zero here. This isn't caught at configuration-time
+ as Emacs is being cross compiled.
+
+ This takes place only when building for Android 16 and later,
+ because earlier versions use a Gnulib replacement that lacks these
+ issues. */
+
return faccessat (dirfd, pathname, mode, flags & ~AT_EACCESS);
-#else
+#else /* __ANDROID_API__ < 16 */
return faccessat (dirfd, pathname, mode, flags);
-#endif
+#endif /* __ANDROID_API__ >= 16 */
}
\f