Jak przetrwać markery zła?

10

Chcę być w stanie zapisać mój bufor lokalnych znaczników zła (m, aby zaznaczyć lokalizację, a następnie „lub”, aby przejść do niej) w sesjach / instancjach emacsa. Nie jestem pewien, jak to zrobić. Próbowałem zainstalować / używać sesji i dodać je w następujący sposób:

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

To jednak nie działa i nie jestem pewien, co jeszcze można spróbować. Dzięki.

noctuid
źródło
Vim domyślnie automatycznie zapisuje lokalne znaczniki buforowe na dysku. Zło nie, ponieważ nie emuluje funkcji Vima + viminfo . Czy przesłałeś prośbę o funkcję do narzędzia do śledzenia problemów zła ? Czy odpowiedzieli?
unforgettableidSupportsMonica
@ Angelic_sedition naprawdę, nie chodzi o zło, chodzi o trwałe zmienne buforowe-lokalne. Ta ostatnia jest znacznie bardziej ogólna i przydatna, a ja jestem bardzo zainteresowany odpowiedzią. Stworzyłem tag dla twojego pytania.
PythonNut
@PythonNut Cóż, stwierdziłem, że problem dotyczy w szczególności markerów (tak myślę). Zarówno pulpit, jak i session.el przechowują lokalne zmienne bufora dla markera zła, ale nie kończą się one dopasowaniem do rzeczywistej wartości (nic podobnego (108. # <Marker w 54991 w file.org>) jest pominięte). Sądzę, że dzieje się tak, ponieważ nie potrafią lub nie wiedzą, jak zapisać obiekt znacznika.
noctuid
1
Od maja 2017 r. Jest to otwarty problem .
Mirzhan Irkegulov

Odpowiedzi:

1

Oto moje rozwiązanie: umieść poniższy kod w .emacs lub .spacemacs.

Musisz ręcznie umieścić nazwę znacznika i nazwę pliku w wierszu: evil-add-to-alist. Zmodyfikowałem również znak zła goto, aby naprawić błąd, który został wprowadzony przez bezpośrednie ustawienie znaku zła-alist. Stary kod zakłada, że ​​gdy znacznik jest wadliwy, bufor został zamknięty. (gdy bufor jest zamknięty, konwertuje znacznik na minusy).

  (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
źródło
Zapomniałem wspomnieć, że działa to tylko dla markera globalnego. (znacznik wielkich liter)
Hao Deng
1

desktop.el obsługuje przechowywanie / przywracanie znaczników (przynajmniej teraz). (add-to-list 'desktop-locals-to-save 'evil-markers-alist)lub (cl-pushnew 'evil-markers-alist desktop-locals-to-save)pracuj dla mnie.

noctuid
źródło