LINUX.ORG.RU

Emacs 27.1

 , , ,


5

5

Свершилось, братие и сестрие!

Долгожданный (кроме шуток - процесс релиза настолько затянулся что про это начали хохмить даже сами разработчики в рассылке emacs-devel) релиз системы исполнения emacs-lisp, реализующей редактор текста, файловый менеджер, почтовый клиент, систему установки пакетов и множество различных функций.

В данном выпуске:

  • встроенная поддержка чисел целых чисел произвольного размера (в Emacs встроен великолепный калькулятор с поддержкой RPN и алгебраических вычислений)
  • встроенная поддержка JSON
  • для рендеринга шрифтов теперь используется библиотека HarfBuzz
  • добавлена поддержка табов
  • работа с изображениями без использования ImageMagick
  • Lexical-binding используется по-умолчанию (если вы не писали на Lisp данный пункт можно смело игнорировать)
  • поддержка дополнительного конфига для ранней инициализации (это может быть интересно пользователям spacemacs)
  • поддержка спецификаций XDG на размещение файлов в домашней директории (наконец-то!)

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

Ценители архи-боянов приглашаются в комментарии - делать ставки кто первый «пошутит» про отсутствие в GNU/Emacs текстового редактора: когда ещё доведётся услышать шутку, которая старше большинства посетителей ЛОРа?

>>> Подробности

★★★★★

Проверено: alpha ()
Ответ на: комментарий от Landgraf

Для этих атомов и вижуал коде нормальной реализации емаксовских байдингов не найдёшь. Все какие-то куцие и кривые.

rupert ★★★★★
()

Я уже много лет сижу на «свежачке». Вот только что пересобрал:

GNU Emacs 28.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.21, cairo version 1.17.3) of 2020-08-12
Puzan ★★★★★
()

К сожалению или счастью для языков С++/Java Emacs неюзабелен.

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

А тогда не проще его заново открыть при надобности?

Всё-таки проще выбрать из 300 буферов, чем из 30000 файлов. Ну и там же достаточно мощный автокомплит, поиск по содержимому, разделение по проектам и т.д. В общем это всё действительно очень удобно. Намного удобнее чем в сайдбаре глазами искать и тыкать мышкой.

no-such-file ★★★★★
()
Ответ на: комментарий от mv

При первом чтении комментарий в скобках можно опустить. Редактор недоработал.

future_anonymous
()
Ответ на: комментарий от zagatov_lev

которой говорится о том, что фрейм – это часть экрана

Не просто часть экрана, а graphical system-level display region. И далее In this manual, we call this a frame, reserving the word “window” for the part of the frame used for displaying a buffer

Вот что тут непонятно-то?

no-such-file ★★★★★
()

для рендеринга шрифтов теперь используется библиотека HarfBuzz

А Cascadia Code как не работала, так и не работает.

Im_not_a_robot ★★★★★
()

поддержка спецификаций XDG на размещение файлов в домашней директории (наконец-то!)

Теперь можно конфиг в ~/.config перенести? ~/.config/emacs или что-то другое?

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

Я насквозь сам evil-ифицировал свой emacs, обвесив свои vim и vs code vim plugin единым комплектом настроек, так, что без проблем переключаюсь. Не сильно распространённую боль неконсистентности evil/emacs bindings неожиданно несколько лет назад решил глобальный маппинг Meta+[hjkl] в стрелочки. Я его уже неосознанно юзаю во многих местах интерфейса. Туда же M+y/o для перехода в начало и конец строки и M+u/i для перемещения строки/строк вверх/вниз. Ну и пробел как leader в связке с evil-leader прямо бомба: оно так же настраивается и в чистом vim и в vs code vim plugin.

Всё же Org-mode + vim это чудесные изобретения, если распробовать.

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

Не сильно распространённую боль неконсистентности evil/emacs bindings неожиданно несколько лет назад решил глобальный маппинг Meta+[hjkl] в стрелочки.

Я это делал еще проще - просто на клавиатуре через прошивку бросил на них стрелочки. Правда, из-за того, что раскладка у меня колемаковская, hjkl не то чтобы прямо особо были удобные. Хотя, конечно, их не так расколбашивает, как на двораке.

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

Про что я, собственно, и говорил.

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

