LINUX.ORG.RU

Если вы пробовали вкатиться в GNU Emacs, расскажите, что пошло не так

 


3

6

Всем привет!

Часто вижу на форумах мнение, что Emacs это что-то старое, кривое и ненужное. Пожалуйста, напишите в комментариях, как вы пытались вкатиться в Emacs, и что пошло не так. Это поможет мне улучшить свою книгу про Emacs и даст идеи для постов в Telegram-канал.

Ответ на: комментарий от Mischutka

Есть старый колхозный метод (можно автоматизировать, но по первости полезнее руками):

  1. Комментируешь половину init.el.
  2. Если ошибки нет, значит она в закоментированном сегменте. 2.а) Откомментируешь половину закомментированного и повторяешь загрузку.
  3. Если ошибка осталась, значит она в некомментированном сегменте. Тогда меняешь комментированное с некомментированным местами.

Рано или поздно, после нескольких итераций вы найдёте блок кода, который вызывает ошибку.

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

Советую не тыкаться вслепую ковыряясь в чужих конфигах, а настроить самому, по какому-нибудь видео туториалу на ютубе, там их полно. Заодно понимание придет. Пока что все проблемы это банальные опечатки + плюс конфиг написанный не для той версии.

Когда разберешься уже можно из чужих конфигов подергать себе удобные фичи.

Ну и не советую пользоваться версией из дистрибутива, лучше собрать последнюю самому ну или бинарную сборку скачать с сайта емакса

masa ★★★
()
Последнее исправление: masa (всего исправлений: 1)
Ответ на: комментарий от masa

Видео туториал нагляднее, имхо.

Нет. Они хуже во всём, кроме возможности показывать графические эффекты в динамике.

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

Там челы помимо построчного разбора конфига еще рассказывают и показывают какие кнопки нажимают и как работают, что весьма полезно.

Метод же с конфигом у человека пока не прокатил, уже неделю не работает.

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

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

Видео может быть хорошо как иллюстрация к книге, как показ чего-то, что можно осмыслить в динамике. Вот мне бы не помешало видео, как люди организовывают своё рабочее пространство с помощью тайловых оконных менеджеров. Потому, что умом я понимаю, что штука офигенно крутая, и даже знаю, где почитать про решение каких-то конкретных проблем в awesome, в i3 и др. А вот во что это должно вылиться в итоге, как люди этим уже настроенным пользуются – вот про это хотелось бы посмотреть видео, вот тут видео было бы нагляднее.

Но ставить видео вперёд книги – этого мне не понять, видимо, уже никогда. Книгу можно читать в любом порядке, перечитывать любой нужный кусок, вычленять проблемные вопросы, легко цитировать без ссылок на ютуб, чтобы не мешать другим, не надо надевать наушники… Нет. То ли я тупой, то ли…

Метод же с конфигом у человека пока не прокатил, уже неделю не работает.

Есть подозрение, что видеоруководство в этом случае тем более не поможет. Но сильно не настаиваю. Тем более, тыкаться надо не «вслепую», как ты выше написал, а с пониманием, что это делает. Уж нагуглить семантику конструкции, прочтя её название в чужом конфиге, точно можно.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 5)
Ответ на: комментарий от hobbit

меня вообще огорчает эта тенденция — «посмотри вот это видиво», пока кто-то там на этом видео рассусоливает и наливает воды, можно в книге параграф прочитать и осмыслить, ну ёлки-палки, доколе

err
()
Последнее исправление: err (всего исправлений: 1)
Ответ на: комментарий от hobbit

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

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

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

Вот еще что подумал, в любых учебных заведениях обучение ведется именно на пальцах, на примерах, на доске.

Именно в визуальном формате тебе разжевывают основы. Никто не говорит - прочитайте книгу такую-то главу - все поймете.

Книга это дополнение, хорошо систематизированное и дающее сжатую информацию. По книге читать ты не научишься. Так что аудио-визуальное обучение в самом начале - лучшее что может быть.

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

полностью согласен, как говорится — «покажи как и я сделаю».

