<commit_before>* nEXT Architecture and Release Timeline
Major releases are issued by incrementing the first digit. That is,
release 1.20, and 2.20 are one major release away from each other. Minor
releases are issued by incrementing by 0.01. That is, 1.01, and 1.02 are
two minor releases following major release 1.0.

** 0.02
*** TODO Window System
- Emacs like window system
*** TODO Within document-mode the history will be represented as a tree
- forwards and backwards navigation creating new nodes and
traversals. This will allow for all points in history to be reachable,
and a future expansion designed to recreate the functionality offered
by undo-tree: https://www.emacswiki.org/emacs/UndoTree
**** TODO Ability to navigate forward and backward in history
- using the key binding M-f, and M-b for forward and backward
  respectively

** 0.01
This version describes the minimum usability as a basic browser, with
the following features:

- Implementation of document-mode, the major-mode that all modes extend
- Ability to set key bindings for major modes
- Ability to browse and change buffers using C-x b

*** Definitions
Buffer: All documents are contained in an object type called a
buffer. As an example, a document on the web located at
http://www.url.com can be contained in a buffer with a similar name. A
buffer is composed of all elements (text, bitmaps, etc) necessary to
render a single document.

Mode-map: A keyboard hot-key to function mapping.

Minibuffer: A special buffer dedicated to interacting with nEXT
commands in progress. This buffer appears at the bottom of the screen
and is collapsed when not in use.

Major-mode: A major mode is defined as the primary mode of interacting
with a particular buffer. A mode defines a set of key bindings, hooks
for actions, and presentation details for a given view. At any given
time, there may only be one major mode for a buffer. All major modes
are composed of entirely lower case alpha with dashes used as a
separator. Every major mode has a keyboard mapping that follows this
pattern: document-mode, will have a mode map called document-mode-map.

Minor-mode: A minor mode is a secondary mode of modifying a buffer's
behavior and content. There can be an infinite amount of minor modes
applied to a given buffer. All minor modes are composed of entirely
lower case alpha with dashes used as a separator.

*** DONE Major mode: document-mode
CLOSED: [2017-08-28 Mon 00:29]
All major modes inherit from document mode. Document mode provides the
basic framework for mapping global commands and defining general
behavior.

Document-mode will be the basic major mode for opening documents on
the web. document-mode will extend document-mode, and thus will
inherit all of its key bindings. If there is a conflict of key
bindings, the lowest scope key binding will be prioritized. As a
concrete example, all bindings defined in a minor mode will override
any defined in document-mode. In the first release, document-mode will
support the following key bindings and features:

For the first release, document-mode must have:

**** DONE Ability to open a new html document with the key binding C-l
CLOSED: [2017-08-14 Mon 11:31]
Opening of new pages in the same buffer can be invoked by the key
binding C-l. This key binding will open up the Minibuffer and prompt
the user to enter the url which they would like to visit.
**** DONE Ability to open new buffers with the key-binding M-l
CLOSED: [2017-08-28 Mon 00:28]
Opening of new buffers by invoking M-l will open the Minibuffer.
Within the Minibuffer, the user will be presented with a prompt in
which they can enter in the url they would like to visit in a new
buffer.

- May possibly switch implementation to "hide" rather than "close"
  widgets, possibly using a widget pool as well for memory performance

*** DONE Ability to set Key bindings
CLOSED: [2017-08-12 Sat 16:34]
The following syntax should be used to set a key binding:

