From 0c9304d41e9fabb1a2401146237adf6ef4efb0ff Mon Sep 17 00:00:00 2001 From: Vincent Ambo Date: Sun, 12 Nov 2023 18:30:03 +0300 Subject: feat(tazjin/blog): import blog post on emacs buffer switching thing This was previously only in my Telegram channel, but it might as well be on the blog itself. Change-Id: I301ebeaa4dd1875f3858cee5259a5c689b950790 Reviewed-on: https://cl.tvl.fyi/c/depot/+/10009 Reviewed-by: tazjin Autosubmit: tazjin Tested-by: BuildkiteCI --- users/tazjin/blog/posts.nix | 6 ++++++ users/tazjin/blog/posts/reliably-switch-buffers.md | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 users/tazjin/blog/posts/reliably-switch-buffers.md (limited to 'users/tazjin') diff --git a/users/tazjin/blog/posts.nix b/users/tazjin/blog/posts.nix index fad7513c0608..a95a50d766a2 100644 --- a/users/tazjin/blog/posts.nix +++ b/users/tazjin/blog/posts.nix @@ -1,5 +1,11 @@ # This file defines all the blog posts. [ + { + key = "reliably-switch-buffers"; + title = "Зачем reliably-switch-buffers?"; + content = ./posts/reliably-switch-buffers.md; + date = 1692882000; + } { key = "tvix-eval-talk-2023"; title = "[доклад] tvix-eval, имплементация языка Nix на Rust"; diff --git a/users/tazjin/blog/posts/reliably-switch-buffers.md b/users/tazjin/blog/posts/reliably-switch-buffers.md new file mode 100644 index 000000000000..ec56c4b2d087 --- /dev/null +++ b/users/tazjin/blog/posts/reliably-switch-buffers.md @@ -0,0 +1,18 @@ +Вчера вечером написал некоторые патчи для моего emacs-конфига. Их на самом деле давно уже хотел написать, они решают маленькие проблемы которые мне постоянно мешали. Об одной из проблем я хочу рассказать, потому что она привела к тому, что "порог раздражения" был переступлен. + +Emacs у меня основная часть своей рабочей среды. Он у меня является, конечно, текстовым редактором, но и еще менеджером окон, мэйл-клиентом, чат-клиентом и много другого. + +Внутри emacs есть концепция "буферов", один буфер может быть один открытый файл в текстовом редакторе, один чат на Телеграме, или одно десктопное окно (например, браузер). Навигация между ними осуществляется с помощью команды `switch-to-buffer` (или кое-каких альтернатив, например `ivy-switch-buffer`, `helm-switch-buffer` и так далее). Буфер - на стороне emacs-lisp является объектом с некоторыми полями. Одно из них: `buffer-name`. + +У всех buffer-switch команд есть одинаковая проблема: Они берут список буферов из emacs, показывают *имена* буферов пользователю, и в результате получают выбранное *имя*. Затем они просят emacs открыть буфер с этим именем. + +Кто-то наверно уже понял какая тут проблема. Имени буферов могут меняться, и да, не только могут, но и делают! Например, Телеграм-клиент может показать каличество непрочитанных сообщений в названии, окно с Яндекс Музыкой меняет названия по треку, и так далее. Получается довольно часто такая ситуация, что название меняется при выборе буфера, и `switch-to-buffer` больше не найдет выбранный буфер и просто открывает новый, пустой буфер с старым названием! Когда разработывали эти команды в emacs (да, это совершенно давно, где-то в 70х/80х, большинства нас пока не было тогда!), они никогда не сталкивались с такими ситуациями, и это решение, которое тогда хорошо работало теперь больше просто не адекватно. + +Фикс был не очень сложным. Вместо списка имен буферов создаю alist с названием и *с самим объектом*, и после выбора буфера с списка передаю именно этот объект, а не только его название, в функтцию, которая открывает буфер. + +Коммит с этой новой функцией здесь: cl/9147 +Советую её особенно всем пользователям EXWM! + +Для меня это настоящее улучшение жизни. Конечно, это странно звучит, но даже если бы у меня была такая проблема всего раз в день, это каким-то образом привело бы к ухудшению моего настроения. Как маленький камешек в твоем ботинке. + +Выньте камни из своих ботинок! -- cgit 1.4.1