src/Tools/VSCode/src/vscode_setup.scala
author wenzelm
Fri, 11 Mar 2022 14:02:13 +0100
changeset 75267 6369151119ee
parent 75265 481665cc17e6
child 75285 2b64d5657592
permissions -rw-r--r--
more robust: avoid breakdown of Search dialog;

/*  Title:      Tools/VSCode/src/vscode_setup.scala
    Author:     Makarius

Provide user configuration for Isabelle/VSCode.
*/

package isabelle.vscode


import isabelle._


object VSCode_Setup
{
  /* vscode setup */

  def vscode_settings_user: Path =
    Path.explode("$ISABELLE_VSCODE_SETTINGS/user-data/User/settings.json")

  private val init_settings = """  {
    "editor.fontFamily": "'Isabelle DejaVu Sans Mono'",
    "editor.fontSize": 18,
    "editor.lineNumbers": "off",
    "editor.renderIndentGuides": false,
    "editor.rulers": [80, 100],
    "editor.unicodeHighlight.ambiguousCharacters": false,
    "extensions.autoCheckUpdates": false,
    "extensions.autoUpdate": false,
    "terminal.integrated.fontFamily": "monospace",
    "update.mode": "none"
  }
"""

  def vscode_setup(): Unit =
  {
    if (Isabelle_System.getenv("ISABELLE_VSCODIUM_HOME").isEmpty) {
      error("""Missing $ISABELLE_VSCODIUM_HOME: proper vscodium-X.YY.Z component required""")
    }

    if (!vscode_settings_user.is_file) {
      Isabelle_System.make_directory(vscode_settings_user.dir)
      File.write(vscode_settings_user, init_settings)
    }
  }


  /* Isabelle tool wrapper */

  val isabelle_tool =
    Isabelle_Tool("vscode_setup", "provide user configuration for Isabelle/VSCode",
      Scala_Project.here, args =>
    {
      val getopts = Getopts("""
Usage: vscode_setup

  Provide user configuration for Isabelle/VSCode.

  The following initial settings are provided for a fresh installation:
""" + init_settings)

      val more_args = getopts(args)
      if (more_args.nonEmpty) getopts.usage()

      vscode_setup()
    })
}