LINUX.ORG.RU

Сообщения Kostafey

 

Жизнь после Emacs

Краткое содержание предыдущих серий: 12 лет на Emacs.

Нынешняя ситуация: использовал Emacs для работы со Scala (через lsp-сервер Metals). Проблема известная - подвисание UI. Большую часть lsp-ui я уже отключил, стало возможно как-то работать, но все же буквы появляются из-под клавиш весьма не спеша… Частично решается только апгрейдом железа.

Есть попытки как-то решить проблему - прикрутить Webrender использующий GPU, но пока в очень экспериментальном виде:

А посему решил наконец вылезти из бочки и попробовать VSCode. Пока я на нем всего пару дней, надеюсь, дальше дело пойдет лучше.

Сразу ремарка по поводу Neovim: насколько я понял, реактивный UI они сделали, но я не люблю режимы. Идея повесить все хоткеи на один режим и расширять редактор в Lua была, но насколько это будет натурально: использование Vim-а без режимов?

Light Table, насколько я понял, более-менее заброшен. Впрочем, с их подходом Data-driven configuration, они могли использовать для конфигурации условный FortranJS вместо ClojureScript (надеюсь, понятно почему :)).

Собственно к VSCode. В продолжении тем:

Вот, например, по первой ссылке автор испытывает только положительные чувства от смены Emacs на VSCode. У меня это такого дикого и безоговорочного энтузиазма не вызывает.

Да, конечно, проблемы рендеринга UI там нет как класса. V8 js engine сам по себе демонстрирует шикарную производительность, уже только он шустрее движка Elisp, UI в своем потоке, а главное он наконец-то рендерится GPU, а не CPU. Ок, замечательно, я переместился в будущее: из середины 70-х в наши дни.

Но проблема в том, что в нем нет… Emacs, нет REPL (и я сейчас не про этакую интерактивную командную строку говорю, а про то, что в Emacs все есть REPL - встаешь курсором (точкой) на любом куске кода, выполняешь его, получаешь результат и мгновенно меняешь поведение редактора). И нет s-выражений.

Взять конфигурацию. Вот я редактирую свою тему. Что-то поменял. В Emacs я просто исполняю файл с темой и все - все изменения мгновенно отображаются. Тут у нас что: https://stackoverflow.com/questions/44390765/vscode-how-to-reload-theme-after-editing-its-style Нужно перезагружать редактор? Да ладно? Вообще-то после Reload Window lsp-server тоже перезапускается, ага заново частично компилирует, индексирует.

Далее, хочу M-x function-name. Ну казалось бы, в VSCode такое точно есть. А вот и нет. Хочешь вызвать функцию - назначь ей или алиас или кейбиндинг: https://stackoverflow.com/questions/58382100/triggering-commands-by-their-command-id-or-a-custom-string-alias

Теперь что до файла конфига. Да, изменения в конфиге подхватываются на лету, но для случая симлинков (вот хочется мне конфигурацию в одном месте держать) это работает только если открыт симлинк, а не файл, а не на который он ссылается, а значит гитовый плагин не видит диффа. Ну ладно, допустим. А если у тебя открыто несколько… фреймов, хорошо, окон редактора, например для случая 2-х мониторов, то нужно в каждом открывать конфиг, типа «изменять» его и сохранять, чтобы изменения подхватились. Ну ладно, хоть что-то. Аналогично с темой.

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

К слову, пример плагина на ClojureScript внушает некоторый оптимизм на тему дальнейших возможностей расширений и кастомизаций «как в Emacs»: https://github.com/Saikyun/cljs-vscode-extension-hello-world Правда, насколько я понимаю, ClojureScript по-прежнему не может обойтись без Java, т.к. компиляция макросов происходит в JVM. Проект Lumo выглядит заброшенным. Альтернативы есть?

