i386 architectureのパッケージをすべて削除する
昨日メイン PCとサーバを Ubuntu 22.10に上げたけど改めて考えると i386パッケージいらないだろってことで消してみた. 複数あることでアップデートなんかも遅くなるので.
パッケージを削除する
下記のコマンドなどで i386パッケージを一覧を得て, :i386
が末尾についているパッケージを削除していく. 一応依存を確認したりしながら行ったが, 基本的には全部いらないと思う.
## 一覧表示 % dpkg -l |grep ':i386' ## パッケージ削除 % sudo apt purge some_package:i386 ## 依存関係を見る % apt rdepends --installed some_package:i386
22.04で i386環境がある場合, おそらく以下のパッケージが削除できない
- gcc-12-base
- libc6
- libcrypt1
- libgcc-s1
これらのパッケージは下記のコマンドで強制的に削除する
sudo dpkg --purge --force-remove-protected {gcc-12-base,libc6,libcrypt1,libgcc-s1}:i386
アーキテクチャリストから i386を削除する
依存パッケージをすべて削除したら, 下記のコマンドで i386をアーキテクチャリストから削除する
% sudo dpkg --remove-architecture i386
最後に i386が削除されたことを確認する. 何も表示されなければ OK
% dpkg --print-foreign-architectures
特定のプログラミング言語でショートカットキーを有効化する
[ { "key": "f1", "command": "rust-analyzer.openDocs", "when": "editorLangId == rust" }, ]
when
プロパティに editorLangId
の条件を追加してやればよい.
リファレンス - https://code.visualstudio.com/api/references/when-clause-contexts - https://code.visualstudio.com/docs/languages/identifiers
flutterの zsh補完を version 3対応した
ダウンロードした tar.gzをファイルに書き出さずに展開する
諸事情で Perlを書いていてやり方がわからなかったので調べた. ローカルファイルの tar.gzを展開みたいなのはそれなりにあったけど, オンメモリのまま処理する方法が皆無だった.
#!/usr/bin/env perl use strict; use warnings; use HTTP::Tiny; use Encode; use Archive::Tar; use IO::Uncompress::Gunzip qw(:all); my $dest = shift; my $url = 'https://www.cpan.org/src/5.0/perl-5.36.0.tar.gz'; my $res = HTTP::Tiny->new->get($url); unless ($res->{success}) { die "$res->{status} $res->{reason}"; } my $tar_buf; gunzip \$res->{content}, \$tar_buf or die "gunzip failed: $GunzipError\n"; open my $fh, '<', \$tar_buf or die "Can't open tar content as a file handle: $!"; my $tar = Archive::Tar->new; $tar->read($fh); if (defined $dest) { $tar->setcwd($dest); } $tar->extract; close $fh;
Perl Navigator を使って書いたけど, 他言語に比べるとだいぶ貧弱だが, 幾分補完やエラーチェックも効き Emacs等で書くよりはだいぶ楽に書けた気がする. 何も補完が効かないとかさすがにもう書けなくなってしまったのでありがたい存在でした.
git-credential-manager-coreのインストール場所が Git for Windows 2.36.1で変更されていた
WSL2の git認証の手間を省くために git-credential-manager-coreを使っているが, Git for Windows 2.36.1でインストールパスが変わっており, pushや pullをしたりしようとすると file not found
と出るようになってしまった. パスは次のように変わっていました.
C:/Program Files/Git/mingw64/libexec/git-core/git-credential-manager-core.exe
から
C:/Program Files/Git/mingw64/bin/git-credential-manager-core.exe
に変わっていた. 古い記事を参照しようとするとハマるので注意.
変更が行われた PRはこれ.
WSL2内の .gitconfigを下記のように変更しておいた.
[credential] helper = "/mnt/c/Program\\ Files/Git/mingw64/bin/git-credential-manager-core.exe"
emacs 28.1で導入された repeat-modeに関する調査
はじめに
最近まともに追っていなかったから存在さえ知らなかったのだけど、markdown-modeの issueでそういう機能があってどういうものかと使い方を調べてみた.
機能
特定のコマンドのグループを連続でお手軽に実行するための仕組み. 例えば移動系コマンドで次に移動が C-c n
, 前に移動が C-c p
みたいな場合毎回 C-c n
, C-c p
と叩くの面倒くさい。一方的に進む、戻るのであれば数値プレフィックスがあるが Vimのように数だけ押せばいいとわけじゃないし、進んだり戻ったりと繰り返したい場合などは使えない。そこで使えるのが repeat-mode
。repeat-mode
を使って初回実行だけは C-c n
だが以降は n
, p
でそれぞれ移動するということが実現できる.
myuheさんが作られた smartrep.elに近い.
使い方
repeat-mode
を有効にする- キーマップを定義する
- 起点となるコマンドの
repeat-map
属性に定義した keymapを設定する
repeat-mode
を有効にする
;; global minor modeです (repeat-mode +1)
グループで使いたいコマンド郡のキーマップを定義する
(defvar git-gutter-repeat-map (let ((map (make-sparse-keymap))) (define-key map (kbd "n") 'git-gutter:next-hunk) (define-key map (kbd "p") 'git-gutter:previous-hunk) map))
コマンドの repeat-map
属性を設定する
(put 'git-gutter:next-hunk 'repeat-map 'git-gutter-repeat-map) (put 'git-gutter:previous-hunk 'repeat-map 'git-gutter-repeat-map)
実行例
repeat-mode起点となるコマンドを実行すると minibufferに
Repeat with` と表示され, 該当するキーマップが有効になる.
おわりに
導入されたばかりということもあってか標準パッケージではほとんど使われておらずごく一部のモードで使われていませんでした。標準ライブラリで汎用的な機能を提供してくれるのはありがたいけど、どのコマンドをグルーピングするかとかは好みによるところもありそうなのでライブラリ側で設定すべきなのか個人で設定すべきなのかまだよくわかっていない。個人で設定する場合は smartrepなどに比べるとコード量が多くそれほど良いものではないのかなという気もしている。今後の使われ方を見て markdown-modeでどうするかなというのを考えていきたいかな。
LinkedIn Learningの Rust Code Challenges をやった
課題がいくつかあって解いて解説を見てという感じのコース。コードの雛形は githubに用意されているので, 足りていないところ埋めてテストが通れば OKという感じ.
かっちりしたコースではなく解説はわりとグダっていたり雛形のコードに微妙に問題があったりというケースがあったのでクオリティが高いものとは決して言えなかった. でもまあ 3rd partyライブラリを使ったり, そこそこ実用的なものもあり Rustで何を書いたらいいかわからんという自分には少しプラスになったかなとは思った. Rustの基本を習得してその後何か少し発展的なものを書いてみたいという人にちょうどいいぐらいかなと思った。