Теперь можно конфиг в ~/.config перенести? ~/.config/emacs или что-то другое?

Ага, ~/.config/emacs/init.el - наконец-то в нормальное место можно перенести.

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

всю ось перенастраивать это чрезмерно кардинально на мой вкус. Я только внутри Emacs, vim и vs code это сделал. Кстати, с Ctrl на CapsLock, Enter на Ctrl+M и M-hjkl руки почти не перемещаются с home row и так во всех трёх средах.

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

Всё же Org-mode + vim это чудесные изобретения, если распробовать

Долго пытался распробовать orgmode, но так и не смог настроить копирование веб-странички вместе со всем содержимым. Картинки там, примеры кода и тыпы. В результате использую typora. Экспорт-импорт опять же легко настраивать.

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

Меня конечно не спрашивали, но у меня

  • запущен emacs daemon
  • настроено (setq frame-title-format '("%b"))
  • и вот такой скрипт повешен на Ctrl + \:
#!/usr/bin/env bash

# A keyboard switcher which respects Emacs.
# In order for this to work, Emacs should run as server

IS_EMACS=`xprop -id $(xprop -root 32x '\t$0' _NET_ACTIVE_WINDOW | cut -f 2) WM_CLASS | grep -c emacs`
CURRENT_LAYOUT=`setxkbmap -query | grep layout | awk '{print $2}'`
CURRENT_EMACS_LAYOUT=`emacsclient -e "(current-input-method)"`

function do_switch {
    case $1 in
	ru)
	   LAYOUT=ru
	   E_LAYOUT=russian-computer
	   ;;
	us)
	   LAYOUT=us
	   E_LAYOUT=polish-slash
	   ;;
	*)
	   :
	   ;;
    esac

    if [[ $IS_EMACS -eq 1 ]]; then
        BUFFER_NAME=`xprop -id $(xprop -root 32x '\t$0' _NET_ACTIVE_WINDOW | cut -f 2) _NET_WM_NAME | sed 's/^_NET_WM_NAME(UTF8_STRING) = //'`
        # The " are in xprop output already
        emacsclient -e "(with-current-buffer ${BUFFER_NAME} (toggle-input-method))"
    else
	setxkbmap ${LAYOUT}
    fi
}

if [[ ${CURRENT_LAYOUT} == 'ru' ]]; then
    do_switch us
else
    do_switch ru
fi

Polish-slash — пережиток времён, когда я не научился хвосты через compose рисовать.

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

alt/cmd+space переключают внутреннюю переключалку

