Minga.Config.ModelineSegments (Minga v0.1.0)

Copy Markdown View Source

ETS-backed registry for custom modeline segments.

User config and extensions register segment render functions here. The traditional shell modeline reads the registry on each render frame so config reloads take effect immediately without coupling the config layer to editor presentation modules.

Summary

Functions

Returns all custom modeline segments.

Looks up a custom segment by name.

Returns all custom segment names declared for a side, ordered by priority descending then name.

Registers or replaces a custom modeline segment from user config.

Registers or replaces a custom modeline segment for a source.

Registers a custom modeline segment and raises on invalid declarations or collisions.

Returns built-in or otherwise reserved modeline segment names that custom segments cannot use.

Clears all custom modeline segments. Used during config reload.

Clears warning-once modeline diagnostics without deleting registered segments.

Starts the process that owns the custom segment ETS table.

Unregisters one custom modeline segment.

Removes every segment owned by a source, such as one extension.

Logs a warning once for a render-time modeline segment diagnostic.

Types

register_error()

@type register_error() ::
  Minga.Config.ModelineSegment.validation_error()
  | {:reserved_name, atom()}
  | {:duplicate_name, atom(), existing_source :: source(),
     attempted_source :: source()}

source()

@type source() :: atom() | {:extension, atom()}

table()

@type table() :: atom()

Functions

list()

@spec list() :: [Minga.Config.ModelineSegment.t()]

Returns all custom modeline segments.

list(table)

@spec list(table()) :: [Minga.Config.ModelineSegment.t()]

lookup(name)

@spec lookup(atom()) :: Minga.Config.ModelineSegment.t() | nil

Looks up a custom segment by name.

lookup(table, name)

@spec lookup(table(), atom()) :: Minga.Config.ModelineSegment.t() | nil

names_for_side(side)

@spec names_for_side(Minga.Config.ModelineSegment.side()) :: [atom()]

Returns all custom segment names declared for a side, ordered by priority descending then name.

names_for_side(table, side)

@spec names_for_side(table(), Minga.Config.ModelineSegment.side()) :: [atom()]

register(name, opts, render)

@spec register(atom(), keyword(), Minga.Config.ModelineSegment.render_fun()) ::
  :ok | {:error, register_error()}

Registers or replaces a custom modeline segment from user config.

register(name, opts, render, source)

@spec register(atom(), keyword(), Minga.Config.ModelineSegment.render_fun(), source()) ::
  :ok | {:error, register_error()}

Registers or replaces a custom modeline segment for a source.

register(table, name, opts, render, source)

@spec register(
  table(),
  atom(),
  keyword(),
  Minga.Config.ModelineSegment.render_fun(),
  source()
) ::
  :ok | {:error, register_error()}

register!(name, opts, render)

@spec register!(atom(), keyword(), Minga.Config.ModelineSegment.render_fun()) :: :ok

Registers a custom modeline segment and raises on invalid declarations or collisions.

register_error_message(name, arg)

@spec register_error_message(atom(), register_error()) :: String.t()

reserved_names()

@spec reserved_names() :: [atom()]

Returns built-in or otherwise reserved modeline segment names that custom segments cannot use.

reset()

@spec reset() :: :ok

Clears all custom modeline segments. Used during config reload.

reset(table)

@spec reset(table()) :: :ok

reset_warnings()

@spec reset_warnings() :: :ok

Clears warning-once modeline diagnostics without deleting registered segments.

reset_warnings(table)

@spec reset_warnings(table()) :: :ok

start_link(opts \\ [])

@spec start_link(keyword()) :: GenServer.on_start()

Starts the process that owns the custom segment ETS table.

unregister(name)

@spec unregister(atom()) :: :ok

Unregisters one custom modeline segment.

unregister(table, name)

@spec unregister(table(), atom()) :: :ok

unregister_source(source)

@spec unregister_source(source()) :: :ok

Removes every segment owned by a source, such as one extension.

unregister_source(table, source)

@spec unregister_source(table(), source()) :: :ok

warn_once(key, message)

@spec warn_once(term(), String.t()) :: :ok

Logs a warning once for a render-time modeline segment diagnostic.

warn_once(table, key, message)

@spec warn_once(table(), term(), String.t()) :: :ok