Console Framework на Mac OS X
Решил, что пора бы добавить поддержку макоси тоже. Всё портирование свелось к нескольким простым вещам:
- Собрать libtermkey. Под мак mono почему-то исключительно 32-битный, поэтому нужно следить за разрядностью выходного dylib-модуля. По сути достаточно в майкфайл добавить CCFLAGS += -arch i386 -arch x86_64 (я собирал fat binary) и выполнить make. Если не указать i386, скорее всего будет собран 64-разрядный модуль, и моно не сможет его загрузить для интеропа, будет сбивающий с толку DllNotFoundException (на самом деле dll found, но просто не может быть загружена).
- Найти libncurses и сделать для него symlink. Сам пакет может быть установлен при помощи MacPorts. У меня он автоматически поставился при установке midnight commander (через MacPorts)
- Убрать eventfd в качестве объекта-источника poll-сигналов. Заменил на self-pipe.
- Корректно проставить symlinks к оставшимся библиотекам (libc.so). Или прописать dllmap в App.config-файле – моно умеет оттуда распарсивать пути к библиотекам.
Всё в принципе работоспособно, но, к сожалению, качество эмуляторов терминала под Mac оставляет желать лучшего..
Стандартный терминал Mac OS X
Стандартный Terminal.app порадовал хорошим рендерингом, но огорчил отсутствием поддержки мыши, отсутствием отсылки нажатий клавиш с зажатым Ctrl. Также при ресайзе окна в приложение не приходит соответствующий сигнал. Впрочем, mc изменение размера обрабатывает нормально, так что должен быть workaround. Что касается мыши, то частично можно заставить её работать, установив EasySIMBL и mouseterm. Но работают только нажатия, перемещение нажатой мыши почему-то работать не хочет. Впрочем, mc даже нажатия при установленном плагине не воспринимает. Картинки кликабельны.
iTerm2
Бесплатный альтернативный эмулятор терминала для макоси. Вполне хорош, поддерживает работу с мышью, рендеринг благодатный, только символы псевдографики не очень красивые выводятся. Но можно поменять шрифт на Andale Mono, тогда всё становится вообще идеально (на скриншоте шрифт по умолчанию – Monaco). Есть проблемы с ресайзом, но в mc ресайз работает, поэтому должен быть workaround. Пока это лучший эмулятор терминала из опробованных.
xterm
Решил попробовать xterm, который идеально себя показывал на всех линуксах. К слову, установить его оказалось несложно – достаточно поставить X-сервер Xquartz и установить xterm из MacPorts (sudo port install xterm). Но, к сожалению, в этот раз он не оправдал ожиданий. При запуске из стандартного терминала не подхватывается utf8:
При запуске через Cmd+n (из контекста запущенного XQuartz) набор символов, вроде, получше, но всё равно не хватает нормальных юникодных символов:
putty
А ещё был опробован putty ! Установился он очень просто из MacPorts (и, как и xterm, требует наличия XQuartz). И поэтому мне не пришлось возиться с гайдом http://putty.org.ru/articles/install-putty-macosx.html, который показался мне сложноватым. Чтобы подключиться к localhost по ssh, пришлось разрешить удалённый доступ в настройках Mac OS. Рендеринг putty тоже выглядит криво, хотя кодировка UTF-8 выставлена (видимо, это уже какая-то внутренняя проблема XQuartz и его набора шрифтов), mc тоже рендерится с кракозябрами. Хорошо: поддержка мыши. Ресайз – не работает в console framework, но опять же, в mc работает исправно.
Заключение
Нужно найти workaround для ресайза окна, чтобы работало везде, где работает midnight commander. В остальном придётся ждать улучшений самих эмуляторов терминала. На текущий момент наиболее перспективным для реальной работы видится iTerm2 и стандартный терминал (если забить на поддержку мыши или делать приложения, в которых всё можно выполнить с использованием только одной клавиатуры). Хочется также попробовать позапускать console framework на FreeBSD.
0