Next uses Semantic Versioning.
Given a version number MAJOR.MINOR.PATCH, we increment:
- MAJOR when we make incompatible API changes,
- MINOR when we add functionality in a backwards-compatible manner, and
- PATCH when we make backwards-compatible bug fixes.
If possible!
- There should be a package manager/repository where creators of packages can publish, and users can download
- This technology will probably be built on top of Quicklisp or CLPM.
- Search engine auto-completion.
See the engine suggestions in the prompt buffer as you type.
By default, support for DuckDuckGo and Wikipedia is included.
set-url
and friends now allow for multiple selection (e.g. opening multiple bookmarks at once).- Commands defined with
define-command
are no longer listed inexecute-command
. Usedefine-command-global
to define global commands that are always listed. - Display number of downloaded bytes.
- Buffer default modes can now be customize via the
default-modes
generic function. This function uses theappend
method combination.define-configuration
now supports customizing these methods just as for slots.In practice, this means that adding a mode (like
emacs-mode
) to the defaults ofbuffer
will propagate to all sub-buffer types. - New
define-command-global
function. Commands defined usingdefine-command
only appear inexecute-command
if the mode they belong to is enabled. reopen-last-buffer
always switches to it. Deprecatedfocus-on-reopened-buffer-p
has been removed.- Backward incompatible changes:
- Commands defined with
define-command
in:nyxt-user
are no longer visible inexecute-command
. Usedefine-command-global
instead. - By default,
trivia
is unused in the:nyxt-user
package. Besides, Alexandria and Serapeum’s nicknames (:alex
and:sera
) are unset.Users must not set them manually if they want to use them.
- Removed the
notify
function. This removes the dependency on the notify-osd external program.This function was not generic enough and used only once. Notifications will be reintroduced later with a more generic interface.
- Removed
set-url-from-bookmark-new-buffer
.It’s redundant with
set-url
orset-url-from-bookmark
second action.For users who really want a direct binding to this behaviour, you can now use the
:actions
keyword argument to easily create your custom version ofset-url-from-bookmark
. - Many commands got renamed for consistency:
bookmark-current-page
tobookmark-current-url
enable/disable-mode-for-buffer
toenable/disable-mode
- Zoom commands to shorter equivalents.
bookmark-page
tobookmark-buffer-url
bookmark-delete
todelete-bookmark
jump-to-heading-across-buffers
tojump-to-heading-buffers
search-selection
toquery-selection-in-search-engine
reload-buffers
toreload-buffer
- Commands defined with
- New
--system-information
command line option.This is useful to report the user environment when Nyxt does not start.
- Removed Common Lisp
file-attributes
dependency. - New
:nyxt-2
entry in Common Lisp*features*
.This is useful for users and extension writers to handle backward incompatible code.
- Bug fixes. (Thanks for @franburstall for the continuous testing!)
- Fixed some prompt buffer suggestion display (like
hook-description
). - Fixed crash when right-clicking on some elements, like the Slack composition area.
- Fixed crashes on click and scroll in prompt buffer.
- Removed duplicates from prompt buffer history.
- Fixed some commands, like
describe-variable
andhistory-tree
. - Fixed
url-dispatching-handler
when handler returnsNIL
. - Fixed loading of local HTML files when pass as command line argument.
- Fixed some prompt buffer suggestion display (like
- Enabled WebKitGTK process sandboxing.
- Use GI-GTK render by default. This should fix many issues, like the hang when cancelling the print dialog.
- Nyxt extensions are now officially supported.
They are written as regular Common Lisp libraries.
Install them to
*extensions-path*
(default to~/.local/share/nyxt/extensions
) then load them from your initialization file. - Added Support for popups and “Open in new window” context menu item.
- New simple built-in editor capabilities so that you can easily script Nyxt without opening up an external editor.
- Rename
%slot-default
to%slot-default%
. - New
focus-first-input-field
command. (Thanks to @aadcg!) lisp-repl
improvements:- New input text area that support input methods.
- Visual error reporting.
- Rename
paste-from-clipboard-ring
topaste-from-clipboard-ring
. - Rename most instances of “URI” to “URL”.
- Prompt buffer improvements:
- Renamed “properties” to “attributes” and use string alists instead of plists.
- All buffer-related prompt buffer source now show the current buffer at the top, except when buffer switchin in which case the previous buffer is shown at the top.
- New
describe-prompt-buffer
command (bound tof1 m
by default in the prompt buffer). - Removed
return-input
. It’s simpler and more explicit to use raw-sources and the like. - New
hide-single-source-header-p
andhide-attribute-header-p
configuration options.When enabled, automatically hide the source header and the attributes header, respectively, when there is a single source or a single attribute, respectively.
- Added bookmark source to
set-url
and friends. - Re-added global input history to the prompt buffer.
- Fix invisible input for commands like password queries.
- Counts of suggestions and marks and displayed per source as well.
- Restored
M-i
binding for to toggle hint transparency. - Emacs and VI keymap schemes are fully supported in the prompt buffer.
- Restored
open-file
command. It’s a completely revamped version of the old command. It now leverages the prompt-buffer. - Remove
object-string
andobject=display
, now superseded byattributes-default
andobject-attributes
. - Remove
buffer-list
arguments. (Thanks for @aadcg!) You can further transform the list withsort-by-time
andmatch-domain
in place of the former keyword arguments. - Modes can be easily configured how they get displayed in the status
area:
visible-in-status-p
can be set tonil
and the mode won’t be shown. This is useful for ubiquitous modes.- If set, the
glyph
slot will be displayed instead of the mode name.
- New Jump to heading across all tabs.
- Add superclass and subclass link to
describe-class
. - Move all
Makefile
recipes to thenyxt.asd
. Now the whole build and install process can be fully driven from Common Lisp. - Added more keybindings to
visual-mode
. - Rename
window-set-active-buffer
towindow-set-buffer
. - Download manager improvements:
- Added a prompt buffer source to list and open the downloads.
- Report errors and canceled downloads.
- Generate unique file name when destination exists.
- On WebKit process crashes, automatically delete the unusable buffer.
- New
buffer-loaded-hook
. - Show search engine suggestions when setting new URL.
A new
new-url-query
source replaces the former raw-source. - Display a more meaningful message on page load error.
- Bug fixes
- Handle all Lisp exception, which should prevent Nyxt from crashing
on Lisp errors.
funcall-safely
has been superseded bywith-protect
. - Fix
--init
command line option. - Fix WM class and name on both Xorg and Wayland.
- Fix many commands that broke with the new prompt buffer API
(
reload-buffers
,bookmark-url
,bookmark-page
,search-buffer
…). - Fix case sensitivity in prompt buffer.
- Avoid HTTP->HTTPS->HTTP loops with force-https-mode.
- Fix auto-mode on restored or reopened buffers.
- Fix crash with recent cl-str version.
- Fix OSPM with non-SBCL compilers.
- Fix most OSPM commands.
- Fix license query for OSPM Guix.
- Fix last bookmark tag spurious modification.
- Don’t load URLs in internal buffers.
- Fix
lisp://
URL support inbuffer-load
(e.g. when using link hints). - Fix
edit-with-external-editor
when result is shorter than the original content. - Fix matching hints to display first in source.
- Handle all Lisp exception, which should prevent Nyxt from crashing
on Lisp errors.
- New prompt-buffer, replacing the minibuffer for all user
interactions.
Important highlights:
- Universal input method support (such as with UIM, IBus, etc.). In other words, you can now input text in any language (Chinese, Japanese, Korean, Indic, etc.)
- Asynchronous suggestion computation. This implies a performance boost: prompt input is always responsive, regardless of the suggestion computation.
- Multi-source support: get suggestions from different source compositions! This is not fully leveraged for now, it will be in the coming version!
- Multi-action support: open the prompt, narrow down, mark, and press
M-return
to list all the actions you can operate on the marks. - Multi-column display: all suggestion properties are configuration
via the
object-properties
method. PressC-]
to configure the columns to display. - New
resume-prompt
command, for instance to resume a search where you left it. - New “follow mode” (toggle with
C-c C-f
). Try it inswitch-buffer
, it will update the view with the selected suggestion!
- New
describe-any
command. It leverages the new prompt buffer multi-source feature to conflate all help sources. - Global history tree (GHT).
See our article for an introduction.
- Session commands were removed.
Use
restore-history-by-name
andstore-history-by-name
instead. - The new default history file is now stored in the
history
subdirectory by default.
- Session commands were removed.
Use
- New
nosave
buffer commands. Anosave
buffer does not persist any data to disk. (This feature is also known as “icognito” or “private” mode in some other browsers.)- Rename
private-data-profile
tonosave-data-profile
.
- Rename
- New
visual-mode
. (Thanks to @kssytsrk!) - New
watch-mode
. (Thanks to @aadcg!) - New
diff
command. (Thanks to @aadcg!) - Rename
fill-input-from-external-editor
toedit-with-external-editor
. (Thanks to @aadcg!)The edited HTML content is replicated in the editor, then the editor content is committed back upon closing.
- Enable Intelligent Tracking Prevention by default.
- New GObject Introspection-based renderer.
- Removed
url-group
. We recommend using bookmark tags instead. - Hints:
- More element hints are followable (such as Javascript URLs, clickable and focusable elements).
- Hint alphabet is customizable via the
hints-alphabet
web-mode
slot.
- Password management:
- Initialization fixes.
- Fix timeouts and cleanup clipboard properly.
- Password interfaces now have user classes, thus they are configurable with
define-configuration
.
- New
smooth-scrolling
buffer
slot option. - New
update-hostlists
command forblocker-mode
. - New
with-data-unsafe
for thread-unsafe persistent data access. - New default
:renderer
download engine.You can switch download engine with the
download-engine
buffer slot. - Build and platform support:
- New non-official platform support: FreeBSD.
- macOS is down at the non-official state now. (Help welcome!)
- Remove
usocket
andOsicat
dependencies.
- Bug fixes, among which:
- Startup failures when
*socket-path*
is nil, or when socket exists on single-instance. - Pasting text no longer moves the cursor.
- Fix application name, as well as icon on Wayland. (Thanks to @jeffbowman, @aacdg!)
- Startup failures when
- Added a dashboard function to Nyxt. It can be used as a startup-buffer. It can display display recent URLs, bookmarks, etc.
reduce-to-buffer
includes a summary of each buffer (powered by our Text Rank implementation).- New
toggle-fullscreen
replacesfullscreen-current-window
andunfullscreen-current-window
. - New
conservative-word-move
buffer slot that changes the cursor movement behaviour. (Thanks to @aadcg!) - New
minibuffer-toggle-mark-all
command. (Thanks to @aadcg!) auto-mode
rules support slot specialization.- Replace
style-mode
associations with auto-mode rule specialization. - Improved
buffer-history-tree
presentation. It is now easier to visualize the tree as there are lines drawn between nodes. ospama
:- Renamed to
OSPM
. - Package managers are detected at runtime.
- Add multi-version support to the Guix backend.
- Renamed to
define-class
can automatically define a predicate, just likedefstruct
.with-data-access
accepts a default value.with-data-unsafe
– a faster version ofwith-data-access
for fast non-modifying thread-unsafe look-ups.analysis
library:- Add support for DBSCAN algorithm. DBSCAN is a clustering algorithm used to classify vectors as being related.
- Improve Text Rank algorithm implementation. This results in better summarization.
- Replaced
chanl
withcalispel
for concurrency. - Bug fixes:
- Fix wrong highlighting of search occurences. (Thanks to @acwilton!)
- Fix many startup race conditions.
- Fix chained minibuffers randomly not showing.
- Case-sensitive
file://
URLs are supported. define-mode
no longer creates an export clash when inheriting from a mode from a foreign package.
- Overhauled status view which now displays a scrollable list of tabs.
Hold
shift
to scroll the tabs horizontally. - New
dark-mode
(experimental). - New universal package manager interface.
Install, uninstall, describe packages, list their files, change generations, etc. See the various
*-package-*
and*-generation-*
commands.For now it only interfaces the Guix package manager.
Help to implement additional backends is welcome!
- New
nowebgl-mode
. - New
nyxt-init-file
helper to derive a file name relative to the Nyxt configuration folder. - No longer ask to restore session when there is none.
- Build option changes:
- The
NYXT_VERSION
environment variable can be used by packagers to force-set the version used by Nyxt. NYXT_TESTS_ERROR_ON_FAIL
can be used by packagers to error out when running the test suites, instead of continuing silently.NYXT_TESTS_NO_NETWORK
can be used to disable network tests (useful when the build environment does not allow network connections).
- The
- Bug fixes:
- Pasting no longer hangs the browser (happened in some edge cases).
invert-color
bookmarklet now works (thanks to @brongulus).- Startup is no longer interrupted when escaping the minibuffer asking to restore the session.
- Setting the bindings in
common-settings
now applies to all types of buffers. - Fix history corruption when opening URL with
about:
schemes. - Fix
describe-variable
.
- Synchronous minibuffers and Parenscripts.
Minibuffers and parenscripts no longer need to be called with
with-result
nowith-result*
(which have been removed). Parenscripts can be called directly while minibuffer interaction is now done with theprompt-minibuffer
function. - Temporarily removed
meta-search-history-buffers
.It was incompatible with synchronous minibuffers. It will be re-introduced when we have multi-source minibuffers.
- New
import-bookmarks-from-html
command. (Thanks to @kssytsrk.) - New
execute-extended-command
command. You can now execute commands and interactively supply required, optional, and keyword parameters. - New
reduce-tracking-mode
. - Add many bookmarklets (Javascripts utilities):
- color-internal-external-links
- urls-as-link-text
- hide-visited-urls
- toggle-checkboxes
- view-password-field-contents
- show-hidden-form-elements
- enlarge-textareas
- show-textbox-character-count
- highlight-regexp
- zoom-images-in
- zoom-images-out
- sort-table
- number-table-rows
- number-lines
- transpose-tables
- remove-color
- remove-images
- hue-shift-positive
- hue-shift-negative
- increase-brightness
- decrease-brightness
- invert-color
- New
reduce-to-buffer
command to delete buffers and list them on a page. Useful for offloading inactive buffers and sending/saving a group of buffers. download-hint-url
now support multiple selections.- New
toggle-toolbars
command. - Replace
load-system
configuration helper withload-after-system
. - Quicklisp-based Lisp package manager. See the
list-systems
,load-system
andadd-distribution
commands. - Moved mode globals to mode slots:
- Moved
*default-proxy*
to theproxy
slot ofproxy-mode
. - Moved
*prompt-on-mode-toggle*
to theprompt-on-mode-toggle
slot ofauto-mode
. - Moved
*non-rememeberable-modes*
to thenon-rememberable
slot ofauto-mode
.
The user can now leverage
define-configuration
anddescribe-class
to easily configure any mode. - Moved
- Moved input-edit commands (
cursor-forwards
, etc.) toinput-edit-mode
. - Replaced
lparallel
dependency withchanl
. - Bug fixes
- SBCL 2.0.9 support.
- Fix
repl-mode
. - Fix element hinting on
lisp://
URLs. - Commands can now by defined with a package prefix in their name,
e.g.
nyxt::my-command
. - Fix hostname resolution. Hosts on the local network can now be browsed by name.
- Add configuration buttons for slots.
The configuration is persisted to
~/.config/nyxt/auto-config.lisp
. - Add user classes (browser, window, buffer, minibuffer, modes and some more).
define-configuration
now updates the corresponding user-class, which is a slot-less class that inherits from the default class + various class specializations.This approach has the benefit to be functional (in the sense of functional programming): it allows the user to access the default slot values, it’s even possible to remove a specialization.
- Add per-buffer data.
Most data-path slots have been moved from the browser class to the buffer class. This allows for much more flexibility and paves the way for “private / incognito” buffers.
- Rename
show-bookmarks
,download-list
,messages
tolist-bookmarks
,list-downloads
,list-messages
respectively, out of consistency. - Overhaul the startup and bookmarks pages.
- Move search-engines slot from BROWSER to BUFFER.
This makes it possible to locally customize the search engines. For instance, the search engines could be altered by proxy-mode.
- Default search engine is now the last one of the list.
The “default” keyword is no longer special.
- Add the
web-buffer
class (inherits frombuffer
) and use it for regular buffers.Move
load-status
,proxy
,cookies
andcertificates
slots toweb-buffer
. Special buffers use theinternal-buffer
class. - Add nosound-mode.
Useful to mute a buffer.
- Add
search-selection
command.Allows to query the highlighted text with a given search engine. Particularly useful for dictionaries.
- Make puny-encoded URLs human readable.
- Bind
M-i
to toggle the transparency of element hints. - Add session dumping commands.
Namely
store-session-by-name
,restore-session-by-name
andreplace-session-by-name
. - Various fixes:
lisp-repl
input works again.- URL with wildcards (like `[` and `]`) are properly downloaded.
localhost
URLs are supported.
- 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
andmanual
commands. - Keybindings bind to function symbols and not functions (i.e.
'foo
and not#'foo
). Make sure to usenyxt: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 eitherkeymap:make-scheme
ordefine-scheme
. Schemes are now first-class objects. Default schemescua
,emacs
,vi-normal
andvi-insert
are in thescheme
package. Thus it’s enough to complete overscheme:
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. Thestatus-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 removedevaluate-lisp
command. - New
list-buffers
command. - Rename
certificate-whitelist-mode
tocertificate-exception-mode
as well as thecertificate-whitelist
slot tocertificate-exceptions
and*default-certificate-whitelist*
to*default-certificate-exceptions*
. - Add
certificate-exception-mode
to the default modes. In case of certificate error, calladd-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 defaultscheme:emacs
withemacs-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 newrequest-resource-scheme
keymap scheme of thebuffer
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 (ifremote-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 todescribe-*
. - 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 withdescribe-function
. - Remove the
get-default
kludge. Usedefine-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
andtotal-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 fromroot-mode
tobase-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 tonyxt/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 theset-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
. Adata-profile
can be used to specify a group of settings for data paths by specializing theexpand-data-path
method.Add
--data-profile
and--list-data-profiles
command line options.
- 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
anddisable-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.
- 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.
- Display number of (marked) candidates in minibuffer.
- Improve fuzzy search performance and relevance.
- Swap
C-x k
andC-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).
- 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
andbookmarks-restore-function
ininterface
.
- Password manager. (Thanks to Solomon Bloch.)
See the commands
save-new-password
andcopy-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
andreopen-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-:
tocommand-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 thewindow
class to theinterface
class. - Rename
new-buffer
,new-window
andmake-visible-new-buffer
tomake-buffer
,make-window
andmake-buffer-focus
. - Rename
document-mode
toweb-mode
. - Rename
history-db-path
andbookmark-db-path
tohistory-path
andbookmarks-path
respectively. - Remove broken
:mode
argument fromdefine-key
. - Deprecate calling
define-key
without a keymap argument. - Rename buffer slot
title
tourl
, removebuffer-get-url
and deprecate%buffer-get-title
.
- 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
orC-l
to go one directory up,M-Right
orC-j
to browse the directory at point.By default, it uses the
xdg-open
command. The user can override thenext:*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 pressingC-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.
And the title is matched when fuzzy-searching a buffer!
This can be configured by setting (open-external-link-in-new-window-p
*interface*)
to the desired boolean.
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.
- 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.
- Keypad keys were added. The PyQt port requires an update.
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.
It is now properly set to ~/.local/share/next/next-gtk-webkit.log
by default.
Yes, this is better for a daily usage :)
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.
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.
Now we mostly rely on str and cl-ppcre.
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.
Only host-based for now and uses Easylist by default.
It now displays search hints properly and search within iframes too.
This makes it possible to use Next over Tor among others.
This increases security and should also improve performance, notably on *BSD systems.
define-parenscript
supersedes it.
Next will try harder to “do the right thing” when starting.
A simple (next:start)
from the REPL should be enough in most cases.
- 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.
It used to be hard-coded, now it’s found in ~/.config/next/init.lisp.
This does not require an Internet connection.
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.
In particular, removes a race condition that would often hang the browser on key presses.
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.
Fall back to a search engine query if input is not a URI. Add support for multiple search engines.
Due to limitations in the WKWebview API, the Cocoa version lacks proxy support.
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.
Catch SIGTERM (C-c in a shell), kill the interface on exit, etc.
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.
In particular, some errors are reporting in the echo area.
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.
Both macros are merged into define-parenscript
.
As per the specifications, -
is not a valid XML-RPC character in method names.
It reports the commit hash if it was not built on a tag version.
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.
For instance cursor-forwards-word
is bound to M-f
by default.
It now builds out of the box, with no need for external libraries.
See /tmp/next-webkit-gtk.log by default.
Debug message can be included by exporting the G_MESSAGES_DEBUG=all
environement variable.
- Create frontend that renders the new Next GUI
- Create frontend that renders the new Next GUI
- 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
- Implement functionality similar to the famous Hydra package by Oleh Krehel
- Model Hook system similar to the Emacs style hooks (https://www.gnu.org/software/emacs/manual/html_node/emacs/Hooks.html)
- 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
- Implement define-command macro with overhaul for how keybindings are set/handled in functions
- Convert all user invokable functions to use define-command
- Based on the spec here: https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html
- Create GNU/Linux GTK Port
- Compilation loading of Quicklisp should check both ~/.quicklisp as well as ~/quicklisp and load whichever it finds first
- Create an example in the Documents directory that details the creation of a simple mode, and a way of customizing Next
- Implement something akin to ijump which allows you to jump to any heading on a given page represented by H1 H2 H3 tag etc
- Add ability to search within the buffer
- Minibuffer should allow searching via a search engine
- 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 to the compiled version of Next
- Allow function to reload init
- Add basic help system that can be extended
- Add the ability to look up global variables
- Allow user to manually enter the bookmark URL into the minibuffer directly
- Allow the user to create a bookmark from a link-hint anchor
- 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
- Allow the setting of the Minibuffer text
- Setup the automatic clearing of the Minibuffer previous text
- 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
- Allow keybinding invocation within repl overriding ccl cocoa IDE
- History will be stored in a DB (possibly sqlite)
- 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
- History should be suggested by set-url
- Minibuffer input should be able to handle different use cases for different input methods
- Update manual with latest capabilities and changes to codebase
- Break apart QT code into separate file
- Remove all top-level side effects
- Modularize GUI backend
- Use CCL Cocoa Library to use native WebKit backend
- Bookmarks will be stored in a DB (possibly sqlite) with information about them, they’ll be navigable via a completion buffer
- Write basic information and configuration within the manual as a “users” guide
- Create much clearer picture of how everything functions together, make cleaner architecture diagrams showing how everything links together
- Document all functions
- 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
- Add function to kill buffer, bind to C-k
- Create a mode that allows traversal of the tree created in the history of a document-mode buffer
- 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
- using the key binding M-f, and M-b for forward and backward respectively
- should only work if there is one child
- 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
- Convert struct usage to CLOS
- The ability to scroll up and down within a document
- using C-n to scroll down
- using C-p to scroll up
- 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
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.
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:
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. 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
(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.
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. Switch buffer should demonstrate an example of minibuffer completion candidates- One “click” build system for deployment on OSX
- Organization of build systems into lisp files, no shell scripts