diff --git a/ChangeLog b/ChangeLog
index 13e9b61eab8f32a8f01403de95929e71d3365d6a..110aa5e09d2f0cc58cb67d2ee14a9f493bba4a7e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -64,6 +64,10 @@ CVS code -
   read_file()
 	- Remove apparently unneeded logic to handle a case where
 	  current is NULL, since it shouldn't be NULL there. (DLR)
+- nano.c:
+  do_verbatim_input()
+	- Move to text.c, since it's an advanced text-based operation.
+	  (DLR)
 - nano.h:
 	- Readd MIN_EDITOR_COLS #define. (DLR)
 - rcfile.c:
diff --git a/src/nano.c b/src/nano.c
index 0a834dde79626240dcb68e87759bce54ba84b59a..80245d8b75d9afbe9ed1c15e230aa7fd1651c772 100644
--- a/src/nano.c
+++ b/src/nano.c
@@ -900,35 +900,6 @@ void nano_disabled_msg(void)
     statusbar(_("Sorry, support for this function has been disabled"));
 }
 
-void do_verbatim_input(void)
-{
-    int *kbinput;
-    size_t kbinput_len, i;
-    char *output;
-
-    statusbar(_("Verbatim Input"));
-
-    /* If constant cursor position display is on, make sure the current
-     * cursor position will be properly displayed on the statusbar. */
-    if (ISSET(CONST_UPDATE))
-	do_cursorpos(TRUE);
-
-    /* Read in all the verbatim characters. */
-    kbinput = get_verbatim_kbinput(edit, &kbinput_len);
-
-    /* Display all the verbatim characters at once, not filtering out
-     * control characters. */
-    output = charalloc(kbinput_len + 1);
-
-    for (i = 0; i < kbinput_len; i++)
-	output[i] = (char)kbinput[i];
-    output[i] = '\0';
-
-    do_output(output, kbinput_len, TRUE);
-
-    free(output);
-}
-
 void do_exit(void)
 {
     int i;
diff --git a/src/proto.h b/src/proto.h
index dcd75af3cd78c80cd251fd8ba4ad8fd97f949f6c..2b2b20ab511dd0844fecec002941e24c3481915e 100644
--- a/src/proto.h
+++ b/src/proto.h
@@ -391,7 +391,6 @@ void version(void);
 int no_more_space(void);
 int no_help(void);
 void nano_disabled_msg(void);
-void do_verbatim_input(void);
 void do_exit(void);
 void signal_init(void);
 void handle_hupterm(int signal);
@@ -574,6 +573,7 @@ void do_spell(void);
 #ifndef NANO_SMALL
 void do_wordlinechar_count(void);
 #endif
+void do_verbatim_input(void);
 
 /* Public functions in utils.c. */
 int digits(size_t n);
diff --git a/src/text.c b/src/text.c
index 18cf0998e85fc7feef9d2e8b55a782098d8f1adc..41c61994a8f11eeaccf8a00792fc8a5006ac3a76 100644
--- a/src/text.c
+++ b/src/text.c
@@ -2132,3 +2132,32 @@ void do_wordlinechar_count(void)
 	(unsigned long)chars);
 }
 #endif /* !NANO_SMALL */
+
+void do_verbatim_input(void)
+{
+    int *kbinput;
+    size_t kbinput_len, i;
+    char *output;
+
+    statusbar(_("Verbatim Input"));
+
+    /* If constant cursor position display is on, make sure the current
+     * cursor position will be properly displayed on the statusbar. */
+    if (ISSET(CONST_UPDATE))
+	do_cursorpos(TRUE);
+
+    /* Read in all the verbatim characters. */
+    kbinput = get_verbatim_kbinput(edit, &kbinput_len);
+
+    /* Display all the verbatim characters at once, not filtering out
+     * control characters. */
+    output = charalloc(kbinput_len + 1);
+
+    for (i = 0; i < kbinput_len; i++)
+	output[i] = (char)kbinput[i];
+    output[i] = '\0';
+
+    do_output(output, kbinput_len, TRUE);
+
+    free(output);
+}