LINUX.ORG.RU

emacs and hide-show


0

1

Вот такая вот проблема -

Debugger entered--Lisp error: (error "Fundamental Mode doesn't support Hideshow Minor Mode")
  signal(error ("Fundamental Mode doesn't support Hideshow Minor Mode"))
  error("%s Mode doesn't support Hideshow Minor Mode" "Fundamental")
  hs-grok-mode-type()
  hs-minor-mode()
  eval-buffer(#<buffer  *load*> nil "/home/pscat/.emacs.d/init.el" nil t)  ; Reading at buffer position 3906
  load-with-code-conversion("/home/pscat/.emacs.d/init.el" "/home/pscat/.emacs.d/init.el" t t)
  load("/home/pscat/.emacs.d/init" t t)
кто нибудь может сказать как давно это произошло и как решить?

Видимо чего-то в fundamental-mode ему не хватает для счастья. Чего именно — сказать не могу, надо смотреть код функций hs-minor-mode и hs-grok-mode-type.

Sectoid ★★★★★
()

Это из-за того, что для fundamental-mode у него не определены правила. Правила для каждого режима определяются в переменной hs-special-modes-alist.

Zubok ★★★★★
()

А не определены они там по понятной причине: fundamental mode — это режим «ни о чем». Это базовый major mode, который не связан с каким-то конкретным языком программирования или языком разметки, поэтому никаких блоков там как бы и не полагается. Однако ты можешь сам решить, что ты будешь считать блоком в этом режиме.

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

почему-то раньше, с этим же(или почти с этим же(ничего связанного с hs и запускаемыми режимами я не менял, вроде)) инит-файлом, всё работало. Я очень не хотел бы добиваться того, что раньше было из коробки, сложным путём. Может есть простой путь?

pseudo-cat ★★★
() автор топика
Ответ на: комментарий от pseudo-cat

И как же оно работало? Что оно начинало считать за блоки в произвольном текстовом файле, загруженном в fundamental? А почему именно такие правила, а не другие? У меня в Emacs 22 тоже не работает с fundamental. А вдруг это заработало в какой-то версии, потому что это был баг, который исправили? :)

Zubok ★★★★★
()
Ответ на: комментарий от pseudo-cat

Другими словами, совершенно не ясно, должно оно было работать в произвольном режиме по задумке авторов или нет.

Zubok ★★★★★
()
Ответ на: комментарий от pseudo-cat

Короче, ему хочется, чтобы переменные comment-start и comment-end были забиндены. Если они не забиндены, то режим не включается.

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

ахренеть, какой же раньше режим этим занимался.

должно оно было работать в произвольном режиме по задумке авторов или нет.

ну я так понимаю, должно

http://www.emacswiki.org/emacs/HideShow

HideShow will recognize the blocks as delimited by braces.

добавил

(defvar hs-special-modes-alist
  (mapcar 'purecopy
	  '((lisp-mode "(" ")" "" nil nil))))

теперь работает в емакс-лисп, но не в CL. CL использует не lisp-mode что ли?

pseudo-cat ★★★
() автор топика
Ответ на: комментарий от pseudo-cat

>ахренеть, какой же раньше режим этим занимался.

В комментариях или в описании (где, я уже не помню) к hideshow было написано, что когда тыяё пытаешься включить hideshow, то он (так прямо и написано) по какой-то одному ему ведомой эвристике подбирает правила на основе major-режима, в котором его включают. Если подбор не удался, то он отказывает во включении и тогда правило надо написать явно. Насколько я понимаю, что comment-start и comment-end — это первое, что hideshow проверяет. Если эти локальные для буфера переменные не определены, то он считает, что это какой-то режим, не связанный с языками программирования и структурированным кодом. В fundamental они тончо не определены. А дальше он уже смотрит правила или применяет какие-то умолчания. Впрочем, сейчас поищу, где это написано.

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

Ага, это в комментарияз к hideshow.el:

;; Normally, hideshow tries to determine appropriate values for block
;; and comment definitions by examining the buffer's major mode.  If
;; there are problems, hideshow will not activate and in that case you
;; may wish to override hideshow's heuristics by adding an entry to
;; variable `hs-special-modes-alist'.  
Zubok ★★★★★
()
Ответ на: комментарий от pseudo-cat

>теперь работает в емакс-лисп, но не в CL. CL использует не lisp-mode что ли?

Пардон, но в и в emacs-lisp и в CL все должно работать без правил. У меня из коробки работает.

Zubok ★★★★★
()
Ответ на: комментарий от pseudo-cat

Вот, кстати, кусок этого кода, который и выдает тебе ошибку, если переменные comment-start и comment-end не определены.

(defun hs-grok-mode-type ()
  "Set up hideshow variables for new buffers.
If `hs-special-modes-alist' has information associated with the
current buffer's major mode, use that.
Otherwise, guess start, end and `comment-start' regexps; `forward-sexp'
function; and adjust-block-beginning function."
  (if (and (boundp 'comment-start)
           (boundp 'comment-end)
           comment-start comment-end)
      (let* ((lookup (assoc major-mode hs-special-modes-alist))
              hs-adjust-block-beginning (nth 5 lookup)))
    ...
    ...
    ...
    (progn
      (setq hs-minor-mode nil)
      (error "%s Mode doesn't support Hideshow Minor Mode" mode-name))))
Zubok ★★★★★
()
Ответ на: комментарий от Zubok

тогда я попробовал сначала подгрузить лисп-режим, а потом уже хайд-шоу и всё зарабатоло)

в начале init.el:

(require 'lisp-mode)
(lisp-mode)

pseudo-cat ★★★
() автор топика

> как решить?

Может, пора начать пользоваться нормальным ПО, а не студенческими наколенными поделками, написанными на окаменелом говне мамонта aka LISP?

anonymous
()
Ответ на: комментарий от pseudo-cat

> есть что-то удобнее емакса? к примеру

Удобнее для чего? Для дёрганья себе ануса? Доооо, емацс тут вне конкуренции.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.