view info/dir @ 107648:babfb0a156a1

Initial support for bidirectional editing. Makefile.in (obj): Include bidi.o. (bidi.o): New target. makefile.w32-in (OBJ1): Add $(BLD)/bidi.$(O). ($(BLD)/bidi.$(O)): New target. bidi.c: New file. buffer.h (struct buffer): New members bidi_display_reordering and bidi_paragraph_direction. buffer.c (init_buffer_once): Initialize bidi_display_reordering and bidi_paragraph_direction. (syms_of_buffer): Declare Lisp variables bidi-display-reordering and bidi-paragraph-direction. (Fbuffer_swap_text): Swap the values of bidi_display_reordering and bidi_paragraph_direction. dispextern.h (BIDI_MAXLEVEL, BIDI_AT_BASE_LEVEL): New macros. (bidi_type_t, bidi_dir_t): New types. (bidi_saved_info, bidi_stack, bidi_it): New structures. (struct it): New members bidi_p, bidi_it, paragraph_embedding, prev_stop, base_level_stop, and eol_pos. (bidi_init_it, bidi_get_next_char_visually): New prototypes. (IT_STACK_SIZE): Enlarge to 5. (struct glyph_row): New member reversed_p. <string_buffer_position>: Update prototype. (PRODUCE_GLYPHS): Set the reversed_p flag in the iterator's glyph_row if bidi_it.paragraph_dir == R2L. (struct glyph): New members resolved_level and bidi_type. dispnew.c (direct_output_forward_char): Give up if we need bidi processing or buffer's direction is right-to-left. (prepare_desired_row): Preserve the reversed_p flag. (row_equal_p): Compare the reversed_p attributes as well. xdisp.c (init_iterator): Initialize it->bidi_p. Call bidi_init_it and set it->paragraph_embedding from the current buffer's value of bidi_paragraph_direction. (reseat_1): Initialize bidi_it.first_elt. (set_iterator_to_next, next_element_from_buffer): Use the value of paragraph_embedding to determine the paragraph direction. (set_iterator_to_next): Under bidi reordering, call bidi_get_next_char_visually. Call bidi_paragraph_init if the new_paragraph flag is set in the bidi iterator. (next_element_from_buffer): If bidi_it.first_elt is set, initialize paragraph direction and find the first character to display in the visual order. If reseated to a middle of a line, prime the bidi iterator starting at the line's beginning. Handle the situation where we overstepped stop_charpos due to non-linearity of the bidi iteration. Likewise for when we back up beyond the previous stop_charpos. When moving across stop_charpos, record it in prev_stop. (display_line): Set row->end and it->start for the next row to the next character in logical order. Always extend reversed_p rows to the end of line, even if they end at ZV. Copy the reversed_p flag to the next glyph row. Keep calling set_cursor_from_row for bidi-reordered rows even if we already have a possible candidate for cursor position. Set row_end after all the row's glyphs have been produced, by looping over the glyphs. Record the position after EOL in it->eol_pos, and use it to set end_pos of the last row produced for a continued line. <Qright_to_left, Qleft_to_right>: New variables. (syms_of_xdisp): Initialize and staticpro them. (string_buffer_position_lim): New function. (string_buffer_position): Most of code moved to string_buffer_position_lim. Last argument and return value are now EMACS_INT; all callers changed. (set_cursor_from_row): Rewritten to support bidirectional text and reversed glyph rows. (text_outside_line_unchanged_p, try_window_id): Disable optimizations if we are reordering bidirectional text and the paragraph direction can be affected by the change. (append_glyph, append_composite_glyph) (produce_image_glyph, append_stretch_glyph): Set the resolved_level and bidi_type members of each glyph. (append_glyph): If the glyph row is reversed, prepend the glyph rather than appending it. (handle_stop_backwards): New function. (reseat_1, pop_it, push_it): Set prev_stop and base_level_stop. (reseat): call handle_stop_backwards to recompute prev_stop and base_level_stop for the new position. (handle_invisible_prop): Under bidi iteration, skip invisible text using bidi_get_next_char_visually. If we are `reseat'ed, init the paragraph direction. Update IT->prev_stop after skipping invisible text. (move_it_in_display_line_to): New variables prev_method and prev_pos. Compare for strict equality in BUFFER_POS_REACHED_P. (try_cursor_movement): Examine all the candidate rows that occlude point, to return the best match. If rows are bidi-reordered and point moved backwards, back up to the row that is not a continuation line, and start looking for a suitable row from there. term.c (append_glyph): Reverse glyphs by pre-pending them, rather than appending, if the glyph_row's reversed_p flag is set. Set the resolved_level and bidi_type members of each glyph. .gdbinit (pbiditype): New command. (pgx): Use it to display bidi level and type of the glyph. (pitx): Display some bidi information about the iterator. (prowlims, pmtxrows): New commands. files.el: Make bidi-display-reordering safe variable for boolean values. mule.texi (International): Mention support of bidirectional editing. (Bidirectional Editing): New section. HELLO: Reorder Arabic and Hebrew into logical order, and insert RLM before the opening paren, to make the display more reasonable. Add setting for bidi-display-reordering in the local variables section. NEWS: Mention initial support for bidirectional editing.
author Eli Zaretskii <eliz@gnu.org>
date Tue, 30 Mar 2010 05:13:07 -0400
parents 7787e34f5b4f
children 21cb91dca6c7
line wrap: on
line source