(defun bss/set-input-en ()
  "switch system keyboard layout to en"
  (interactive)
  (let ((default-directory (expand-file-name "~/")))
    (when (and (eq system-type 'darwin) (display-graphic-p))
        ;; https://github.com/daipeihust/im-select
        (shell-command-to-string "/usr/local/bin/im-select com.apple.keylayout.ABC"))
    (when (and (eq system-type 'gnu/linux) (display-graphic-p))
        ;; https://github.com/ierton/xkb-switch
        ;; X11 intercept keyboard switching keys, as a workaround call switching to US keyboard layout after system switching to other locale
        ;; This need setting "per-app keyboard layout mode"
        (shell-command-to-string "xkb-switch -s us"))
    )
)
(add-hook 'focus-in-hook 'bss/set-input-en)

(defun bss/toggle-input-method ()
  "switch keyboard layout"
  (interactive)
  ;; when we in tramp, default-directory in non-local and shell-command-to-string call remote process instead local. Fix it with temporary change default directory to local ~/
  (let ((default-directory (expand-file-name "~/")))
    (bss/set-input-en)
    (toggle-input-method)
    )
  )

  (global-set-key (kbd "M-SPC") 'bss/toggle-input-method)
  (define-key isearch-mode-map (kbd "M-SPC") 'bss/toggle-input-method)

stalkerbss
()
Ответ на: комментарий от beck

Моя практика показала, что складывать веб-странички удобнее через Ctrl/Cmd+P в браузере и «печать в PDF» в соответствующую папочку yandexdisk: по страничкам в виде html неудобно искать, а внутри pdf вполне удобно это делать. А заметки я храню в удобном текстовом notes.org в виде иерархии, по которой удобно перемещаться и искать при помощи (counsel-imenu). Фрагменты кода для переиспользования я запихиваю в yasnippet.

Org-mode невообразимо хорош именно как GTD-решение с прозрачной возможностью держать org-файлы в GPG-виде: просто добавляем к имени .gpg и emacs его прозрачно распаковывает и упаковывает. А внутри уже можно спокойно можно держать рабочую информацию и личный дневник и всё это вместе в git-репозитории.

Про замороченную инсталляцию org-mode как GTD-решения можно посмотреть тут: http://doc.norang.ca/org-mode.html. Я многое из этого использую.

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

Если пользоваться внутренней переключалкой, то метод ввода показывается в modeline. Мне важно использовать внутреннюю переключалку, чтобы не было ни малейшей боли от vim/evil-mode в сочетании с русскими раскладками и emacs дал мне эту радость.

stalkerbss
()
Ответ на: комментарий от hobbit

А как по ним вообще навигацию делать?

По файлам проекта через projectile навигация по фаззи-матчингу имен файлов, по всяким реплам через хоткеи они знают нужный, по малоиспользуемым через расширение типа «sql», «json», «org» обычно такой фильтр оставляет штук 10.

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

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

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

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

Долго пытался распробовать orgmode, но так и не смог настроить копирование веб-странички вместе со всем содержимым. Картинки там, примеры кода и тыпы. В результате использую typora. Экспорт-импорт опять же легко настраивать.

Не думаю, что это здравая идея. Нет нормального импортера для сложного html в орг, да и сам орг для осмысленного создания документов, а не свалки всего с веба в него. Из плагинов для импорта меня приятно удивил оный в Joplin, но, конечно, его маркдаун с кусками html лишь условно человекочитаем. Предпочитаю импортировать в пдф в DevonThink, он и сам классифицирует, и найдет и конвертирует если что.

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

копирование веб-странички вместе со всем содержимым

А зачем? Не в смысле «ненужно», а «какой рабочий процесс требует такой операции». Обратную задачу, экспорт org в html, я представляю, а в вашем случае даже не ясно что вы делаете.

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

наверняка он хочет сквозного поиска по всей базе знаний. Тут сложная тема и мало где она решена достаточно хорошо, кроме гугла с его релевантностью. Я остановился на документах в дереве каталогов yandex-disk, нужных мне текстовых выжимках в org-mode-заметках и ссылках на файлы и каталоги в этих заметках.

stalkerbss
()
Ответ на: комментарий от beck

настроить копирование веб-странички вместе со всем содержимым. Картинки там, примеры кода и тыпы

вообще нормально сохраняет в MHTML во всех браузерах (актуально когда их 4+ с разными профилями).

а сохранялку в MHTML нужно прицепить через org-capture: man org capture extension firefox extension org-capture-templates Org Capturing Intro

хотя всё порываюсь дописать недописанный на коленке костыль: нечто вроде CAM, Content-Addressable Memory.

чтобы

а) запускалась сохранялка через org-capture
б) сохраняло в MHTML + метаданные отдельно, желательно в текстовых форматах
в) индексировалось и работал поиск
г) физически хранилось как BLOB в какой-то БД адресуемое по object id = хеш от содержимого странички
д) работала дедубликация контента, элементов. в смысле, чтобы из MHTML одинаковые куски в свою очередь тоже блобы, повторно использовались
е) по этому всему можно было бы какую-то статистику запилить, с облаком тегов, с классификацией, с отображением динамики за период, чего там полезного вычитал

ж) опционально, файловый интерфейс через FUSE в духе plan 9 ctl файлов

з) да, и чтобы в заметки в org в полпинка метаданные и/или, цитаты вставлялись

запиливаю эдакое вот на коленке, периодически временами.

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

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

«какой рабочий процесс требует такой операции».

ну например, я записываю в org-mode идеи проектов, которые имело бы смысл написать, если бы у меня хватало достаточно времени. иногда попадаются материалы в тему, какие-то наработки, библиотеки, подходы. то есть, если в духе написания ТЗ – то такие идеи проектов пишутся снизу вверх, а не сверху вниз, как обычно. и когда подбирается материалов достаточно чтобы реализовать желаемое (с примерно понятными оценками времени) – уже понятно примерно, как это делать.

