Keyboard arrows no longer scrolling chat text in version 1.21.6

Hi everyone,

Since the latest Antigravity update (version 1.21.6), the keyboard arrow keys (Up and Down) have stopped scrolling the chat text. Before this update, I could easily navigate through the conversation using these keys.

I use a mouse without a scroll wheel, so I rely entirely on the keyboard arrows to move up and down the chat. Currently, it is impossible for me to read previous messages or navigate the conversation.

Is anyone else experiencing this issue? Is there a way to re-enable this feature, or is this a known bug in the new version?

I would appreciate any help or a workaround for this.

Thank you.

that chatlog type thing is kinda odd - did you possible go up to an earlier chat then send? because that will “destroy” the newer chat and prevent you from going to them. idk if i explained that well but hopefully you know what i mean

Thanks for the reply, but that’s not exactly the issue.

The problem is specifically about the new “Simplified, condensed chat UI” in this update. My mouse does not have a scroll wheel, so I have always relied on the keyboard arrow keys to scroll up and down through the chat text.

Since version 1.21.6, the arrow keys no longer trigger the scroll action in the chat window. They simply don’t do anything to move the text, making it impossible for me to read the conversation without a physical scroll wheel. It seems like the new UI layout broke keyboard-based scrolling support.

Is there any setting or workaround to bring back arrow-key scrolling?

OHHHHH got you i totally misunderstood!

i was talking about something else - if you press UP while in the TEXT ENTRY it will go to a log of the PREVIOUS MESSAGES YOU SENT, and then if you go up to the first message and resend from there - it prevents from pressing DOWN to get to newer sent messages - totally different issue for sure!

well on your issue - is it a laptop? like why you don’t have a scroll wheel? because its pretty universal that the farthest right side of that square IS a scroll wheel section of the trackpad.

regarding other workarounds - off the top of my head, just pageup/pagedown?

i just cobbled this .py script up :slight_smile:

just a python script to let you hold alt, and then use up/down arrow keys to do mousewheeling! :automobile: :thought_balloon:

Windows/Linux:
Scroll: ALT+UP and ALT+DOWN
Exit: CTRL+ALT+UP+DOWN

macOS:
Scroll: ALT+UP and ALT+DOWN
Exit: CMD+ALT+UP+DOWN

scroll_wheel.py


import sys
import time
import subprocess
import importlib.util
from threading import Thread, Lock

def ensure_packages_installed(packages):
    """Checks if packages are installed and installs them if not."""
    for package in packages:
        if importlib.util.find_spec(package) is None:
            print(f"Installing required package: {package}. Please wait...")
            subprocess.check_call([sys.executable, '-m', 'pip', 'install', package])

def main():
    """The final, corrected, working scroll wheel script."""
    ensure_packages_installed(['pynput', 'pyautogui'])
    
    from pynput import keyboard
    import pyautogui

    # --- Configuration and State ---
    # Using specific sets for modifier keys to correctly identify them.
    ALT_KEYS = {keyboard.Key.alt_l, keyboard.Key.alt_r}
    CTRL_KEYS = {keyboard.Key.ctrl_l, keyboard.Key.ctrl_r}
    UP_KEY = keyboard.Key.up
    DOWN_KEY = keyboard.Key.down

    pressed_keys = set()
    lock = Lock()

    # --- Threaded Scroll Management ---
    class ScrollManager:
        def __init__(self):
            self.threads = {'up': None, 'down': None}
            self.is_scrolling = {'up': False, 'down': False}

        def _scroll_loop(self, direction_name, scroll_amount):
            while self.is_scrolling[direction_name]:
                pyautogui.scroll(scroll_amount)
                time.sleep(0.05)

        def start(self, direction_name, scroll_amount):
            if not self.is_scrolling[direction_name]:
                self.is_scrolling[direction_name] = True
                self.threads[direction_name] = Thread(target=self._scroll_loop, args=(direction_name, scroll_amount))
                self.threads[direction_name].start()

        def stop(self, direction_name):
            if self.is_scrolling[direction_name]:
                self.is_scrolling[direction_name] = False
                if self.threads[direction_name]:
                    self.threads[direction_name].join()
    
    scroll_manager = ScrollManager()

    # --- Key Press and Release Handlers ---
    def on_press(key):
        with lock:
            pressed_keys.add(key)

            # Check for scroll start conditions by checking for ANY alt key.
            if any(k in pressed_keys for k in ALT_KEYS):
                if UP_KEY in pressed_keys:
                    scroll_manager.start('up', 60)
                if DOWN_KEY in pressed_keys:
                    scroll_manager.start('down', -60)
            
            # Check for exit condition.
            if (any(k in pressed_keys for k in CTRL_KEYS) and
                any(k in pressed_keys for k in ALT_KEYS) and
                UP_KEY in pressed_keys and
                DOWN_KEY in pressed_keys):
                print("Exit combination pressed. Stopping...")
                scroll_manager.stop('up')
                scroll_manager.stop('down')
                return False # Stops the listener

    def on_release(key):
        # Stop scrolling if the relevant key is released.
        if key == UP_KEY:
            scroll_manager.stop('up')
        elif key == DOWN_KEY:
            scroll_manager.stop('down')
        elif key in ALT_KEYS:
            scroll_manager.stop('up')
            scroll_manager.stop('down')
        
        with lock:
            try:
                pressed_keys.remove(key)
            except KeyError:
                pass

    # --- Main Execution Block ---
    print("Starting scroll script. Hold ALT + UP/DOWN to scroll. Press CTRL+ALT+UP+DOWN to exit.")
    with keyboard.Listener(on_press=on_press, on_release=on_release) as listener:
        listener.join()
    
    print("Script has stopped. Goodbye.")

if __name__ == '__main__':
    main()

"Thank you so much! I am extremely grateful for the script you provided.

I successfully combined your logic with a Karabiner-Elements rule on macOS 15.7, and it works perfectly now. I finally have my keyboard scroll back!

jajajaj and to tell you, I’m not on a laptop; I’m using a Mac Studio with a cheap generic keyboard and a $2 mouse that has no scroll wheel. That’s why your help was so critical for me.

Again, a million thanks for your time and for writing that code. I truly appreciate it!"

1 Like

haha i figured it wasn’t a laptop but i’m always thorough.

this doesn’t actually solve your main concern because antigravity is still missing that feature, which is still pretty important for devs to bring back i would think.

but now you do have a workaround to get you through until they do an official fix. just be cautious - “hotkey ” is always a possibility where it works in one app perfectly and tries to open a portal do another dimension in another :slight_smile: :magic_wand: :crystal_ball:

jejejej
perfect
again thansk…bless

1 Like