From: Kaushal Modi <kaushal.modi@gmail.com>
To: Help Gnu Emacs mailing list <help-gnu-emacs@gnu.org>
Subject: Understanding after-make-frame-functions
Date: Mon, 16 May 2016 23:35:15 +0000 [thread overview]
Message-ID: <CAFyQvY0-ej8wyMhRFd7ZuODZo8xKZQoB+9nfZN9MVty9J=fUrw@mail.gmail.com> (raw)
Hi all,
I have certain code in my config like the find-font function call, which I
need to have in a after-make-frame-functions hook if I want that to work
correctly in an emacsclient session. So I have it so, and it works fine.
But I just learnt that that hook is apparently not called when I launch
emacs in a non-daemon mode (plain old emacs&).
Here is a little snippet for testing
===== temp.el =====
(add-hook 'after-make-frame-functions (lambda (frame) (message "frame:
%S")))
=====
When you run "emacs -Q -l temp.el&", the above message will not be printed.
But it prints fine when emacs is launched in daemon mode.
So I need to add the find-font call in window-setup-hook (which non-daemon
emacs can see but emacsclient cannot. Is that right?).
So I have ended up with few code snippets in both
after-make-frame-functions and in window-setup-hook. I have the actual
snippets from my config at the end of this email, in the case they come
helpful in understanding my problem statement.
(1) Is the above after-make-frame-functions behavior specific to daemon
sessions as expected? If so, I was unable to find reference to that in the
emacs/elisp manual.
(2) Is window-setup-hook supposed to run only in non-daemon emacs?
(3) What would be a more concise manner to do stuff like linum activation,
find-font call, etc. correctly in both emacs and emacsclient?
Thanks.
--
Kaushal
##########
===== (in init.el) =====
;;
https://github.com/kaushalmodi/.emacs.d/blob/fa33440cc16c0601ad55d94a762a03f4f7f66a50/init.el#L324-L332
(defun modi/symbola-font-check (&optional frame)
;; The below `select-frame' form is required for the `find-font'
;; to work correctly when using emacs daemon (emacsclient).
(when frame
(select-frame frame))
(require 'setup-symbola))
(if (daemonp) ; only for emacsclient launches
(add-hook 'after-make-frame-functions #'modi/symbola-font-check)
(add-hook 'window-setup-hook #'modi/symbola-font-check))
=====
===== setup-symbola.el =====
;;
https://github.com/kaushalmodi/.emacs.d/blob/fa33440cc16c0601ad55d94a762a03f4f7f66a50/setup-files/setup-symbola.el
(defvar font-symbola-p nil
"If non-nil, Symbola font is available on the system.")
;; Set `font-symbola-p' to t if Symbola font is available.
(when (find-font (font-spec :name "Symbola"))
;; Manually choose a fallback font for Unicode
;;
http://endlessparentheses.com/manually-choose-a-fallback-font-for-unicode.html
(set-fontset-font "fontset-default" nil (font-spec :size 20 :name
"Symbola"))
(setq font-symbola-p t))
(provide 'setup-symbola)
=====
I do the above so that code snippets using unicode available only in
Symbola font can be nested in a "(with-eval-after-load 'setup-symbola (when
font-symbola-p ..))" form.
===== (in setup-linum.el) =====
;;
https://github.com/kaushalmodi/.emacs.d/blob/fa33440cc16c0601ad55d94a762a03f4f7f66a50/setup-files/setup-linum.el#L169-L171
(if (daemonp) ; only for emacsclient launches
(add-hook 'after-make-frame-functions #'my-fn-to-enable-linum)
(add-hook 'window-setup-hook #'my-fn-to-enable-linum))
=====
I get linum font error when running emacsclient if I do not put linum
enabling in after-make-frame-functions hook.
--
--
Kaushal Modi
next reply other threads:[~2016-05-16 23:35 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-16 23:35 Kaushal Modi [this message]
2016-05-16 23:42 ` Understanding after-make-frame-functions Kaushal Modi
2016-05-17 3:39 ` Eli Zaretskii
2016-05-17 3:44 ` Eli Zaretskii
2016-05-17 16:15 ` Kaushal Modi
2016-05-17 16:36 ` Eli Zaretskii
2016-05-17 18:08 ` Kaushal Modi
2016-05-17 20:18 ` Eli Zaretskii
2016-05-18 2:31 ` Kaushal Modi
2016-05-18 2:39 ` Eli Zaretskii
2016-05-18 2:46 ` Kaushal Modi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CAFyQvY0-ej8wyMhRFd7ZuODZo8xKZQoB+9nfZN9MVty9J=fUrw@mail.gmail.com' \
--to=kaushal.modi@gmail.com \
--cc=help-gnu-emacs@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).