terminal/doc/AddASetting.md

2.2 KiB

Adding a Settings Property

  1. Add to wincon.w

    • THIS IS NOT IN OPENCONSOLE. Make sure you update .../console/published/wincon.w in the OS repo when you submit the PR. The branch won't build without it.
    • For now, you can update winconp.h with your consumable changes.
    • define registry name (ex CONSOLE_REGISTRY_CURSORCOLOR)
    • add the setting to CONSOLE_STATE_INFO
    • define the property key ID and the property key itself
      • Yes, the large majority of the DEFINE_PROPERTYKEY defs are the same, it's only the last byte of the guid that changes
  2. Add matching fields to Settings.hpp

    • add getters, setters, the whole drill.
  3. Add to the propsheet.

    • We need to add it to reading and writing the registry from the propsheet, and reading the link from the propsheet. Yes, that's weird, but the propsheet is smart enough to re-use ShortcutSerialization::s_SetLinkValues, but not smart enough to do the same with RegistrySerialization.
    • src/propsheet/registry.cpp
      • propsheet/registry.cpp@InitRegistryValues should initialize the default value for the property.
      • propsheet/registry.cpp@GetRegistryValues should make sure to read the property from the registry
  4. Add the field to the propslib registry map

  5. Add the value to ShortcutSerialization.cpp

    • Read the value in ShortcutSerialization::s_PopulateV2Properties
    • Write the value in ShortcutSerialization::s_SetLinkValues
  6. Add the setting to Menu::s_GetConsoleState, and Menu::s_PropertiesUpdate Now, your new setting should be stored just like all the other properties.

  7. Update the feature test properties to get add the setting as well.

    • ft_uia/Common/NativeMethods.cs@WinConP:
      • Wtypes.PROPERTYKEY PKEY_Console_
      • NT_CONSOLE_PROPS
  8. Add the default value for the setting to win32k-settings.man

    • If the setting shouldn't default to 0 or nullptr, then you'll need to set the default value of the setting in win32k-settings.man.
  9. Update Settings::InitFromStateInfo and Settings::CreateConsoleStateInfo to get/set the value in a CONSOLE_STATE_INFO appropriately.