рабочий процесс устроен примерно так: куча .org текстовых файлов, заметки в org-mode babel и в C-c C-c интерпретации, аннотации цитатами отквоченного из разных мест и свои заметки на тему. и нечто вроде Literate Programming поверх этого.

здесь в идеале хочется каких-то объектов в БД, которые можно передавать по такому workflow. чего-то вроде pandoc/MkTechDocs/abp/CommonDoc github codex, (или skribilo на Guile), какого-то управления требованиями в текстовых файлах вроде Doorstop,

в общем, максимального повторного использования этих самых объектов. и какого-то их однородного представления, скриптуемого через Literate Programming.

например, отквотить с веб-страницы и автомагически скопипастить для аннотации/рецензии в текстовый org файл через org-capture.

или C-c C-c каких-то блоков кода. или M-x org-babel-tangle каких-то «блоков кода» и «блоков данных» (а по сути, и метаданных).

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

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

;; -*- lexical-binding: nil -*-

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

aeralahthu
()
Ответ на: комментарий от beck

Долго пытался распробовать orgmode, но так и не смог настроить копирование веб-странички вместе со всем содержимым.

в первом приближении, должно хватать org-capture-extension + настройки org-protocol, см. обучающее видео

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

вместе со всем содержимым. Картинки там, примеры кода и тыпы.

тут сложнее, надо бы настраивать этот захват. «примеры кода» == текстовые, по идее должно просто работать (но опять же, желательно выделенное захваченное не в BEGIN_QUOTE/END_QUOTE вставлять а отдельными «блоками кода»). картинки – на что они должны ссылаться ? по любому, если мы хотим вставить картинку – должна быть какая-то локальная ссылка.

в идеале, если бы «захват» через org-protocol был с какими-то настраиваемыми template и чтобы понимал DOM, и сразу захватывал страничку в MHTML/ MAFF (.ZIP + .html+метаданные), и понимая DOM переправлял ссылки на локальные вроде картинок, кусков из HTML захваченного в MAFF в эту локальную копию странички.

но там парсить HTML+DOM надо, настраивать org-capture-templates, какую-то постобработку делать, и в идеале, хранить такие захваченные странички как блобы в БД, проставлять ссылки и отношения, делать дедубликацию контента, потом какие-то запросы для поиска, классификации, облака тегов того же и прочего.

заморачиваться надо.

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

т.е. в первом приближении, хочется чего-то вроде расширения Scrapbook в браузере + захват через org-capture-extension + «умного» понимания DOM, выделенного контента, + графовой или сетевой БД, отношений, дедубликации, классификации, + визуализации со статистиками и облаком тегов.

и чтобы всё в отдельных локальных файлах, и в текстовых метаданных, и аннотации и рецензии автомагически выделенного копировались в org-mode типа как в org-capture-extension.

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

Есть серьёзные опасения, подкреплённые личным опытом, что вышеописанное является чистой прокрастинацией, когда вместо самого дела годами готовишься идеально делать идеальные сферические шарообразные задачи в вакууме. Чем проще, тем лучше. Например, завёл под большой проект отдельный org-файл и отдельный каталог для материалов и на этом остановился: файлы в каталог, git проекта в каталог, мысли c заметками в org.

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

Советую попробовать reverse-im.el, чтобы не возиться с несколькими переключателями раскладки.

Vigi
()
Ответ на: комментарий от Vault_Boy

Что касается общего вопроса режимы .vs. аккорды, то при правильной эргономичной клавиатуре (типа кинезиса или эргодокса), на которой модификаторы расположены под самыми подвижными большими пальцами, аккорды очень удобны, удобнее чем режимы. С другой стороны, на ублюдочных массовых клавиатурах, унаследовавших расположение клавиш от механических пишущих машинок, режимы могут быть не только удобнее, но и менее разрушительными для здоровья рук.

IMHO, конечно, но основано на личном опыте: последние лет 10 на емаксе, а до этого тоже лет 10 на виме.

aeralahthu
()
Ответ на: комментарий от loz

Но разве оно удобно с 50+ открытых буферов?

Да, вполне. При чём здесь вообще количество буферов?

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

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

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

Ну, каждому своё. Я для себя решил, что удобство моего рабочего места, за которым я провожу 95% времени, важнее, чем то, что я буду ограниченно дееспособен за чужими рабочими местами.