Вообще, я не сильно люблю статическое созерцание кода. Гораздо удобнее, когда код можно изменять на лету, вылепливая из него что-то как из пластилина и тут же получая результат. И речь не только о собственно конфигурации Emacs. На самом деле, в Emacs, я мог, например, в текстовом выхлопе какого-то генератора вертикально выделить столбик, скопировать его, поставить вверху и внизу скобочку, нажать C-x C-e и получить сумму:

(+ 23,32
-7,04
135,7
-15,22
8) => 144,76

Все. Никуда не выходя из Emacs. В VSCode что? Есть некий плагин eval. Судя по времени выполнения, он запускает nodejs всякий раз. Словом, к возможности тут же вычислить любой объект как код на Elisp привыкаешь очень сильно.

Смотрим на расширения. О культуре разработки, сложившейся в Emacs комьюнити я ужи писал на лоре, но на этот вопрос по прежнему не обращают внимания. Пакет Emacs для того попасть с MELPA проходит код ревью. В итоге, мы имеем докстринги к большинству функций, подробные readme. Да и даже без код ревью люди просто привыкли так писать, это уже стало хорошей традицией. Что в VSCode? Даже у некоторых более-менее популярных пакетов нет ни одного комментария, ни одной докстроки к функции в исходном коде. В менее популярныйх пакетах - спасибо, если есть readame, а от бывает и его нет.

P.S. Пока складывается впечатление, что я снял свой старенький экзоскелет и взял вместо него каменный топор. Да, экзоскелет был старенький, ржавый, и краска облезла, и скрипел весь, и гидравлика протекала, и проводка искрила и коротила, местами была обильно замотана изолентой, некоторые болты были жевачкой прилеплены, чтобы не отвалились и потерялись, некоторые вообще приварены. Там что-то приходилось периодически чинить, подкручивать, приклеивать ;). Но в нем можно было и дом перепрыгнуть и машину поднять и нашествие пришельцев, при необходимости, остановить. А каменный топор, да из обсидиана, да со стразиками, да с удобной сенсорной панелью на рукоятке, да с авианосцем в комплекте, но все же не то. Вот теперь сижу и думаю как его доработать напильником до звездолета.

P.P.S. Да, я понимаю, что весь мир не обязан быть Emacs-ом, но ведь люди уже переходили из Emacs и не вчера, наверняка эти проблемы уже как-то решились. Какие-то сушествуют решения, рекоммендации, комьюнити?

P.P.P.S Вот так и представляю себе группу психологической поддержки, тех кто ушел из Emacs. Захожу в комнату, там в форме круга расставлены стулья, на них сидят такие же бывшие емаксеры. Я говорю: «Привет, меня зовут Костя и я перестал пользоваться Emacs.» и все такие: «Привет, Костя». :))))))))

 , , , ,

Kostafey ()

Русские буквы в GNU Emacs 27.1

Добрался обновить Emacs на Винде. Результат - некорректное отображение русских букв.

Картинка: https://drive.google.com/file/d/1LLSfQfQPNds5hgj3wf9OXgeFcwbX-JmC/view?usp=sharing

С emacs -q аналогично. В 26.x все было ок. Шрифты юникод поддерживают, но на всякий случай попробовал разные - аналогично.

Кто сталкивался, как чинить?

 ,

Kostafey ()

Выбор простого дистрибутива для использования в течение многих лет

Собственно идея в том, чтобы выбрать такой дистрибутив, которым можно будет пользоваться действительно долго, но что бы при этом он оставался сравнительно простым в обслуживании. Сейчас на компе у меня стоит Debian, ему уже много лет. Это почти хорошо, но есть проблемы. Например, я не делаю Dist-upgrade, т.к. обычно это приводит к тому, что существенная часть ранее работавшего софта отваливается - приходится просто ставить новый дистрибутив с нуля. Это тоже не такая проблема, т.к. конфиги сохраняются, но все же… Поэтому, дабы продлить срок жизни текущей инсталляции, я просто ставлю софт тот который можно через dpkg -i или checkinstall, который так не получается, что через make install или просто в /opt. Но и у такого подхода есть предел - рано или поздно, но новый софт начинает требовать зависимостей, которые сложно или невозможно установить вручную, а пакетный менеджер ссылается на недостаточно новые версии пакетов. Кроме того, со временем это только снижает maintainability и уменьшает вероятность успешного Dist-upgrade.

