Mostrar el comienzo de un ámbito cuando está fuera de la pantalla

12

Me gustaría mostrar la parte inicial de un osciloscopio cuando este salga de la pantalla.

Ejemplo:

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

Esto podría funcionar para muchos lenguajes de programación, pero estoy pensando principalmente en C ++.

Para aclarar un poco más y para aquellos que conocen VS, me gustaría una característica similar a la que existe para Visual Studio. es decir, colocar el cursor al final de un alcance muestra el comienzo del alcance en la parte superior del búfer de edición.

¿Esta característica ya existe en alguna parte?

log0
fuente
Tengo curiosidad, ¿me ayudó mi respuesta?
Tu Do
@TuDo sí! Solo tuve tiempo de echar un vistazo. Ya tenía semántica y solo activar el modo global-semántico-stickyfunc funcionó muy bien. Gracias. Mi problema ahora es que el color no hace que el encabezado sea legible ..
log0

Respuestas:

14

Si está escribiendo C / C ++ / Java / Emacs Lisp / Python, entonces semantic-sticky-func-mode hará lo que quiera.

NOTA : Esto parece estar funcionando con CEDET de Git, no con CEDET de inventario actualmente en Emacs 24.4. Para obtener Emacs de Git:

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

Y cargue CEDET primero sobre todo lo demás en su archivo init:

(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"))

Cuando se habilita, este modo muestra que el punto de función se encuentra actualmente en la primera línea del búfer actual. Esto es útil cuando tiene una función muy larga que se extiende más que una pantalla, y no tiene que desplazarse hacia arriba para leer el nombre de la función y luego desplazarse hacia abajo a la posición original.

Muestra la interfaz de función completa (tipo de retorno, nombre de función y parámetros), no solo el nombre de función.

Para habilitarlo, ponga este código en su archivo init:

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

ACTUALIZACIÓN : Uno de los problemas con la corriente semantic-stickyfunc-modees que no muestra todos los parámetros que están dispersos en varias líneas. Para resolver este problema, creé el paquete stickyfunc-mejorar .

DEMO :

Aquí hay una demostración en C:

semántico-pegajoso-func-mode-c

Aquí hay una demostración en Emacs Lisp:

semántico-pegajoso-func-mode-elisp

ACTUALIZACIÓN : Alternativamente, puede usar helm-semantic-or-imenu . Cuando está dentro de una función y ejecuta el comando, el cursor se coloca directamente en la función de la lista, para que siempre pueda ver la interfaz de la función completa. MANIFESTACIÓN:

  • Primero, uso helm-semantic-or-imenupara moverme a la función helm-define-key-with-subkeysy mover el punto allí.

  • Entonces, comienzo de helm-semantic-or-imenunuevo y helm-define-key-with-subkeyses preseleccionado.

  • Luego, muevo el punto a la variable helm-map y ejecuto helm-semantic-or-imenunuevamente en dos funciones: helm-next-source y helm-previous-source. Esta vez, en lugar de mostrar la etiqueta semántica actual en la que estoy operando (que es helm-map), muestra las otras dos etiquetas en el búfer Helm Semantic. Esto se debe a que proporcioné un argumento de prefijo antes de ejecutar el comando.

Además, esta demostración está en Emacs Lisp, también funciona para C / C ++ y es más flexible si tiene una interfaz de función realmente larga.

timón-semántico o imenu

Tu Do
fuente
¿Cómo conseguiste que esto funcionara para Lisp (Elisp en particular)? Evalué su código en emacs -Q, pero no consigo el comportamiento que describes cuando hojeo, por ejemplo, org.el.
itsjeyd
Actualicé la respuesta. Deberías probarlo con Semantic de bzr.
Tu Do
1
Totalmente fuera de tema. Gracias por presentarme al modo Nyan. Mi codificación nunca volverá a ser la misma.
purple_arrows
6

Puedes encender which-function-modehaciendo

M-x which-function-mode RET

Para hacer que la configuración sea permanente, agregue

(which-function-mode 1)

a su archivo de inicio.

De la documentación:

Alternar la visualización de la línea de modo de la función actual (qué modo de función). [...]

Qué modo de función es un modo menor global. Cuando está habilitado, el nombre de la función actual se muestra continuamente en la línea de modo , en ciertos modos principales.

Nota : El nombre realmente no lo sugiere, pero esto funciona no solo para "funciones", sino también para otros tipos de ámbitos. Por ejemplo, en org-mode, which-function-modemuestra el encabezado del subárbol actual.

itsjeyd
fuente
¡Gracias! Me gusta el nombre de la función que se muestra en la línea de modo. Sin embargo, algunos casos no funcionaban muy bien. Al igual que el método en una estructura en un espacio de nombres, solo se muestra el nombre del espacio de nombres
log0