Skip to content

Latest commit

 

History

History
979 lines (774 loc) · 38.4 KB

CHANGELOG.org

File metadata and controls

979 lines (774 loc) · 38.4 KB

Release Timeline

Next uses Semantic Versioning. In short, given a version number MAJOR.MINOR.PATCH, we increment the:

  • MAJOR version when we make incompatible API changes,
  • MINOR version when we add functionality in a backwards-compatible manner, and
  • PATCH version when we make backwards-compatible bug fixes.

Upcoming

Jump to heading across all tabs

  • Add a jump to heading command that works across all open tabs

Package manager

  • There should be a package manager/repository where creators of packages can publish, and users can download
  • This technology will probably be built ontop of Quicklisp

Per tab isolation

  • Add support for per-tab Proxy and Tor support

Password manager

  • Add an integrated password manager

Add built-in editor

  • Add simple built-in editor capabilities so that you can easily script Next without opening up an external editor
  • Also use the editor for text-field input on the internet

Add online suggestions from search engines

2.0.0

2-pre-release-1

  • Rename project to Nyxt. This name is more “searchable” on the Web. It’s also reasonably “backward-compatible” with “Next”.

    Note that the persisted files have changed location. You might have to move the configuration file and the local files according. By default:

    • ~/.config/next -> ~/.config/nyxt
    • ~/.local/share/next -> ~/.local/share/nyxt
  • Improve macOS performance The WebKitGTK+ port for macOS has been improved with complete support for the Quartz backend. This significantly improves start-up time and allows for native rendering (no need for XQuartz)

    Fix some issues with strange keys emitted on macOS from the keyboard: this has been resolved through the usage of the “Unicode Hex Input” keyboard input option.

  • Improve macOS distribution It is now possible to create a standalone application bundle for Nyxt using the darwin-app.asd. It is also possible to create pkg bundles for distribution via MacPorts.
  • Replace D-Bus-based architecture with an FFI architecture. As a result, there is only one exectuable needed to run Nyxt and no more need for D-Bus. This should simplify installation, remove many performance bottlenecks and fix the mouse and keyboard issues.
  • New auto-mode to automatically load a configured set of modes for matching URLs. For instance, this can tell Nyxt to automatically enable proxy-mode when navigating to Wikipedia and disable it otherwise. The rules can be persisted for future use.
  • New tutorial and manual commands.
  • Keybindings bind to function symbols and not functions (i.e. 'foo and not #'foo). Make sure to use nyxt:make-keymap if you want type-checking on binding creation.
  • Change key string specifications: all lowercase without underscore. For instance “Page_Up” becomes “pageup”.
  • Keycode bindings: Use the “#N” syntax to bind the N keycode to a command. Example: (define-key *my-keymap* "C-#10" #'nyxt/web-mode::copy-url).
  • Keymaps must be named, e.g. (keymap:make-keymap "my-map").
  • Modes keymap-scheme must now be set with either keymap:make-scheme or define-scheme. Schemes are now first-class objects. Default schemes cua, emacs, vi-normal and vi-insert are in the scheme package. Thus it’s enough to complete over scheme: to list them all.
  • Add status view and message view to display buffer status and messages respectively. The status view can be customized with the status-formatter window slot. The status-buffer slot has been removed. The status view has interactive buttons.
  • Report user configuration errors in a Nyxt web view. Users don’t have to check the shell output anymore.
  • New fill-input-from-external-editor command.
  • New set-url-from-current-url command.
  • New force-https-mode to enforce HTTPS everywhere. Websites that don’t have a certificate will fail to load (this is by design, since those websites are deemed insecure).
  • New lisp-repl command to evaluate Lisp, introspect and modify Nyxt while it’s running, from the browser itself! This supersedes the removed evaluate-lisp command.
  • New list-buffers command.
  • Rename certificate-whitelist-mode to certificate-exception-mode as well as the certificate-whitelist slot to certificate-exceptions and *default-certificate-whitelist* to *default-certificate-exceptions*.
  • Add certificate-exception-mode to the default modes. In case of certificate error, call add-domain-to-certificate-exceptions followed by a reload if you understand the risks and you want to bypass the error.

    The certificate-exceptions slot is now a list of strings.

  • Make current URL the first candidate in set-url-* commands.
  • New reading-line-mode.
  • New scheme:cua default binding scheme. You can still use the former default scheme:emacs with emacs-mode.
  • Most URLs are now of the quri:uri type instead of the string type. This allows for convenient URL manipulation, such as domain or scheme extraction. This also allows us to systematically print hex-encoded URLs properly.
  • Turn resource-query-function into a composable hook, request-resource-hook, which supports changing the URI of the request.
  • Bindings like control-button1 to open a link in a new buffer can be customized in the new request-resource-scheme keymap scheme of the buffer class.
  • Sessions are now saved in XDG_DATA_HOME/nyxt/sessions/. Default session is default.lisp. The command line option --session has been replaced by the more general --with-path (e.g. --with-path session=/path/to/session).
  • Sessions are restored lazily. This fixes the long hang on startup.
  • Session buffer titles are also restored.
  • Command line options: New --load option to load a Lisp file, --eval and --load can be specified multiple times, the --remote option allows evaluating --eval and --load in a running instance (if remote-execution-p is non-nil). New --script command line option that can be used in shabang to write “Nyxt scripts.”
  • New autofill command to insert predefined content in text fields.
  • Remove SQLite importers and dependency.
  • Fix out-of-sync buffer title.
  • New current-window function.
  • Rename the *-inspect documentation commands to describe-*.
  • New documentation commands: describe-function (works on macros), describe-slot, describe-class, describe-key, describe-bindings.
  • Documentation commands list only exported symbols from :nyxt, but all symbols from :nyxt-user.
  • New define-configuration macro. See its documentation with describe-function.
  • Remove the get-default kludge. Use define-configuration instead.
  • define-parenscript now takes any lambda-list and does not take the implicit %callback argument anymore.
  • help-mode is now part of its own package, nyxt/help-mode, like any other mode.
  • Remove total-window-count and total-buffer-count accessors (they are implementation details).
  • Improve performance and completeness of element hinting.
  • Fix zooming issues.
  • New open-inspector command to bring up the web inspector.
  • New spell-check-* commands. To be continued.
  • Add base-mode and move all base key bindings from root-mode to base-mode.
  • Ensure that all commands belong to their appropriate namespace. In particular, all webview-related commands now belong to nyxt/web-mode (zooming, searching, hinting, etc.) and minibuffer commands belong to nyxt/minibuffer-mode.
  • Transparent GPG-encrypted file persistence when files have a .gpg extension. This makes it possible to keep bookmarks, history, session, etc. in encrypted files.
  • Change completion function for bookmark tags. Press tab to complete the tag at point. Re-bookmarking an existing entry allows for changing the existing tags.
  • Search engines can be tab-completed when there is only one word in the set-url minibuffer input and the first suggestion is selected.
  • Search engines are now class objects constructed with make-search=engine.
  • Password manager commands default to current domain.
  • Default package is :nyxt-user in configuration but also in command line evaluation and in scripts.
  • Support data-profiles. A data-profile can be used to specify a group of settings for data paths by specializing the expand-data-path method.

    Add --data-profile and --list-data-profiles command line options.