Казалось бы, очевидный выбор - rolling-based дистрибутив. Пробовал Arch - ничего не понял: настройка всего того же, что было в Debain занимает на порядок больше времени, но это ладно, Youtube в Хроме хочет звук через Alsa, а вот Скайпу подавай Pulseaudio (или наоборот - не помню уже). Ок настраиваем так, что бы при запуске Скайпа одно включалось, другое выключалось. Здорово. 3 дня пользуюсь. Прилетают обновления - звук пропадает вообще весь.

Чем больше я читаю про Gentoo, тем больше у меня понимания, что в обслуживании он еще более трудоемкий, чем Arch.

Беглый просмотр того, что есть в Nix показал, что там далеко не всегда можно так же легко и просто найти готовый пакет как, скажем, в Debian или Arch.

Подскажите в какую сторону копать? Нужен простой в обслуживании Linux, который может работать с новым софтом в течение многих лет.

 , , , ,

Kostafey ()

Веб приложение на Common Lisp

Расскажите на чем сегодня прогрессивное человечество пишет динамические опердени для веба на Common Lisp. Гугл выдает кучу веб-серверов, библиотек и фреймворков разной системы закваски и поддерживаемости. Планируется отдача статического контента + динамика через рест. Посоветуйте стек библиотек.

 ,

Kostafey ()

Посоветуйте легковесный браузер

Посоветуйте легковесный браузер, графический. Кроме шуток. Памяти мало. Хром прекрасен, но оно памяти съедает вагон. Лиса туда же. Всякие lynx, elinks для работы не годятся. Шутки про память тоже не интересно, все что может в принципе поддерживаться материнкой уже установлено.

Поставил midori - оно гуглом не поддерживается, старый мол. Ну и так, ошибки бывают по мелочи.

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

 , ,

Kostafey ()

Не работает tabbedex:kill_tab в urxvt-unicode

~/.Xresources:

...
URxvt.perl-lib:                ~/.urxvt/ext/
URxvt*perl-ext-common:         fullscreen,default,clipboard,keyboard-select,tabbed
...
URxvt.keysym.Control-w:        perl:tabbedex:kill_tab

> xrdb ~/.Xresources

Расширение tabbedex пробовал искаробочное (rxvt-unicode (urxvt) v9.20 - released: 2014-04-26) и какой-то форк в ~/.urxvt/ext/ добавлял.

Control-w не работает, Control-d работает. ЧЯНТД?

 , ,

Kostafey ()

Emacs vs Atom по производительности

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

Соответственно вопрос, стоит ли смотреть на что-то более хипстерское, молодежное, современное, типа Atom? Не получится ли так, что освоив его, накачав необходимых расширений, написав свои расширения и конфиги получишь тормоза еще большие чем в Emacs?

Перемещено tailgunner из development

 ,

Kostafey ()

Зависание CUA в Emacs

Если некоторое время работать в Emacs (с включенным CUA), то через некоторое время CUA начинает тормозить (при любом значении cua-prefix-override-inhibit-delay). А потом и вовсе повисать.

Выделил текст, нажал C-c. Текст не скопировался, выделение не исчезло. Т.е. Emacs находится в режиме бесконечного ожидания override key. Если нажать, например, любую клавишу движения курсора, то произойдет все необходимое: текст скопируется, выделение исчезнет, курсор переместится. Это ужасно раздражает.

Пробовать искать такое поведение с emacs -Q нет смысла, т.к. проблема возникает случайно и непредсказуемо через несколько минут/часов (как повезет) использования emacs. Отключать различные режимы после того, как такие зависания начались (искать виновного) тоже бесполезно - проблема сохраняется после отключения всех кастомных режимов.

Сейчас для меня это блокирующая функциональность более широкого использования Emacs.

