(Emacs) Текст читается только?

Итак, я работал в emacs, и внезапно, slim-repl sbcl говорит, что текст читается только. Хорошо, что здорово, потому что теперь я не могу ничего вводить в него. Как я могу исправить?

Ответ 1

"Буфер доступен только для чтения" может быть вылечен C-x C-q, но, как сказал Дрю и phils,
" Текст доступен только для чтения" - это совсем другое - это означает часть буфера имеет свойство только для чтения.
Попробуйте отойти от части, доступной только для чтения, например, до конца буфера.

Emacs Lisp Manual > elisp.info > Текст > Свойства текстa > Специальные свойства

 Since changing properties counts as modifying the buffer, it is not
 possible to remove a `read-only' property unless you know the
 special trick: bind `inhibit-read-only' to a non-`nil' value and
 then remove the property.  *Note Read Only Buffers::.

чтобы стереть весь буфер независимо:

M-: (let ((inhibit-read-only t)) (erase-buffer)) RET

или удалить все свойства:

(let ((inhibit-read-only t)) (set-text-properties (point-min) (point-max) ()))

Ответ 2

Возможной причиной такого сообщения может быть следующее: вы пытаетесь распечатать что-то по запросу REPL, например CL-US|ER> (+ 1 2). Этот текст в буфере SLIME доступен только для чтения. Обратите внимание на пробел после >, это часть приглашения.

Ответ 3

Я не могу понять, почему у вас возникли нежелательные текстовые свойства только для чтения, но я иногда сталкиваюсь с подобными ситуациями и поэтому могу найти следующую команду полезной.

Выберите интересующую область (или C-x h для всего буфера) и запустите M-x set-region-writeable, чтобы удалить текстовые свойства только для чтения.

(defun set-region-writeable (begin end)
  "Removes the read-only text property from the marked region."
  ;; See http://stackoverflow.com/questions/7410125
  (interactive "r")
  (let ((modified (buffer-modified-p))
        (inhibit-read-only t))
    (remove-text-properties begin end '(read-only t))
    (set-buffer-modified-p modified)))

Ответ 4

Комбинация клавиш C-x C-q - это привязка по умолчанию для read-only-mode, которую можно включить или отключить с помощью этого ярлыка. Описывая, что последовательность клавиш быстрого доступа с C-h k C-x C-q дает следующую распечатку буфера:

C-x C-q runs the command read-only-mode, which is an interactive
compiled Lisp function in `simple.el'.

It is bound to C-x C-q.

(read-only-mode &optional ARG)

Change whether the current buffer is read-only.
With prefix argument ARG, make the buffer read-only if ARG is
positive, otherwise make it writable.  If buffer is read-only
and `view-read-only' is non-nil, enter view mode.

Do not call this from a Lisp program unless you really intend to
do the same thing as the C-x C-q command, including
possibly enabling or disabling View mode.  Also, note that this
command works by setting the variable `buffer-read-only', which
does not affect read-only regions caused by text properties.  To
ignore read-only status in a Lisp program (whether due to text
properties or buffer state), bind `inhibit-read-only' temporarily
to a non-nil value.

Таким образом, можно использовать другой способ: M-x read-only-mode RET

Ответ 5

Вы можете изменить режим только для чтения, выполнив: M-xtoggle-read-onlyRET (другими словами нажмите enter)

Ответ 6

Я решил это, сначала открыв два кадра, один с открытым файлом .lisp, а другой с slime-repl.

Из фрейма с .lisp файлом я применил C-c C-j в строке кода (например, (+ 1 2)).

Это скопировало строку кода до slime-repl и оценило его.

Это также как-то решило проблему с проблемой "текст только для чтения".

Ответ 7

Попробуйте ввести C-c M-o RET (он очистит консоль и добавит новую строку), у меня была проблема, похожая на вашу, и она исправила ее.