Belajar Emacs - Backup, Autosave & Recovery
Episode 23 of 30

Belajar Emacs - Backup, Autosave & Recovery

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.

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

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.

Backup Files: Salinan Sebelum Simpan

Secara default, Emacs membuat backup file saat pertama kali menyimpan: file foo.txtfoo.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:

Kumpulkan backup di ~/.emacs.d/backups (di init.el)
(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 backup

Sekarang foo.txt yang disimpan berkali-kali punya riwayat foo.txt~1~, ~2~, dst. di direktori sentral — mudah dibersihkan, tidak mengotori proyek.

Auto-Save: Jaring Pengaman Otomatis

Auto-save menyimpan buffer secara periodik ke file #foo.txt#terpisah dari file asli, sehingga tidak mengubah file di disk:

Atur interval auto-save (di init.el)
(setq auto-save-default t)
(setq auto-save-interval 120)          ; tiap 120 ketukan
(setq auto-save-timeout 20)            ; tiap 20 detik idle

Auto-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.

Recover File yang Crash

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:

text
C-x C-f foo.txt RET
→ "Auto save file is newer; consider M-x recover-file"
M-x recover-file RET RET

recover-this-file juga tersedia. Emacs membandingkan auto-save dengan file di disk dan mengambil yang lebih baru.

Recover Semua File Sekaligus

text
M-x recover-session RET

Menampilkan daftar semua buffer yang punya auto-save — pilih yang mana yang akan dipulihkan. Ini jalan keluar setelah crash massal.

Undo-Tree / Vundo: Riwayat Berbasis Pohon

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.

Install vundo (modern, tanpa dependensi berat)
(use-package vundo
  :ensure t
  :bind (("C-x u" . vundo)))
text
C-x u   →  visualisasi pohon undo di buffer khusus
n / p   →  navigasi antar node (commit)
RET     →  kembali ke state yang dipilih

Bayangkan: 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?".

Kombinasi Kebijakan Penyimpanan

Strategi berlapis yang disarankan:

LapisanFungsiKapan
C-x C-sSimpan nyata ke diskKebiasaan rutin
Backup ~...~Riwayat versi fileSetiap save
Auto-save #...#Jaring pengamanCrash/tutup paksa
recover-file/recover-sessionPulihkan dari auto-saveSetelah crash
VundoRiwayat undo bercabangKesalahan edit besar
Git + Magit (episode 15)Riwayat permanen proyekKerja 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.

Pitfall Backup & Recovery

  • Backup ~ yang tidak muncul: jika backup-directory-alist tidak aktif, backup default disimpan di direktori file — cek dengan C-h v backup-directory-alist.
  • Auto-save file menua: file #...# 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.
  • Vundo & undo biasa campur: set undo-tree-enable-undo-in-region atau pilih satu implementasi. Kalau sebelumnya memakai undo-tree lalu pindah ke vundo, nonaktifkan yang lama sepenuhnya.

Penutup

Pada episode 23 ini, kalian telah membangun perisai data untuk Emacs.

Inti yang harus dibawa pulang:

  • Backup (~...~) = riwayat versi file; kumpulkan di ~/.emacs.d/backups.
  • Auto-save (#...#) = jaring pengaman berkala; tidak menggantikan C-x C-s.
  • M-x recover-file / recover-session memulihkan setelah crash.
  • Vundo (C-x u) = riwayat undo bercabang — edit yang "hilang" masih bisa diambil.
  • Backup Emacs melindungi jam terakhir; git melindungi seluruh proyek.

Di episode 24 selanjutnya, kita mengubah cara Emacs berjalan: daemon & emacsclientemacs --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!

Belajar Emacs - Backup, Autosave & Recovery | Belajar Emacs