Эргономика промышленных решений
С некоторого времени для разработки на Java я использую IntelliJ
IDEA. Какова там навигация по файлам или по методам! Нажимаешь
C-S-n (или C-n для классов) и появляется окошко поиска со
списком. Вводишь буквы из названия файла и список сокращается -
самый удобный способ навигации по файлам проекта. Аналогично
C-F12 для навигации по методам открытого класса - интерактивно
изменяющееся меню на основе вводимых символов из имени
метода. Ничего эргономичнее до этого не видел.
Изящество и красота текстовых интерфейсов
В emacs это все есть, безусловно, но выглядит это... в emacs вообще все выглядит
абсолютно самобытно. Именно самобытно. Думаю, вряд ли кто-то скажет, что emacs
предоставляет GUI - интерфейс, возможно лишь местами. В большинстве случаев,
emacs не предоставляет и CLI - да, он часто интегрируется и CLI-инструментами:
CLI-утилита является back-end-ом, а emacs предоставляет свою обертку, он имеет
внутренние оболочки shell-ы и repl-ы, может сам быть запущен из внешних, но этот
интерфейс, хоть и играет важную роль, все же является скорее
вспомогательным. Выходит TUI?  Во-многом, да. Но он зачастую деформируется
механизмом окон. Если взять, например, mc, far, ndd, старые, времен DOS, среды
разработки, антивирусы, архиваторы, предоставляющие TUI-интерфейс, то там любое
диалоговое окно - часть общего текстового рабочего пространства. В emacs же окна
жестко механически разделяют текстовые области. Данный подход стал
идиоматическим. Скажем, org-mode и magit - примеры эффективного разделения возможностей TUI в рамках основного буфера и добавления вспомогательных окон и буферов. Такие буферы имеют свои специальные режимы с удобными таблицами ключей. Может оно и хорошо, и у такого подхода безусловно есть свои плюсы, но всегда ли это нужно? На каждый чих
создается новое окно и в нем свой буфер. Лично мне куда приятнее чаще видеть старый-добрый TUI-интерфейс там, где создание отдельного окна избыточно.
TUI в emacs
Библиотеки 
popup-el (выпадающие меню) и
direx-el (деревья) - примеры расширений, предоставляющих некоторую
функциональность TUI. К сожалению, предоставляется лишь некоторая часть
возможных виджетов, но тем не менее, имеющиеся весьма удобны.
Так, например, первая из них позволила мне реализовать в TUI некоторые из идей,
используемых в IntelliJ
IDEA: popup-switcher.
Вызов интерактивной функции 
- psw-switch-buffer - приведет к появлению
списка открытых буферов. Ввод символов имени буфера будет сокращать
список. Именно в качестве (еще одного) механизма переключения буферов и
задумывался изначально popup-switcher, однако на самом деле, он может быть
использован для переключения чего угодно (отсюда и название).
 - psw-switch-projectile-files - работает со всеми файлами проекта (файлы проекта рассматриваются в контексте расширения projectile).
 - psw-switch-function - работает с функциями/методами в текущем файле.
 
Пример навигации по буферам.
Пример навигации по функциям в файле с исходным кодом на Clojure.
Установка
Установка расширения довольно проста. Добавьте MELPA в вашу переменную
package-archives  (если у вас он еще не был добавлен):
    
 (require 'package)
 (add-to-list 'package-archives
              '("melpa" . "http://melpa.milkbox.net/packages/"))
 (package-initialize)
 
Далее 
popup-switcher устанавливается командой:
    
 M-x package-install [RET] popup-switcher [RET]
 
Кроме того, в файле инициализации .emacs необходимо указать:
    
 (require 'popup-switcher)
 
Настройка
После установки 
psw-in-window-center в значение t всплывающее меню будет
появляться в середине окна. По умолчанию появляется в посередине меду левым
краем окна и значением 
fill-column.
    
 (setq psw-in-window-center t)
 
Вы можете установить интерактивные функции переключения буферов и навигации по
методам для определенных клавиатурных сочетаний на ваш вкус, например:
    
 (global-set-key [f2] 'psw-switch-buffer)
 (global-set-key (kbd "C-S-n") 'psw-switch-projectile-files)
 
Для активации возможности навигации по функциям/методам необходимо установить
последнюю версию 
CEDET и подключить библиотеку eassist. Это не является
обязательным, и вы можете использовать popup-switcher без CEDET (и, очевидно,
без данной функциональности). Пример настройки:
    
 (semantic-mode 1)
 
 (add-to-list 'load-path "~/.emacs.d/cedet/contrib/")
 (require 'eassist)
 
 (eval-after-load "eassist"
   '(global-set-key [f3] 'psw-switch-function))
 
Добавление переключений
Добавлять новые применения механизма переключения очень просто, так функция
psw-switch-buffer выглядит следующим образом:
    
 (defun psw-switch-buffer ()
    (interactive)
    (psw-switcher
     :items-list (psw-get-buffer-list)
     :item-name-getter 'buffer-name
     :switcher 'switch-to-buffer))
 
где 
- items-list - список, в котором осуществляется выбор (psw-get-buffer-list -
просто использует встроеную функцию buffer-list с некоторыми дополнительными
фильтрами).
 - item-name-getter - функция получения текстового обозначения каждого элемента
списка в меню выбора.
 - switcher - функция, описывающая что делать с выбранным элементом.
 
Заключение
Для emacs существуют хоть и не всеобъемлющие, но весьма удобные библиотеки
работы с
TUI. Например, 
popup-el
уже использующаяся в
проектах 
auto-complete и
emacs-jedi, а теперь и в 
popup-switcher.
Библиотека direx-el используется, например, в
проекте emacs-jedi-direx. direx-el 
потенциально может выступать в качестве основы для более простого и современного
аналога ECB. Конечно, в данном случае создание нового окна будет необходимо, но
мне кажется, что это как раз тот случай, когда это оправдано.
Надеюсь, вас зантересовала идея более широкого применения TUI в emacs, а также написания
и развития расширений, как использующих эти возможности, так и предоставляющих
новые возможности для TUI - виджетов.