1.5.0

  • Add certificate-whitelist-mode. (Thanks to Alexander Egorenkov.)

    This mode temporarily authorizes invalid certificates for the current buffer (e.g. TLS certificates).

    The mode can also be enabled for all buffers with a custom whitelist so that the whitelisting is remembered across sessions.

  • Add enable-hook-handler and disable-hook-handler commands.

    This is particularly convenient to temporarily disable hooks that are set in the init.lisp file.

  • Overhaul buffer search to behave in a Helm/Ivy fashion.
  • Add search-buffers command to search across the given buffers. (Thanks to Chris Bøg.)
  • Add delete-other-buffers command. (Thanks to Chris Bøg.)
  • Sort buffer by last-access time.

    In particular, the latest buffer buffer will be popped when deleting the current buffer.

  • Display log messages in *Messages* buffer. (Thanks to Bruno Cichon.)
  • Show source location with command-inspect. (Thanks to Bruno Cichon.)
  • Fix define-mode when there is no docstring. (Thanks to Chris Bøg.)
  • Fix tab-insert on candidates.
  • Rename “link-hint” to “element-hint”.
  • Fix updating echo area on buffer change.

1.4.0

  • CLOS-style configuration.

This simplifies setting the default slots of the various classes (buffer, window, interface, minibuffer, etc.). In particular, the user-specialized (or extension-specialized) classes can in turn be composed to form a new specialized classes.

  • Revamped hook system. (Backward incompatible.)

