diff --git a/src/accelerate/commands/menu/keymap.py b/src/accelerate/commands/menu/keymap.py
index 7ce6c0637..3f08236b3 100644
--- a/src/accelerate/commands/menu/keymap.py
+++ b/src/accelerate/commands/menu/keymap.py
@@ -17,10 +17,9 @@
 """
 
 
+import os
 import string
 import sys
-import termios
-import tty
 
 
 ARROW_KEY_FLAG = 1 << 8
@@ -36,24 +35,77 @@
     "mod_int": 91,
     "undefined": sys.maxsize,
     "interrupt": 3,
+    "insert": 50,
+    "delete": 51,
+    "pg_up": 53,
+    "pg_down": 54,
 }
 
 KEYMAP["arrow_begin"] = KEYMAP["up"]
 KEYMAP["arrow_end"] = KEYMAP["left"]
 
+if sys.platform == "win32":
+    WIN_CH_BUFFER = []
+    WIN_KEYMAP = {
+        b"\xe0H": KEYMAP["up"] - ARROW_KEY_FLAG,
+        b"\x00H": KEYMAP["up"] - ARROW_KEY_FLAG,
+        b"\xe0P": KEYMAP["down"] - ARROW_KEY_FLAG,
+        b"\x00P": KEYMAP["down"] - ARROW_KEY_FLAG,
+        b"\xe0M": KEYMAP["right"] - ARROW_KEY_FLAG,
+        b"\x00M": KEYMAP["right"] - ARROW_KEY_FLAG,
+        b"\xe0K": KEYMAP["left"] - ARROW_KEY_FLAG,
+        b"\x00K": KEYMAP["left"] - ARROW_KEY_FLAG,
+    }
+
 for i in range(10):
     KEYMAP[str(i)] = ord(str(i))
 
 
 def get_raw_chars():
     "Gets raw characters from inputs"
-    fd = sys.stdin.fileno()
-    old_settings = termios.tcgetattr(fd)
-    try:
-        tty.setraw(fd)
-        ch = sys.stdin.read(1)
-    finally:
-        termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
+    if os.name == "nt":
+        import msvcrt
+
+        encoding = "mbcs"
+        # Flush the keyboard buffer
+        while msvcrt.kbhit():
+            msvcrt.getwch()
+        if len(WIN_CH_BUFFER) == 0:
+            # Read the keystroke
+            ch = msvcrt.getwch()
+            # If it is a prefix char, get second part
+            if ch.encode(encoding) in (b"\x00", b"\xe0"):
+                ch2 = ch + msvcrt.getwch()
+                # Translate actual Win chars to bullet char types
+                try:
+                    chx = chr(WIN_KEYMAP[ch2.encode(encoding)])
+                    WIN_CH_BUFFER.append(chr(KEYMAP["mod_int"]))
+                    WIN_CH_BUFFER.append(chx)
+                    if ord(chx) in (
+                        KEYMAP["insert"] - 1 << 9,
+                        KEYMAP["delete"] - 1 << 9,
+                        KEYMAP["pg_up"] - 1 << 9,
+                        KEYMAP["pg_down"] - 1 << 9,
+                    ):
+                        WIN_CH_BUFFER.append(chr(126))
+                    ch = chr(KEYMAP["esc"])
+                except KeyError:
+                    ch = ch2[1]
+            else:
+                pass
+        else:
+            ch = WIN_CH_BUFFER.pop(0)
+    elif os.name == "posix":
+        import termios
+        import tty
+
+        fd = sys.stdin.fileno()
+        old_settings = termios.tcgetattr(fd)
+        try:
+            tty.setraw(fd)
+            ch = sys.stdin.read(1)
+        finally:
+            termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
     return ch
 
 
diff --git a/src/accelerate/commands/menu/selection_menu.py b/src/accelerate/commands/menu/selection_menu.py
index 751f6818a..d5a1c8e35 100644
--- a/src/accelerate/commands/menu/selection_menu.py
+++ b/src/accelerate/commands/menu/selection_menu.py
@@ -15,6 +15,8 @@
 """
 Main driver for the selection menu, based on https://github.com/bchao1/bullet
 """
+import sys
+
 from . import cursor, input
 from .helpers import Direction, clear_line, forceWrite, linebreak, move_cursor, reset_cursor, writeColor
 from .keymap import KEYMAP
@@ -30,12 +32,22 @@ def __init__(self, prompt: str = None, choices: list = []):
         self.position = 0
         self.choices = choices
         self.prompt = prompt
+        if sys.platform == "win32":
+            self.arrow_char = "*"
+        else:
+            self.arrow_char = "➔ "
+
+    def write_choice(self, index, end: str = ""):
+        if sys.platform != "win32":
+            writeColor(self.choices[index], 32, end)
+        else:
+            forceWrite(self.choices[index], end)
 
     def print_choice(self, index: int):
         "Prints the choice at the given index"
         if index == self.position:
-            forceWrite(" ➔  ")
-            writeColor(self.choices[index], 32)
+            forceWrite(f" {self.arrow_char} ")
+            self.write_choice(index)
         else:
             forceWrite(f"    {self.choices[index]}")
         reset_cursor()
@@ -109,6 +121,5 @@ def run(self, default_choice: int = 0):
                     for _ in range(len(self.choices) + 1):
                         move_cursor(1, "UP")
                         clear_line()
-                    forceWrite(" ➔  ")
-                    writeColor(self.choices[choice], 32, "\n")
+                    self.write_choice(choice, "\n")
                     return choice



Discussion: body: _The documentation is not available anymore as the PR was closed or merged._