From 7cbba19b6ced3ad49f9c718e900970b78814ac6e Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Tue, 24 Oct 2023 16:52:19 +0200 Subject: [PATCH] Support providing default values for line reader variables using system properties (#821) --- .../src/main/java/org/jline/reader/LineReader.java | 7 ++++++- .../java/org/jline/reader/impl/LineReaderImpl.java | 12 ++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/reader/src/main/java/org/jline/reader/LineReader.java b/reader/src/main/java/org/jline/reader/LineReader.java index fa7451e3..8e03aaa3 100644 --- a/reader/src/main/java/org/jline/reader/LineReader.java +++ b/reader/src/main/java/org/jline/reader/LineReader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002-2021, the original author(s). + * Copyright (c) 2002-2023, the original author(s). * * This software is distributable under the BSD license. See the terms of the * BSD license in the documentation provided with this software. @@ -411,6 +411,11 @@ public interface LineReader { */ String INPUT_RC_FILE_NAME = "input-rc-file-name"; + /** + * Prefix to automatically delegate variables to system properties + */ + String SYSTEM_PROPERTY_PREFIX = "system-property-prefix"; + Map> defaultKeyMaps(); enum Option { diff --git a/reader/src/main/java/org/jline/reader/impl/LineReaderImpl.java b/reader/src/main/java/org/jline/reader/impl/LineReaderImpl.java index eb7da9d2..e2d971f4 100644 --- a/reader/src/main/java/org/jline/reader/impl/LineReaderImpl.java +++ b/reader/src/main/java/org/jline/reader/impl/LineReaderImpl.java @@ -107,6 +107,7 @@ public class LineReaderImpl implements LineReader, Flushable { public static final int DEFAULT_INDENTATION = 0; public static final int DEFAULT_FEATURES_MAX_BUFFER_SIZE = 1000; public static final int DEFAULT_SUGGESTIONS_MIN_BUFFER_SIZE = 1; + public static final String DEFAULT_SYSTEM_PROPERTY_PREFIX = "org.jline.reader.props."; private static final int MIN_ROWS = 3; @@ -314,6 +315,17 @@ public LineReaderImpl(Terminal terminal, String appName, Map var } else { this.variables = new HashMap<>(); } + String prefix = getString(SYSTEM_PROPERTY_PREFIX, DEFAULT_SYSTEM_PROPERTY_PREFIX); + if (prefix != null) { + Properties sysProps = System.getProperties(); + for (String s : sysProps.stringPropertyNames()) { + if (s.startsWith(prefix)) { + String key = s.substring(prefix.length()); + InputRC.setVar(this, key, sysProps.getProperty(s)); + } + } + } + this.keyMaps = defaultKeyMaps(); if (!Boolean.getBoolean(PROP_DISABLE_ALTERNATE_CHARSET)) { this.alternateIn = Curses.tputs(terminal.getStringCapability(Capability.enter_alt_charset_mode));