diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,40 @@
 
+6.6
+---
+
+* Added support for horizontal scrolling inputs. The `Button` type in
+  `Graphics.Vty.Input.Events` got new constructors `BScrollLeft` and
+  `BScrollRight` for Vty backend implementations that support horizontal
+  scrolling inputs.
+
+6.5
+---
+
+* Raised upper bound on `microlens` dependency to permit builds against
+  0.5.
+* Fixed the `utf8-string` dependency lower bound to account for an added
+  module in 0.3.1. (#279)
+* Improved the allocation behavior of `swapSkipsForSingleColumnCharSpan`.
+
+6.4
+---
+
+* Updated the behavior of character width computations when a custom
+  character width table has been installed. Now when a custom character
+  width table doesn't provide a width for a character, rather than
+  defaulting to 1 column, the built-in table is consulted. This change
+  shouldn't affect users using width tables generated by `vty-unix`'s
+  table-building tool since that tool generates tables that will provide
+  widths for all supported characters.
+
+6.3
+---
+
+* Raise microlens upper bound to build with 0.4.14 (#278)
+* Updated other bounds to permit building with GHC 9.12 (thanks Erik de
+  Catro Lopo)
+* Removed defunct examples from project
+
 6.2
 ---
 
@@ -126,8 +162,14 @@
     IO ()`, for logging to the Vty log.
   * `Graphics.Vty.Config` now exposes `VtyUserConfig` instead of
     `Config`. Many of its fields were Unix-specific and were
-    consequently moved to the `UnixSettings` type in `vty-unix`.
+    consequently moved to the `UnixSettings` type in `vty-unix` and
+    given a `settings` prefix. This includes `outputFd`, `inputFd`,
+    `vmin`, `vtime`, and `termName`.
   * The `VtyUserConfig` type's fields got a `config` field name prefix.
+  * `inputForConfig` was moved to `vty-unix` as `buildInput` but
+    generally should not be needed and is exposed only for testing.
+  * `outputForConfig` was moved to `vty-unix` as `buildOutput` but
+    generally should not be needed and is exposed only for testing.
 * Behavior changes:
   * Since `vty` no longer implements `mkVty`, the Vty user configuration
     is no longer implicitly loaded by Vty-based applications.
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -148,14 +148,18 @@
 If you decide to contribute, that's great! Here are some guidelines you
 should consider to make submitting patches easier for all concerned:
 
- - Please ensure that the examples and test suites build along with the
-   library by running `build.sh` in the repository.
+ - Patches written completely or partially by AI are unlikely to be
+   accepted. Please disclose any AI use.
  - If you want to take on big things, talk to me first; let's have a
    design/vision discussion before you start coding. Create a GitHub
    issue and we can use that as the place to hash things out.
  - If you make changes, make them consistent with the syntactic
    conventions already used in the codebase.
  - Please provide Haddock documentation for any changes you make.
+ - Please do NOT include package version changes in your patches.
+   Package version changes are only done at release time when the full
+   scope of a release's changes can be evaluated to determine the
+   appropriate version change.
 
 # Further Reading
 
diff --git a/cbits/mk_wcwidth.c b/cbits/mk_wcwidth.c
--- a/cbits/mk_wcwidth.c
+++ b/cbits/mk_wcwidth.c
@@ -72,6 +72,9 @@
 // built-in tree search logic is used.
 static uint8_t* custom_table = NULL;
 
+// Unused table cell value.
+static uint8_t UNUSED_CELL = 0xff;
+
 // The size of the custom table, in entries. This should only be set
 // if custom_table is not NULL. Its value should be the size of the
 // custom_table array.
@@ -228,14 +231,24 @@
 // Return the width, in terminal cells, of the specified character.
 //
 // If the global custom width table is present, that table will be
-// consulted for the character's width. If the character is not in
-// the table, zero will be returned. If the custom width table is not
-// present, the built-in width table will be used.
+// consulted for the character's width. If the character is not in the
+// table, this will fall back to the built-in table. If the character is
+// in neither table, zero will be returned. If the custom width table is
+// not present, the built-in width table will be used.
 HsInt vty_mk_wcwidth(HsChar ch)
 {
     if (custom_table_ready) {
         if ((ch >= 0) && (ch < custom_table_size)) {
-            return custom_table[ch];
+            uint8_t result = custom_table[ch];
+
+            // The table is filled with UNUSED_CELL values for
+            // uninitialized ranges so we can defer to the built-in
+            // table in those cases.
+            if (result == UNUSED_CELL) {
+                return builtin_wcwidth(ch);
+            } else {
+                return result;
+            }
         } else {
             return -1;
         }
@@ -249,7 +262,7 @@
 // This allocates a new character width table of the specified size
 // (in characters). If a custom table has already been allocated, this
 // returns 1. Otherwise it allocates a new table, initializes all of its
-// entries to 1, and returns zero.
+// entries to UNUSED_CELL, and returns zero.
 //
 // Note that this does *not* mark the table as ready for use. Until the
 // table is marked ready, it will not be used by vty_mk_wcwidth. To mark
@@ -261,7 +274,7 @@
         if (size > 0 && size <= MAX_CUSTOM_TABLE_SIZE) {
             custom_table_ready = 0;
             custom_table = malloc(size);
-            memset(custom_table, 1, size);
+            memset(custom_table, UNUSED_CELL, size);
             custom_table_size = size;
             return 0;
         } else {
diff --git a/src/Graphics/Vty/Input/Events.hs b/src/Graphics/Vty/Input/Events.hs
--- a/src/Graphics/Vty/Input/Events.hs
+++ b/src/Graphics/Vty/Input/Events.hs
@@ -42,7 +42,16 @@
 instance NFData Modifier
 
 -- | Mouse buttons.
-data Button = BLeft | BMiddle | BRight | BScrollUp | BScrollDown
+data Button
+    = BLeft
+    | BMiddle
+    | BRight
+    | BScrollUp
+    | BScrollDown
+    | BScrollLeft
+    -- ^ Some terminals (e.g., Kitty, Alacritty) support horizontal
+    -- scrolling in addition to vertical scrolling.
+    | BScrollRight
     deriving (Eq, Show, Read, Ord, Generic)
 
 instance NFData Button
diff --git a/src/Graphics/Vty/PictureToSpans.hs b/src/Graphics/Vty/PictureToSpans.hs
--- a/src/Graphics/Vty/PictureToSpans.hs
+++ b/src/Graphics/Vty/PictureToSpans.hs
@@ -172,7 +172,7 @@
 
 swapSkipsForSingleColumnCharSpan :: Char -> Attr -> SpanOps -> SpanOps
 swapSkipsForSingleColumnCharSpan c a = Vector.map f
-    where f (Skip ow) = let txt = TL.pack $ replicate ow c
+    where f (Skip ow) = let txt = TL.take (toEnum ow) $ TL.repeat c
                         in TextSpan a ow ow txt
           f v = v
 
diff --git a/vty.cabal b/vty.cabal
--- a/vty.cabal
+++ b/vty.cabal
@@ -1,5 +1,5 @@
 name:                vty
-version:             6.2
+version:             6.6
 license:             BSD3
 license-file:        LICENSE
 author:              AUTHORS
@@ -11,12 +11,8 @@
   vty is terminal GUI library in the niche of ncurses. It is intended to
   be easy to use and to provide good support for common terminal types.
   .
-  See the @vty-examples@ package as well as the program
-  @examples/interactive_terminal_test.hs@ included in the @vty@
-  repository for examples on how to use the library.
-  .
-  Import the @Graphics.Vty@ convenience module to get access to the core
-  parts of the library.
+  See the example programs in the @vty-crossplatform@ package examples
+  on how to use the library.
   .
   &#169; 2006-2007 Stefan O'Rear; BSD3 license.
   .
@@ -29,7 +25,9 @@
                      AUTHORS,
                      CHANGELOG.md,
                      LICENSE
-tested-with:         GHC==8.0.2, GHC==8.2.2, GHC==8.4.3, GHC==8.6.5, GHC==8.8.4, GHC==8.10.7, GHC==9.0.2, GHC==9.2.8, GHC==9.4.5, GHC==9.6.2
+tested-with:         GHC==8.0.2, GHC==8.2.2, GHC==8.4.3, GHC==8.6.5, GHC==8.8.4, GHC==8.10.7,
+                     GHC==9.0.2, GHC==9.2.8, GHC==9.4.8, GHC==9.6.6, GHC==9.8.4, GHC==9.10.1,
+                     GHC==9.12.1
 
 source-repository head
   type: git
@@ -45,12 +43,12 @@
                        blaze-builder >= 0.3.3.2 && < 0.5,
                        bytestring,
                        deepseq >= 1.1 && < 1.6,
-                       microlens < 0.4.14,
+                       microlens < 0.6,
                        microlens-mtl,
                        mtl >= 1.1.1.0 && < 2.4,
                        stm,
                        text >= 0.11.3,
-                       utf8-string >= 0.3 && < 1.1,
+                       utf8-string >= 0.3.1 && < 1.1,
                        vector >= 0.7,
                        binary,
                        parsec,
