Subject: Emacs ignores the ":aspect=N" specification of xft fonts

From: Stefan Monnier <[email-masked]>
Date: Mon, 18 Aug 2014 23:01:39 -0400

Package: Emacs
Version: 24.4.50

Try:

   % xterm -fa 'DejaVu Sans Mono:pixelsize=10'
   % xterm -fa 'DejaVu Sans Mono:pixelsize=10:aspect=0.5'

See how ":aspect=0.5" changes the aspect ratio of characters.

and then compare:

   % emacs -Q -fn 'DejaVu Sans Mono:pixelsize=10'
   % emacs -Q -fn 'DejaVu Sans Mono:pixelsize=10:aspect=0.5'

and notice how Emacs does not honor the ":aspect=0.5" specification.

In my particular use-case (which is probably not that uncommon in
Emacs's mostly monospaced world), an even better feature would be to be
able to say "choose `size' and `aspect' such that it uses the same
number of pixels vertically and horizontally as the default face".

        Stefan

In GNU Emacs 24.4.50.1 (x86_64-unknown-linux-gnu, X toolkit, Xaw3d scroll bars)
 of 2014-07-19 on pastel
Repository revision: [email-masked]
Windowing system distributor `The X.Org Foundation', version 11.0.11501000
System Description:	Debian GNU/Linux 7.6 (wheezy)

Configured using:
 `configure -C --enable-checking --enable-check-lisp-object-type
 'CFLAGS=-Wall -g3 -Og -Wno-pointer-sign'
 PKG_CONFIG_PATH=/home/monnier/lib/pkgconfig'

Configured features:
XAW3D XPM JPEG TIFF GIF PNG SOUND GPM DBUS NOTIFY GNUTLS LIBXML2
FREETYPE M17N_FLT LIBOTF XFT ZLIB

Important settings:
  value of $LANG: fr_CH.UTF-8
  locale-coding-system: utf-8-unix

Major mode: InactiveMinibuffer

Minor modes in effect:
  semantic-minor-modes-format: ((:eval (if (or semantic-highlight-edits-mode semantic-show-unmatched-syntax-mode semantic-idle-scheduler-mode)  S)))
  dired-omit-mode: t
  csv-field-index-mode: t
  shell-dirtrack-mode: t
  diff-auto-refine-mode: t
  electric-pair-mode: t
  url-handler-mode: t
  global-reveal-mode: t
  reveal-mode: t
  auto-insert-mode: t
  savehist-mode: t
  minibuffer-electric-default-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  global-prettify-symbols-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  line-number-mode: t

Recent input:
<switch-frame> <switch-frame> <switch-frame> <help-echo> 
<switch-frame> <down-mouse-1> <mouse-movement> <mouse-1> 
<backspace> <backspace> <backspace> <backspace> <backspace> 
<backspace> <backspace> <backspace> <backspace> a s 
p e c t = 0 . 5 <help-echo> <help-echo> <down-mouse-2> 
<switch-frame> <switch-frame> <left> <right> <right> 
<left> <left> <right> <right> <switch-frame> <switch-frame> 
<help-echo> <help-echo> <help-echo> <help-echo> <help-echo> 
<help-echo> <switch-frame> <switch-frame> <switch-frame> 
<switch-frame> <switch-frame> <switch-frame> <switch-frame> 
<switch-frame> <switch-frame> <help-echo> <switch-frame> 
<switch-frame> <switch-frame> M-x i e l m <return> 
<switch-frame> <switch-frame> C-h f s e t - f a c e 
- f o n <tab> <return> <help-echo> <switch-frame> <help-echo> 
<switch-frame> <switch-frame> <help-echo> <switch-frame> 
<switch-frame> <down-mouse-5> <mouse-5> <down-mouse-4> 
<mouse-4> <switch-frame> <switch-frame> <switch-frame> 
<switch-frame> <help-echo> <help-echo> <down-mouse-2> 
<mouse-1> <switch-frame> <down-mouse-1> <mouse-1> <switch-frame> 
<switch-frame> <switch-frame> <switch-frame> <switch-frame> 
<switch-frame> <switch-frame> <switch-frame> <switch-frame> 
<switch-frame> <switch-frame> <switch-frame> C-e <right> 
<switch-frame> <switch-frame> <switch-frame> <switch-frame> 
<switch-frame> <switch-frame> <switch-frame> <switch-frame> 
<switch-frame> <switch-frame> <switch-frame> <switch-frame> 
<switch-frame> <switch-frame> <switch-frame> <switch-frame> 
<switch-frame> <switch-frame> <switch-frame> <switch-frame> 
<switch-frame> <switch-frame> <switch-frame> <switch-frame> 
<switch-frame> <switch-frame> <switch-frame> <switch-frame> 
<switch-frame> <help-echo> <switch-frame> <switch-frame> 
<switch-frame> ( s e t - f a c e - f o n <tab> SPC 
' f o n t - l o - s t r - f <tab> SPC " D e j a V u 
SPC S a n s SPC M o n o C-e <return> M-p <left> <left> 
= <backspace> : p i x e l s i z e = 1 3 C-e <return> 
M-p <left> <left> <backspace> 0 C-e <return> M-p <left> 
<left> <backspace> 3 <return> M-p <left> <left> <backspace> 
2 C-e <return> M-p <left> <left> : a s p e c t = 0 
. 5 C-e <return> <help-echo> <switch-frame> <switch-frame> 
<switch-frame> <switch-frame> <switch-frame> <switch-frame> 
<help-echo> <switch-frame> <help-echo> <switch-frame> 
<switch-frame> <switch-frame> <switch-frame> <switch-frame> 
<switch-frame> <switch-frame> <switch-frame> <switch-frame> 
<switch-frame> <switch-frame> <switch-frame> <switch-frame> 
<switch-frame> <switch-frame> <switch-frame> <switch-frame> 
<switch-frame> M-x r e p o - e m - b <tab> <return

Recent messages:
Creating customization setup...done
Mark set

Char: u (117, #o165, #x75) point=12366606 of 54209 (22817%) <12345678-12399887> column=24
user-error: Node has no Up
Mark saved where search started
funcall-interactively: End of buffer
Warning: turn-on-eldoc-mode is obsolete!

Warning: turn-on-eldoc-mode is obsolete!

Load-path shadows:
/home/monnier/src/emacs/elpa/packages/ada-mode/ada-mode hides /home/monnier/src/emacs/work/lisp/progmodes/ada-mode

Features:
(mail-extr emacsbug crm dabbrev bbdb-com bbdb timezone quail conf-mode
reposition log-view vc-annotate tabify imenu man sh-script descr-text
reftex-sel reftex-parse reftex-toc tramp-cache tramp-sh tramp
tramp-compat tramp-loaddefs trampver sml-mode smie srecode/document
semantic/doc srecode/semantic semantic/senator srecode/extract
srecode/insert srecode/filters srecode/find srecode/map srecode/ctxt
srecode/compile srecode/args ede/speedbar ede/files ede ede/base
ede/auto ede/source eieio-speedbar eieio-custom srecode/dictionary
srecode/table srecode informat texinfo bat-mode grep cmuscheme wdired
ls-lisp find-dired dired-aux dired-x rect csv-mode parse-time sgml-mode
two-column skeleton reftex-dcr reftex reftex-vars tex-mode compile shell
latexenc view cal-china lunar solar cal-dst cal-bahai cal-islam
cal-hebrew holidays hol-loaddefs cal-french diary-lib diary-loaddefs
cal-move completion nnheader semantic/bovine/c semantic/db-mode
semantic/decorate/include semantic/decorate/mode semantic/decorate pulse
semantic/bovine/c-by semantic/lex-spp semantic/idle semantic/bovine/gcc
semantic/dep semantic/bovine semantic/analyze/refs semantic/db-find
semantic/db-ref semantic/analyze semantic/sort semantic/scope
semantic/analyze/fcn semantic/db eieio-base semantic/ctxt
semantic/format semantic/tag-ls semantic/find semantic/util-modes
semantic/util semantic semantic/tag semantic/lex semantic/fw mode-local
cedet hideif cpp cmacexp cc-mode cc-fonts cc-awk cc-guess cc-menus
cc-cmds cc-styles cc-align cc-engine cc-langs cc-vars cc-defs
smerge-mode mule-diag ffap whitespace diff-mode image-file iimage
epa-file epa derived epg epg-config misearch multi-isearch sort
mule-util network-stream starttls tls mpc executable copyright xscheme
warnings unsafep trace testcover shadow scheme re-builder profiler pcase
inf-lisp ielm pp ert elp edebug cl-indent eieio-opt speedbar sb-image
ezimage dframe org-clock org-colview org-table org-protocol org-mouse
org-mobile org-agenda org-indent org-feed org-crypt org-capture
org-attach vc-git org-id org-element org-rmail org-mhe org-irc org-info
org-gnus org-docview org-bibtex bibtex org-bbdb org-w3m org org-macro
org-footnote org-pcomplete pcomplete org-list org-faces org-entities
org-version ob-emacs-lisp ob ob-tangle org-src ob-ref ob-lob ob-table
ob-keys ob-exp ob-comint comint ansi-color ob-core ob-eval org-compat
org-macs org-loaddefs find-func cal-menu calendar cal-loaddefs cus-edit
cus-start cus-load wid-edit autorevert filenotify doc-view jka-compr
image-mode debug filecache bug-reference log-edit message sendmail dired
format-spec rfc822 mml mml-sec mm-decode mm-bodies mm-encode mail-parse
rfc2231 rfc2047 rfc2045 ietf-drums mailabbrev mail-utils gmm-utils
mailheader ring pcvs-util add-log vc-bzr vc-sccs vc-svn vc-cvs vc-rcs
vc-dir ewoc vc vc-dispatcher server noutline outline easy-mmode flyspell
ispell eldoc checkdoc thingatpt help-mode advice elec-pair url-handlers
url-parse auth-source eieio byte-opt bytecomp byte-compile cconv
eieio-core gnus-util mm-util help-fns mail-prsvr password-cache url-vars
reveal autoinsert proof-site proof-autoloads cl-macs cl gv pg-vars
time-date savehist minibuf-eldef disp-table finder-inf edmacro kmacro
cl-loaddefs cl-lib info easymenu package bbdb-autoloads agda2
vm-autoloads tooltip electric uniquify ediff-hook vc-hooks
lisp-float-type mwheel x-win x-dnd tool-bar dnd fontset image regexp-opt
fringe tabulated-list newcomment lisp-mode prog-mode register page
menu-bar rfn-eshadow timer select scroll-bar mouse jit-lock font-lock
syntax font-core frame cham georgian utf-8-lang misc-lang vietnamese
tibetan thai tai-viet lao korean japanese hebrew greek romanian slovak
czech european ethiopic indian cyrillic chinese case-table epa-hook
jka-cmpr-hook help simple abbrev minibuffer nadvice loaddefs button
faces cus-face macroexp files text-properties overlay sha1 md5 base64
format env code-pages mule custom widget hashtable-print-readable
backquote make-network-process dbusbind inotify dynamic-setting
font-render-setting x-toolkit x multi-tty emacs)

Memory information:
((conses 8 868800 123937)
 (symbols 24 54520 0) (miscs 20 18726 738) (strings 16 172745 19909)
 (string-bytes 1 6163889)
 (vectors 8 97200) (vector-slots 4 2966948 242924) (floats 8 1173 1182)
 (intervals 28 73818 63)
 (buffers 512 117) (heap 1024 1011592 2597))