# Source Layout

The vast majority of the code here lives under [js/].

* [audio/]: Audio files (e.g. the bell alert).
* [bin/]: Tools for building/testing hterm.
* dist/: Builds of the hterm for integration with other projects.
* [docs/]: Documentation files.
* [etc/]: Scripts/snippets for hterm users to leverage terminal features.
* [examples/]: Example projects using hterm.
* [html/]:
  * [hterm_test.html]: Run all available unittests.
* [images/]: Image files (e.g. notification icons).
* [js/]: The majority of relevant code for hterm.
  * See the section below.
* [test_data/]: Various test data and helper scripts.

## JavaScript Source Layout

* Core logic
  * [hterm.js]: Global inititalization, utility functions & classes.
  * [hterm_screen.js]: The currently visible screen.
  * [hterm_scrollport.js]: A viewport into the buffer that builds the screen.
  * [hterm_terminal.js]: The central `Terminal` object.
  * [hterm_terminal_io.js]: The IO object for writing data into the Terminal
    from the user and the connected process.
  * [hterm_vt.js]: Core processing of escape/control sequences.

* Keyboard related code
  * [hterm_keyboard.js]: Central object for capturing and processing user input.
  * [hterm_keyboard_bindings.js]: Helper for binding keypresses (via
    keypatterns) to actions.
  * [hterm_keyboard_keymap.js]: Default keyboard map (e.g. what happens when you
    press X, Ctrl+X, Alt+X, etc...).
  * [hterm_keyboard_keypattern.js]: Helper for matching keyboard bindings.
  * [hterm_parser.js]: Simple parser for handling keyboard bindings.
  * [hterm_parser_identifiers.js]: Constants for the parser code (such as
    keyboard key names and actions).

* Supplementary modules
  * [hterm_accessibility_reader.js]: Code related to rendering terminal output
    for a screen reader.
  * [hterm_contextmenu.js]: The context menu shown when right clicking.
  * [hterm_options.js]: Internal runtime settings for the `Terminal` object.
  * [hterm_preference_manager.js]: Manager for user preferences.
  * [hterm_pubsub.js]: Helper for managing custom events.
  * [hterm_text_attributes.js]: Helpers for sections of text with different
    attributes (e.g. colors, bold, italics, etc...).
  * [hterm_vt_character_map.js]: Code related to character map translations
    ([SCS]).  Probably safe to ignore as it's unused by default.

* Testing related code
  * [hterm_test.js]: Main unittest runner logic.  Locates & runs all tests.
  * `hterm_mock_*.js`: Various object mocks to simplify unittests.
  * `*_tests.js`: Each module has a corresponding set of unittests.  The
    filename follows the convention of adding `_tests`.  e.g. `hterm_tests.js`
    contains the tests for `hterm.js`.


[audio/]: ../../audio/
[bin/]: ../../bin/
[docs/]: ../../docs/
[etc/]: ../../etc/
[examples/]: ../../examples/
[html/]: ../../html/
[images/]: ../../images/
[js/]: ../../js/
[test_data/]: ../../test_data/

[hterm_test.html]: ../../html/hterm_test.html
[hterm.js]: ../../js/hterm.js
[hterm_accessibility_reader.js]: ../../js/hterm_accessibility_reader.js
[hterm_accessibility_reader_tests.js]: ../../js/hterm_accessibility_reader_tests.js
[hterm_contextmenu.js]: ../../js/hterm_contextmenu.js
[hterm_contextmenu_tests.js]: ../../js/hterm_contextmenu_tests.js
[hterm_keyboard.js]: ../../js/hterm_keyboard.js
[hterm_keyboard_bindings.js]: ../../js/hterm_keyboard_bindings.js
[hterm_keyboard_keymap.js]: ../../js/hterm_keyboard_keymap.js
[hterm_keyboard_keypattern.js]: ../../js/hterm_keyboard_keypattern.js
[hterm_mock_notification.js]: ../../js/hterm_mock_notification.js
[hterm_mock_row_provider.js]: ../../js/hterm_mock_row_provider.js
[hterm_options.js]: ../../js/hterm_options.js
[hterm_parser.js]: ../../js/hterm_parser.js
[hterm_parser_identifiers.js]: ../../js/hterm_parser_identifiers.js
[hterm_parser_tests.js]: ../../js/hterm_parser_tests.js
[hterm_preference_manager.js]: ../../js/hterm_preference_manager.js
[hterm_pubsub.js]: ../../js/hterm_pubsub.js
[hterm_pubsub_tests.js]: ../../js/hterm_pubsub_tests.js
[hterm_screen.js]: ../../js/hterm_screen.js
[hterm_screen_tests.js]: ../../js/hterm_screen_tests.js
[hterm_scrollport.js]: ../../js/hterm_scrollport.js
[hterm_scrollport_tests.js]: ../../js/hterm_scrollport_tests.js
[hterm_terminal.js]: ../../js/hterm_terminal.js
[hterm_terminal_tests.js]: ../../js/hterm_terminal_tests.js
[hterm_terminal_io.js]: ../../js/hterm_terminal_io.js
[hterm_terminal_io_tests.js]: ../../js/hterm_terminal_io_tests.js
[hterm_test.js]: ../../js/hterm_test.js
[hterm_tests.js]: ../../js/hterm_tests.js
[hterm_text_attributes.js]: ../../js/hterm_text_attributes.js
[hterm_text_attributes_tests.js]: ../../js/hterm_text_attributes_tests.js
[hterm_vt_canned_tests.js]: ../../js/hterm_vt_canned_tests.js
[hterm_vt_character_map.js]: ../../js/hterm_vt_character_map.js
[hterm_vt_character_map_tests.js]: ../../js/hterm_vt_character_map_tests.js
[hterm_vt.js]: ../../js/hterm_vt.js
[hterm_vt_tests.js]: ../../js/hterm_vt_tests.js

[SCS]: ../ControlSequences.md#SCS
