diff --git a/src/channel.c b/src/channel.c
index 5a7e2a7..30a4304 100644
--- a/src/channel.c
+++ b/src/channel.c
@@ -1422,9 +1422,8 @@
     in_part->ch_buf_top = lnum;
     if (lnum > buf->b_ml.ml_line_count || lnum > in_part->ch_buf_bot)
     {
-#if defined(WIN32) && defined(FEAT_TERMINAL)
-	/* Send CTRL-D or "eof_chars" to close stdin on Windows. A console
-	 * application doesn't treat closing stdin like UNIX. */
+#if defined(FEAT_TERMINAL)
+	/* Send CTRL-D or "eof_chars" to close stdin on MS-Windows. */
 	if (channel->ch_job != NULL)
 	    term_send_eof(channel);
 #endif
@@ -4640,7 +4639,6 @@
 	    }
 	    else if (STRCMP(hi->hi_key, "eof_chars") == 0)
 	    {
-# ifdef WIN3264
 		char_u *p;
 
 		if (!(supported2 & JO2_EOF_CHARS))
@@ -4652,7 +4650,6 @@
 		    EMSG2(_(e_invarg2), "term_opencmd");
 		    return FAIL;
 		}
-# endif
 	    }
 	    else if (STRCMP(hi->hi_key, "term_rows") == 0)
 	    {
diff --git a/src/structs.h b/src/structs.h
index 6cfb5f2..f19377e 100644
--- a/src/structs.h
+++ b/src/structs.h
@@ -1781,9 +1781,7 @@
     char_u	*jo_term_name;
     char_u	*jo_term_opencmd;
     int		jo_term_finish;
-# ifdef WIN3264
     char_u	*jo_eof_chars;
-# endif
 #endif
 } jobopt_T;
 
diff --git a/src/terminal.c b/src/terminal.c
index 55575d1..faa74f7 100644
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -110,11 +110,11 @@
     int		tl_channel_closed;
     int		tl_finish;	/* 'c' for ++close, 'o' for ++open */
     char_u	*tl_opencmd;
+    char_u	*tl_eof_chars;
 
 #ifdef WIN3264
     void	*tl_winpty_config;
     void	*tl_winpty;
-    char_u	*tl_eof_chars;
 #endif
 
     /* last known vterm size */
@@ -390,10 +390,8 @@
     if (opt->jo_term_opencmd != NULL)
 	term->tl_opencmd = vim_strsave(opt->jo_term_opencmd);
 
-# ifdef WIN3264
     if (opt->jo_eof_chars != NULL)
 	term->tl_eof_chars = vim_strsave(opt->jo_eof_chars);
-# endif
 
     set_string_option_direct((char_u *)"buftype", -1,
 				  (char_u *)"terminal", OPT_FREE|OPT_LOCAL, 0);
@@ -499,7 +497,6 @@
 	else if ((int)(p - cmd) == 3 && STRNICMP(cmd, "eof", 3) == 0
 								 && ep != NULL)
 	{
-# ifdef WIN3264
 	    char_u *buf = NULL;
 	    char_u *keys;
 
@@ -510,9 +507,6 @@
 	    opt.jo_eof_chars = vim_strsave(keys);
 	    vim_free(buf);
 	    *p = ' ';
-# else
-	    p = skiptowhite(cmd);
-# endif
 	}
 	else
 	{
@@ -594,9 +588,7 @@
     vim_free(term->tl_title);
     vim_free(term->tl_status_text);
     vim_free(term->tl_opencmd);
-# ifdef WIN3264
     vim_free(term->tl_eof_chars);
-# endif
     vim_free(term->tl_cursor_color);
     vim_free(term);
     buf->b_term = NULL;
@@ -2917,6 +2909,32 @@
     }
 }
 
