ズズズなブログ

はてブロ出戻り組です〜

zsh コマンド履歴に文字列を追加

zshのhistory(コマンド履歴)にはプロンプトからコマンドを実行するたびに1行ずつ追加されていきます。

print(zshのビルトインコマンド )を使えば、このhistoryに何かを入力しておくことができます。

たとえば、.zshrcに

print -s "sed -i -e 's///g' *.x"

と書いておくと、sedと入力するだけでsed -i -e 's///g' *.xという文字列が補完候補に表示されます。

printコマンドはechoコマンドと似ていますが、-sを指定するとプリント先が画面ではなくhistoryになります(つまり、コマンド履歴に文字列が追加される)。

c.f. Shell Builtin Commands
zsh.sourceforge.io

Windows 11 コントロールパネルのネットワーク接続を速攻で開く

Win + r でスタートメニュー開いて下記を入力

ncpa.cpl

以上、自分用のメモ

Windows11: Google日本語入力で辞書に単語を登録する(その2)

以前こんな記事を書いたけど、もっと楽な方法があったのでメモる。

プロパティダイアログを表示させるコマンドのショートカットを作って、それを起動する方法。

qiita.com

以下にショートカットの作り方を簡単にまとめる。

  1. デスクトップを右クリック > 新規作成 > ショートカット
  2. パスに下記1行をコピペ
    "C:\Program Files (x86)\Google\Google Japanese Input\GoogleIMEJaTool.exe" "--mode=config_dialog"
  3. ショートカットの名前はデフォでもいいけど、単純にGoogleIMEPropがいいと思う
  4. OKボタンを押すと、デスクトップに青色の「あ」と書かれたショートカットアイコンができる

あとは、それをダブルクリックすればGoogle日本語入力のプロパティが開ける。

元ネタのようにショートカットキーを設定するのもいいけどどうせ忘れるし、ショートカットの名前がGoogleIMEPropなら一度ダブルクリックで起動した後はスタートメニューで google まで入力すれば補完候補として表示されるからそれでいい。

めっちゃ楽になった。感謝!

nVIDIAのオーバーレイ表示を無効化する

Windows PCのグラボをRTX4060に替えて、ドライバ更新したらGeForce Experienceという(Steamをパクったような画面の)アプリが入った。

常駐してゲームごとにグラボを最適化してくれる賢そうなやつなんだけど、オーバーレイ表示とそれ用のショートカットキーがおせっかい機能として実装されている。

こいつが悪さして、Altキーのショートカットが諸々吸われてしまうので無効にする。

  1. スタートメニューに「ge」と入れて GeForce Experience を起動
  2. アプリの右上あたりにある歯車アイコンをクリック
  3. 全般 > ゲーム内のオーバーレイ をOFF

これで安息が訪れた。

 

cf.

[Alt + Z]で GeForce Experience が表示されてしまう – Born Digital サポート

 

 

Windows11: Google日本語入力で辞書に単語を登録する

追記
もっといい方法があったので、こっち↓をやったほうがいい。
zzz-kbd.hateblo.jp



Explorer Patcher を使ってるせいか、タスクトレイのGoogle日本語入力アイコンのプロパティダイアログを開けず、そこから直に単語登録できない。

かなり面倒だが、単語登録するには以下の手順でやる。

  1. 設定 > 時刻と言語 > 入力 > キーボードの詳細設定
  2. 「使用可能な場合にデスクトップ言語バーを使用する」をチェック
  3. 言語バーが表示される。ここで一旦タスクバーを左クリックする。
    (これやらないと言語バーのスパナアイコンを左クリックしても反応しないことあり)
  4. 言語バーのスパナアイコンを左クリック
  5. 「辞書ツール」か「単語登録」を選択
  6. 単語を登録
  7. 設定ダイアログに戻り、「使用可能な場合にデスクトップ言語バーを使用する」のチェックを外す

ていうか、なんぼなんでもめんどすぎ。

Googleスプレッドシートでeval()

jsのeval()関数をGoogleスプレッドシートでも使える。

でもスプレッドシート関数じゃないので、セルに直接=eval(A1)とか入れても「不明な関数」になるから、以下のようにGASで一旦ラップしてやる。

function my_eval(formula) {
  return eval(formula);
}

これで

  • A1セルに5 + (-3)
  • A2セルに=my_eval(A1)

と入力すると、A2セルに2が入るはず。

でまあ、eval()なのでセキュリティ的に危ないらしいが、Googleスプレッドシートで使ったときの具体的なリスクシナリオがちょっと思い浮かばない。
クラウドでどんなインジェクションされようが問題ない気がするんだけど、他の非公開のシートを公開されたりできるなら確かにヤバいな。でもまeval使ったシート自体が非公開なら改変されないから直接使うぶんには問題ないはず。

GoogleスプレッドシートにはExcelの「本当に開いてもいいですか?」的なのがないから危ないっちゃ危ないけど、内輪で使う分には問題ないよね。

ローカル編集可能なシートがヤバいとかかな。
だとすると、Googleスプレッドシートからキーボード履歴を取得して送信するトロイをインストールとかできるんだろうか。
そんなんされたらかなりやばそうだが。

うーん、セキュリティは難しいな。

Arduino:Serial.println()をC言語のソースから使いたい

サンプル書いたけど、ここにソース埋め込むのがめんどいのでGistを貼る。

arduino example: calling Serial.println() from a C source file · GitHub

C言語はC++のクラスとか理解不能なので、一旦C++でラッパー関数を書いて、それを呼ぶようにする。

でも、なぜにC言語から使いたいのか?
たとえば、使いたいライブラリがCだからとか、C++にないC言語固有の機能を使いたいとか、まあいろいろあるよね。

ちなみに、C言語からではなくC++のソースからSerial.println()したいときはこんな2段構えのラップ不要で、.cppに

#include <Arduino.h>

するだけで使えるので、もしC++でコンパイルが通るならソースを.cppにしてしまったほうが楽。

arduino example: calling Serial.println() from a C++ source file · GitHub


元ネタはこちら
stackoverflow.com