Впрочем, всё, кроме физически уникальной клавиатуры, можно, наверное, решать загрузкой своего конфига емакса. Даже клавиатурную раскладку. (Да, у меня тоже колемак. ;))

aeralahthu
()
Ответ на: комментарий от zagatov_lev

Одно другому не мешает.

<html>
<head>
<script>
var curtab=1,maxtab=1;
function dget(id){
return document.getElementById(id);
}
function updurl(){
var tmp1=dget('url-text').value;tmp1=dget('frame'+curtab).contentWindow.location.href;
if (tmp1=='about:blank') {tmp1='';}; dget('url-text').value=tmp1;
}
function pdm(){
if (window.event) {
switch (window.event.keyCode){
case 48: kbrd(0); break;
case 49: kbrd(1); break;
case 50: kbrd(2); break;
case 51: kbrd(3); break;
case 52: kbrd(4); break;
case 53: kbrd(5); break;
case 54: kbrd(6); break;
case 55: kbrd(7); break;
case 56: kbrd(8); break;
case 57: kbrd(9); break;
case 83: kbrd(10); break;
case 72: kbrd(11); break;
}
}
}
function kbrd(ky){
switch(ky){
case 1:
maxtab++;
dget('frame'+curtab).style.display='none';
curtab=maxtab;
var nwfrm=document.createElement('iframe');nwfrm.setAttribute('id','frame'+curtab);nwfrm.style.display='block';
nwfrm.style.width='172px';
nwfrm.style.height='216px';
nwfrm.setAttribute('src','');
document.body.appendChild(nwfrm);
dget('frameno').innerText=curtab+'/'+maxtab;
break;
case 2:
if (dget('url').style.display=='none') {dget('url').style.display='block';updurl();dget('url-text').focus();} else {dget('url').style.display='none';};
break;
case 10:
dget('frame'+curtab).style.display='none';
curtab=curtab==1?maxtab:curtab-1;
dget('frame'+curtab).style.display='block';
dget('frameno').innerText=curtab+'/'+maxtab; updurl();
break;
case 11:
dget('frame'+curtab).style.display='none';
curtab=curtab==maxtab?1:curtab+1;
dget('frame'+curtab).style.display='block';
dget('frameno').innerText=curtab+'/'+maxtab; updurl();
break;
}
}</script>
</head>
<body onkeydown='pdm();'>
<div id='url' style='display:block;z-index:9000;background-color:#404040;width:100%;'><input style='width:145px;height=30px;position:absolute;left:0px;top:0px;' type='text' id='url-text' onchange="if(!/:/.test(dget('url-text').value)){dget('url-text').value='http://'+dget('url-text').value;};dget('frame'+curtab).contentWindow.location.href=dget('url-text').value;" onblur="dget('url').style.display='none';"><span id='frameno' style='color:#ff0000;float:right;'>1/1</span></div>
<iframe width=172px height=216px src='' id='frame1'>
</body>
</html>
mertvoprog
()
Ответ на: комментарий от stalkerbss

Да, я читал эту статью. Покамест для тудушника и быстрозаметок остановился на Joplin. В него тоже можно копировать не думая, плюс маркдаун, соответственно в typora легко переносится. Опять же линукс, винда, андроид, файлы в облаке каком хочешь.

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

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

Согласен. Но ещё более осмысленно для меня оказалось писать в typora. Да, там нету 90% функций emacs, но они мне и не нужны, как оказалось.

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

Мне приходится довольно много писать всяких статей типа howto, копировать кучу статей из других баз знаний, адаптируя и переводя.

Хелпдеск такой хелпдеск…)))

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

Вот да. Но пердолиться было страшно неохота, я ленивый и старый, поэтому искал готовое. Первым нашелся OneNote, но он, зараза, только под винду и формат свой (хотя и файлы лежат локально). Были попытки на всякие ворды и прочие либреофисы, но уже невменько от отчаяния.)))

Потом наткнулся на typora и joplin. Формат - файлы markdown, есть под любую ОС.

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

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

тут сложнее, надо бы настраивать этот захват.

Текст и без этих caoture extension легко копируется. Вопрос как раз был в «повозить мышкой, копирнуть страничку, и она разложилась в markdown + картинки в файлы».

Как выяснилось, это легко умеет typora и joplin.

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