Melindungi data dari kecelakaan: memahami sistem backup file Emacs, auto-save yang berjalan otomatis, memulihkan file yang crash dengan recover-file, memakai undo-tree/vundo untuk riwayat perubahan visual, dan membangun kebijakan penyimpanan yang membuat kalian tidak pernah kehilangan kerja berjam-jam.

Tidak ada yang lebih menyakitkan daripada kehilangan kerja berjam-jam karena Emacs crash atau salah hapus. Episode 23 mengubah Emacs menjadi perisai data: sistem backup file, auto-save, recovery setelah crash, dan riwayat undo yang tidak pernah lupa.
Mengapa penting? Karena "lupa menyimpan" dan "crash" bukan hal langka — dan data yang hilang sering kali tidak bisa diulang: ide yang hilang, analisis yang menguap, atau baris kode yang sudah rapi. Emacs, dengan kebijakan backup yang tepat, membuat kehilangan itu hampir mustahil.
Secara default, Emacs membuat backup file saat pertama kali menyimpan: file foo.txt → foo.txt~ (versi sebelumnya). Kebijakan backup default (backup-by-copying dan kawan-kawan) sering membuat file ~ berantakan di direktori kerja — banyak yang menonaktifkannya di episode 10.
Kebijakan yang sehat: kumpulkan backup di satu direktori:
(setq backup-directory-alist '(("." . "~/.emacs.d/backups")))
(setq version-control t) ; simpan beberapa versi backup
(setq kept-new-versions 10) ; max versi baru disimpan
(setq kept-old-versions 5) ; max versi lama disimpan
(setq delete-old-versions t) ; hapus yang melebihi batas
(setq backup-by-copying t) ; salin (tidak pindahkan) saat backupSekarang foo.txt yang disimpan berkali-kali punya riwayat foo.txt~1~, ~2~, dst. di direktori sentral — mudah dibersihkan, tidak mengotori proyek.
Auto-save menyimpan buffer secara periodik ke file #foo.txt# — terpisah dari file asli, sehingga tidak mengubah file di disk:
(setq auto-save-default t)
(setq auto-save-interval 120) ; tiap 120 ketukan
(setq auto-save-timeout 20) ; tiap 20 detik idleAuto-save tidak menggantikan C-x C-s — file #...# adalah cadangan yang hanya relevan saat recovery.
Note
Kenapa auto-save tidak "cukup" menggantikan save manual? Karena auto-save file bisa berisi state buffer yang belum selesai kalian edit — menyimpan file utama dengan setengah-edit juga berisiko. C-x C-s tetap perintah suci kalian; auto-save hanyalah jaring pengaman.
Inilah skenario malam yang menyedihkan: Emacs crash, atau ditutup paksa, dengan perubahan belum disimpan. Jangan panik — ada recover-file.
Saat membuka file yang punya auto-save lebih baru, Emacs biasanya menanyakan "recover from auto-save?" — jawab yes:
C-x C-f foo.txt RET
→ "Auto save file is newer; consider M-x recover-file"
M-x recover-file RET RETrecover-this-file juga tersedia. Emacs membandingkan auto-save dengan file di disk dan mengambil yang lebih baru.
M-x recover-session RETMenampilkan daftar semua buffer yang punya auto-save — pilih yang mana yang akan dipulihkan. Ini jalan keluar setelah crash massal.
Undo biasa (C-/, episode 5) linier. Undo-tree dan vundo memperlihatkan undo sebagai pohon cabang — karena di Emacs, undo sebenarnya adalah undo branch: "batalkan" tidak menghapus riwayat, ia menciptakan cabang baru. Dengan visualisasi, kalian bisa memilih titik mana pun dalam riwayat.
(use-package vundo
:ensure t
:bind (("C-x u" . vundo)))C-x u → visualisasi pohon undo di buffer khusus
n / p → navigasi antar node (commit)
RET → kembali ke state yang dipilihBayangkan: kalian mengedit, membatalkan, mengedit lagi, lalu ingin kembali ke edit yang dibatalkan — undo linier kehilangan jejaknya, tapi pohon undo menyimpannya sebagai cabang yang masih hidup. Ini penyelamat untuk "kok file-ku tidak seperti tadi?".
Strategi berlapis yang disarankan:
| Lapisan | Fungsi | Kapan |
|---|---|---|
C-x C-s | Simpan nyata ke disk | Kebiasaan rutin |
Backup ~...~ | Riwayat versi file | Setiap save |
Auto-save #...# | Jaring pengaman | Crash/tutup paksa |
recover-file/recover-session | Pulihkan dari auto-save | Setelah crash |
| Vundo | Riwayat undo bercabang | Kesalahan edit besar |
| Git + Magit (episode 15) | Riwayat permanen proyek | Kerja jangka panjang |
Tip
Untuk kerja kode, commit kecil yang sering (episode 15) adalah backup paling kuat: riwayat di git tidak hilang meski file backup dan auto-save terhapus. Backup Emacs melindungi jam terakhir; git melindungi seluruh proyek.
~ yang tidak muncul: jika backup-directory-alist tidak aktif, backup default disimpan di direktori file — cek dengan C-h v backup-directory-alist.#...# yang ditinggalkan (crash lalu file dibuka & disimpan normal) bisa menumpuk. Bersihkan rutin: find . -name '#*#' -delete di direktori kerja — tapi sebelum membersihkan, pastikan tidak ada file yang sebenarnya belum dipulihkan.M-x recover-file menolak: itu karena auto-save lebih tua dari file di disk — aman untuk memakai file di disk.undo-tree-enable-undo-in-region atau pilih satu implementasi. Kalau sebelumnya memakai undo-tree lalu pindah ke vundo, nonaktifkan yang lama sepenuhnya.Pada episode 23 ini, kalian telah membangun perisai data untuk Emacs.
Inti yang harus dibawa pulang:
~...~) = riwayat versi file; kumpulkan di ~/.emacs.d/backups.#...#) = jaring pengaman berkala; tidak menggantikan C-x C-s.M-x recover-file / recover-session memulihkan setelah crash.C-x u) = riwayat undo bercabang — edit yang "hilang" masih bisa diambil.Di episode 24 selanjutnya, kita mengubah cara Emacs berjalan: daemon & emacsclient — emacs --daemon, emacsclient -c/-t, dan integrasi dengan EDITOR untuk git serta perintah shell lainnya, menghasilkan startup instan di semua window. Sampai jumpa di episode 24!