Кто-нибудь сталкивался? Как дебажить? Если, что вполне возможно, проблема в .emacs/одном-из-расширений, то как найти сбойный модуль/фрагмент кода? Автоматическое редактирование (небольшой тест набросал: https://gist.github.com/kostafey/8594475) не приводит к появлению ошибки, только ручное редактирование.

UPD: Emacs 24.3.1. OS: обе Windows и Linux (одинаковая картина и там и там).

 , ,

Kostafey ()

emacs flymake/flycheck для java. Что сейчас актуально?

Есть какие-нибудь современные средства проверки кода на лету в emacs для java?

JDEE & malabar-mode не поддерживаются.
Emacs вики читал, но там тоже не шибко все актуально. И потом, это получается нужно только make-ом запускать, т.е. make-файл для java-проекта должен быть? По-другому нельзя?

Сейчас вроде как flymake вообще не слишком активно развивается, а flycheck - это стильно, молодежно, современно. Кто-то даже flycheck-java пытается пилить. Это конечно выглядит как кустарное решение, но лучше чем ничего и, возможно даже (еще не пробовал), работает.

Словом, просьба сориентировать меня, если кто в курсе, в какую сторону копать.

И да, я в курсе, что emacs с java - это ССЗБ, вещества и т.д. и т.п., если кто-то хотел меня удивить ;).
Многое не работает - да, но многое и работает, и хорошо работает.

 , ,

Kostafey ()

Инициализация property list

Инициализирую plist как nil.

(setq pl nil)
(lax-plist-put pl "a" '(1 2))
pl
pl - nil
Т.е. элемент не добавился.

Инициализирую plist как (nil nil).

(setq pl '(nil nil))
(lax-plist-put pl "a" '(1 2))
pl
pl - (nil nil «a» (1 2))

Я понимаю, что nil - не совсем лист (хотя формально равно '()) и такой код не работает:

(setq pl nil)
(add-to-list pl '("a" '(1 2)))

Так как можно создать plist чтобы потом наполнять его, не делая при этом предположений относительно того есть там элементы или нет?

 ,

Kostafey ()

Emacs, Aspell и одновременное использование словарей

Ранее уже обсуждался этот вопрос

http://www.linux.org.ru/view-message.jsp?msgid=2446507

однако, я так и не смог понять как настроить одновременную работу словарей.

Версии ПО:

  • GNU Emacs 23.1.50.1 (i386-mingw-nt5.1.2600)
  • International Ispell Version 3.1.20 (but really Aspell 0.50.3)

Фрагмент .emacs:

(setq-default ispell-program-name "aspell")
(setq ispell-dictionary "english")
(setq ispell-local-dictionary "russian")
(setq flyspell-default-dictionary "russian")

При таких настройках

M-x ispell-buffer проверяет правильно только русский текст английский текст распознается как ошибка, варианты замены не предлагаются.

flyspell-mode проверяет русский текст, английский игнорирует.

В упомянутой выше ветке предлагают использовать ispell-multi

http://www.dur.ac.uk/p.j.heslin/Software/Emacs/Download/ispell-multi.el

Располагаем файл ispell-multi.el в load-path

Фрагмент комментариев из ispell-multi.el:

;; If all you want to do is to change the behavior of ispell so that
;; it uses multiple ispell processes for different buffers, then
;; (require 'ispell-multi) is all you need to do.

Добавление этой (require 'ispell-multi) строчку в конце фрагмента .emacs:

(setq-default ispell-program-name "aspell")
(setq ispell-dictionary "english")
(setq ispell-local-dictionary "russian")
(setq flyspell-default-dictionary "russian")
(require 'ispell-multi)

не изменяет поведение, добавление (require 'ispell-multi) в начале фрагмента .emacs приводит к следующим ошибкам:

M-x ispell-buffer

Starting new Ispell process [english] ...
apply: Creating process pipe: no error

M-x flyspell-mode

Starting new Ispell process [english] ...
Enabling Flyspell mode gave an error

Подскажите решение.

Kostafey ()

RSS подписка на новые темы