Hooks are now simpler to use but also more powerful. In particular, handlers can be typed and composed. See the manual for examples.

  • Link hints: Add fuzzy-completion over titles and URLs.
  • New --eval command line argument.
  • New delete-all-buffers command.
  • Open directories, music and videos directly from Next.
  • VCS: More checks and notifications.
  • Deprecate video-mode and move it to its own repository (https://github.com/atlas-engineer/nx-video).
  • Complete search-engine names with Tab.
  • Display package in execute-command candidate list.
  • New +platform-port-command+ global.
  • More minibuffer default bindings. Bind C-Right, C-Left, Home, End in the minibuffer.
  • Remove history duplicates.
  • Scroll page with an offset by default.

    Offset is configurable in the page-scroll-ratio buffer slot.

  • New command line parameter --session to skip loading the previous session.
  • Password manager fixes. (Thanks to Rune Juhl Jacobsen.)
  • Bug fixes.
    • Don’t reload page when there is no history change.
    • Omit extra space in search engine queries.
    • Show if new or current buffer in set-url prompt (Thanks to Rune Juhl Jacobsen).
    • Fix minibuffer performance hog.
    • Fix element hint performance.
    • Buttons hints can now be followed.
    • Fix element hint rendered offscreen on a scaled display.

1.3.4

  • Display number of (marked) candidates in minibuffer.
  • Improve fuzzy search performance and relevance.
  • Swap C-x k and C-x C-k bindings to match Emacs’ behaviour.
  • Fix platform port lookup failure on startup when looked up in PATH.
  • Fix default-hostlist path in pre-compiled binaries.
  • Fix compound tags lookup for bookmarks.
  • Fix history update on Javascript-loaded pages (e.g. GitHub).

1.3.3

  • Select multiple candidates in minibuffer The default bindings are:
    • C-SPACE to toggle the mark of an entry,
    • M-a to mark all visible entries,
    • M-u to unmark all visible entries.
  • Extend bookmark support.
    • Bookmarks can have tags, a shortcut string, a search-url and a timestamp.
    • Minibuffer usage:
      • wiki: Open the Wikipedia main page.
      • wiki elephant: search Wikipedia for “elephant”.
    • Switch from SQLite to an s-exp based text file. A bookmark entry is stored as follwos:
      (:url "https://en.wikipedia.org/wiki/Main_Page" :title "Wikipedia, the free encyclopedia" :shortcut "wiki" :search-url "http://en.wikipedia.org/wiki/Special:Search?search=%s" :date "Sat Jul 14 09:41:56 2018" :tags '("encyclopedia" "knowledge" "wiki"))
              
    • Bookmark can have search engines. interface search engines and bookmark search engines are automatically merged.
    • Bookmarks can be stored and restored in a customizable format.

      See the bookmarks-store-function and bookmarks-restore-function in interface.

  • Password manager. (Thanks to Solomon Bloch.)

    See the commands save-new-password and copy-password.

    Support for multiple backends. Currently:

  • Session persistence

    The “user session”, that is, the list of buffers and their tree-histories, is now automatically persisted. Upon restarting Next, the previously open buffers will automatically be restored.

  • New quit-after-clearing-session command.
  • New download-video command. It is a wrapper around the youtube-dl program.
  • New vcs-clone command to clone Git repositories to a prefered or queried location.
  • New reopen-buffer and reopen-last-buffers commands. (Thanks to @4t0m.)
  • Faster and improved minibuffer fuzzy completion.
  • New customizable startup-function.
  • New history tree commands: buffer-history-tree, history-forwards-maybe-query, history-backwards-query, history-all-query.
  • New delete-history-entry command.
  • New next-user package, left for the user to use in their initialization file.
  • New --no-init, -Q command line argument.
  • New messages command to show all the echoed messages.
  • Bind M-: to command-evaluate.
  • Bind s-button1 to open URL in background.
  • Fix clicking in text areas to stick to vi-insert-mode. (Thanks to @4t0m.)
  • Downcase command name in execute-command.
  • Move the search-engines slot from the window class to the interface class.
  • Rename new-buffer, new-window and make-visible-new-buffer to make-buffer, make-window and make-buffer-focus.
  • Rename document-mode to web-mode.
  • Rename history-db-path and bookmark-db-path to history-path and bookmarks-path respectively.
  • Remove broken :mode argument from define-key.
  • Deprecate calling define-key without a keymap argument.
  • Rename buffer slot title to url, remove buffer-get-url and deprecate %buffer-get-title.

1.3.2

  • Hooks for commands, modes and various UI or networking events.

    Hooks are lists which the user can fill with handlers to perform arbitrary actions on specific events, such as after the creation of a buffer, on start/exit, when a download has finished, before/after the execution of any command, or when enabling/disabling a mode.

    Note: Hooks are still experimental and their API is likely to change in the future.

  • New open-file command (C-x C-f).

    This new command allows to open a file from the file system.

    The user is prompted with the minibuffer, files are browsable with the fuzzy completion.

    The default directory is the one from the download manager.

    Press Enter to visit a file, M-Left or C-l to go one directory up, M-Right or C-j to browse the directory at point.

    By default, it uses the xdg-open command. The user can override the next:*open-file-function* variable with a new function, which takes the filename (or directory name) as parameter. See the manual for an example.

    The default keybinding is C-x C-f.

    Note: This feature is experimental and is meant to grow in future versions of Next!

  • New paste-from-ring command. (Thanks to Solomon Bloch.)

    All copied text snippets are saved in a clipboard “ring.” Any snippet can be fuzzy-searched and pasted later.

  • New minibuffer-history command (M-p).

    This allows to fuzzy-search the history of minibuffer inputs. Some minibuffers may use their own history, otherwise they use the default. For instance, the set-url-* history includes the current URL, so that pressing C-l M-p RET brings up the current URL in the input, ready for editing.

  • Improve minibuffer performance when loading many candidates.
  • Fix minibuffer scrolling to feel more natural.
  • Reduce minibuffer height when there is no completion function (e.g. link hints).
  • Add next-init-time command.

1.3.1

Print page title in buffer list

And the title is matched when fuzzy-searching a buffer!

Improved minibuffer performance: it now shows up instantly

Open external links in new buffer by default

This can be configured by setting (open-external-link-in-new-window-p *interface*) to the desired boolean.

Return to last created buffer when deleting buffer

When killing the last created buffer, we were brought back to the first one, so usually the help buffer. This is now fixed, we stay at the previous last created buffer, as expected.

Minibuffer M-backspace improvements

  • In the minibuffer, using M-backspace to delete a word didn’t respect whitespaces. It is fixed.
  • Its behaviour was also too different than other common tools, like Firefox. Now:
    • it deletes the trailing word delimiter;
    • it removes all trailing delimiters plus one word.

Add more key bindings

  • Keypad keys were added. The PyQt port requires an update.

Next is back to the Guix official channel

The Next Guix channel can be safely removed from your ~/.config/guix/channels.scm before running a guix pull.

  • Mouse button2 (middle click) opens a URL in a new buffer/window.

Automatically fall back to a local dbus session if none can be used

Fix platform port log file path on Guix

It is now properly set to ~/.local/share/next/next-gtk-webkit.log by default.

Fix ignored search engine prefix in minibuffer input

Fix browsed URLs not being added to history

Yes, this is better for a daily usage :)

Fix crash when proxy-mode was added to the list of default modes

You can now write this to open pages in proxy-mode by default:

(setf (get-default 'proxy-mode 'server-address) "socks5://localhost:1080")
(add-to-default-list 'proxy-mode 'buffer 'default-modes)

Thanks to @MasterCsquare.

More bug fixes (special thanks to Solomon Bloch, @goose121, Sean Farley, @glacambre)

Developer changes

The Makefile automatically updates the Quicklisp distribution

Next uses its own installation path for the Quicklisp dependencies, it doesn’t mesh with your existing ~/quicklisp/local-projects. Now you can follow git master without the suprise of a library missing a function.

Remove cl-string-match and cl-strings dependencies

Now we mostly rely on str and cl-ppcre.

1.3.0

PyQt/Webengine platform port

QtWebengine is based off Blink (the renderer of Chrome). A PyQt platform port would have the benefits of being cross-platform while offering an alternative web renderer.

Because of WKWebKit library limitations, the cocoa-webkit platform port misses some features such as proxy support, per-buffer cookie file, network resource interception. To address these limitations, the PyQt platform port could become the default for macOS.

VI bindings

Ad-blocking support

Only host-based for now and uses Easylist by default.

Fix search implementation

It now displays search hints properly and search within iframes too.

Add initial download support

Support multiple modes per buffer

Add proxy-mode

This makes it possible to use Next over Tor among others.

Add noscript-mode to disable JavaScript

Use D-Bus for inter-process communication

This increases security and should also improve performance, notably on *BSD systems.

Remove define-parenstatic macro

define-parenscript supersedes it.

Smarter start up logic

Next will try harder to “do the right thing” when starting. A simple (next:start) from the REPL should be enough in most cases.

Improve minibuffer fuzzy-matching to support permutations and typos

Extended bindings

  • C-w copies any candidate
  • TAB inserts the candidate in the minibuffer.
  • C-v and M-v scroll pages up and down.
  • C-x C-k deletes the current buffer.
  • C-left, C-right, C-Page_Up and C-Page_Down go to previous/next buffer.

Fix init file location guessing

It used to be hard-coded, now it’s found in ~/.config/next/init.lisp.

Display a help buffer on startup

This does not require an Internet connection.

Add Roswell build script (thanks to Danny YUE)

Fix the “blank buffer” issue with the gtk-webkit platform port

Fix the minibuffer size with the gtk-webkit platform port

Display current URL or URL at point in the echo area

Add the about command to display list of campaign backers

Rename add-search-hints to search-buffer

Rename kill to quit

Rename *anchor* commands to *hint*

1.2.2

Use authenticated RPC to mitigate remote-execution vulnerability

Cocoa-webkit support has been dropped

The WKWebKit library is too poor for our use in Next. Cocoa-webkit will be replaced with a QtWebengine platform port in a coming version.

Fix C-[ and C-] bindings with gtk-webkit

Allow loading HTML files specified with relative path

Properly terminate platform port on SIGTERM

Support multiple expressions in command-evaluate

Fix delete-buffer command

Properly fall back to default search engine on invalid URI

1.2.1

Improve next-gtk-webkit stability

In particular, removes a race condition that would often hang the browser on key presses.

Make almost everything stateless but interface

Most globals are gone. Everything is properly initialized just-in-time so that it won’t fail if the user forgets to initialize something manually. (next:start) can safely be run multiple times in a row while producing the same result.

Improve search engine support (thanks to wednesday)

Fall back to a search engine query if input is not a URI. Add support for multiple search engines.

Sort history by number of visits (thanks to wednesday)

Add support for local HTML (file:// protocol)

Add experimental proxy support

Due to limitations in the WKWebview API, the Cocoa version lacks proxy support.

Add mouse support

Intercept all network events

This makes it possible to implement, for instance, ad-blocking, fully from the Lisp side.

Due to limitations in the WKWebview API, the Cocoa version lacks the ability to do any processing on a per URI resource basis. The consequence of this means no Adblocking, no Downloads.

Input events (e.g. key presses, mouse buttons) can be generated programatically

Move platform-specific key translation to the platform port

Clean up on exit

Catch SIGTERM (C-c in a shell), kill the interface on exit, etc.

Don’t give up so easily on startup

Next will now try to find free ports automatically. It will find the platform ports automatically if run from source. Platform port polling is only done for a limited time to avoid hung processes.

Add experimental Clozure Common Lisp (CCL) support

Improve logging and error reporting

In particular, some errors are reporting in the echo area.

Save platform port log to XDG_DATA_HOME/next/

Add experimental support for next-gtk-webkit on macOS

Though it works on macOS, WebkitGTK+ is very slow since it does not utilize the native graphical frameworks/libraries. Users can see our Macports subtree to install WebkitGTK+ and compile Next manually.

Rename execute-extended-command to execute-command

Rename reload-init to load-init-file

Remove define-parenstatic macro

Both macros are merged into define-parenscript.

Rename mode to root-mode

Replace the - in XML-RPC method names with .

As per the specifications, - is not a valid XML-RPC character in method names.

Prefix all RPC calls with %% in the Lisp core

1.2.0

Add RELOAD-CURRENT-BUFFER command and bind it to C-r

Add NEXT-VERSION command

It reports the commit hash if it was not built on a tag version.

Add cookie support

GTK implementation has per-buffer cookie support.

Due to limitations in the WKWebview API, the Cocoa version lacks the ability to specify a per-buffer or application-wide cookies directory.

Report page load status to echo area

Add COPY-TITLE command and bind it to M-w

Add COPY-ANCHOR-URL command and bind it to C-x C-w

Add COPY-URL command and bind it to C-w

Add PASTE command to minibuffer and bind it to C-v and C-y

Add common movement commands to minibuffer

For instance cursor-forwards-word is bound to M-f by default.

Add “echo area” to display status messaages

Set window title dynamically

Embed/Replace build dependencies in the Cocoa port

It now builds out of the box, with no need for external libraries.

Add commandline arguments to the Cocoa platform port

Report user configuration errors

Save platform logs to tmp/next-$USER

1.1.0

Overhaul start-up and exit processes

Add –init-file command line parameter

Fix a number of issues with GTK-WebKit

Enhance logging with GTK-WebKit

See /tmp/next-webkit-gtk.log by default. Debug message can be included by exporting the G_MESSAGES_DEBUG=all environement variable.

Add recipe for Guix

Scroll selection in minibuffer

1.0.0

GNU/Linux Frontend

  • Create frontend that renders the new Next GUI

MacOS Frontend

  • Create frontend that renders the new Next GUI

Lisp Core Remote Backend

  • Create abstract interface for controlling frontends.
  • Interface must be asynchronous
  • Interface should be connection agnostic, should support BSD style sockets for first iteration, and Unix domain sockets for second iteration

0.08

Execute Extended Command

Allow the user to run M-x to execute any extended command.

Hydra Functionality

  • Implement functionality similar to the famous Hydra package by Oleh Krehel

Add Hook System

Add ability to inspect commands

Continuation Passing Style Input

  • Allow user to use a (input* ()) type binding in which they can prompt the user for input rather than the current style which involves setting the input handling as part of the lambda registered in the keybinding
  • Convert existing functions to use continuation passing style input

Define-Command

  • Implement define-command macro with overhaul for how keybindings are set/handled in functions
  • Convert all user invokable functions to use define-command

Support XDG Configuration

0.07

GTK Port

  • Create GNU/Linux GTK Port

0.06

Fix Compilation

  • Compilation loading of Quicklisp should check both ~/.quicklisp as well as ~/quicklisp and load whichever it finds first

User Customization Example

  • Create an example in the Documents directory that details the creation of a simple mode, and a way of customizing Next

Jump to Heading

  • Implement something akin to ijump which allows you to jump to any heading on a given page represented by H1 H2 H3 tag etc

Search within Buffer

  • Add ability to search within the buffer

Add Search Function

  • Minibuffer should allow searching via a search engine

Buffer contains list of modes

  • The buffer should contain a list of all of the modes that have been applied to it, so that no memory is lost when switching modes

Add Slime Support

  • Add slime support to the compiled version of Next

Reload Init Function

  • Allow function to reload init

Add Help System

  • Add basic help system that can be extended
  • Add the ability to look up global variables

Extend Bookmark Support

  • Allow user to manually enter the bookmark URL into the minibuffer directly
  • Allow the user to create a bookmark from a link-hint anchor

0.05

Minibuffer selection

  • Should be able to move up and down through candidates using C-n and C-p
  • Minibuffer should return actual object in question instead of doing strange magic with strings

Minibuffer set text

  • Allow the setting of the Minibuffer text
  • Setup the automatic clearing of the Minibuffer previous text

Add Link Hints

  • user should be able to navigate all links entirely by keyboard
  • user should be able to open link hints in a new buffer with focus
  • user should be able to open link hints in a new buffer without focus

Fix keybindings within repl

  • Allow keybinding invocation within repl overriding ccl cocoa IDE

History

  • History will be stored in a DB (possibly sqlite)

History is searchable

  • History has a query language that can be used to look for different things (e.g. date, include exclude regex, etc)
  • Because history is stored in sqlite DB, user can create queries against their history

Set-url history suggestion

  • History should be suggested by set-url
  • Minibuffer input should be able to handle different use cases for different input methods

Update Manual

  • Update manual with latest capabilities and changes to codebase

0.04

Isolate backend QT Code

  • Break apart QT code into separate file
  • Remove all top-level side effects
  • Modularize GUI backend

Write Cocoa backend

  • Use CCL Cocoa Library to use native WebKit backend

Bookmarks

  • Bookmarks will be stored in a DB (possibly sqlite) with information about them, they’ll be navigable via a completion buffer

0.03

Write Manual Base

  • Write basic information and configuration within the manual as a “users” guide

Improve in Code Documentation & Architecture

  • Create much clearer picture of how everything functions together, make cleaner architecture diagrams showing how everything links together
  • Document all functions

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

Kill Buffer

  • Add function to kill buffer, bind to C-k

0.02

History Tree Mode

  • Create a mode that allows traversal of the tree created in the history of a document-mode buffer

Cancel Within Minibuffer mode

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

Ability to navigate forward and backward in history

  • using the key binding M-f, and M-b for forward and backward respectively
  • should only work if there is one child

Forward navigation with more than one child prompts mini-buffer selection

  • If a user tries to navigate forward but there is more than one possible destination available, show the possibilities as an auto-completable list in the minibuffer

CLOS

  • Convert struct usage to CLOS

Scrolling

  • The ability to scroll up and down within a document
    • using C-n to scroll down
    • using C-p to scroll up

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.

Major mode: document-mode

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:

Ability to open a new html document with the key binding C-l

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.

Ability to open new buffers with the key-binding M-l

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

Ability to set Key bindings

The following syntax should be used to set a key binding:

(define-key x-mode-map (key “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.

(key “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:

(key “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.

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.

Minibuffer Completion

Switch buffer should demonstrate an example of minibuffer completion candidates

Compilation OSX

  • One “click” build system for deployment on OSX
  • Organization of build systems into lisp files, no shell scripts