1
0
mirror of https://github.com/chylex/IntelliJ-IdeaVim.git synced 2025-06-17 15:39:56 +02:00

Fix(VIM-2710): Show options value on set opt

This commit is contained in:
Alex Plate 2022-07-20 09:56:23 +03:00
parent da94edd386
commit 33d3f270a3
No known key found for this signature in database
GPG Key ID: 0B97153C8FFEC09F
5 changed files with 33 additions and 14 deletions
src
main/java/com/maddyhome/idea/vim/option
test/java/org/jetbrains/plugins/ideavim/ex/implementation/commands
vim-engine/src/main/kotlin/com/maddyhome/idea/vim

View File

@ -34,13 +34,13 @@ import com.maddyhome.idea.vim.vimscript.services.IjVimOptionService
*/ */
object OptionsManager { object OptionsManager {
val ignorecase: ToggleOption val ignorecase: ToggleOption
get() = (injector.optionService as IjVimOptionService).getRawOption(ignorecaseName) as ToggleOption get() = (injector.optionService as IjVimOptionService).getOptionByNameOrAbbr(ignorecaseName) as ToggleOption
val smartcase: ToggleOption val smartcase: ToggleOption
get() = (injector.optionService as IjVimOptionService).getRawOption(smartcaseName) as ToggleOption get() = (injector.optionService as IjVimOptionService).getOptionByNameOrAbbr(smartcaseName) as ToggleOption
val timeout: ToggleOption val timeout: ToggleOption
get() = (injector.optionService as IjVimOptionService).getRawOption(timeoutName) as ToggleOption get() = (injector.optionService as IjVimOptionService).getOptionByNameOrAbbr(timeoutName) as ToggleOption
val timeoutlen: NumberOption val timeoutlen: NumberOption
get() = (injector.optionService as IjVimOptionService).getRawOption(timeoutlenName) as NumberOption get() = (injector.optionService as IjVimOptionService).getOptionByNameOrAbbr(timeoutlenName) as NumberOption
val iskeyword: KeywordOption val iskeyword: KeywordOption
get() = KeywordOption(KeywordOptionHelper) get() = KeywordOption(KeywordOptionHelper)
} }

View File

@ -134,4 +134,18 @@ class SetCommandTest : VimTestCase() {
typeText(commandToKeys("set selection?")) typeText(commandToKeys("set selection?"))
assertExOutput("selection=exclusive \n") assertExOutput("selection=exclusive \n")
} }
@TestWithoutNeovim(reason = SkipNeovimReason.OPTION)
fun `test show numbered value`() {
configureByText("\n")
typeText(commandToKeys("set so"))
assertExOutput("scrolloff=0 \n")
}
@TestWithoutNeovim(reason = SkipNeovimReason.OPTION)
fun `test show numbered value with questionmark`() {
configureByText("\n")
typeText(commandToKeys("set so?"))
assertExOutput("scrolloff=0 \n")
}
} }

View File

@ -367,7 +367,7 @@ abstract class VimOptionServiceBase : OptionService {
options.get(optionName)!!.removeOptionChangeListener(listener) options.get(optionName)!!.removeOptionChangeListener(listener)
} }
fun getRawOption(key: String): Option<out VimDataType>? { override fun getOptionByNameOrAbbr(key: String): Option<out VimDataType>? {
return options.get(key) return options.get(key)
} }

View File

@ -25,6 +25,7 @@ import com.maddyhome.idea.vim.command.OperatorArguments
import com.maddyhome.idea.vim.ex.ExException import com.maddyhome.idea.vim.ex.ExException
import com.maddyhome.idea.vim.ex.ranges.Ranges import com.maddyhome.idea.vim.ex.ranges.Ranges
import com.maddyhome.idea.vim.helper.Msg import com.maddyhome.idea.vim.helper.Msg
import com.maddyhome.idea.vim.option.ToggleOption
import com.maddyhome.idea.vim.options.OptionScope import com.maddyhome.idea.vim.options.OptionScope
import com.maddyhome.idea.vim.vimscript.model.ExecutionResult import com.maddyhome.idea.vim.vimscript.model.ExecutionResult
import java.util.* import java.util.*
@ -133,12 +134,11 @@ fun parseOptionLine(editor: VimEditor, args: String, scope: OptionScope, failOnB
} }
// No operator so only the option name was given // No operator so only the option name was given
if (eq == -1) { if (eq == -1) {
if (optionService.isToggleOption(token)) { val option = optionService.getOptionByNameOrAbbr(token)
optionService.setOption(scope, token, token) when (option) {
} else if (!optionService.getOptions().contains(token)) { null -> error = Msg.unkopt
error = Msg.unkopt is ToggleOption -> optionService.setOption(scope, token, token)
} else { else -> toShow.add(Pair(option.name, option.abbrev))
toShow.add(Pair(token, token))
} }
} else { } else {
// Make sure there is an option name // Make sure there is an option name
@ -185,10 +185,10 @@ private fun showOptions(editor: VimEditor, nameAndToken: Collection<Pair<String,
val optionService = injector.optionService val optionService = injector.optionService
val optionsToShow = mutableListOf<String>() val optionsToShow = mutableListOf<String>()
var unknownOption: Pair<String, String>? = null var unknownOption: Pair<String, String>? = null
val optionsAndAbbrevs = optionService.getOptions() + optionService.getAbbrevs()
for (pair in nameAndToken) { for (pair in nameAndToken) {
if (optionsAndAbbrevs.contains(pair.first)) { val myOption = optionService.getOptionByNameOrAbbr(pair.first)
optionsToShow.add(pair.first) if (myOption != null) {
optionsToShow.add(myOption.name)
} else { } else {
unknownOption = pair unknownOption = pair
break break

View File

@ -235,6 +235,11 @@ interface OptionService {
*/ */
fun removeListener(optionName: String, listener: OptionChangeListener<VimDataType>) fun removeListener(optionName: String, listener: OptionChangeListener<VimDataType>)
/**
* Get the [Option] by its name or abbreviation
*/
fun getOptionByNameOrAbbr(key: String): Option<out VimDataType>?
/** /**
* COMPATIBILITY-LAYER: Added this class * COMPATIBILITY-LAYER: Added this class
* Please see: https://jb.gg/zo8n0r * Please see: https://jb.gg/zo8n0r