【AndroidStudio】プラグイン Rainbow Brackets が括弧だけでなく 変数 まで色が付くようになる【IDEA】

ネストする括弧を分かりやすく色分けしてくれるプラグイン「Rainbow Brackets」。

👉 IntelliJ IDEA プラグイン「Rainbow Brackets」を使う hatena-bookmark

ついに、変数 (variables) まで色分けしてくれるようになっております。

これが、

こうなる。

少しうざい、括弧だけでいい、という方は、詳細設定できます。

👉 Incompatibility with Semantic highlighting · Issue #2563 · izhangzhihao/intellij-rainbow-brackets hatena-bookmark


2023年 = 令和5年 = 平成35年 = 昭和98年 というような 西暦 - 元号 対照表


  ad    reiwa    heisei    showa
----  -------  --------  -------
2023        5      (35)     (98)
2022        4      (34)     (97)
2021        3      (33)     (96)
2020        2      (32)     (95)
2019        1        31     (94)
2018                 30     (93)
2017                 29     (92)
2016                 28     (91)
2015                 27     (90)
2014                 26     (89)
2013                 25     (88)
2012                 24     (87)
2011                 23     (86)
2010                 22     (85)
2009                 21     (84)
2008                 20     (83)
2007                 19     (82)
2006                 18     (81)
2005                 17     (80)
2004                 16     (79)
2003                 15     (78)
2002                 14     (77)
2001                 13     (76)
2000                 12     (75)
1999                 11     (74)
1998                 10     (73)
1997                  9     (72)
1996                  8     (71)
1995                  7     (70)
1994                  6     (69)
1993                  5     (68)
1992                  4     (67)
1991                  3     (66)
1990                  2     (65)
1989                  1       64

👉 【Python】2022年 = 令和4年 = 平成34年 = 昭和97年 というような 西暦 - 元号 対照表 hatena-bookmark


【IDEA】Python Code Style インデントをスペース2 に設定する

Editor の反応を スペース2 仕様にする。


Setting

  ↓

Editor

  ↓

Code Style

  ↓

Python

Tabs and Indents のタブから 4 → 2, 8 → 4 に変更。

【IDEA】Python Code Style インデントをスペース2 に設定する

IDEA の 文法チェック周りを調整する。


Setting

  ↓

Editor

  ↓

Inspections

  ↓

PEP8 coding style Violations

Options Ignore errorE111, E114 を追加する。

【IDEA】Python Code Style インデントをスペース2 に設定する


E111 indentation is not a multiple of four

E114 indentation is not a multiple of four (comment)

👉 Introduction — pycodestyle 2.7.0 documentation hatena-bookmark
👉 【Pythonコーディング規約】PEP 8 vs Google Style - Qiita hatena-bookmark
👉 styleguide | Style guides for Google-originated open-source projects hatena-bookmark

まあ、しかし、スペース 4 のほうが今はまだ主流ですよな。

👉 path:**/setup.cfg flake8 ignore - Code search results · GitHub hatena-bookmark
👉 Flake8: Your Tool For Style Guide Enforcement — flake8 6.0.0 documentation hatena-bookmark



dyn4j の実力を JetpackCompose wrapper Physics Layout で思い知る

やはり Java のライブラリ群を使えることは素晴らしいことです。

以下、サンプルコードを参考に Activity を書き換えます。


👉 KlassenKonstantin/ComposePhysicsLayout: A custom Compose layout backed by a physics engine hatena-bookmark





class MainActivity : ComponentActivity() {

  @SuppressLint("SourceLockedOrientationActivity")
  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    WindowCompat.setDecorFitsSystemWindows(window, false)
    requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
    setContent {
      PhysicsLayoutTheme {
        Surface(
          modifier = Modifier.fillMaxSize(),
          color = MaterialTheme.colorScheme.background
        ) {

          val simulation = rememberSimulation()
          val balls = remember { mutableStateListOf<BallMeta>() }

          GravitySensor {
            simulation.setGravity(it.copy(x = -it.x).times(3f))
          }

          LaunchedEffect(Unit) {
            var i = 0
            val count = colors.count()
            while (true) {
              balls.add(BallMeta(color = colors[i % count]))
              delay(100)
              i++
            }
          }

          LaunchedEffect(Unit) {
            delay(5000)
            while (true) {
              balls.removeFirst()
              delay(100)
            }
          }

          Box {
            PhysicsLayout(
              modifier = Modifier.systemBarsPadding(),
              simulation = simulation
            ) {

              Block(   0, -200)
              Block(-125, -100)
              Block( 125, -100)
              Block(   0,    0)
              Block(-100,  100)
              Block( 100,  100)
              Block(   0,  200)

              balls.forEach { meta ->
                Ball(0, -350, meta = meta)
              }

            }
          }

        }
      }
    }
  }
}

