LINUX.ORG.RU

получать содержимое минибуфера

 ,


0

1

Собственно, имеется внешний ЖКИ, с которым работает самописная утилита. НАДО: передавать в него содержимое минибуфера emacs'а, при этом минибуфер в емаксе спрятать к едрене фене. Короче, внешний минибуфер хочу запилить.
Собственно, передавать надо тупо дергая cli утилиту, c этим-то понятно. Непонятно как:
1. спрятать минибуфер к едрене фене из окна емакса.
2. И как должен называться хендлер, который получает содержимое минибуфера на отрисовку и можно ли это сделать без патча сырцов.
Призываю в этот тред бога емакса: Zubok

★★★★★

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

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

К сожалению по тому я максимум смог его спрятать нахрен/вывести в отдельный фрейм, а вот как вместо рендеринга фрейма, отправлять его текст софтине - пока х.з.

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

К сожалению по тому я максимум смог его спрятать нахрен/вывести в отдельный фрейм

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

а вот как вместо рендеринга фрейма, отправлять его текст софтине - пока х.з.

рендеринг отменять сокрытием фрейма, а текст отправлять каким-нить там shell-command-on-region, наверное(хотя не факт, что сработает как надо).

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

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

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

Нет, нет. Это не тру, не метально круто и не замогильно ужастно (с)

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

реквестирую годный туториал по емаксу

нету. можно использовать гугл

Bad_ptr ★★★★★
()

Не знаю, что уже удалось тебе найти. Скажу, что знаю и предполагаю сейчас.

Собственно, имеется внешний ЖКИ, с которым работает самописная утилита. НАДО: передавать в него содержимое минибуфера emacs'а,

Речь идет только о minibuffer или также об echo area? Это как бы разные вещи, но они в одном месте показываются. Есть хуки для минибуфера: minibuffer-setup-hook, minibuffer-exit-hook. Можно также возвратить приглашение и содержимое minibuffer. Но это все не будет касаться текстовых, которые, например, команда message там показывает. Я пока предполагаю, что ты хочешь вообще все содержимое перехватывать, так?

1. спрятать минибуфер к едрене фене из окна емакса.

Есть у меня подозрение, что спрятать его вообще нельзя. Можно открыть новый фрейм без минибуфера (свойство minibuffer в nil), но где-то, в каком-то фрейме минибуфер должен быть. Выставить в 0 высоту окна minibuffer тоже нельзя - ругнется.

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

Речь идет только о minibuffer или также об echo area? Это как бы разные вещи, но они в одном месте показываются. Есть хуки для минибуфера: minibuffer-setup-hook, minibuffer-exit-hook. Можно также возвратить приглашение и содержимое minibuffer. Но это все не будет касаться текстовых, которые, например, команда message там показывает. Я пока предполагаю, что ты хочешь вообще все содержимое перехватывать, так?

И то и другое. По сути хочу вынести фрейм минибаффера на внешний подключенный ЖКИ. Но для этого мне, надо действительно все содержимое перехватывать. То что выдает message, думаю можно перехватывать тупо переопределением message в то, что быдут выдавать на ЖКИ строку с флагом спрятать через n секунд.

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

То что выдает message, думаю можно перехватывать тупо переопределением message

Туда много что пишет. И message, и eval туда пишет результат работы функции (и не факт, что используя message, а какую-нибудь внутреннюю функцию), туда пишет функция error и. т. д.. Если, конечно, очертить круг всех функций, которые пишут в echo area, то можно и перенаправлять, но мне кажется, это будет невеселым занятием. и окна минибуфера и echo area разные, они только в одном месте появляются.

По сути хочу вынести фрейм минибаффера на внешний подключенный ЖКИ.

И ввод и вывод?

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

Ввод-то с клавиатуры останется, но да. Все содержимое должно идти туда.

Уф, самое простое в исходник внедряться. Во-первых, ты не спрячешь minibuffer. Однако можно спрятать фрейм с ним, а фрейм без минибуфера показать. Но как только нажмешь M-x, то ввод пойдет туда, где minibufer.

(new-buffer '((minibuffer . nil)))

У фрейма можно менять minibuffer. Можэно сделать отдельный фрейм только с минибуфером:

(new-buffer '((minibuffer . only)))

Хуки для входа в минибуфер и выхода оттуда, я выше уже привел - они описаны, также можно получить minibuffer-prompt, minibuffer-contents.

Вот интересно, поможет ли как-то хук window-text-change-functions? Я, если чесно, никогда не пробовал и штука какая-то неописанная, ничего про нее не знаю, хотя docstring имеется: Functions to call in redisplay when text in the window might change. (мысль в сторону: жутко не люблю, когда делают docstring у функций, которые не предназначены для пользователя, а предназначены для внутренних целей. Это сбивает с толку, потому что раз есть docstring, то можно считать функцией API. Никогда так не делаю). Не ясно, что за функцию на нее можно вешать, какие аргументы передаются. Наверняка будет вызываться буквально по любому движению в emacs. Надо как-то с этим осторожно - проверять как-то, кто хочет перерисоваться.

По виду хук для внутренних целей, но зачем-то экспортирован в символы emacs из window_test_change_functions, а в лисповой части emacs ее никто не использует.

Короче, если хочется странного, то вот придется разбираться.

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

что посоветуете?

Запустить GNU Emacs. Там будет описано что это и переход на туториал.

После прохождения туториала поставь emacs-starter-kit (в гугл), там многие плюшки настроены. Для начала хватит.

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

Еще можно подумать о том, чтобы перехватывать в минибуфере ввод с клавиатуры и редиректить его в девайс, а девайс будет интерпретировать ввод как ему вздумается. Но способ геморройный. Придется тогда свой минибуфер с M-x woman и M-x tetris делать фактически. Было бы круто, конечно, просто тупо вывод перехватить, потому что там не только минибуфер, но и echo area.

Если открыть фрейм без минибуфера точно поверх фрейма с минибуфером, то у меня он, например, не поднимается above. То есть ты жмешь M-x, потом что-то вводишь вслепую и оно выполняется. Получается, будто минибуфера нет. Теневой минибуфер :) Может быть, можно вообще основной фрейм с минибуфером всегда свернутым держать. Но это я не пробовал и сомневаюсь, что так получится, потому что полагаю, что для ввода окно должно быть отмаплено, наверное. То есть оно из iconified и rolled само выпрыгнет.

Zubok ★★★★★
()
Последнее исправление: Zubok (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.