Skip to content

Key mapping example

Terje Tjervaag edited this page Apr 24, 2024 · 11 revisions

Here's an example of mapping a few useful functions using which-key:

Screenshot of the which-key plugin in NeoVim showing the shortcuts defined in the which-key config below
require("which-key").register {
  ["<leader>ib"] = { require("simctl.api").boot, "Boot Simulator" },
  ["<leader>is"] = { require("simctl.api").shutdown, "Shut down Simulator" },
  ["<leader>il"] = { require("simctl.api").launch, "Launch app" },
  ["<leader>it"] = { require("simctl.api").terminate, "Terminate app" },
  ["<leader>io"] = {
    function()
      vim.ui.input({ prompt = "URL: " }, function(url)
        if not url then
          return
        end
        require("simctl.api").openurl { url = url }
      end)
    end,
    "Open URL",
  },
  ["<leader>iu"] = { require("simctl.api").uninstall, "Uninstall app" },
  ["<leader>ia"] = { require("simctl.api").ui.toggleAppearance, "Toggle appearance" },
  ["<leader>ic"] = { require("simctl.api").ui.setContentSize, "Set content size" },
}

You might want to default to the booted device to automatically affect the Simulator you are working in rather than having to pick a Simulator every time. Note that if you have several Simulators booted this will pick one of them, seemingly at random. 🤷‍♂️

wk.register {
  ["<leader>ib"] = { require("simctl.api").boot, "Boot Simulator" },
  ["<leader>is"] = { require("simctl.api").shutdown, "Shut down Simulator" },
  ["<leader>il"] = {
    function()
      require("simctl.api").launch({ deviceId = "booted" })
    end,
    "Launch app",
  },
  ["<leader>it"] = {
    function()
      require("simctl.api").terminate({ deviceId = "booted" })
    end,
    "Terminate app",
  },
  ["<leader>io"] = {
    function()
      vim.ui.input({ prompt = "URL: " }, function(url)
        if not url then
          return
        end
        simctlArgs.url = url
        require("simctl.api").openurl({ deviceId = "booted" })
      end)
    end,
    "Open URL",
  },
  ["<leader>iu"] = {
    function()
      require("simctl.api").uninstall({ deviceId = "booted" })
    end,
    "Uninstall app",
  },
  ["<leader>ia"] = {
    function()
      require("simctl.api").ui.toggleAppearance({ deviceId = "booted" })
    end,
    "Toggle appearance",
  },
  ["<leader>ic"] = { " Content size" },
  ["<leader>icc"] = {
    function()
      require("simctl.api").ui.setContentSize({ deviceId = "booted" })
    end,
    "Set content size",
  },
  ["<leader>ic+"] = {
    function()
      require("simctl.api").ui.increaseContentSize({ deviceId = "booted" })
    end,
    "Increase content size",
  },
  ["<leader>ic-"] = {
    function()
      require("simctl.api").ui.decreaseContentSize({ deviceId = "booted" })
    end,
    "Decrease content size",
  },
  ["<leader>icr"] = {
    function()
      local simctl = require "simctl.api"
      simctl.ui.setContentSize({
        deviceId = "booted",
        size = simctl.ui.ContentSize.LARGE,
      })
    end,
    "Default content size",
  },
  ["<leader>icm"] = {
    function()
      local simctl = require "simctl.api"
      simctl.ui.setContentSize({
        deviceId = "booted",
        size = simctl.ui.ContentSize.EXTRA_EXTRA_EXTRA_LARGE,
      })
    end,
    "Max content size",
  },
  ["<leader>ica"] = {
    function()
      local simctl = require "simctl.api"
      simctl.ui.setContentSize({
        deviceId = "booted",
        size = simctl.ui.ContentSize.ACCESSIBILITY_EXTRA_EXTRA_EXTRA_LARGE,
      })
    end,
    "Max accessibility content size",
  },
  ["<leader>im"] = { "󰱻 Biometry" },
  ["<leader>ime"] = {
    function()
      local simctl = require "simctl.api"
      simctl.biometry.toggleEnrollment({ deviceId = "booted" }, function(success, isEnrolled)
        if (success) then
          vim.notify("Biometry is now " .. (isEnrolled and "enrolled" or "disenrolled"))
        end
      end)
    end,
    "Toggle Biometry Enrollment",
  },
  ["<leader>ima"] = {
    function()
      local simctl = require "simctl.api"
      simctl.biometry.authenticate({ deviceId = "booted", match = true })
    end,
    "Authenticate (matching)",
  },
  ["<leader>imb"] = {
    function()
      local simctl = require "simctl.api"
      simctl.biometry.authenticate({ deviceId = "booted", match = false })
    end,
    "Authenticate (non-matching)",
  },
}
Clone this wiki locally