Chrome ⌘S 「ページを別名で保存...」を無効化する【MacOS】

ブラウザ文字入力時に、

いきなり飛び出してくるイラッとするコレ。

私の場合、⌘(コマンド)キーを、かな↔英数 の切り替えに使ってるのですが。

この切替えの直後に「S」から始まるさ行の文字を打とうしたときに、

Chromeショートカットの「⌘+S」認識され、

「ページを別名で保存...」

が発動していたようです。

これ無効にできないか。

 

ショートカットを変更する

アプリごとのショートカットは、

MacOSの設定から変更できるようです。

「システム環境設定」
   ↓
「キーボード」
   ↓
「ショートカット」
   ↓
「アプリケーション」

から、「Chrome」を選択して

「ページを別名で保存...」 というChromeのメニューコマンドに

別のショートカットキー「⌥⌘S」を登録します。

これで、変更できました。

Chromeメニューからも確認します。

これで、

意図しない誤動作が起こらなくなります。

 

まとめ

Macアプリのショートカットは、OS側のキーボード設定内から変更できる。

FinderなどのmacOSアプリケーションのメニューコマンドに対して、独自のキーボードショートカットを作成することができます。この機能は、ほとんどのアプリケーションで同じ操作に割り当てられているグローバルなショートカットが、特定のアプリケーションのショートカットと競合している場合に使うと便利です。

👉 Macでアプリケーションのキーボードショートカットを作成する - Apple サポート 


オードリー・タン氏のPRにみる言語選択肢の表示文字

これ。

👉 東京都のコロナ対策サイト、台湾の“天才IT大臣”も改善に参加 オープンソースの取り組み、「胸アツ展開」と話題 - ITmedia NEWS 

👉 Fix language selector label for zh-TW (体 -> 體) by audreyt · Pull Request #827 · tokyo-metropolitan-gov/covid19 

❌ 繁体
⭕ 繁體

ということになります。

あれ、

「繁体」

のほうをよく見かけるような気がしませんか??

本当に「繁体」は間違い?

繁体字(はんたいじ、繁體字、拼音: fántǐzì)

特に中華人民共和国の一連の「文字改革」政策による簡体字(簡化字)との対比によりこう呼ぶ。現在では主に台湾のほか、中華人民共和国の特別行政区である香港・マカオで使用され、中華圏外の華人コミュニティーでも見られる。

👉 繁体字 - Wikipedia 

Google 翻訳のWEB版とアプリ版の選択肢をみてみます。

そうか、

サイトやアプリの「表示している言語」の設定で「言語の選択肢」の表示文字が変わるのですね!

👉 Google Language Codes - tomihasa 

4つの言語に関して、表示されるべき選択肢の文字を見ておきましょう。

hl=ja

英語
中国語(簡体)
中国語(繁体)
日本語

hl=en

English
Chinese (Simplified)
Chinese (Traditional)
Japanese

hl=zh_CN

英语
中文(简体)
中文(繁体)
日语

hl=zh_TW

英文
中文(簡體)
中文(繁體)
日文

オードリー・タン氏は、台湾の方なので、台湾向け言語表示としては

「中文(繁體)」

が選択肢に表示されるべき文字となるのでしょうか。

しかし、東京都のように選択肢の文字自体を表示言語に合わせて翻訳してないサイトもあります。

👉 都内の最新感染動向 | 東京都 新型コロナウイルス感染症対策サイト 

Android Pie 言語設定画面。

Android端末では、以前からこのような実装になっています。

フォントの事情がありますので、端末や文字によっては豆腐や文字化けなどに注意が必要です。

まとめ

呼称や表記でもめたりするネット上で

オードリー・タン氏の台湾愛を見たような気がします。


【MVVM】Flow vs LiveData

👉 Using LiveData & Flow in MVVM — Part I - ProAndroidDev 

Kotlin Flow の登場で盛り上がってきました。

どれにします? どの流れにします?

Repository

Result を返す。

Flow<Result>を返す。

ViewModel

Result を受けて、LiveData<Result> を渡す。

Flow<Result> を受けて、LiveData<Result> を渡す。


Fragment

LiveData<Result> を受け取る。

Flow<Result> を受け取る。


override fun onActivityCreated(savedInstanceState: Bundle?) {
  super.onActivityCreated(savedInstanceState)

  viewModel = ViewModelProviders.of(
      this,
      viewModelFactory
  ).get(WeatherForecastDataStreamFlowViewModel::class.java)

  // Consume data when fragment is started
  lifecycleScope.launchWhenStarted {

    // Since collect is a suspend function it needs to be called
    // from a coroutine scope
    viewModel.weatherForecast.collect {
      when (it) {
        Result.Loading -> {
          Toast.makeText(context, "Loading", Toast.LENGTH_SHORT).show()
        }
        is Result.Success -> {
          tvDegree.text = it.data.toString()
        }
        Result.Error -> {
          Toast.makeText(context, "Error", Toast.LENGTH_SHORT).show()
        }
      }
    }
  }
}

WeatherForecastDataStreamFlowFragment #L47-L75

まとめ

とはいえ、今はまだ、完全に LiveData は捨てれんよの。

👉 Kotlin で Result 
👉 Kotlin Flow vs Android LiveData - Stack Overflow 
👉 From RxJava 2 to Kotlin Flow: Threading - ProAndroidDev 

追記: ホットな Flow が登場したので以下。

👉 【MVVM】 Kotlin Flow で使える5つの利用パターン