Отображать начало области, когда она выходит за пределы экрана

12

Я хотел бы отобразить открывающую часть области, когда она выйдет из экрана.

Пример:

namespace a  
{  
...  
--------------------- <- display frame 
...                 |  
}*                  | * when cursor is here display "namespace a" in the minibuffer
---------------------   or on screen

Это может работать для многих языков программирования, но я в основном думаю о C ++.

Чтобы пояснить немного больше и для тех, кто знает VS, я хотел бы подобную функцию как то, что существует для Visual Studio. То есть, поместив курсор в конец области, отобразите начало области в верхней части буфера редактирования.

Эта функция уже где-то существует?

log0
источник
Мне любопытно, помог мой ответ?
Ту До
@ Да, да! Я просто успел посмотреть. У меня уже была семантика, и просто включение global-semantic-stickyfunc-mode работало хорошо. Спасибо. Моя проблема сейчас в том, что цвет не делает заголовок читабельным ..
log0

Ответы:

14

Если вы пишете на C / C ++ / Java / Emacs Lisp / Python, то semantic-sticky-func-mode будет делать то, что вы хотите.

ПРИМЕЧАНИЕ : Кажется, что это работает с CEDET из Git, а не с CEDET в настоящее время в Emacs 24.4. Чтобы получить Emacs от Git:

git clone http://git.code.sf.net/p/cedet/git cedet

И сначала загрузите CEDET над всем остальным в вашем файле инициализации:

(load-file (concat user-emacs-directory "/cedet/cedet-devel-load.el"))
(add-to-list 'load-path (concat user-emacs-directory "cedet/contrib"))
(load-file (concat user-emacs-directory "cedet/contrib/cedet-contrib-load.el"))

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

Он отображает полный интерфейс функции (тип возвращаемого значения, имя функции и параметры), а не только имя функции.

Чтобы включить его, поместите этот код в файл инициализации:

(require 'semantic)
(semantic-mode 1)
(global-semantic-stickyfunc-mode 1)

ОБНОВЛЕНИЕ : Одной из проблем текущего semantic-stickyfunc-modeявляется то, что он не отображает все параметры, которые разбросаны по нескольким строкам. Чтобы решить эту проблему, я создал пакет stickyfunc-gain .

ДЕМО :

Вот демо в C:

семантико-липкий функ-режим-с

Вот демонстрация в Emacs Lisp:

семантико-липкий функ-режим-Elisp

ОБНОВЛЕНИЕ : В качестве альтернативы вы можете использовать helm-semantic-or-imenu . Когда вы находитесь внутри функции и запускаете команду, курсор помещается прямо в функцию в списке, поэтому вы всегда можете увидеть полный интерфейс функции. DEMO:

  • Сначала я использую helm-semantic-or-imenuдля перехода к функции helm-define-key-with-subkeysи перемещения точки туда.

  • Затем я начинаю helm-semantic-or-imenuснова и helm-define-key-with-subkeysпредварительно выбран.

  • Затем я перемещаю точку в переменную helm-map и helm-semantic-or-imenuснова выполняю две функции: helm-next-source и helm-previous-source. На этот раз вместо того, чтобы показывать текущий семантический тег, в котором я работаю (это helm-map), он показывает два других тега в буфере Helm Semantic. Это потому, что я передал команду перед аргументом префикса.

Также эта демонстрация в Emacs Lisp, она работает и для C / C ++, и она более гибкая, если у вас очень длинный интерфейс функций.

Хелм-семантический или-imenu

Ту До
источник
Как вы добились того, чтобы это работало на Лисп (особенно на Элиспе)? Я оценил ваш код, emacs -Qно я не понимаю, какое поведение вы описываете при просмотре, например org.el.
itjeyd
Я обновил ответ. Вы должны попробовать это с Semantic от bzr.
Ту До
1
Совершенно не по теме. Спасибо, что познакомили меня с режимом Nyan. Мое кодирование никогда не будет прежним.
purple_arrows
6

Вы можете включить which-function-mode, выполнив

M-x which-function-mode RET

Чтобы сделать настройку постоянной, добавьте

(which-function-mode 1)

в ваш файл инициализации.

Из документации:

Переключение режима отображения строки текущей функции (режим какой функции). [...]

Какой функциональный режим является глобальным второстепенным режимом. При включении текущее имя функции постоянно отображается в строке режима в некоторых основных режимах.

Примечание : название на самом деле не говорит об этом, но это работает не только для «функций», но и для других типов областей. Например, in org-mode, which-function-modeотображает заголовок текущего поддерева.

itsjeyd
источник
Спасибо! Мне нравится, когда имя функции отображается в строке режима. Некоторые дела не очень хорошо работали, хотя. Как и метод в структуре в пространстве имен, отображалось только имя пространства имен
log0