- stinkpot, Bash komut geçmişini SQLite'a kaydederek oturumdan bağımsız biçimde yönetmeyi sağlar ve arama TUI'siyle hızlıca bulunabilir hale getirir
- Atuin'den senkronizasyon sunucusu, yapay zeka, dotfiles·betik yöneticisi ve KV deposunu çıkarıp yalnızca gerekli işlevleri yaklaşık 400 satır Go ile uygular
- Mevcut Bash geçmişi
stinkpot importile içe aktarılır;Ctrl+Rtuşuna basıldığında tersine arama TUI'si açılır - NixOS'ta home-manager modülü sunulur, diğer ortamlarda ise
.bashrciçindeeval "$(stinkpot init)"ile başlatılır - Veritabanı
~/.local/share/stinkpotiçinde saklanır; yükseltmeden sonra bozulursa silinip geçmiş yeniden içe aktarılabilir
Atuin'den yalnızca gerekli işlevleri ayırma
- stinkpot, Atuin kullanırken yalnızca oturumdan bağımsız geçmiş yönetimi ve arama TUI'sine ihtiyaç duyma deneyiminden doğdu
- Senkronizasyon sunucusu, Atuin AI, dotfiles yöneticisi, betik yöneticisi ve KV deposunu içermez
- Ayarlar ve çalıştırma komutları makineden makineye ciddi biçimde farklı olduğu için senkronizasyon işlevi de kullanılmadı
- Proje yaklaşık 400 satır Go ile yazıldı; depodaki dil oranı Go %82.5, Nix %17.5
- Adı, küçük bir kaplumbağa türü olan
stinkpottan gelir - Tersine arama hızını artırmak için SQLite yürütme planı, sıralama için geçici B-tree yerine covering index kullanır
Kurulum ve geçmiş arama
- Kaynaktan derlemek için şu komut kullanılır
go build -o stinkpot .
- NixOS home-manager kullanıcıları sağlanan
homeManagerModules.defaultmodülünü içe aktarabilir - Diğer ortamlarda
.bashrciçine şu başlatma komutu eklenir
eval "$(stinkpot init)"
- Mevcut Bash geçmişi şu komutla içe aktarılır
stinkpot import
- Kabukta
Ctrl+Rtuşuna basıldığında arama TUI'si açılır↑·↓ile gezinilir,TabveyaEnterile seçim yapılır- Seçimden sonra
Entertuşuna yeniden basıldığında komut çalıştırılır Escile iptal edilir
- Geçmiş veritabanı
~/.local/share/stinkpotiçinde saklanır- Yükseltmeden sonra veritabanı bozulursa dosya silinip
stinkpot importyeniden çalıştırılır
- Yükseltmeden sonra veritabanı bozulursa dosya silinip
1 yorum
Lobste.rs yorumları
?yazınca Atuin’in AI modunu etkinleştirmek isteyip istemediğimi sorduğunu gördüm ve ne kadar şiştiğini fark ettim.Almayayım. Tanıttığınız için teşekkürler; artık stinkpot’a geçtim.
Özellikle 400 satır Go koduyla basit, statik ve minimal bir ikili üretmesi hoşuma gitti. Go genel olarak harika bir dil; stinkpot’u da kullanmayı planlıyorum.
hstr’yi yaklaşık 15 yıldır kullanıyordum, son zamanlarda ise fzf’ye geçiyorum. SQLite’ın kendisini çok seviyorum ama bu kullanım için neden gerekli olduğunu anlayamadım.
Varsayılan geçmiş dosyası yapılandırılmış değil; ancak SQLite’ta çıkış kodu ve bitiş zamanı gibi veriler saklanabilir, ekleme sırasında yinelenenleri kaldırma veya aynı komut tekrar çalıştırıldığında çalışma zamanını güncelleme gibi işlemler de hızlıca yapılabilir.
Teorik olarak komut geçmişinden bağlamı zahmetle yeniden kurabilirsiniz, ancak kabuk geçmişini proje dizinine göre hızlıca sorgulayabilmek epey kullanışlı olabilir.
Yine de iyi çalışması bir avantaj; ama uzun zamandır güncellenmemiş olma ihtimali yüksek.
cwdile filtreleyip filtreleyemediğini merak ediyorum. Komut geçmişinin temelini dizin yapabilmek, Atuin kullanmamın tek nedeni.Bir projeye
cdyaptıktan sonra daha önce kaldığım yerden hemen devam edebiliyorum; özellikle çok parametreli uzun komutları yeniden çalıştırırken çok işe yarıyor.cwdkaydedilir; varsayılanbash_historybu bilgiyi içermez.Uygunsa açık bir lisans ekledikten sonra bunu experimental oils readline’a entegre etmek isterim. Dinamik widget’ı tamamladıktan sonra ele alınacak en öncelikli TODO’lardan biri komut geçmişi.
Nadiren de olsa kabuk geçmişinden birkaç komut satırını silmem gerektiği oluyor; eski yöntemde
bash_historydosyasını doğrudan açıp ilgili satırları silebiliyordum. stinkpot’ta bir geçmiş silme komutu olup olmadığını merak ediyorum.Bu sıra dışı kullanım dışında projenin kendisi oldukça ilginç görünüyor.