1 puan yazan GN⁺ 2 시간 전 | 1 yorum | WhatsApp'ta paylaş
  • 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 import ile içe aktarılır; Ctrl+R tuşuna basıldığında tersine arama TUI'si açılır
  • NixOS'ta home-manager modülü sunulur, diğer ortamlarda ise .bashrc içinde eval "$(stinkpot init)" ile başlatılır
  • Veritabanı ~/.local/share/stinkpot iç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.default modülünü içe aktarabilir
  • Diğer ortamlarda .bashrc iç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+R tuşuna basıldığında arama TUI'si açılır
    • · ile gezinilir, Tab veya Enter ile seçim yapılır
    • Seçimden sonra Enter tuşuna yeniden basıldığında komut çalıştırılır
    • Esc ile iptal edilir
  • Geçmiş veritabanı ~/.local/share/stinkpot içinde saklanır
    • Yükseltmeden sonra veritabanı bozulursa dosya silinip stinkpot import yeniden çalıştırılır

1 yorum

 
GN⁺ 2 시간 전
Lobste.rs yorumları
  • Bu hafta promptta yanlışlıkla ? 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.
  • Kabuk komut geçmişimi kaybedip sıkıntı çekmişliğim olduğu için bu projeyi gerçekten sevdim. atuin.sh’i de denedim ama pek memnun kalmadım.
    Ö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 veya fzf gibi geçmiş dosyasını doğrudan okuyan araçlarla karşılaştırınca burada SQLite kullanmak neyi daha iyi hale getiriyor, merak ediyorum.
    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.
    • Bash’i her komut çalıştırıldıktan sonra geçmişi dosyaya yazacak şekilde ayarlarsanız yalnızca fzf ile de benzer bir şey yapılabilir.
      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.
    • Her geçmiş kaydının geçerli çalışma dizinini kaydetme ve indeksleme kullanımını düşündüm.
      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.
  • Kesinlikle denemeye değer. Atuin, neredeyse hiç ilgilenmediğim özelliklerle dolu bir özellik hayvanat bahçesine dönüştü.
    Yine de iyi çalışması bir avantaj; ama uzun zamandır güncellenmemiş olma ihtimali yüksek.
    • Atuin’i eskiden beri biliyordum ama ilk kez bu hafta denedim. Bu gidişle yakında e-postalarımı bile okumaya başlayacak gibi.
  • Harika görünüyor; geçmişi cwd ile filtreleyip filtreleyemediğini merak ediyorum. Komut geçmişinin temelini dizin yapabilmek, Atuin kullanmamın tek nedeni.
    Bir projeye cd yaptı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.
    • fish bunu varsayılan olarak sunuyor ve çok kullanışlı.
    • Kişisel olarak tercih ettiğim davranış değil, ama bir kısıt altında uygulanabilir. Yalnızca stinkpot kurulduktan sonra çalıştırılan komutlar için cwd kaydedilir; varsayılan bash_history bu bilgiyi içermez.
  • Başkalarının kodu gönül rahatlığıyla kullanabilmesi için projeye bir lisans eklemek iyi olur.
    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.
  • Geçmişten komut silmenin ne kadar kolay olduğunu merak ediyorum. SQLite veritabanından SQL ile satırları doğrudan silmek mi gerekiyor, bunu bilmek isterim.
    Nadiren de olsa kabuk geçmişinden birkaç komut satırını silmem gerektiği oluyor; eski yöntemde bash_history dosyası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.