From 3da305fa806806966863cf8f9e025720cad08212 Mon Sep 17 00:00:00 2001 From: Markus Reiter Date: Sun, 26 Mar 2023 08:10:40 +0200 Subject: [PATCH] Add `keyboard_layout` stanza. --- Library/Homebrew/cask/artifact.rb | 1 + .../Homebrew/cask/artifact/keyboard_layout.rb | 36 +++++++++++++++++++ Library/Homebrew/cask/config.rb | 2 ++ Library/Homebrew/cask/dsl.rb | 1 + Library/Homebrew/cli/parser.rb | 4 +++ .../rubocops/cask/constants/stanza.rb | 1 + .../spec/shared_context/homebrew_cask.rb | 1 + 7 files changed, 46 insertions(+) create mode 100644 Library/Homebrew/cask/artifact/keyboard_layout.rb diff --git a/Library/Homebrew/cask/artifact.rb b/Library/Homebrew/cask/artifact.rb index bee610cfb5..06095d0b79 100644 --- a/Library/Homebrew/cask/artifact.rb +++ b/Library/Homebrew/cask/artifact.rb @@ -11,6 +11,7 @@ require "cask/artifact/font" require "cask/artifact/input_method" require "cask/artifact/installer" require "cask/artifact/internet_plugin" +require "cask/artifact/keyboard_layout" require "cask/artifact/manpage" require "cask/artifact/vst_plugin" require "cask/artifact/vst3_plugin" diff --git a/Library/Homebrew/cask/artifact/keyboard_layout.rb b/Library/Homebrew/cask/artifact/keyboard_layout.rb new file mode 100644 index 0000000000..743cbdedb9 --- /dev/null +++ b/Library/Homebrew/cask/artifact/keyboard_layout.rb @@ -0,0 +1,36 @@ +# typed: true +# frozen_string_literal: true + +require "cask/artifact/moved" + +module Cask + module Artifact + # Artifact corresponding to the `keyboard_layout` stanza. + # + # @api private + class KeyboardLayout < Moved + extend T::Sig + + sig { returns(String) } + def self.english_name + "Keyboard Layout" + end + + def install_phase(**options) + super(**options) + delete_keyboard_layout_cache(**options) + end + + def uninstall_phase(**options) + super(**options) + delete_keyboard_layout_cache(**options) + end + + private + + def delete_keyboard_layout_cache(command: nil, **_) + command.run!("/bin/rm", args: ["-f", "--", "/System/Library/Caches/com.apple.IntlDataCache.le*"], sudo: true) + end + end + end +end diff --git a/Library/Homebrew/cask/config.rb b/Library/Homebrew/cask/config.rb index ae083bf292..164f98c5d4 100644 --- a/Library/Homebrew/cask/config.rb +++ b/Library/Homebrew/cask/config.rb @@ -15,6 +15,7 @@ module Cask DEFAULT_DIRS = { appdir: "/Applications", + keyboard_layoutdir: "/Library/Keyboard Layouts", colorpickerdir: "~/Library/ColorPickers", prefpanedir: "~/Library/PreferencePanes", qlplugindir: "~/Library/QuickLook", @@ -40,6 +41,7 @@ module Cask def self.from_args(args) new(explicit: { appdir: args.appdir, + keyboard_layoutdir: args.keyboard_layoutdir, colorpickerdir: args.colorpickerdir, prefpanedir: args.prefpanedir, qlplugindir: args.qlplugindir, diff --git a/Library/Homebrew/cask/dsl.rb b/Library/Homebrew/cask/dsl.rb index ab5a87f6b3..0c11db3447 100644 --- a/Library/Homebrew/cask/dsl.rb +++ b/Library/Homebrew/cask/dsl.rb @@ -44,6 +44,7 @@ module Cask Artifact::Font, Artifact::InputMethod, Artifact::InternetPlugin, + Artifact::KeyboardLayout, Artifact::Manpage, Artifact::Pkg, Artifact::Prefpane, diff --git a/Library/Homebrew/cli/parser.rb b/Library/Homebrew/cli/parser.rb index 536a100a28..39cf3604a8 100644 --- a/Library/Homebrew/cli/parser.rb +++ b/Library/Homebrew/cli/parser.rb @@ -37,6 +37,10 @@ module Homebrew description: "Target location for Applications " \ "(default: `#{Cask::Config::DEFAULT_DIRS[:appdir]}`).", }], + [:flag, "--keyboard-layoutdir=", { + description: "Target location for Keyboard Layouts " \ + "(default: `#{Cask::Config::DEFAULT_DIRS[:keyboard_layoutdir]}`).", + }], [:flag, "--colorpickerdir=", { description: "Target location for Color Pickers " \ "(default: `#{Cask::Config::DEFAULT_DIRS[:colorpickerdir]}`).", diff --git a/Library/Homebrew/rubocops/cask/constants/stanza.rb b/Library/Homebrew/rubocops/cask/constants/stanza.rb index d8129cc51b..4c51b1bf23 100644 --- a/Library/Homebrew/rubocops/cask/constants/stanza.rb +++ b/Library/Homebrew/rubocops/cask/constants/stanza.rb @@ -29,6 +29,7 @@ module RuboCop :font, :input_method, :internet_plugin, + :keyboard_layout, :prefpane, :qlplugin, :mdimporter, diff --git a/Library/Homebrew/test/support/helper/spec/shared_context/homebrew_cask.rb b/Library/Homebrew/test/support/helper/spec/shared_context/homebrew_cask.rb index f2d75d1be1..bd9cc4d5c2 100644 --- a/Library/Homebrew/test/support/helper/spec/shared_context/homebrew_cask.rb +++ b/Library/Homebrew/test/support/helper/spec/shared_context/homebrew_cask.rb @@ -11,6 +11,7 @@ module Cask class Config DEFAULT_DIRS_PATHNAMES = { appdir: Pathname(TEST_TMPDIR)/"cask-appdir", + keyboard_layoutdir: Pathname(TEST_TMPDIR)/"cask-keyboard-layoutdir", prefpanedir: Pathname(TEST_TMPDIR)/"cask-prefpanedir", qlplugindir: Pathname(TEST_TMPDIR)/"cask-qlplugindir", mdimporterdir: Pathname(TEST_TMPDIR)/"cask-mdimporter",