Crea un nuovo fotogramma con solo la linea di modalità


13

Voglio creare un nuovo frame che non contenga altro che la linea di modalità. Soprattutto non un buffer di file.

Perché ne ho bisogno? Uso l'orologio in modalità org per programmare il mio lavoro. La modalità organizzazione visualizza il timer per l'attività corrente su cui sto lavorando nella riga della modalità e aggiorna il timer in tempo reale. Uso app diverse da Emacs, quindi quando passo ad esse (ad es. Quando utilizzo il browser o il terminale) voglio comunque essere in grado di guardare il timer in esecuzione. Pensavo di poter creare un nuovo frame, ma quando ora faccio clic sul timer nella riga della modalità, il file .org viene aperto nel nuovo frame (che è già ridimensionato per mostrare solo la modalità) invece di tornare a nel primo fotogramma.

Ecco come appare la mia linea di modalità (la barra blu): questo è tutto ciò che voglio sul nuovo frame:

inserisci qui la descrizione dell'immagine

(Alla fine dovrò capire come far apparire il nuovo frame sempre in primo piano, ma questo è al di fuori dell'ambito di questa domanda)

Uso OS X se questo è rilevante.


1
Solo un avvertimento, sto lavorando su alcuni script elisp e uno macruby che mostreranno le informazioni sulla riga della modalità org nella barra dei menu OSX. Funziona per me ma cercherò di avvolgerlo bene.
Jordon Biondo,

@JordonBiondo - eccellente! la tua soluzione potrebbe rivelarsi addirittura migliore di quella che sto facendo qui. non vedere l'ora di. per favore tienimi aggiornato.
Sridhar Ratnakumar,

Dovresti ripetere e riformulare la tua domanda, se senti davvero che le risposte che stai dicendo " Eccellente! " Per rispondervi. Perché, per quanto posso dire, non rispondono alla tua richiesta di un frame con " nient'altro che una linea di modalità " - affatto (e dubito che qualsiasi risposta lo farà). IOW, se hai rilassato il tuo obiettivo dalla formulazione originale della tua richiesta, ti preghiamo di considerare di aggiornare la domanda di conseguenza.
Estratto il

Sono d'accordo, dopo aver letto, sembrava davvero che OP avesse un problema specifico, ma chiedevo solo una soluzione, non la soluzione migliore.
Jordon Biondo,

@Drew - Suggerisci qualche modifica specifica? La soluzione originale di PythonNut risponde alla mia richiesta originale. Si noti che ho detto "Soprattutto non un buffer di file." E la sua soluzione, sebbene crei un buffer vuoto, non porta alla visualizzazione di buffer di file nel nuovo frame.
Sridhar Ratnakumar,

Risposte:


7

L'estensione della risposta di Jorgen Schäfer con il suggerimento di Matthew Piziak produce il seguente frammento:

(with-current-buffer (generate-new-buffer "*empty*")
  (make-frame '((minibuffer . nil)
                 (unsplittable . t)
                 (buffer-predicate . (lambda (x) nil))
                 (height . 2)
                 (left-fringe . 0)
                 (right-fringe . 0)
                 (tool-bar-lines . 0)
                 (menu-bar-lines . 0)))
  (set-window-dedicated-p
    (get-buffer-window (current-buffer) t) t))

Per quanto ne so, questo blocca correttamente la finestra su un buffer vuoto. Il tentativo di passare a un altro buffer aprirà il buffer in una finestra esistente nel frame principale.


Eccellente, ho verificato che funzioni. Un modo per fare in modo che il nuovo frame erediti la dimensione del font (e il nome del font) del frame principale? Inoltre, è possibile *empty* All L1 (Fundamental)rimuovere le parti ridondanti specifiche del buffer della riga della modalità - -? Ecco come appare il mio: i.imgur.com/iOLw57c.png
Sridhar Ratnakumar,

@SridharRatnakumar Fortunatamente, rimuovere le informazioni sulla linea di modalità extra è banale. Ho modificato la mia risposta per includerla. Non sono del tutto sicuro di cosa intendi preservando il carattere? Il buffer non è vuoto?
PythonNut,

Mi riferivo alla proprietà font del testo nella riga della modalità (non nel buffer vuoto).
Sridhar Ratnakumar,

ah, il tuo codice successivo ha cancellato anche la linea di modalità del frame principale! Se ciò non è possibile, ripristiniamo tale modifica e accetterò la tua risposta (soddisfa la domanda).
Sridhar Ratnakumar,

L'ho appena notato anch'io. L'ho risolto. Il carattere della linea di modalità non cambia quando lo faccio, quindi non sono sicuro di cosa accada.
PythonNut,

5

Questo è il meglio che ho potuto inventare:

(with-current-buffer (generate-new-buffer "*empty*")
  (make-frame '((minibuffer . nil)
                (unsplittable . t)
                (buffer-predicate . (lambda (x) nil))
                (height . 2)
                (left-fringe . 0)
                (right-fringe . 0)
                (tool-bar-lines . 0)
                (menu-bar-lines . 0))))

Non vedo un modo per disabilitare almeno una finestra con un buffer lì, ma quella visualizzata usando questo frammento non è associata ad alcun file. Il buffer-predicatelà impedisce il frame venga scelto di visualizzare qualsiasi (altri) i respingenti, quindi se si può trattare con un'ulteriore riga vuota, questo dovrebbe farlo.


Non funziona come previsto. I buffer sono ancora attivati ​​nel nuovo frame. Ecco una gif animata per illustrare: i.imgur.com/07Q3tcW.gifv
Sridhar Ratnakumar,

2
L'uso display-buffer-alistpotrebbe essere la soluzione a questo.
Kaushal Modi,

Non so perché l'uso dell'org qui non aderisca al buffer-predicate. L'uso display-buffer-alistpotrebbe essere davvero un'idea, ma non so come usarlo per impedire l'utilizzo di un frame specifico.
Jorgen Schäfer,

2
Questo potrebbe essere risolto con set-window-dedicated-p?
Matthew Piziak,

1
Il buffer-predicateè, secondo informazioni, utilizzato solo dalla other-bufferfunzione, cioè non impedisce ad altre funzioni di visualizzare qualsiasi tampone del telaio.
politza,


3

Soluzione per visualizzare le informazioni sull'orologio nella barra dei menu OSX

Ecco una soluzione alternativa al problema che hai specificato:

Uso app diverse da Emacs, quindi quando passo ad esse (ad es. Quando utilizzo il browser o il terminale) voglio comunque essere in grado di guardare il timer in esecuzione.

Puoi usarlo per visualizzare le informazioni da org-clock nella barra dei menu di osx che dovresti quasi sempre vedere.

https://github.com/jordonbiondo/osx-org-clock-menubar Disponibile su MELPA

Nota che questo richiede macruby.

Come appare mentre sei connesso.

inserisci qui la descrizione dell'immagine


1
Una semplice implementazione che non si basa su macruby può essere fatta con emacsclient -e "(org-clock-get-clocked-time)"e bitbar: getbitbar.com
mankoff

È fantastico, dovresti scrivere una soluzione!
Jordon Biondo,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.