This is the file .../info/dir, which contains the
topmost node of the Info hierarchy, called (dir)Top.
The first time you invoke Info you start off looking at this node.

File: dir,	Node: Top	This is the top of the INFO tree

The Info Directory
******************

  The Info Directory is the top-level menu of major Info topics.
  Type "d" in Info to return to the Info Directory.  Type "q" to exit Info.
  Type "?" for a list of Info commands, or "h" to visit an Info tutorial.
  Type "m" to choose a menu item--for instance,
    "mEmacs<Return>" visits the Emacs manual.
  In Emacs Info, you can click mouse button 2 on a menu item
  or cross reference to follow it to its target.
  Each menu line that starts with a * is a topic you can select with "m".
  Every third topic has a red * to help pick the right number to type.

* Menu:

* Info: (info).         How to use the documentation browsing system.

Emacs
* Emacs: (emacs).       The extensible self-documenting text editor.
* Emacs FAQ: (efaq).    Frequently Asked Questions about Emacs.

GNU Emacs Lisp
* Emacs Lisp Intro: (eintr).
                          A simple introduction to Emacs Lisp programming.
* Elisp: (elisp).       The Emacs Lisp Reference Manual.

Emacs editing modes
* Ada mode: (ada-mode). Emacs mode for editing and compiling Ada code.
* CC Mode: (ccmode).    Emacs mode for editing C, C++, Objective-C,
                        Java, Pike, AWK, and CORBA IDL code.
* IDLWAVE: (idlwave).   Major mode and shell for IDL files.
* nXML Mode: (nxml-mode).       XML editing mode with RELAX NG support.
* Org Mode: (org).      Outline-based notes management and organizer

Emacs network features
* EUDC: (eudc).   An Emacs client for directory servers (LDAP, PH).
* Gnus: (gnus).         The newsreader Gnus.
* Mairix: (mairix-el).  Emacs interface to the Mairix mail indexer.
* MH-E: (mh-e).         Emacs interface to the MH mail system.
* Message: (message).   Mail and news composition mode that goes with Gnus.
* Newsticker: (newsticker). A Newsticker for Emacs.
* PGG: (pgg).   Emacs interface to various PGP implementations.
* ERC: (erc).           Powerful, modular, and extensible IRC client for Emacs.
* Rcirc: (rcirc).       Internet Relay Chat (IRC) client.
* SASL: (sasl).         The Emacs SASL library.
* SC: (sc).             Supercite lets you cite parts of messages you're
                          replying to, in flexible ways.
* Sieve: (sieve).               Managing Sieve scripts in Emacs.
* TRAMP: (tramp).                Transparent Remote Access, Multiple Protocol
                                 GNU Emacs remote file access via rsh and rcp.

Emacs misc features
* Autotype: (autotype). Convenient features for text that you enter frequently
                          in Emacs.
* Calc: (calc).         Advanced desk calculator and mathematical tool.
* Dired-X: (dired-x).   Dired Extra Features.
* EasyPG Assistant: (epa).   An Emacs user interface to GNU Privacy Guard.
* Ebrowse: (ebrowse).   A C++ class browser for Emacs.
* EDE: (ede).           The Emacs Development Environment.
* Ediff: (ediff).       A visual interface for comparing and merging programs.
* EDT: (edt).           An Emacs emulation of the EDT editor.
* EIEIO: (eieio).       An object system for Emacs Lisp.
* Eshell: (eshell).     A command shell implemented in Emacs Lisp.
* Flymake: (flymake).   A universal on-the-fly syntax checker.
* Forms: (forms).       Emacs package for editing data bases
                          by filling in forms.
* PCL-CVS: (pcl-cvs).   Emacs front-end to CVS.
* RefTeX: (reftex).     Emacs support for LaTeX cross-references and citations.
* Remember: (remember). Simple information manager for Emacs.
* Semantic: (semantic). Source code parsing utilities for Emacs.
* SES: (ses).       Simple Emacs Spreadsheet
* Speedbar: (speedbar). File/Tag summarizing utility.
* VIP: (vip).           An older VI-emulation for Emacs.
* VIPER: (viper).       The newest Emacs VI-emulation mode.
                          (also, A VI Plan for Emacs Rescue
                           or the VI PERil.)
* WoMan: (woman).       Browse UN*X Manual Pages "W.O. (without) Man".

Emacs lisp libraries
* Auth-source: (auth).  A single configuration for multiple applications.
* CL: (cl).             Partial Common Lisp support for Emacs Lisp.
* D-Bus: (dbus).                Using D-Bus in Emacs.
* Emacs MIME: (emacs-mime).   Emacs MIME de/composition library.
* URL: (url).                 URL loading package.
* Widget: (widget).      The "widget" package used by the Emacs Customization
                           facility.
* SMTP: (smtpmail). Emacs library for sending mail via SMTP.