LineEdit caret_position issue when using KEY_UP key

:information_source: Attention Topic was automatically imported from the old Question2Answer platform.
:bust_in_silhouette: Asked By samjack

I’m trying to create a Terminal/Debug Console-like scene.

When I press the KEY_UP key while using LineEdit, I make the text change. Then I want caret_position to come to the end of the text. But when we press the KEY_UP key, LineEdit automatically takes the caret_position to the beginning.

How can I turn off resetting this caret_position. This does not happen when using another key instead of KEY_UP. Using a key other than KEY_UP for this job feels inappropriate for the job

extends Control

var texts = ["hello","world","good","day","to","you"]
var history_line = 4

func _ready():
	$LineEdit.grab_focus()
	$LineEdit.text = texts[history_line]

func _input(event):
	if event.is_action_pressed("ui_up") :
		if history_line == 0 : return
		history_line -= 1
		$LineEdit.text = texts[history_line]
		move_cursor_to_end()
	if event.is_action_pressed("ui_down") :	
		if history_line == texts.size() -1 :return
		history_line += 1
		$LineEdit.text = texts[history_line]
		move_cursor_to_end()
		
		
func move_cursor_to_end() :
	$LineEdit.caret_position = $LineEdit.text.length()

Godot Engine v3.2.3
English is not my first language, I’m sorry if there are mistakes

:bust_in_silhouette: Reply From: Skyfrit

I tweak your code a little bit, now it should work.

extends Control

var texts = ["hello","world","good","day","to","you"]
var history_line = 4

func _ready():
	$LineEdit.grab_focus()
	$LineEdit.text = texts[history_line]
	move_cursor_to_end()

func _input(event):
	if event.is_action_pressed("ui_up") :
		if history_line == 0 :
			accept_event()
			return
		history_line -= 1
		$LineEdit.text = texts[history_line]
		move_cursor_to_end()
	if event.is_action_pressed("ui_down") :
		if history_line == texts.size() -1 :return
		history_line += 1
		$LineEdit.text = texts[history_line]
		move_cursor_to_end()

func move_cursor_to_end() :
	$LineEdit.caret_position = $LineEdit.text.length()
	accept_event()

Thank you! accept_event() does just what I want.

samjack | 2020-11-12 21:28