+/*
+ * Called when a channel has sent all the lines to a terminal.
+ * Send a CTRL-D to mark the end of the text.
+ */
+    void
+term_send_eof(channel_T *ch)
+{
+    term_T	*term;
+
+    for (term = first_term; term != NULL; term = term->tl_next)
+	if (term->tl_job == ch->ch_job)
+	{
+	    if (term->tl_eof_chars != NULL)
+	    {
+		channel_send(ch, PART_IN, term->tl_eof_chars,
+					(int)STRLEN(term->tl_eof_chars), NULL);
+		channel_send(ch, PART_IN, (char_u *)"\r", 1, NULL);
+	    }
+# ifdef WIN3264
+	    else
+		/* Default: CTRL-D */
+		channel_send(ch, PART_IN, (char_u *)"\004\r", 2, NULL);
+# endif
+	}
+}
+
 # if defined(WIN3264) || defined(PROTO)
 
 /**************************************
@@ -3216,28 +3234,6 @@
     return dyn_winpty_init(FALSE) == OK;
 }
 
-/*
- * Called when a channel has sent all the lines to a terminal.
- * Send a CTRL-D to mark the end of the text.
- */
-    void
-term_send_eof(channel_T *ch)
-{
-    term_T	*term;
-
-    for (term = first_term; term != NULL; term = term->tl_next)
-	if (term->tl_job == ch->ch_job)
-	{
-	    if (term->tl_eof_chars != NULL)
-		channel_send(ch, PART_IN, term->tl_eof_chars,
-					(int)STRLEN(term->tl_eof_chars), NULL);
-	    else
-		/* Default: CTRL-D */
-		channel_send(ch, PART_IN, (char_u *)"\004", 1, NULL);
-	    channel_send(ch, PART_IN, (char_u *)"\r", 1, NULL);
-	}
-}
-
 # else
 
 /**************************************
diff --git a/src/testdir/test_terminal.vim b/src/testdir/test_terminal.vim
index 573db1e..c70b612 100644
--- a/src/testdir/test_terminal.vim
+++ b/src/testdir/test_terminal.vim
@@ -490,24 +490,47 @@
 
 func Test_terminal_write_stdin()
   if !executable('wc')
-    call ch_log('Test_terminal_write_stdin() is skipped because system doesn''t have wc command')
-    return
+    throw 'skipped: wc command not available'
   endif
   new
   call setline(1, ['one', 'two', 'three'])
   %term wc
-  call WaitFor('getline(1) != ""')
+  call WaitFor('getline("$") =~ "3"')
   let nrs = split(getline('$'))
   call assert_equal(['3', '3', '14'], nrs)
   bwipe
 
+  new
   call setline(1, ['one', 'two', 'three', 'four'])
   2,3term wc
-  call WaitFor('getline(1) != ""')
+  call WaitFor('getline("$") =~ "2"')
   let nrs = split(getline('$'))
   call assert_equal(['2', '2', '10'], nrs)
   bwipe
 
+  if executable('python')
+    new
+    call setline(1, ['print("hello")'])
+    1term ++eof=exit() python
+    " MS-Windows echoes the input, Unix doesn't.
+    call WaitFor('getline("$") =~ "exit" || getline(1) =~ "hello"')
+    if getline(1) =~ 'hello'
+      call assert_equal('hello', getline(1))
+    else
+      call assert_equal('hello', getline(line('$') - 1))
+    endif
+    bwipe
+
+    if has('win32')
+      new
+      call setline(1, ['print("hello")'])
+      1term ++eof=<C-Z> python
+      call WaitFor('getline("$") =~ "Z"')
+      call assert_equal('hello', getline(line('$') - 1))
+      bwipe
+    endif
+  endif
+
   bwipe!
 endfunc
 
diff --git a/src/version.c b/src/version.c
index 520d46b..579f0a2 100644
--- a/src/version.c
+++ b/src/version.c
@@ -770,6 +770,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1036,
+/**/
     1035,
 /**/
     1034,