@Composable
fun PhysicsLayoutScope.Block(x: Int, y: Int) {
  val offset = offsetDp(x, y)
  Card(
    modifier = Modifier
      .body(
        isStatic = true,
        initialTranslation =  offset
      )
  ) {
    Spacer(
      modifier = Modifier
        .size(62.dp)
        .background(color = Color.Gray)
    )
  }
}

@Composable
fun PhysicsLayoutScope.Ball(x: Int, y: Int, meta: BallMeta) {

  val initialOffset = offsetDp(x, y)

  Card(
    modifier = Modifier.body(
      id = meta.id,
      shape = RoundedCornerShape(meta.corner),
      initialTranslation = Offset(initialOffset.x, initialOffset.y),
      initialImpulse = Offset((Random.nextFloat() - 0.5f) * 2, (Random.nextFloat()) * 2),
    ),
    shape = RoundedCornerShape(meta.corner),
    colors = CardDefaults.cardColors(containerColor = meta.color)
  ) {
    Icon(
      modifier = Modifier
        .size(32.dp)
        .padding(4.dp),
      imageVector = Icons.Rounded.Rocket,
      contentDescription = null,
      tint = Color.White
    )
  }
}

@Composable
fun offsetDp(x: Int, y: Int) = with(LocalDensity.current) { Offset(x.dp.toPx(), y.dp.toPx()) }


@Immutable
data class BallMeta(
  val id: String = System.currentTimeMillis().toString(),
  val color: Color,
  val corner: Int = listOf(0, 50).shuffled()[0]
)

private val colors = listOf(
  Color(0xFFEF5350), Color(0xFFEC407A), Color(0xFFAB47BC), Color(0xFF7E57C2),
  Color(0xFF29B6FC), Color(0xFF26C6DA), Color(0xFF26A69A), Color(0xFF66BB6A),
  Color(0xFF9CCC65), Color(0xFFD4E157), Color(0xFFFFEE58), Color(0xFFFFCA28),
  Color(0xFFFFA726), Color(0xFFFF7043), Color(0xFF8D6E63), Color(0xFFBDBDBD),
  Color(0xFF78909C)
)

強力です。

👉 dyn4j hatena-bookmark
👉 【Jetpack Compose】dp / px / sp の相互変換 hatena-bookmark




【macOS】「⌫ (delete)」 と「⌦ (forward delete)」の キーボードショートカット設定

カーソルの左右の文字を消す

「⌫(delete)」「⌦(forward delete)」

の操作。

両手がキーボードのホームポジションから離したくないので、各エディタアプリごとの設定でキーボードショートカットやキーマップを設定しようとして困惑。

まあ、だるい。

設定できても衝突の話もある。

 

■ どうしたいのか

それぞれを 「⌃(control)」 を使ったショートカットに振り分けたい。


カーソルの左を消す delete-backward-char (Windows Backspace)
delete

→ ⌃(control) + H


カーソルの右を消す delete-char (Windows Delete)
fn (function) + delete

→ ⌃(control) + D

 

■ キーマップアプリで設定する

macOS 上で動くキーマップアプリでショートカットとして登録しちゃいます。

👉 ⌘英かな hatena-bookmark
👉 Karabiner-Elements hatena-bookmark

これだけです。

 

■ まとめ

macOS 上で動くテキストのエディタ系の操作はこれですべて統一できます。

もし、すでに 「⌃(control) + H/D」をショートカットすでに使用している場合は使えなくなりますが、最も頻繁に直感的に使うエディタ操作を優先します。

👉 【macOS】キーマップとキーボードショートカットの変更設定 hatena-bookmark
👉 Deletion (GNU Emacs Manual) hatena-bookmark