Bagaimana Cara Bertahan Penanda Jahat?

10

Saya ingin dapat menyimpan buffer jahat lokal saya (m untuk menandai lokasi dan kemudian 'atau `untuk melompat ke sana) di sesi / instance emacs. Saya tidak begitu yakin bagaimana melakukan ini. Saya mencoba menginstal / menggunakan sesi dan menambahkannya seperti ini:

(add-to-list 'session-locals-include 'evil-markers-alist)

Ini tidak berhasil, dan saya tidak yakin harus mencoba apa lagi. Terima kasih.

noctuid
sumber
Vim secara otomatis menyimpan marker buffer-local ke disk secara default. Kejahatan tidak, karena ia tidak meniru fitur + viminfo Vim . Sudahkah Anda mengirimkan permintaan fitur ke pelacak masalah Jahat ? Sudahkah mereka merespons?
tak terlupakanMendukungMonika
@angelic_sedition sungguh, ini bukan tentang kejahatan, ini tentang variabel buffer-lokal-persisten. Yang terakhir ini jauh lebih umum dan bermanfaat, dan saya cukup tertarik dengan jawabannya. Saya telah membuat tag untuk pertanyaan Anda.
PythonNut
@ PythonNut Yah saya telah menemukan bahwa masalahnya secara khusus dengan spidol (saya pikir). Baik desktop maupun session.el menyimpan variabel lokal buffer untuk para evil-markers-alist, tetapi mereka akhirnya tidak cocok dengan nilai aktual (seperti (108. # <Marker di 54991 di file.org>) ditinggalkan). Saya kira ini karena mereka tidak bisa atau tidak tahu bagaimana cara menyimpan objek marker.
noctuid
1
Pada Mei 2017 ini merupakan masalah terbuka .
Mirzhan Irkegulov

Jawaban:

1

Ini solusi saya: Letakkan kode di bawah ini di .emacs atau .spacemacs Anda.

Anda harus menempatkan nama penanda huruf besar dan nama file secara manual: evil-add-to-alist. Saya juga memodifikasi evil-goto-mark untuk memperbaiki bug yang diperkenalkan oleh set evil-markers-alist secara langsung. Kode lama menganggap ketika penanda adalah kontra, buffer telah ditutup. (ketika buffer ditutup, itu mengkonversi marker ke cons).

  (setq alist (default-value 'evil-markers-alist))
  (evil-add-to-alist 'alist ?E '("/path/to/yourfile" . 1))
  (setq-default evil-markers-alist alist)

  (evil-define-command evil-goto-mark (char &optional noerror)
    "Go to the marker specified by CHAR."
    :keep-visual t
    :repeat nil
    :type exclusive
    (interactive (list (read-char)))
    (let ((marker (evil-get-marker char)))
      (cond
       ((markerp marker)
        (switch-to-buffer (marker-buffer marker))
        (goto-char (marker-position marker)))
       ((numberp marker)
        (goto-char marker))
       ((consp marker)
        (when (or (and (find-buffer-visiting (car marker))
                       (switch-to-buffer (find-buffer-visiting (car marker)) )
                       )
                  (and (y-or-n-p (format "Visit file %s again? "
                                         (car marker)))
                       (find-file (car marker))))
          (goto-char (cdr marker))))
       ((not noerror)
        (user-error "Marker `%c' is not set%s" char
                    (if (evil-global-marker-p char) ""
                      " in this buffer"))))))
  )
Hao Deng
sumber
Saya lupa menyebutkan ini hanya berfungsi untuk penanda global. (penanda huruf besar)
Hao Deng
1

desktop.el mendukung penyimpanan / pengembalian marker (setidaknya sekarang). (add-to-list 'desktop-locals-to-save 'evil-markers-alist)atau (cl-pushnew 'evil-markers-alist desktop-locals-to-save)bekerja untukku.

noctuid
sumber