тут вопрос другого порядка, раз уж ты пытаешься самостоятельно чему-то научиться, то гораздо эффективней это делать на текстовой информации, как hobbit уже сказал ты всегда можешь легко вернуться к прочитанному, сделать закладку и тд. видео формат на мой взгляд годен в основном для развлечения, ну или если ты уже в теме.

это полезно, не спорю, когда ты имеешь понимание о предмете, а изучать какой-то инструмент, в данном случае емакс(боже, этот монстр давно должен был кануть в лету… серьезно? чтобы пользоваться имаксом нужен конфиг на почти тыщу строк, спасибо :D) вообще не продуктивно.

err
()
Последнее исправление: err (всего исправлений: 2)
Ответ на: комментарий от masa

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

err
()
Последнее исправление: err (всего исправлений: 1)
Ответ на: комментарий от hobbit

нагуглить семантику конструкции, прочтя её название в чужом конфиге, точно можно

Даже гуглить не надо, в Емаксе всё документировано. Надо только освоить пару команд для просмотра этой документации.

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

У видеоуроков есть своё место в жизни, главным образом в области манипуляции объектами реального мира. Как выполнять физкультурное упражнение, вязать морские узлы, работать паяльником — в формате показа выходит гораздо нагляднее. Во всём остальном, текст и графика работате лучше. Видео — наилучший способ растянуть на 20 минут то, что я сам бы прочёл за три, оно не индексируется и не ищется, невозможно управлять темпом потребления информации в стиле «этот параграф просто проглядеть, а над этим абзацем внимательно подумать». И, хотя это и не относится к самому формату, но увы, всречается повсеместно: видеоуроки часто очень плохо структурированы.

Может быть уроки Рус.Яза и Лит-ры нас глубоко и травмировали в детсве, но как-то им удалось привить понимание, что у текста должна быть внутренняя логика, структура, завязка-развитие-кульминация и т.п. В видео же часто этим манкируют и вместо краткого логичного текста представляют нам бесформенную болтовню формата «сидят мужики у костра и байки травят». Если б автора прописал сценарий (и выкинул оттудова всё лишнее) прежде чем писать видео, было бы гораздо лучше. Однако, если б такой сценарий существовал, его бы можно было сразу опубликовать в виде статьи без дурацкого видео-посредника.

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

Проблема в customize-set-variable. В отличие от setq она не экранирует свой первый аргумент, поэтому если переменная custom-file содержит nil, то

(customize-set-variable custom-file
        (expand-file-name
         (convert-standard-filename "custom.el")
         user-emacs-directory))

сводится к

(customize-set-variable nil "/home/user/.emacs.d/cutom.e")

что очевидно лишено смысла.

Также customize-set-variable не поддерживает множественные присваивания.

См. diff с рабочей (по крайней мере у меня) версией.

@dunmaksim.

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

customize-set-variable это функция, т.е. она вычисляет значения своих аргументов и custom-file вычислится либо в строку, либо в nil, в любом случае попытка присвоить какое-то значение обречена на неудачу.

ELISP> (setq x nil)
nil

ELISP> x
nil

