summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/cmds.c2
-rw-r--r--test/src/cmds-tests.el17
2 files changed, 18 insertions, 1 deletions
diff --git a/src/cmds.c b/src/cmds.c
index e9dee5ed2e3..9ca9a6d28de 100644
--- a/src/cmds.c
+++ b/src/cmds.c
@@ -489,7 +489,7 @@ internal_self_insert (int c, EMACS_INT n)
SET_PT_BOTH (PT - 1, PT_BYTE - 1);
auto_fill_result = call0 (Qinternal_auto_fill);
/* Test PT < ZV in case the auto-fill-function is strange. */
- if (c == '\n' && PT < ZV)
+ if (c == '\n' && PT < ZV && FETCH_BYTE (PT) == '\n')
SET_PT_BOTH (PT + 1, PT_BYTE + 1);
if (!NILP (auto_fill_result))
hairy = 2;
diff --git a/test/src/cmds-tests.el b/test/src/cmds-tests.el
index 8c0e4706e3c..2038c01942f 100644
--- a/test/src/cmds-tests.el
+++ b/test/src/cmds-tests.el
@@ -48,5 +48,22 @@
(self-insert-command 0 10)
(should-not (equal pt 0)))))
+(ert-deftest self-insert-nonascii-autofill ()
+ "Test `self-insert-command' with a non-ASCII autofill function."
+ (with-temp-buffer
+ (let ((auto-fill-function
+ (lambda ()
+ (delete-char 1)
+ (insert #x2000)
+ (forward-char -1))))
+ (dotimes (_ 10)
+ (self-insert-command 1 10)
+ (goto-char 2)
+ (should (equal (point) 2))
+ (should (equal (length (buffer-string)) 1))
+ (should (equal (format "%S" (buffer-string))
+ "\"\x2000\""))
+ (delete-char -1)))))
+
(provide 'cmds-tests)
;;; cmds-tests.el ends here