LINUX.ORG.RU

Emacs на Common Lisp и GTK3


0

1

Может, кончено, я плохо гуглю и кто-то уже такое написал, но я не нашёл.

В общем сделал http://common-lisp.net/viewvc/gtk-cffi/cl-emacs/. В требованиях биндинг к GTK3 http://common-lisp.net/viewvc/gtk-cffi и пачка стандартных библиотек: babel, flexi-streams, iterate, alexandria, split-sequence

Выглядит оно так:

Справа сверху консоль для ввода REPL. Пока реализованы клавиатурные комбинации «C-x C-c», ":C-x C-f", «C-x C-s». Ну и define-global-key соотвественно.

REPL позволяет пытаться ввести любую галиматью без обрушения редактора (на скриншоте есть примеры). Выполнение производится по кнопке Return, если сбалансированы скобки. Если не сбалансированы, то в статусе увидите чего не хватает.

В планах прикрутить M-. из SLIME, отступы, автодополнение и раскраску кода. В дальних планах сделать repl асинхронным, чтобы длинная команда не блокировала графический интерфейс.

★★★★★

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

Climacs, похоже, RIP.

Последняя новость на сайте от 2008, McСlim перестал развиваться тогда же. Сейчас шрифты там выглядят ужасно, а cairo backend для McClim ужасно глючит :-(

А так, McClim + Cairo мне больше нравится идеологически, но...

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

Полученный в ходе разработки опыт :)

Ну это само собой. Вообще-то я ожидал услышать конкретные претензии к Eamcs или Emacs Lisp,

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

конкретные претензии к Emacs или Emacs Lisp,

Emacs:

  • текстовые виджеты. В целом, конечно, неплохо, но видеть автодополнение в виде всплывающего окна (как в http://common-lisp.net/project/climacs/images/screenshots/completions.png) гораздо приятнее.
  • плохо дружит с системной переключалкой языка. C-\ конечно работает, но всё-таки костыль.
  • шрифты. Может я плохо искал, но мне пришлось настраивать через
    echo 'emacs*font: terminus-16' >> ~/.Xdefaults
    
    и как, например, сменить отдельно шрифт для меню, я не знаю.

Emacs-lisp:

  • Все вызовы синхронные. Если что-то надолго задумалось, то весь редактор «подвисает».
  • Лексических переменных нет, замыканий нет, пакетов нет
  • классов нет, дженериков нет
  • FFI нет
monk ★★★★★
() автор топика
Ответ на: комментарий от monk

> шрифты. Может я плохо искал, но мне пришлось настраивать через

Гм, у меня работало это:

(set-face-font 'default "-unknown-DejaVu Sans Mono-normal-normal-normal-*-14-*-*-*-m-0-iso10646-1")

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

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

А (set-face-font 'menu ...) не работает как нужно? http://www.emacswiki.org/emacs/SetFonts

Сам не проверял.

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

> замыканий нет

А в пакете cl вроде что-то было для этого. Какая-то особая форма let емнип

yoghurt ★★★★★
()

Полезное начинание.

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

>плохо дружит с системной переключалкой языка. C-\ конечно работает, но всё-таки костыль.

xxkb/scim позволяет повесить на одну и ту же клавишу, да, костыль, но нормально работает

шрифты. Может я плохо искал, но мне пришлось настраивать через

плохо искал, всё настраивается

и как, например, сменить отдельно шрифт для меню, я не знаю.

у меня он из gtk-шной темы подхватывается

Все вызовы синхронные. Если что-то надолго задумалось, то весь редактор «подвисает».

да, это очень грустно

Лексических переменных нет

Since April 1, 2011 (not an April fools joke), Emacs 24 has merged the lexical binding branch mentioned below.

классов нет, дженериков нет

емнип, в wanderlust есть какой-то свой костыль для этого дела

В общем, благое начинание, но слабо верится, увы

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

>C-\ конечно работает, но всё-таки костыль.

Нифига это не костыль. Оно позволяет держать разные буферы с разными языками ввода.

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

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

текстовые виджеты. В целом, конечно, неплохо, но видеть автодополнение в виде всплывающего окна (как в http://common-lisp.net/project/climacs/images/screenshots/completions.png) гораздо приятнее.

Так в том и фишка, что emacs фреймовый, выплывающие/модальные окна это уже не emacs (ну, правда, такие всплывающие окна как на этой картинке и так есть в разных CEDET).

Мне как-то больше удобнее текстовой интерфейс с возможностью иметь отдельные gtk окошки для чего-то (например - clysma, slime-gtk-ui).

quasimoto ★★★★
()

Пока реализованы клавиатурные комбинации «C-x C-c», ":C-x C-f", «C-x C-s». Ну и define-global-key соотвественно.

Ээээ... а ещё что-то есть?

В планах прикрутить M-. из SLIME, отступы, автодополнение и раскраску кода.

А в каком виде оно будет прикручено? Существующие режимы поддерживаться не будут?

Автодополнение ты как собрался делать? Семантический анализ будет? Если да, то для каких языков?

но видеть автодополнение в виде всплывающего окна (как в http://common-lisp.net/project/climacs/images/screenshots/completions.png) гораздо приятнее

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

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

> Ээээ... а ещё что-то есть?

Пока нет. Считай, версия 0.01. Но будет :-)

А в каком виде оно будет прикручено? Существующие режимы поддерживаться не будут?

Изначально будет порт из Elisp. Полностью совместимость сделать не выйдет: common lisp и elisp некоторые базовые вещи делают сильно по-разному.

Автодополнение ты как собрался делать? Семантический анализ будет?

На начальном этапе только из SLIME/SWANK, соответственно, только Common lisp.

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

У меня как-раз GTK. Автодополнение по M-Tab всегда в буфере *Completion*. Я опять пропустил какую-то настройку?

Мне как-то больше удобнее текстовой интерфейс с возможностью иметь отдельные gtk окошки для чего-то (например - clysma, slime-gtk-ui).

Вот именно ими и вдохновляюсь.

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