ELISP> (customize-set-variable 'x 4)
4
 (#o4, #x4, ?\C-d)
ELISP> x
4
 (#o4, #x4, ?\C-d)
ELISP> (customize-set-variable x 14)
*** Eval error ***  Wrong type argument: symbolp, 4

И это ещё хорошо, могли бы и испанскую инквизицию вызвать поинтересоваться, зачем мы захотели иметь число 4 со значением 14.

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

P.S. или так

(defmacro customize-set-variableq (var exp)
  `(customize-set-variable ',var ,exp))

ELISP> (customize-set-variableq x (+ 1 2))
3
 (#o3, #x3, ?\C-c)
ELISP> x
3
 (#o3, #x3, ?\C-c)
ugoday ★★★★★
()
Ответ на: комментарий от dyonya

Есть guile-emacs, его время от времени реанимируют. Работает хуже обычного.

ugoday ★★★★★
()

Ещё такой вопрос возник: почему интерфейс Vim’а переведён на различные языки, а интерфейс Emacs’а нет?

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

Что такое интерфейс Emacs? Не настаиваю на истинности/единственности своего подхода, но я всегда делаю

(menu-bar-mode -1)
(toggle-scroll-bar -1)
(tool-bar-mode -1)

для того, чтобы освободить место от лишнего. После чего «интерфейс Emacs» сводится к клавиатурным аккордам и интерактивным функциям. Переводить которые не имеет смысла.

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

В графической версии Vim’а тоже можно удалить панели, но тем не менее его интерфейс перевели на различные языки.

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

Повторюсь, я не настаиваю на едниственноистинности своего учения подхода, но с моей точки зрения, ненужно, переведённое на разные языке, становится ненужным на разных языках.

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

Потому что vim это монолитный текстовый редактор, а емакс это интерпретатор elisp c набором скриптов от разных пользователей.

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

почему интерфейс Vim’а переведён на различные языки, а интерфейс Emacs’а нет?

Потому что ты его не перевёл.

Ну а для Vim’а кто-то потратил силы на внедрение поддержки различных языков и кто-то (скорее всего другие люди) осуществили непосредственно перевод на интересующие их языки. Для Emacs’а этого никто не сделал. Вот почему. Всё как обычно.

Я тут согласен с @ugoday, впрочем — перевод интерфейса нафиг не нужен ни там ни там.

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

Нет. Даже главу про локализацию ввода переписал. Раньше рекомендовал reverse-im.el, потом пришёл к мысли что даже это не нужно.

dunmaksim
() автор топика

Жизнь не направила.

Впервые познакомился с nano, удивляюсь, как это было не последнее знакомство с linux. Потом был vi, не мог из него выйти, но когда ознакомился с концепцией – сразу принял. Сейчас neovim со всеми плагинами, автоматизацией и интеграцией с llm. На vim-like у меня переведён и tmux и zsh.

Нужно заметить, у vi есть неоспоримое преимущество наличия почти везде.

mamina_radost
()
Последнее исправление: mamina_radost (всего исправлений: 2)

Пошла на^Wне так пианина емаксовая.

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

Если начать с малого: поставлена задача русифицировать заставку редактора Emacs.

С чего нужно начать её решение?

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

Можно поставить ии агента типа opencode, натравить его на папку с исходниками емакса и сказать русифицируй заставку.

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

Да, можно весь этот экран переписать, он хранится в одной функции в лиспе, приду домой, скину точно где

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

Что-то не хочется впадать в зависимость от ИИ. Есть ещё способы?

Есть — использовать свой, естественный интеллект. Третьего не дано.

Нет, ну можно ещё попробовать сделать так, чтобы ЛОРовцы за тебя сделали 90% работы — разобрались, что где, пальцем ткнули и объяснили, а тебе осталось только слова и предложения с языка на язык перевести, но что-то мне кажется, долго этим заниматься никто не будет.

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

Используй Dashboard:

;; 📦 DASHBOARD
;; https://github.com/emacs-dashboard/emacs-dashboard
(use-package dashboard
  :pin "melpa-stable"
  :ensure t
  :custom
  (dashboard-banner-logo-title "Добро пожаловать!")
  (dashboard-center-content t)
  (dashboard-items '((projects . 10)
                     (recents . 15)
                     (bookmarks . 5)))
  (dashboard-item-names '(("Agenda for the coming week:" . "Список дел на следующую неделю:")
                          ("Agenda for today:" . "Список дел на сегодня:")
                          ("Bookmarks:" . "Закладки:")
                          ("Projects:" . "Проекты:")
                          ("Recent Files:" . "Последние открытые файлы:")
                          ("Registers:" . "Регистры:")))
  (dashboard-icon-type 'nerd-icons "Современные иконки.")
  (dashboard-display-icons-p t "Показывать иконки.")
  (dashboard-projects-backend 'projectile "Используем продвинутый менеджер проектов.")
  (dashboard-remove-missing-entry t "Не показывать битые ссылки.")
  (dashboard-set-heading-icons t)
  (dashboard-set-file-icons t)
  (initial-buffer-choice (lambda ()(get-buffer-create dashboard-buffer-name)))
  :config (dashboard-setup-startup-hook))

Я уже за тебя всё сделал, просто вставь в init.el и выполни.

dunmaksim
() автор топика
Последнее исправление: dunmaksim (всего исправлений: 1)
Ответ на: комментарий от Mischutka

Функция называется fancy-startup-screen, посмотреть ее исходник можно M-x describe-function RET fancy-startup-screen, она берет данные из переменной fancy-startup-text (M-x describe-variable RET fancy-startup-text) ее можно переопределить через (setq fancy-startup-text ...) но править все связанное с загрузкой надо до загрузки самого gui, в файле ~/.emacs.d/early-init.el

Лично я просто заменил всю функцию на такое:

(defun fancy-startup-screen (&optional concise)
  "Display fancy startup screen.
If CONCISE is non-nil, display a concise version of the
splash screen in another window."
  (let ((splash-buffer (get-buffer-create "*Welcome*")))
    (with-current-buffer splash-buffer
      (let* ((inhibit-read-only t)
             (image (create-image "splash.svg"))
             (size (image-size image))
             (height (cdr size))
             (width (car size))
             (top-margin (floor (/ (- (- (window-height) height) 8) 2)))
             (left-margin (floor (/ (- (window-width) width) 2)))
             (prompt-title "Welcome back, commander"))
        (erase-buffer)
        (setq default-directory command-line-default-directory)
        (make-local-variable 'startup-screen-inhibit-startup-screen)
        (if pure-space-overflow
            (insert pure-space-overflow-message))
        (unless concise
          (setq mode-line-format nil)
          (goto-char (point-min))
          (insert (make-string top-margin ?\n ))
          (insert (make-string left-margin ?\ ))
          (insert-image image)
          (insert "\n\n\n")
          (insert (make-string (floor (/ (- (window-width) (string-width prompt-title)) 2)) ?\ ))
          (insert prompt-title)))
      (use-local-map splash-screen-keymap)
      (setq buffer-read-only t)
      (setq cursor-type nil)
      (local-set-key (kbd "q") 'kill-current-buffer)
      (set-buffer-modified-p nil)
      (if (and view-read-only (not view-mode))
          (view-mode-enter nil 'kill-buffer)))
    (if concise
        (progn
          (display-buffer splash-buffer)
          ;; If the splash screen is in a split window, fit it.
          (let ((window (get-buffer-window splash-buffer t)))
            (or (null window)
                (eq window (selected-window))
                (eq window (next-window window))
                (fit-window-to-buffer window))))
      (switch-to-buffer splash-buffer))))

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

masa ★★★
()
Последнее исправление: masa (всего исправлений: 2)
Ответ на: комментарий от Mischutka

Емакс это набор скриптов и тексты там захарджкожены в этих скриптах, так что только править / переопределять переменные и функции.

Правильным подходом наверно было бы сделать какую-то обертку для строк, которая бы работала по принципу gettext, и обернуть все тексты в нее, но это практически невозможно, врдяли кто-то этим будет заниматься.

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

В 1976 появился набор макросов для редактора TECO, а не собственно текстовый редактор Emacs.

И что с того, что Emacs появился раньше gettext?

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

Это значит, что при создании Emacs существование gettext не учитывалось, а при появлении — emacs уже очень давно существовал, было написано куча кода, множество режимов и пришлось бы это всё переделывать. А лишнюю работу никто не любит. Но вы, конечно, можете создать собственный режим с поддержкой gettext и показать всем как надо.

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

В 1976 появился набор макросов для редактора TECO, а не собственно текстовый редактор Emacs. И что с того, что Emacs появился раньше gettext?

Еще раз, Emacs это интрепретатор Emacs Lisp, а все остальное это скрипты на этом языке. Просить переводить емакс на русский это как переводить какой-нибудь перл или питон на русский. Функционал редактирования текста, всякие менюшки и кнопочки это скрипты.

masa ★★★
()
Последнее исправление: masa (всего исправлений: 3)

ЯННП для чего переводить Emacs? Чтобы что?

lukman
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)