fix(autocomplete): make accept key behavior configurable (#863)

This commit is contained in:
Will Miao
2026-03-28 20:21:23 +08:00
parent e5152108ba
commit dcc7bd33b5
3 changed files with 333 additions and 8 deletions

View File

@@ -16,6 +16,12 @@ const PROMPT_TAG_AUTOCOMPLETE_DEFAULT = true;
const AUTOCOMPLETE_APPEND_COMMA_SETTING_ID = "loramanager.autocomplete_append_comma";
const AUTOCOMPLETE_APPEND_COMMA_DEFAULT = true;
const AUTOCOMPLETE_ACCEPT_KEY_SETTING_ID = "loramanager.autocomplete_accept_key";
const AUTOCOMPLETE_ACCEPT_KEY_DEFAULT = "both";
const AUTOCOMPLETE_ACCEPT_KEY_OPTION_BOTH = "Tab or Enter";
const AUTOCOMPLETE_ACCEPT_KEY_OPTION_TAB_ONLY = "Tab only";
const AUTOCOMPLETE_ACCEPT_KEY_OPTION_ENTER_ONLY = "Enter only";
const TAG_SPACE_REPLACEMENT_SETTING_ID = "loramanager.tag_space_replacement";
const TAG_SPACE_REPLACEMENT_DEFAULT = false;
@@ -186,6 +192,41 @@ const getAutocompleteAppendCommaPreference = (() => {
};
})();
const getAutocompleteAcceptKeyPreference = (() => {
let settingsUnavailableLogged = false;
return () => {
const settingManager = app?.extensionManager?.setting;
if (!settingManager || typeof settingManager.get !== "function") {
if (!settingsUnavailableLogged) {
console.warn("LoRA Manager: settings API unavailable, using default autocomplete accept key setting.");
settingsUnavailableLogged = true;
}
return AUTOCOMPLETE_ACCEPT_KEY_DEFAULT;
}
try {
const value = settingManager.get(AUTOCOMPLETE_ACCEPT_KEY_SETTING_ID);
if (value === AUTOCOMPLETE_ACCEPT_KEY_OPTION_TAB_ONLY) {
return "tab_only";
}
if (value === AUTOCOMPLETE_ACCEPT_KEY_OPTION_ENTER_ONLY) {
return "enter_only";
}
if (value === AUTOCOMPLETE_ACCEPT_KEY_OPTION_BOTH || value == null) {
return AUTOCOMPLETE_ACCEPT_KEY_DEFAULT;
}
return value;
} catch (error) {
if (!settingsUnavailableLogged) {
console.warn("LoRA Manager: unable to read autocomplete accept key setting, using default.", error);
settingsUnavailableLogged = true;
}
return AUTOCOMPLETE_ACCEPT_KEY_DEFAULT;
}
};
})();
const getTagSpaceReplacementPreference = (() => {
let settingsUnavailableLogged = false;
@@ -332,7 +373,20 @@ app.registerExtension({
type: "boolean",
defaultValue: AUTOCOMPLETE_APPEND_COMMA_DEFAULT,
tooltip: "When enabled, accepted autocomplete suggestions append ', ' to the inserted text.",
category: ["LoRA Manager", "Autocomplete", "Behavior"],
category: ["LoRA Manager", "Autocomplete", "Append comma"],
},
{
id: AUTOCOMPLETE_ACCEPT_KEY_SETTING_ID,
name: "Autocomplete accept key",
type: "combo",
options: [
AUTOCOMPLETE_ACCEPT_KEY_OPTION_BOTH,
AUTOCOMPLETE_ACCEPT_KEY_OPTION_TAB_ONLY,
AUTOCOMPLETE_ACCEPT_KEY_OPTION_ENTER_ONLY,
],
defaultValue: AUTOCOMPLETE_ACCEPT_KEY_OPTION_BOTH,
tooltip: "Choose which key accepts the selected autocomplete suggestion. Keys not selected here keep their normal textarea behavior.",
category: ["LoRA Manager", "Autocomplete", "Accept key"],
},
{
id: TAG_SPACE_REPLACEMENT_SETTING_ID,
@@ -451,6 +505,7 @@ export {
getWheelSensitivity,
getAutoPathCorrectionPreference,
getAutocompleteAppendCommaPreference,
getAutocompleteAcceptKeyPreference,
getPromptTagAutocompletePreference,
getTagSpaceReplacementPreference,
getUsageStatisticsPreference,