(define-key x-mode-map (kbd "C-h") 'function)

    Where x-mode-map is a keymap relating to a mode (major or minor).

    Where 'function is a function that is passed to define-key to
    trigger a function upon a key press.

(kbd "C-h") defines that the keyboard sequence Control + h is
represented. For the keyboard syntax, the following keys are
described:

- S = super key (windows/command key)
- C = control key
- M = meta key (alt key)

A chain of key bindings may be set in the following manner:

(kbd "C-x C-s") will denote the following key presses, Ctrl + x, followed
by Ctrl + s immediately thereafter.

Upon the definition of a "chained" keyboard binding, any elements
in the chain may not be used individually. For example, binding
"C-x C-s", will prohibit the binding of "C-x" by itself. This is
because there would be ambiguity in regards to which key binding
is intended to be invoked. 

*** TODO Ability to browse and change buffers
The user will be able to invoke the key binding C-x b to bring up
a menu in the Minibuffer in which they will be able to select a new buffer
to bring to focus.
**** TODO Minibuffer Completion
Example of minibuffer completion candidates
*** TODO Compilation OSX
- One "click" build system for deployment on OSX
- Organization of build systems into lisp files, no shell scripts<commit_msg>updated timeline with contribution guidelines<commit_after>* nEXT Architecture and Release Timeline
Major releases are issued by incrementing the first digit. That is,
release 1.20, and 2.20 are one major release away from each other. Minor
releases are issued by incrementing by 0.01. That is, 1.01, and 1.02 are
two minor releases following major release 1.0.

** 0.02
*** TODO OSX Compilation
- Modify make.lisp script to create a binary that grabs all of the
  dependencies and creates a executable that can be deployed on OSX
- Use `macdeployqt` to copy the core qt libraries to
  `next.app/Contents/Frameworks`
- Use `otool -L next.app/Contents/MacOS/next` to find the linked
  frameworks that are not located in `next.app/Contents/Frameworks`,
  manually copy them to `next.app/Contents/Frameworks`
- Use install_name_tool to update the now copied frameworks in 
  `next.app/Contents/Frameworks`
- For more info please see: http://doc.qt.io/qt-5/osx-deployment.html
*** TODO Window System
- Emacs like window system
*** TODO Within document-mode the history will be represented as a tree
- forwards and backwards navigation creating new nodes and
traversals. This will allow for all points in history to be reachable,
and a future expansion designed to recreate the functionality offered
by undo-tree: https://www.emacswiki.org/emacs/UndoTree
**** TODO Ability to navigate forward and backward in history
- using the key binding M-f, and M-b for forward and backward
  respectively

** 0.01
This version describes the minimum usability as a basic browser, with
the following features:

- Implementation of document-mode, the major-mode that all modes extend
- Ability to set key bindings for major modes
- Ability to browse and change buffers using C-x b

*** Definitions
Buffer: All documents are contained in an object type called a
buffer. As an example, a document on the web located at
http://www.url.com can be contained in a buffer with a similar name. A
buffer is composed of all elements (text, bitmaps, etc) necessary to
render a single document.

Mode-map: A keyboard hot-key to function mapping.

Minibuffer: A special buffer dedicated to interacting with nEXT
commands in progress. This buffer appears at the bottom of the screen
and is collapsed when not in use.

Major-mode: A major mode is defined as the primary mode of interacting
with a particular buffer. A mode defines a set of key bindings, hooks
for actions, and presentation details for a given view. At any given
time, there may only be one major mode for a buffer. All major modes
are composed of entirely lower case alpha with dashes used as a
separator. Every major mode has a keyboard mapping that follows this
pattern: document-mode, will have a mode map called document-mode-map.

Minor-mode: A minor mode is a secondary mode of modifying a buffer's
behavior and content. There can be an infinite amount of minor modes
applied to a given buffer. All minor modes are composed of entirely
lower case alpha with dashes used as a separator.

*** DONE Major mode: document-mode
CLOSED: [2017-08-28 Mon 00:29]
All major modes inherit from document mode. Document mode provides the
basic framework for mapping global commands and defining general
behavior.

Document-mode will be the basic major mode for opening documents on
the web. document-mode will extend document-mode, and thus will
inherit all of its key bindings. If there is a conflict of key
bindings, the lowest scope key binding will be prioritized. As a
concrete example, all bindings defined in a minor mode will override
any defined in document-mode. In the first release, document-mode will
support the following key bindings and features:

For the first release, document-mode must have:

**** DONE Ability to open a new html document with the key binding C-l
CLOSED: [2017-08-14 Mon 11:31]
Opening of new pages in the same buffer can be invoked by the key
binding C-l. This key binding will open up the Minibuffer and prompt
the user to enter the url which they would like to visit.
**** DONE Ability to open new buffers with the key-binding M-l
CLOSED: [2017-08-28 Mon 00:28]
Opening of new buffers by invoking M-l will open the Minibuffer.
Within the Minibuffer, the user will be presented with a prompt in
which they can enter in the url they would like to visit in a new
buffer.

- May possibly switch implementation to "hide" rather than "close"
  widgets, possibly using a widget pool as well for memory performance

*** DONE Ability to set Key bindings
CLOSED: [2017-08-12 Sat 16:34]
The following syntax should be used to set a key binding:

(define-key x-mode-map (kbd "C-h") 'function)

    Where x-mode-map is a keymap relating to a mode (major or minor).

    Where 'function is a function that is passed to define-key to
    trigger a function upon a key press.

(kbd "C-h") defines that the keyboard sequence Control + h is
represented. For the keyboard syntax, the following keys are
described:

- S = super key (windows/command key)
- C = control key
- M = meta key (alt key)

A chain of key bindings may be set in the following manner:

(kbd "C-x C-s") will denote the following key presses, Ctrl + x, followed
by Ctrl + s immediately thereafter.

Upon the definition of a "chained" keyboard binding, any elements
in the chain may not be used individually. For example, binding
"C-x C-s", will prohibit the binding of "C-x" by itself. This is
because there would be ambiguity in regards to which key binding
is intended to be invoked. 

*** TODO Ability to browse and change buffers
The user will be able to invoke the key binding C-x b to bring up
a menu in the Minibuffer in which they will be able to select a new buffer
to bring to focus.
**** TODO Minibuffer Completion
Example of minibuffer completion candidates
*** DONE Compilation OSX
CLOSED: [2017-09-04 Mon 00:09]
- One "click" build system for deployment on OSX
- Organization of build systems into lisp files, no shell scripts
* Contributing
Contributing is easy. Please find a task within this document that has
a TODO label affixed. Upon finding a task that you'd like to work on,
email the mailing list <EMAIL> with the TODO
item and a simple example of a proposed solution.

After you have found a TODO item that is available:

- make a fork of the repository
- add your changes
- make a pull request
{'fraction_non_alphanumeric': 0.051440860215053764, 'fraction_numerical': 0.013333333333333334, 'mean_word_length': 4.087964989059081, 'pattern_counts': {'":': 0, '<': 4, '<?xml version=': 0, '>': 4, 'https://': 2, 'lorem ipsum': 0, 'www.': 4, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1512620', 'n_tokens_mistral': 3177, 'n_tokens_neox': 2987, 'n_words': 1848}