anchor.diff:  \(define-configuration web-buffer
     ((request-resource-hook
       (hooks:add-hook %slot-default% 'old-reddit-handler))))"))
  -   (:p "(See " (:code "url-dispatching-handler")
  -       " for a simpler way to achieve the same result.)")
  -   (:p "Or, if you want to set multiple handlers at once,")
  -   (:pre (:code "
  +    (:p "(See " (:code "url-dispatching-handler")
  +        " for a simpler way to achieve the same result.)")
  +    (:p "Or, if you want to set multiple handlers at once,")
  +    (:pre (:code "
   \(define-configuration web-buffer
     ((request-resource-hook
       (reduce #'hooks:add-hook
               '(old-reddit-handler auto-proxy-handler)
               :initial-value %slot-default%))))"))
  -   (:p "Some hooks like the above example expect a return value, so it's
  +    (:p "Some hooks like the above example expect a return value, so it's
   important to make sure we return " (:code "request-data") " here.  See the
   documentation of the respective hooks for more details.")
   
  -   (:h3 "Data paths and data profiles")
  -   (:p "Nyxt provides a uniform configuration interface for all data files
  +    (:h3 "Data paths and data profiles")
  +    (:p "Nyxt provides a uniform configuration interface for all data files
   persisted to disk (bookmarks, cookies, etc.).  To each file corresponds
   a " (:code "nyxt-file") " object. An " (:code "nyxt-profile") " is a
   customizable object that helps define general rules for data storage.  Both
   nyxt-file and nyxt-profile compose, so it's possible to define general rules
   for all files (even for those not known in advance) while it's also
   possible to specialize some data given an nyxt-profile.")
  -   (:p "The profile can be set from command line and from the
  +    (:p "The profile can be set from command line and from the
   configuration file."
  -       "You can list all known profiles (including the user-defined
  +        "You can list all known profiles (including the user-defined
   profiles) with the " (:code "--list-profiles") " command-line option.")
  -   (:p "The nyxt-files can be passed a hint from the "
  -       (:code "--with-file") " command line option, but each nyxt-file and
  +    (:p "The nyxt-files can be passed a hint from the "
  +        (:code "--with-file") " command line option, but each nyxt-file and
   profile rules are free to ignore it.")
  -   (:p "When a path ends with the " (:code ".gpg") " extension, by default your
  +    (:p "When a path ends with the " (:code ".gpg") " extension, by default your
   GnuPG key is used to decrypt and encrypt the file transparently.  Refer to the
   GnuPG documentation for how to set it up.")
  -   (:p "Note that the socket and the initialization nyxt-paths cannot be set in
  +    (:p "Note that the socket and the initialization nyxt-paths cannot be set in
   your configuration (the socket is used before the initialization file is
   loaded).  Instead you can specify these paths from their respective command-line
   option.  You can instantiate a unique, separate Nyxt instance when you provide a
   new socket path.  This is particularly useful in combination with profiles,
   say to develop Nyxt or extensions.")
  -   (:p "Example to create a development profile that stores all data in "
  -       (:code "/tmp/nyxt") " and stores bookmark in an encrypted file:")
  -   (:pre (:code "
  +    (:p "Example to create a development profile that stores all data in "
  +        (:code "/tmp/nyxt") " and stores bookmark in an encrypted file:")
  +    (:pre (:code "
   \(define-class dev-profile (nyxt-profile)
      ((files:name :initform \"nyxt-dev\"))
      (:documentation \"Development profile.\"))
  
positive.code: For instance if you configure the `override-map' slot in `input-buffer', both
  `panel-buffer' and `web-buffer' classes will inherit from the new value.")
  
     (:h3 "Keybinding configuration")
     (:p "Nyxt supports multiple " (:i "bindings schemes") " such as CUA (the
      default), Emacs or vi.  Changing scheme is as simple as running the
      corresponding mode, e.g. "
         (:code "emacs-mode") ".  To make the change persistent across sessions,
  add the following to your configuration:")
     (:ul
      (:li "vi bindings:"
           (:pre (:code "
  \(define-configuration buffer
    ((default-modes (append '(vi-normal-mode) %slot-default%))))")))
      (:li "Emacs bindings:"
           (:pre (:code "
  \(define-configuration buffer
    ((default-modes (append '(emacs-mode) %slot-default%))))"))))
     (:p "You can create new scheme names with " (:code "keymap:make-scheme-name")
         ".  Also see the " (:code "scheme-name") " class and the "
         (:code "define-scheme") " macro.")
     (:p "To extend the bindings of a specific mode, you can extend the mode with "
         (:code "define-configuration") " and extend its binding scheme with "
         (:code "define-scheme") ". For example:")
     (:pre (:code "
  \(define-configuration base-mode
    ((keymap-scheme
      (define-scheme (:name-prefix \"my-base\" :import %slot-default%)
        scheme:vi-normal
        (list \"g b\" (make-command switch-buffer* ()
                      (switch-buffer :current-is-last-p t)))))))"))
     (:p "The " (:code "override-map") " is a keymap that has priority over
  all other keymaps.  By default, it has few bindings like the one
  for " (command-markup 'execute-command) ".  You can use it to set keys globally:")
     (:pre (:code "
  \(define-configuration buffer
    ((override-map (let ((map (make-keymap \"override-map\")))
                     (define-key map
                       \"M-x\" 'execute-command
                       \"C-space\" 'nothing)))))"))
     (:p "The " (:code "nothing") " command is useful to override bindings to do
  nothing. Note that it's possible to bind any command, including those of
  disabled modes that are not listed in " (command-markup 'execute-command) ".")
     (:p "In addition, a more flexible approach is to create your own mode with
  your custom keybindings.  When this mode is added first to the buffer mode list,
  its keybindings have priorities over the other modes.
  Note that this kind of global keymaps also have priority over regular character
  insertion, so you should probably not bind anything without modifiers in such a
  keymap.")
     (:pre (:code "
  \(defvar *my-keymap* (make-keymap \"my-map\"))
  \(define-key *my-keymap*
    \"C-f\" 'nyxt/history-mode:history-forwards
  
negative.code: 
  (defun config-content ()
    (spinneret:with-html-string
      (:h2 "Configuration")
      (:p "Nyxt is written in the Common Lisp programming language which offers a
  great perk: everything in the browser can be customized by the user, even while
  it's running!")
      (:p "To get started with Common Lisp, we recommend checking out
      our web page: "
          (:a :href "https://nyxt.atlas.engineer/learn-lisp" "Learn Lisp")
          ". It contains numerous pointers to other resources, including
          free books both for beginners and seasoned programmers.")
      (:p "Nyxt provides a mechanism for new users unfamiliar with Lisp to
  customize Nyxt. Start by invoking the commands " (command-markup 'describe-class) "
  or " (command-markup 'describe-slot) ".  You can press the button marked 'Configure' to
  change the value of a setting. The settings will be applied immediately and
  saved for future sessions. Please note that these settings will not alter
  existing object instances.")
      (:p "Settings created by Nyxt are stored in "
          (:code (files:expand *auto-config-file*)) ".")
      (:p "Any settings can be overridden manually by "
          (:code (files:expand *config-file*)) ".")
      (:p "The following section assumes knowledge of basic Common Lisp or a
  similar programming language.")
      (:p "The user needs to manually create the Nyxt configuration file "
          (:code (files:expand *config-file*))
          ", and the parent folders if necessary. You can also press the button
  below to create said file, if it's not created yet.")
      (let ((config-file-path (files:expand *config-file*)))
        (:p (if (uiop:file-exists-p config-file-path)
                (:a :class "button"
                    :href (ps:ps (nyxt/ps:lisp-eval `(echo "Configuration file exists")))
                    "Configuration file exists")
                (:a :class "button"
                    :href (ps:ps (nyxt/ps:lisp-eval
                                  `(progn (ensure-directories-exist ,config-file-path)
                                          (ensure-file-exists ,config-file-path)
                                          (echo "Configuration file created at ~a."
                                                ,config-file-path))))
                    "Create init file"))))
      (:p "Example:")
      (:pre (:code "
  \(define-configuration buffer
    ((default-modes (append '(no-script-mode) %slot-default%))))"))
      (:p "The above turns on the 'no-script-mode' (disables JavaScript) by default for
  every buffer.")
      (:p "The " (:code "define-configuration") " macro can be used to customize
  the slots of classes like the browser, buffers, windows, etc.  Refer to the
  class and slot documentation for the individual details.")
      (:p "To find out about all modes known to Nyxt,
  run " (command-markup 'describe-command) " and type 'mode'.")
  
      (:h3 "Slot configuration")
      (:p "Slots store values that can be either accessed (get) or changed
  (set). Setting new values for slots allows many possibilities of customization.
  For instance, keyboard layouts vary across the world. The slot "
          (:code "hints-alphabet")
          " has the default value of "
          (:code "ABCDEFGHIJKLMNOPQRSTUVWXYZ")
          ". If the user has an American keyboard, they can do:")
      (:ol
       (:li "Execute command " (command-markup 'describe-slot) ";")
       (:li "Type " (:code 'hints-alphabet)";")
       (:li "Select " (:code "hints-alphabet") " (" (:code "hint-mode") " class option);")
       (:li "Press the button " (:code "Configure") ", and;")
       (:li "Insert the string \"asfdghjkl\"") ".")
      (:p "This will make link-hinting more comfortable for this user. In
  addition, other similar approaches of customization can be applied to slots
  such as " (:code "spell-check-language") ", which can be expanded to do the
  spelling-check of other languages besides English.")
  