source - emacs para mac
Si el marco llamado "xyz" existe, entonces cambie a ese marco (2)
¿Podría alguien darme la mano con una función que detecta si existe un cuadro llamado "xyz" y, de ser así, cambiar a ese marco? Estoy usando frame-cmds
para dar a cada cuadro un nombre definido por el usuario: http://www.emacswiki.org/emacs/frame-cmds.el
Me imagino que es similar a un buffer, pero no encuentro nada en Google. Aquí está la función buffer:
(defun buffer-exists (bufname)
(not (eq nil (get-buffer bufname))))
(defun lawlist-switch-to-buffer-xyz ()
(interactive)
(if (buffer-exists "xyz")
(switch-to-buffer "xyz") ))
Aquí hay una publicación semi relacionada: https://superuser.com/questions/358037/emacsclient-create-a-frame-if-a-frame-does-not-exist
EDITAR (15 de septiembre de 2014): modificó la función ido-switch-frame
para hacer frame-to
a let-bound variable, y eliminó el message
. Se eliminaron las ediciones anteriores, ya que las funciones get-a-frame
y get-frame-name
escritas por Drew Adams son suficientes cuando se utilizan junto con select-frame-set-input-focus
; consulte su respuesta a continuación.
(defun ido-switch-frame ()
(interactive)
(when (not (minibufferp))
(let* (
(frames (frame-list))
(frame-to (ido-completing-read "Select Frame: "
(mapcar (lambda (frame) (frame-parameter frame ''name)) frames))))
(catch ''break
(while frames
(let ((frame (car frames)))
(if (equal (frame-parameter frame ''name) frame-to)
(throw ''break (select-frame-set-input-focus frame))
(setq frames (cdr frames)))))))))
Recibí tu solicitud de "una función que detecta si existe un marco llamado" xyz ": ya lo tienes, ya que dices que estás usando frame-cmds.el , que requiere frame-fns.el --- Función
get-a-frame
hace precisamente eso.Icicles proporciona multi-comando
icicle-select-frame
, que te permite elegir fotogramas por nombre usando compleción.
Puede haber soluciones más elegantes pero esto hace el trabajo:
(defun switch-to-frame (frame-name)
(interactive "sFrame name:")
(let ((frames (frame-list)))
(catch ''break
(while frames
(let ((frame (car frames)))
(if (equal (frame-parameter frame ''name) frame-name)
(throw ''break (select-frame-set-input-focus frame))
(setq frames (cdr frames))))))))