* bug#8863: 23.3; Strikethrough won't display on MacOS @ 2011-06-14 16:05 Dave Abrahams 2011-06-18 21:48 ` Chong Yidong ` (2 more replies) 0 siblings, 3 replies; 8+ messages in thread From: Dave Abrahams @ 2011-06-14 16:05 UTC (permalink / raw) To: 8863 Title says it all. Faces with the "strikethrough" property set show up as un-struck-through. In GNU Emacs 23.3.1 (x86_64-apple-darwin, NS apple-appkit-1038.35) of 2011-03-09 on black.porkrind.org Windowing system distributor `Apple', version 10.3.1038 configured using `configure '--host=x86_64-apple-darwin' '--build=i686-apple-darwin' '--with-ns' 'build_alias=i686-apple-darwin' 'host_alias=x86_64-apple-darwin' 'CC=gcc -mmacosx-version-min=10.5'' Important settings: value of $LC_ALL: nil value of $LC_COLLATE: nil value of $LC_CTYPE: nil value of $LC_MESSAGES: nil value of $LC_MONETARY: nil value of $LC_NUMERIC: nil value of $LC_TIME: nil value of $LANG: nil value of $XMODIFIERS: nil locale-coding-system: nil default enable-multibyte-characters: t Major mode: Magit Minor modes in effect: magit-status-mode: t diff-auto-refine-mode: t shell-dirtrack-mode: t me-minor-mode: t show-paren-mode: t server-mode: t ido-everywhere: t global-auto-revert-mode: t delete-selection-mode: t tooltip-mode: t mouse-wheel-mode: t menu-bar-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t auto-encryption-mode: t auto-compression-mode: t line-number-mode: t transient-mark-mode: t Recent input: SPC t h a t SPC <M-backspace> w h o s e SPC c o n t e n t s SPC w o u l d n ' t SPC c h a n g e C-n C-n C-n C-n C-n C-n C-e C-p C-p C-p C-p C-p C-p C-p C-e C-n C-n C-n C-n C-n C-n C-n C-n C-p C-x C-s C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p M-! M-p <return> C-n C-n C-n C-p C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-e C-, C-p C-e C-x g C-n C-n C-n C-n C-n <tab> <tab> <tab> <tab> <tab> <tab> <tab> <tab> <tab> <tab> <tab> C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-p C-n C-n C-n C-n C-p C-p M-x r e p o r t - e m <tab> <return> Recent messages: Auto-saving...done Mark set Mark saved where search started Mark set [3 times] Auto-saving...done Mark activated Saving file /Users/dave/.emacs.d/el-get/initsplit/initsplit.el... Wrote /Users/dave/.emacs.d/el-get/initsplit/initsplit.el (Shell command succeeded with no output) (No files need saving) Load-path shadows: /Users/dave/.emacs.d/el-get/wl-gravatar/gravatar hides /Users/dave/.emacs.d/el-get/gravatar/gravatar /Users/dave/.emacs.d/el-get/wl-gravatar/gravatar hides /Users/dave/.emacs.d/el-get/nognus/lisp/gravatar /Users/dave/.emacs.d/el-get/nognus/lisp/utf7 hides /Users/dave/.emacs.d/el-get/wanderlust/site-lisp/wl/utf7 /Users/dave/.emacs.d/el-get/nognus/lisp/smime hides /Users/dave/.emacs.d/el-get/semi/site-lisp/semi/smime /Users/dave/.emacs.d/el-get/nognus/lisp/pgg hides /Users/dave/.emacs.d/el-get/semi/site-lisp/semi/pgg /Users/dave/.emacs.d/el-get/nognus/lisp/pgg-pgp5 hides /Users/dave/.emacs.d/el-get/semi/site-lisp/semi/pgg-pgp5 /Users/dave/.emacs.d/el-get/nognus/lisp/pgg-pgp hides /Users/dave/.emacs.d/el-get/semi/site-lisp/semi/pgg-pgp /Users/dave/.emacs.d/el-get/nognus/lisp/pgg-parse hides /Users/dave/.emacs.d/el-get/semi/site-lisp/semi/pgg-parse /Users/dave/.emacs.d/el-get/nognus/lisp/pgg-gpg hides /Users/dave/.emacs.d/el-get/semi/site-lisp/semi/pgg-gpg /Users/dave/.emacs.d/el-get/nognus/lisp/pgg-def hides /Users/dave/.emacs.d/el-get/semi/site-lisp/semi/pgg-def /Users/dave/.emacs.d/el-get/nognus/lisp/sha1 hides /Users/dave/.emacs.d/el-get/flim/site-lisp/flim/sha1 /Users/dave/.emacs.d/el-get/nognus/lisp/sasl hides /Users/dave/.emacs.d/el-get/flim/site-lisp/flim/sasl /Users/dave/.emacs.d/el-get/nognus/lisp/sasl-ntlm hides /Users/dave/.emacs.d/el-get/flim/site-lisp/flim/sasl-ntlm /Users/dave/.emacs.d/el-get/nognus/lisp/sasl-digest hides /Users/dave/.emacs.d/el-get/flim/site-lisp/flim/sasl-digest /Users/dave/.emacs.d/el-get/nognus/lisp/sasl-cram hides /Users/dave/.emacs.d/el-get/flim/site-lisp/flim/sasl-cram /Users/dave/.emacs.d/el-get/nognus/lisp/ntlm hides /Users/dave/.emacs.d/el-get/flim/site-lisp/flim/ntlm /Users/dave/.emacs.d/el-get/nognus/lisp/md4 hides /Users/dave/.emacs.d/el-get/flim/site-lisp/flim/md4 /Users/dave/.emacs.d/el-get/nognus/lisp/hmac-md5 hides /Users/dave/.emacs.d/el-get/flim/site-lisp/flim/hmac-md5 /Users/dave/.emacs.d/el-get/nognus/lisp/hmac-def hides /Users/dave/.emacs.d/el-get/flim/site-lisp/flim/hmac-def /Users/dave/.emacs.d/el-get/nognus/lisp/hex-util hides /Users/dave/.emacs.d/el-get/flim/site-lisp/flim/hex-util /Users/dave/.emacs.d/el-get/nognus/lisp/sha1 hides /Applications/Emacs.app/Contents/Resources/lisp/sha1 /Users/dave/.emacs.d/el-get/nognus/lisp/pgg hides /Applications/Emacs.app/Contents/Resources/lisp/pgg /Users/dave/.emacs.d/el-get/nognus/lisp/pgg-pgp5 hides /Applications/Emacs.app/Contents/Resources/lisp/pgg-pgp5 /Users/dave/.emacs.d/el-get/nognus/lisp/pgg-pgp hides /Applications/Emacs.app/Contents/Resources/lisp/pgg-pgp /Users/dave/.emacs.d/el-get/nognus/lisp/pgg-parse hides /Applications/Emacs.app/Contents/Resources/lisp/pgg-parse /Users/dave/.emacs.d/el-get/nognus/lisp/pgg-gpg hides /Applications/Emacs.app/Contents/Resources/lisp/pgg-gpg /Users/dave/.emacs.d/el-get/nognus/lisp/pgg-def hides /Applications/Emacs.app/Contents/Resources/lisp/pgg-def /Users/dave/.emacs.d/el-get/nognus/lisp/password-cache hides /Applications/Emacs.app/Contents/Resources/lisp/password-cache /Users/dave/.emacs.d/el-get/nognus/lisp/md4 hides /Applications/Emacs.app/Contents/Resources/lisp/md4 /Users/dave/.emacs.d/el-get/nognus/lisp/hex-util hides /Applications/Emacs.app/Contents/Resources/lisp/hex-util /Users/dave/.emacs.d/el-get/nognus/lisp/format-spec hides /Applications/Emacs.app/Contents/Resources/lisp/format-spec /Users/dave/.emacs.d/el-get/nognus/lisp/dns-mode hides /Applications/Emacs.app/Contents/Resources/lisp/textmodes/dns-mode /Users/dave/.emacs.d/el-get/org-mode/lisp/org hides /Applications/Emacs.app/Contents/Resources/lisp/org/org /Users/dave/.emacs.d/el-get/org-mode/lisp/org-xoxo hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-xoxo /Users/dave/.emacs.d/el-get/org-mode/lisp/org-wl hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-wl /Users/dave/.emacs.d/el-get/org-mode/lisp/org-w3m hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-w3m /Users/dave/.emacs.d/el-get/org-mode/lisp/org-vm hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-vm /Users/dave/.emacs.d/el-get/org-mode/lisp/org-timer hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-timer /Users/dave/.emacs.d/el-get/org-mode/lisp/org-table hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-table /Users/dave/.emacs.d/el-get/org-mode/lisp/org-src hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-src /Users/dave/.emacs.d/el-get/org-mode/lisp/org-rmail hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-rmail /Users/dave/.emacs.d/el-get/org-mode/lisp/org-remember hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-remember /Users/dave/.emacs.d/el-get/org-mode/lisp/org-publish hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-publish /Users/dave/.emacs.d/el-get/org-mode/lisp/org-protocol hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-protocol /Users/dave/.emacs.d/el-get/org-mode/lisp/org-plot hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-plot /Users/dave/.emacs.d/el-get/org-mode/lisp/org-mouse hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-mouse /Users/dave/.emacs.d/el-get/org-mode/lisp/org-mobile hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-mobile /Users/dave/.emacs.d/el-get/org-mode/lisp/org-mhe hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-mhe /Users/dave/.emacs.d/el-get/org-mode/lisp/org-mew hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-mew /Users/dave/.emacs.d/el-get/org-mode/lisp/org-macs hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-macs /Users/dave/.emacs.d/el-get/org-mode/lisp/org-mac-message hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-mac-message /Users/dave/.emacs.d/el-get/org-mode/lisp/org-list hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-list /Users/dave/.emacs.d/el-get/org-mode/lisp/org-latex hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-latex /Users/dave/.emacs.d/el-get/org-mode/lisp/org-jsinfo hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-jsinfo /Users/dave/.emacs.d/el-get/org-mode/lisp/org-irc hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-irc /Users/dave/.emacs.d/el-get/org-mode/lisp/org-install hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-install /Users/dave/.emacs.d/el-get/org-mode/lisp/org-inlinetask hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-inlinetask /Users/dave/.emacs.d/el-get/org-mode/lisp/org-info hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-info /Users/dave/.emacs.d/el-get/org-mode/lisp/org-indent hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-indent /Users/dave/.emacs.d/el-get/org-mode/lisp/org-id hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-id /Users/dave/.emacs.d/el-get/org-mode/lisp/org-icalendar hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-icalendar /Users/dave/.emacs.d/el-get/org-mode/lisp/org-html hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-html /Users/dave/.emacs.d/el-get/org-mode/lisp/org-habit hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-habit /Users/dave/.emacs.d/el-get/org-mode/lisp/org-gnus hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-gnus /Users/dave/.emacs.d/el-get/org-mode/lisp/org-freemind hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-freemind /Users/dave/.emacs.d/el-get/org-mode/lisp/org-footnote hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-footnote /Users/dave/.emacs.d/el-get/org-mode/lisp/org-feed hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-feed /Users/dave/.emacs.d/el-get/org-mode/lisp/org-faces hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-faces /Users/dave/.emacs.d/el-get/org-mode/lisp/org-exp hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-exp /Users/dave/.emacs.d/el-get/org-mode/lisp/org-exp-blocks hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-exp-blocks /Users/dave/.emacs.d/el-get/org-mode/lisp/org-docbook hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-docbook /Users/dave/.emacs.d/el-get/org-mode/lisp/org-datetree hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-datetree /Users/dave/.emacs.d/el-get/org-mode/lisp/org-crypt hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-crypt /Users/dave/.emacs.d/el-get/org-mode/lisp/org-compat hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-compat /Users/dave/.emacs.d/el-get/org-mode/lisp/org-colview hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-colview /Users/dave/.emacs.d/el-get/org-mode/lisp/org-clock hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-clock /Users/dave/.emacs.d/el-get/org-mode/lisp/org-bibtex hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-bibtex /Users/dave/.emacs.d/el-get/org-mode/lisp/org-bbdb hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-bbdb /Users/dave/.emacs.d/el-get/org-mode/lisp/org-attach hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-attach /Users/dave/.emacs.d/el-get/org-mode/lisp/org-ascii hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-ascii /Users/dave/.emacs.d/el-get/org-mode/lisp/org-archive hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-archive /Users/dave/.emacs.d/el-get/org-mode/lisp/org-agenda hides /Applications/Emacs.app/Contents/Resources/lisp/org/org-agenda /Users/dave/.emacs.d/el-get/nognus/lisp/tls hides /Applications/Emacs.app/Contents/Resources/lisp/net/tls /Users/dave/.emacs.d/el-get/nognus/lisp/sasl hides /Applications/Emacs.app/Contents/Resources/lisp/net/sasl /Users/dave/.emacs.d/el-get/nognus/lisp/sasl-ntlm hides /Applications/Emacs.app/Contents/Resources/lisp/net/sasl-ntlm /Users/dave/.emacs.d/el-get/nognus/lisp/sasl-digest hides /Applications/Emacs.app/Contents/Resources/lisp/net/sasl-digest /Users/dave/.emacs.d/el-get/nognus/lisp/sasl-cram hides /Applications/Emacs.app/Contents/Resources/lisp/net/sasl-cram /Users/dave/.emacs.d/el-get/nognus/lisp/ntlm hides /Applications/Emacs.app/Contents/Resources/lisp/net/ntlm /Users/dave/.emacs.d/el-get/nognus/lisp/netrc hides /Applications/Emacs.app/Contents/Resources/lisp/net/netrc /Users/dave/.emacs.d/el-get/nognus/lisp/imap hides /Applications/Emacs.app/Contents/Resources/lisp/net/imap /Users/dave/.emacs.d/el-get/nognus/lisp/hmac-md5 hides /Applications/Emacs.app/Contents/Resources/lisp/net/hmac-md5 /Users/dave/.emacs.d/el-get/nognus/lisp/hmac-def hides /Applications/Emacs.app/Contents/Resources/lisp/net/hmac-def /Users/dave/.emacs.d/el-get/nognus/lisp/dns hides /Applications/Emacs.app/Contents/Resources/lisp/net/dns /Users/dave/.emacs.d/el-get/nognus/lisp/dig hides /Applications/Emacs.app/Contents/Resources/lisp/net/dig /Users/dave/.emacs.d/el-get/nognus/lisp/uudecode hides /Applications/Emacs.app/Contents/Resources/lisp/mail/uudecode /Users/dave/.emacs.d/el-get/wanderlust/site-lisp/wl/rfc2368 hides /Applications/Emacs.app/Contents/Resources/lisp/mail/rfc2368 /Users/dave/.emacs.d/el-get/nognus/lisp/hashcash hides /Applications/Emacs.app/Contents/Resources/lisp/mail/hashcash /Users/dave/.emacs.d/el-get/nognus/lisp/binhex hides /Applications/Emacs.app/Contents/Resources/lisp/mail/binhex /Users/dave/.emacs.d/el-get/nognus/lisp/yenc hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/yenc /Users/dave/.emacs.d/el-get/nognus/lisp/utf7 hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/utf7 /Users/dave/.emacs.d/el-get/nognus/lisp/starttls hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/starttls /Users/dave/.emacs.d/el-get/nognus/lisp/spam hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/spam /Users/dave/.emacs.d/el-get/nognus/lisp/spam-wash hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/spam-wash /Users/dave/.emacs.d/el-get/nognus/lisp/spam-stat hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/spam-stat /Users/dave/.emacs.d/el-get/nognus/lisp/spam-report hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/spam-report /Users/dave/.emacs.d/el-get/nognus/lisp/smime hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/smime /Users/dave/.emacs.d/el-get/nognus/lisp/smiley hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/smiley /Users/dave/.emacs.d/el-get/nognus/lisp/sieve hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/sieve /Users/dave/.emacs.d/el-get/nognus/lisp/sieve-mode hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/sieve-mode /Users/dave/.emacs.d/el-get/nognus/lisp/sieve-manage hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/sieve-manage /Users/dave/.emacs.d/el-get/nognus/lisp/score-mode hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/score-mode /Users/dave/.emacs.d/el-get/nognus/lisp/rfc2231 hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/rfc2231 /Users/dave/.emacs.d/el-get/nognus/lisp/rfc2104 hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/rfc2104 /Users/dave/.emacs.d/el-get/nognus/lisp/rfc2047 hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/rfc2047 /Users/dave/.emacs.d/el-get/nognus/lisp/rfc2045 hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/rfc2045 /Users/dave/.emacs.d/el-get/nognus/lisp/rfc1843 hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/rfc1843 /Users/dave/.emacs.d/el-get/nognus/lisp/qp hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/qp /Users/dave/.emacs.d/el-get/nognus/lisp/pop3 hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/pop3 /Users/dave/.emacs.d/el-get/nognus/lisp/nnweb hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nnweb /Users/dave/.emacs.d/el-get/nognus/lisp/nnvirtual hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nnvirtual /Users/dave/.emacs.d/el-get/nognus/lisp/nntp hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nntp /Users/dave/.emacs.d/el-get/nognus/lisp/nnspool hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nnspool /Users/dave/.emacs.d/el-get/nognus/lisp/nnrss hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nnrss /Users/dave/.emacs.d/el-get/nognus/lisp/nnoo hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nnoo /Users/dave/.emacs.d/el-get/nognus/lisp/nnnil hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nnnil /Users/dave/.emacs.d/el-get/nognus/lisp/nnml hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nnml /Users/dave/.emacs.d/el-get/nognus/lisp/nnmh hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nnmh /Users/dave/.emacs.d/el-get/nognus/lisp/nnmbox hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nnmbox /Users/dave/.emacs.d/el-get/nognus/lisp/nnmairix hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nnmairix /Users/dave/.emacs.d/el-get/nognus/lisp/nnmaildir hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nnmaildir /Users/dave/.emacs.d/el-get/nognus/lisp/nnmail hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nnmail /Users/dave/.emacs.d/el-get/nognus/lisp/nnir hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nnir /Users/dave/.emacs.d/el-get/nognus/lisp/nnimap hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nnimap /Users/dave/.emacs.d/el-get/nognus/lisp/nnheader hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nnheader /Users/dave/.emacs.d/el-get/nognus/lisp/nngateway hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nngateway /Users/dave/.emacs.d/el-get/nognus/lisp/nnfolder hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nnfolder /Users/dave/.emacs.d/el-get/nognus/lisp/nneething hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nneething /Users/dave/.emacs.d/el-get/nognus/lisp/nndraft hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nndraft /Users/dave/.emacs.d/el-get/nognus/lisp/nndoc hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nndoc /Users/dave/.emacs.d/el-get/nognus/lisp/nndir hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nndir /Users/dave/.emacs.d/el-get/nognus/lisp/nndiary hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nndiary /Users/dave/.emacs.d/el-get/nognus/lisp/nnbabyl hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nnbabyl /Users/dave/.emacs.d/el-get/nognus/lisp/nnagent hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/nnagent /Users/dave/.emacs.d/el-get/nognus/lisp/mml2015 hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/mml2015 /Users/dave/.emacs.d/el-get/nognus/lisp/mml1991 hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/mml1991 /Users/dave/.emacs.d/el-get/nognus/lisp/mml hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/mml /Users/dave/.emacs.d/el-get/nognus/lisp/mml-smime hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/mml-smime /Users/dave/.emacs.d/el-get/nognus/lisp/mml-sec hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/mml-sec /Users/dave/.emacs.d/el-get/nognus/lisp/mm-view hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/mm-view /Users/dave/.emacs.d/el-get/nognus/lisp/mm-uu hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/mm-uu /Users/dave/.emacs.d/el-get/nognus/lisp/mm-util hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/mm-util /Users/dave/.emacs.d/el-get/nognus/lisp/mm-url hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/mm-url /Users/dave/.emacs.d/el-get/nognus/lisp/mm-partial hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/mm-partial /Users/dave/.emacs.d/el-get/nognus/lisp/mm-extern hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/mm-extern /Users/dave/.emacs.d/el-get/nognus/lisp/mm-encode hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/mm-encode /Users/dave/.emacs.d/el-get/nognus/lisp/mm-decode hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/mm-decode /Users/dave/.emacs.d/el-get/nognus/lisp/mm-bodies hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/mm-bodies /Users/dave/.emacs.d/el-get/nognus/lisp/messcompat hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/messcompat /Users/dave/.emacs.d/el-get/nognus/lisp/message hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/message /Users/dave/.emacs.d/el-get/nognus/lisp/mailcap hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/mailcap /Users/dave/.emacs.d/el-get/nognus/lisp/mail-source hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/mail-source /Users/dave/.emacs.d/el-get/nognus/lisp/mail-prsvr hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/mail-prsvr /Users/dave/.emacs.d/el-get/nognus/lisp/mail-parse hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/mail-parse /Users/dave/.emacs.d/el-get/nognus/lisp/legacy-gnus-agent hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/legacy-gnus-agent /Users/dave/.emacs.d/el-get/nognus/lisp/ietf-drums hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/ietf-drums /Users/dave/.emacs.d/el-get/nognus/lisp/html2text hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/html2text /Users/dave/.emacs.d/el-get/nognus/lisp/gnus hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus /Users/dave/.emacs.d/el-get/nognus/lisp/gnus-win hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-win /Users/dave/.emacs.d/el-get/nognus/lisp/gnus-vm hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-vm /Users/dave/.emacs.d/el-get/nognus/lisp/gnus-uu hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-uu /Users/dave/.emacs.d/el-get/nognus/lisp/gnus-util hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-util /Users/dave/.emacs.d/el-get/nognus/lisp/gnus-undo hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-undo /Users/dave/.emacs.d/el-get/nognus/lisp/gnus-topic hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-topic /Users/dave/.emacs.d/el-get/nognus/lisp/gnus-sum hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-sum /Users/dave/.emacs.d/el-get/nognus/lisp/gnus-start hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-start /Users/dave/.emacs.d/el-get/nognus/lisp/gnus-srvr hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-srvr /Users/dave/.emacs.d/el-get/nognus/lisp/gnus-spec hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-spec /Users/dave/.emacs.d/el-get/nognus/lisp/gnus-sieve hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-sieve /Users/dave/.emacs.d/el-get/nognus/lisp/gnus-setup hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-setup /Users/dave/.emacs.d/el-get/nognus/lisp/gnus-score hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-score /Users/dave/.emacs.d/el-get/nognus/lisp/gnus-salt hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-salt /Users/dave/.emacs.d/el-get/nognus/lisp/gnus-registry hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-registry /Users/dave/.emacs.d/el-get/nognus/lisp/gnus-range hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-range /Users/dave/.emacs.d/el-get/nognus/lisp/gnus-picon hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-picon /Users/dave/.emacs.d/el-get/nognus/lisp/gnus-msg hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-msg /Users/dave/.emacs.d/el-get/nognus/lisp/gnus-mlspl hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-mlspl /Users/dave/.emacs.d/el-get/nognus/lisp/gnus-ml hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-ml /Users/dave/.emacs.d/el-get/nognus/lisp/gnus-mh hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-mh /Users/dave/.emacs.d/el-get/nognus/lisp/gnus-logic hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-logic /Users/dave/.emacs.d/el-get/nognus/lisp/gnus-kill hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-kill /Users/dave/.emacs.d/el-get/nognus/lisp/gnus-int hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-int /Users/dave/.emacs.d/el-get/nognus/lisp/gnus-group hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-group /Users/dave/.emacs.d/el-get/nognus/lisp/gnus-fun hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-fun /Users/dave/.emacs.d/el-get/nognus/lisp/gnus-ems hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-ems /Users/dave/.emacs.d/el-get/nognus/lisp/gnus-eform hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-eform /Users/dave/.emacs.d/el-get/nognus/lisp/gnus-dup hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-dup /Users/dave/.emacs.d/el-get/nognus/lisp/gnus-draft hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-draft /Users/dave/.emacs.d/el-get/nognus/lisp/gnus-dired hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-dired /Users/dave/.emacs.d/el-get/nognus/lisp/gnus-diary hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-diary /Users/dave/.emacs.d/el-get/nognus/lisp/gnus-demon hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-demon /Users/dave/.emacs.d/el-get/nognus/lisp/gnus-delay hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-delay /Users/dave/.emacs.d/el-get/nognus/lisp/gnus-cus hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-cus /Users/dave/.emacs.d/el-get/nognus/lisp/gnus-cite hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-cite /Users/dave/.emacs.d/el-get/nognus/lisp/gnus-cache hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-cache /Users/dave/.emacs.d/el-get/nognus/lisp/gnus-bookmark hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-bookmark /Users/dave/.emacs.d/el-get/nognus/lisp/gnus-bcklg hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-bcklg /Users/dave/.emacs.d/el-get/nognus/lisp/gnus-async hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-async /Users/dave/.emacs.d/el-get/nognus/lisp/gnus-art hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-art /Users/dave/.emacs.d/el-get/nognus/lisp/gnus-agent hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gnus-agent /Users/dave/.emacs.d/el-get/nognus/lisp/gmm-utils hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/gmm-utils /Users/dave/.emacs.d/el-get/nognus/lisp/flow-fill hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/flow-fill /Users/dave/.emacs.d/el-get/nognus/lisp/ecomplete hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/ecomplete /Users/dave/.emacs.d/el-get/nognus/lisp/deuglify hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/deuglify /Users/dave/.emacs.d/el-get/nognus/lisp/compface hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/compface /Users/dave/.emacs.d/el-get/nognus/lisp/canlock hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/canlock /Users/dave/.emacs.d/el-get/nognus/lisp/auth-source hides /Applications/Emacs.app/Contents/Resources/lisp/gnus/auth-source /Users/dave/.emacs.d/el-get/nognus/lisp/time-date hides /Applications/Emacs.app/Contents/Resources/lisp/calendar/time-date /Users/dave/.emacs.d/el-get/nognus/lisp/parse-time hides /Applications/Emacs.app/Contents/Resources/lisp/calendar/parse-time Features: (shadow sort mail-extr emacsbug magit diff-mode log-edit pcvs-util add-log magit-bisect magit-key-mode shell eieio-custom eieio wid-browse tree-widget newcomment dabbrev color-theme-zenburn cus-edit apropos jka-compr multi-isearch vc-git thingatpt smiley gnus-cite gnus-art mm-uu mml2015 mm-view mml-smime smime password-cache dig nnir gnus-sum macroexp nnoo gnus-group gnus-undo nnmail mail-source gnus-start gnus-spec gnus-int message format-spec rfc822 mml mml-sec mm-decode mm-bodies mm-encode mailabbrev gmm-utils mailheader gnus-win gnus-range gnus gnus-ems nnheader gnus-util url-http tls url-auth mail-parse rfc2231 rfc2047 rfc2045 ietf-drums url-gw wl-score ssl elmo-nntp elmo-sendlog elmo-internal elmo-imap4 time-stamp elmo-net elmo-dop elmo-cache elmo-map hl-line modb-standard wl-mime mime-edit pgg-parse mail-utils mailalias mime-setup mail-mime-setup semi-setup mime-pgp pgg-def mime-play filename mime-image signature wl-spam elmo-spam elsp-header elsp-generic org-wl bookmark org-mac-message org-habit org-agenda org-id org-crypt org ob-emacs-lisp ob-tangle ob-ref ob-lob ob-table org-footnote org-src ob-comint ob-keys ob ob-eval org-pcomplete pcomplete org-list org-faces org-compat org-entities org-macs cal-menu calendar cal-loaddefs filladapt wl-demo wl-draft eword-encode wl-template sendmail wl-news derived wl-address wl-thread wl-action wl-summary ps-print ps-def lpr wl-refile wl-message elmo-mime mmelmo-buffer mmelmo-imap compile comint ring mime-view mime-conf calist semi-def mmimap mime-parse mmbuffer mmgeneric wl-highlight elmo-multi wl-folder wl wl-e21 wl-util pp elmo-flag elmo-localdir wl-vars epg-config wl-version elmo elmo-signal elmo-msgdb modb modb-generic modb-entity mime elmo-util emu invisible inv-23 poem poem-e20 poem-e20_3 utf7 eword-decode mel mime-def alist std11 mcharset mcs-20 mcs-e20 pces pces-e20 pces-20 broken pcustom elmo-date timezone path-util elmo-vars poe elmo-version pym static apel-ver product luna zenburn maxframe system-type-darwin-theme .loaddefs find-func browse-kill-ring byte-code-cache byte-opt warnings gravatar time-date url-cache url url-proxy url-privacy url-expand url-methods url-history url-cookie url-util url-parse url-vars mm-util mail-prsvr mailcap org-install gnus-load info markdown-mode noutline outline yasnippet advice advice-preload edmacro kmacro help-mode view assoc color-theme wid-edit el-get autoload help-fns bytecomp byte-compile cl cl-19 dired regexp-opt easy-mmode paren server ido autorevert delsel cus-start cus-load elhome tooltip ediff-hook vc-hooks lisp-float-type mwheel ns-win easymenu tool-bar dnd fontset image fringe lisp-mode register page menu-bar rfn-eshadow timer select scroll-bar mldrag mouse jit-lock font-lock syntax facemenu 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 loaddefs button minibuffer faces cus-face files text-properties overlay md5 base64 format env code-pages mule custom widget hashtable-print-readable backquote make-network-process ns multi-tty emacs) -- Dave Abrahams BoostPro Computing http://www.boostpro.com ^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#8863: 23.3; Strikethrough won't display on MacOS 2011-06-14 16:05 bug#8863: 23.3; Strikethrough won't display on MacOS Dave Abrahams @ 2011-06-18 21:48 ` Chong Yidong 2011-07-02 2:03 ` Dave Abrahams 2011-06-22 18:07 ` Alp Aker 2011-07-26 19:41 ` bug#8863: [PATCH] " Alp Aker 2 siblings, 1 reply; 8+ messages in thread From: Chong Yidong @ 2011-06-18 21:48 UTC (permalink / raw) To: Dave Abrahams; +Cc: 8863 Dave Abrahams <dave@boostpro.com> writes: > Title says it all. Faces with the "strikethrough" property set show up > as un-struck-through. Does this (100% untested) patch do the right thing? *** src/nsfont.m 2011-01-02 23:50:46 +0000 --- src/nsfont.m 2011-06-18 21:48:28 +0000 *************** *** 1188,1193 **** --- 1188,1207 ---- /*[context GSSetTextDrawingMode: GSTextFill]; /// not implemented yet */ } + /* do strike-through */ + if (face->strike_through_p) + { + float line_y = r.origin.y - 0.5 * font->height; + if (face->strike_through_color != 0) + [ns_lookup_indexed_color (face->strike_through_color, s->f) set]; + else + [col set]; + DPSmoveto (context, r.origin.x, line_y); + DPSlineto (context, r.origin.x + r.size.width, line_y); + if (face->strike_through_color != 0) + [col set]; + } + /* do underline */ if (face->underline_p) { ^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#8863: 23.3; Strikethrough won't display on MacOS 2011-06-18 21:48 ` Chong Yidong @ 2011-07-02 2:03 ` Dave Abrahams 2011-07-02 5:53 ` Alp Aker 0 siblings, 1 reply; 8+ messages in thread From: Dave Abrahams @ 2011-07-02 2:03 UTC (permalink / raw) To: Chong Yidong; +Cc: 8863 [-- Attachment #1: Type: text/plain, Size: 1193 bytes --] on Sat Jun 18 2011, Chong Yidong <cyd-AT-stupidchicken.com> wrote: > Dave Abrahams <dave@boostpro.com> writes: > >> Title says it all. Faces with the "strikethrough" property set show up >> as un-struck-through. > > Does this (100% untested) patch do the right thing? > > *** src/nsfont.m 2011-01-02 23:50:46 +0000 > --- src/nsfont.m 2011-06-18 21:48:28 +0000 > *************** > *** 1188,1193 **** > --- 1188,1207 ---- > /*[context GSSetTextDrawingMode: GSTextFill]; /// not implemented yet */ > } > > + /* do strike-through */ > + if (face->strike_through_p) > + { > + float line_y = r.origin.y - 0.5 * font->height; > + if (face->strike_through_color != 0) > + [ns_lookup_indexed_color (face->strike_through_color, s->f) set]; > + else > + [col set]; > + DPSmoveto (context, r.origin.x, line_y); > + DPSlineto (context, r.origin.x + r.size.width, line_y); > + if (face->strike_through_color != 0) > + [col set]; > + } > + > /* do underline */ > if (face->underline_p) > { No, but the enclosed 2 patches, together, seem to. Would somebody apply these, please? [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: MacOS strikethrough patch #1 of 2 --] [-- Type: text/x-patch, Size: 445 bytes --] --- src/nsterm.h 2011-01-08 17:45:14.000000000 +0000 +++ src/nsterm.h 2011-07-02 01:46:06.000000000 +0000 @@ -435,6 +435,7 @@ char bold, ital; /* convenience flags */ char synthItal; float voffset; /* mean of ascender/descender offsets */ + float xheight; /* used to position the strikethrough line */ XCharStruct max_bounds; /* we compute glyph codes and metrics on-demand in blocks of 256 indexed by hibyte, lobyte */ [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #3: MacOS strikethrough patch #2 of 2 --] [-- Type: text/x-patch, Size: 1893 bytes --] --- src/nsfont.m.old 2011-07-02 01:52:29.000000000 +0000 +++ src/nsfont.m 2011-07-02 01:53:51.000000000 +0000 @@ -840,6 +840,7 @@ font_info->underwidth = [sfont underlineThickness]; font_info->size = font->pixel_size; font_info->voffset = lrint (hshrink * [sfont ascender] + expand * hd / 2); + font_info->xheight = lrint (hshrink * [sfont xHeight] + expand * hd / 2); /* max bounds */ font_info->max_bounds.ascent = @@ -1188,6 +1189,22 @@ /*[context GSSetTextDrawingMode: GSTextFill]; /// not implemented yet */ } + /* do strike-through */ + if (face->strike_through_p) + { + float line_y = lrint (r.origin.y - 0.5 * font->xheight); + if (face->strike_through_color != 0) + [ns_lookup_indexed_color (face->strike_through_color, s->f) set]; + else + [col set]; + DPSmoveto (context, r.origin.x, line_y); + DPSlineto (context, r.origin.x + r.size.width, line_y); + if (face->strike_through_color != 0) + [col set]; + } + else + [col set]; + /* do underline */ if (face->underline_p) { @@ -1248,6 +1265,23 @@ CGContextSetTextDrawingMode (gcontext, kCGTextFill); } + if (face->strike_through_p) + { + float line_y = lrint (r.origin.y - 0.5 * font->xheight); + if (face->strike_through_color != 0) + [ns_lookup_indexed_color (face->strike_through_color, s->f) set]; + else + [col set]; + CGContextBeginPath (gcontext); + CGContextMoveToPoint (gcontext, r.origin.x, line_y); + CGContextAddLineToPoint (gcontext, r.origin.x + r.size.width, line_y); + CGContextStrokePath (gcontext); + if (face->strike_through_color != 0) + [col set]; + } + else + [col set]; + if (face->underline_p) { if (face->underline_color != 0) [-- Attachment #4: Type: text/plain, Size: 62 bytes --] -- Dave Abrahams BoostPro Computing http://www.boostpro.com ^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#8863: 23.3; Strikethrough won't display on MacOS 2011-07-02 2:03 ` Dave Abrahams @ 2011-07-02 5:53 ` Alp Aker 2011-07-03 2:27 ` Dave Abrahams 0 siblings, 1 reply; 8+ messages in thread From: Alp Aker @ 2011-07-02 5:53 UTC (permalink / raw) To: 8863 > Dave Abrahams <dave@boostpro.com> writes: > > No, but the enclosed 2 patches, together, seem to. Would somebody apply > these, please? I mentioned some problems with Chong Yidong's suggestion, one of which still applies here: this patch won't work with stretch or image glyphs (so, e.g., it won't do strike-through on tab characters). Also (something I didn't mention in the earlier post), this uses the same Quartz drawing API as the existing code for underlining, and so suffers from a problem that exists in that case as well; this kind of line-drawing is subject to anti-aliasing effects that will cause lines whose requested thickness is 1 pixel to appear thicker than that (specifically, the line-drawing commands in question stroke lines so that they're centered on their specified paths, and so a line whose thickness is an odd number of pixels is dithered, making it look thicker). Last week I promised a patch that would implement strike-through and overline face attributes and address problems with the existing implementation of underlining. I'll try to finish that up and post it tomorrow. ^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#8863: 23.3; Strikethrough won't display on MacOS 2011-07-02 5:53 ` Alp Aker @ 2011-07-03 2:27 ` Dave Abrahams 0 siblings, 0 replies; 8+ messages in thread From: Dave Abrahams @ 2011-07-03 2:27 UTC (permalink / raw) To: 8863 on Sat Jul 02 2011, Alp Aker <alp.tekin.aker-AT-gmail.com> wrote: >> Dave Abrahams <dave@boostpro.com> writes: >> >> No, but the enclosed 2 patches, together, seem to. Would somebody apply >> these, please? > > I mentioned some problems with Chong Yidong's suggestion, one of which > still applies here: this patch won't work with stretch or image glyphs > (so, e.g., it won't do strike-through on tab characters). > > Also (something I didn't mention in the earlier post), this uses the > same Quartz drawing API as the existing code for underlining, and so > suffers from a problem that exists in that case as well; this kind of > line-drawing is subject to anti-aliasing effects that will cause lines > whose requested thickness is 1 pixel to appear thicker than that > (specifically, the line-drawing commands in question stroke lines so > that they're centered on their specified paths, and so a line whose > thickness is an odd number of pixels is dithered, making it look > thicker). On my screen it's just grayscaled. However, as long as you're in that code, you might also consider whether there's too much rounding off (calls to lrint) going on in there. It certainly did look suspicious to me, but it worked "well enough" that I wasn't going to mess with it. > Last week I promised a patch that would implement strike-through and > overline face attributes and address problems with the existing > implementation of underlining. I'll try to finish that up and post it > tomorrow. Wow, I missed that post and wasted a day implementing this :( Thanks for your work on it. Will you apply this to the 23.3 branch as well as trunk? -- Dave Abrahams BoostPro Computing http://www.boostpro.com ^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#8863: 23.3; Strikethrough won't display on MacOS 2011-06-14 16:05 bug#8863: 23.3; Strikethrough won't display on MacOS Dave Abrahams 2011-06-18 21:48 ` Chong Yidong @ 2011-06-22 18:07 ` Alp Aker 2011-07-26 19:41 ` bug#8863: [PATCH] " Alp Aker 2 siblings, 0 replies; 8+ messages in thread From: Alp Aker @ 2011-06-22 18:07 UTC (permalink / raw) To: 8863, cyd Chong Yidong writes: > Does this (100% untested) patch do the right thing? That will only work on GnuStep; it won't do anything on Cocoa. Also, it will only do strikethrough on char and composite char glyphs. I'm working on a patch for this and related issues. (In addition to strike-through, the overline face attribute isn't implemented on NS either. Also, underlining only works with char and comp. char glyphs; so, e.g., tabs are never underlined.) I should have it ready next week. ^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#8863: [PATCH] bug#8863: 23.3; Strikethrough won't display on MacOS 2011-06-14 16:05 bug#8863: 23.3; Strikethrough won't display on MacOS Dave Abrahams 2011-06-18 21:48 ` Chong Yidong 2011-06-22 18:07 ` Alp Aker @ 2011-07-26 19:41 ` Alp Aker 2011-07-28 18:26 ` Chong Yidong 2 siblings, 1 reply; 8+ messages in thread From: Alp Aker @ 2011-07-26 19:41 UTC (permalink / raw) To: 8863; +Cc: Dave Abrahams, Chong Yidong Dave Abrahams wrote: > Thanks for your work on it. Will you apply this to the 23.3 branch as > well as trunk? I'm not a committer, so that will be up to whoever decides to apply the patch. I should note the code below has only been tested on 24.0.50; I suspect it should work as it on 23.3, but haven't tried it. (About the anti-aliasing issue I mentioned before: Whether it's noticeable depends on factors like font metrics and the degree of contrast between background and foreground. I've done everything with exact pixel drawing, so it shouldn't be an issue.) A quick implementation note: This patch implements strike-through and overline face attributes on NS. It also implements underlining for stretch and image glyphs (the existing implementation does underlining only for char and composite char glyphs). It also adds support for the user options underline-minimum-offset, x-use-underline-position-properties, and x-underline-at-descent-line, which are currently ignored on NextStep. Sorry for the delay in posting this. This patch is large enough that I need a copyright assignment, which has taken a few weeks. The signed papers should have arrived as FSF today, so hopefully the way will soon be clear to incorporate this code. 2011-07-26 Alp Aker <alp.tekin.aker@gmail.com> Implement strike-through and overline face attributes on NextStep. Extend implemention of underlining to include stretch and image glyphs. Add support for user options underline-minimum-offset, x-use-underline-position-properties, and x-underline-at-descent-line. * nsfont.m (nsfont_open): Use underline position provided by font, instead of hard-coded value of 2. (nsfont_draw): Remove underlining code. Call ns_draw_text_decoration instead. * nsterm.h: Add declaration for ns_draw_text_decoration. * nsterm.m (ns_draw_text_decoration): New function for drawing underline, overline, and strike-through. (ns_dumpglyphs_image, ns_dumpglyphs_stretch): Add call to ns_draw_text_decoration. Change treatment of cursor drawing to accomodate underlining, etc. === modified file 'src/nsfont.m' --- src/nsfont.m 2011-04-16 03:14:08 +0000 +++ src/nsfont.m 2011-07-25 01:29:36 +0000 @@ -845,7 +845,7 @@ expand = 0.0; hshrink = 1.0; - font_info->underpos = 2; /*[sfont underlinePosition] is often clipped out */ + font_info->underpos = [sfont underlinePosition]; font_info->underwidth = [sfont underlineThickness]; font_info->size = font->pixel_size; font_info->voffset = lrint (hshrink * [sfont ascender] + expand * hd / 2); @@ -1196,20 +1196,7 @@ /*[context GSSetTextDrawingMode: GSTextFill]; /// not implemented yet */ } - /* do underline */ - if (face->underline_p) - { - if (face->underline_color != 0) - [ns_lookup_indexed_color (face->underline_color, s->f) set]; - else - [col set]; - DPSmoveto (context, r.origin.x, r.origin.y + font->underpos); - DPSlineto (context, r.origin.x+r.size.width, r.origin.y+font->underpos); - if (face->underline_color != 0) - [col set]; - } - else - [col set]; + [col set]; /* draw with DPSxshow () */ DPSmoveto (context, r.origin.x, r.origin.y); @@ -1255,23 +1242,7 @@ CGContextSetTextDrawingMode (gcontext, kCGTextFill); } - if (face->underline_p) - { - if (face->underline_color != 0) - [ns_lookup_indexed_color (face->underline_color, s->f) set]; - else - [col set]; - CGContextBeginPath (gcontext); - CGContextMoveToPoint (gcontext, - r.origin.x, r.origin.y + font->underpos); - CGContextAddLineToPoint (gcontext, r.origin.x + r.size.width, - r.origin.y + font->underpos); - CGContextStrokePath (gcontext); - if (face->underline_color != 0) - [col set]; - } - else - [col set]; + [col set]; CGContextSetTextPosition (gcontext, r.origin.x, r.origin.y); CGContextShowGlyphsWithAdvances (gcontext, s->char2b + s->cmp_from, @@ -1287,6 +1258,10 @@ CGContextRestoreGState (gcontext); } #endif /* NS_IMPL_COCOA */ + + /* Draw underline, overline, strike-through. */ + ns_draw_text_decoration (s, face, col, r.size.width, r.origin.x); + return to-from; } === modified file 'src/nsterm.h' --- src/nsterm.h 2011-07-08 10:04:23 +0000 +++ src/nsterm.h 2011-07-25 01:29:36 +0000 @@ -825,6 +825,13 @@ float r, float g, float b, float a); extern NSPoint last_mouse_motion_position; +/* From nsterm.m, needed in nsfont.m. */ +#ifdef __OBJC__ +extern void +ns_draw_text_decoration (struct glyph_string *s, struct face *face, + NSColor *defaultCol, CGFloat width, CGFloat x); +#endif + #ifdef NS_IMPL_GNUSTEP extern char gnustep_base_version[]; /* version tracking */ #endif === modified file 'src/nsterm.m' --- src/nsterm.m 2011-07-23 08:33:06 +0000 +++ src/nsterm.m 2011-07-25 06:33:54 +0000 @@ -263,8 +263,6 @@ static void ns_judge_scroll_bars (struct frame *f); void x_set_frame_alpha (struct frame *f); -/* FIXME: figure out what to do with underline_minimum_offset. */ - /* ========================================================================== @@ -2597,6 +2595,107 @@ return n; } +void +ns_draw_text_decoration (struct glyph_string *s, struct face *face, + NSColor *defaultCol, CGFloat width, CGFloat x) +/* -------------------------------------------------------------------------- + Draw underline, overline, and strike-through on glyph string s. + -------------------------------------------------------------------------- */ +{ + if (s->for_overlaps) + return; + + /* Do underline. */ + if (face->underline_p) + { + NSRect r; + unsigned long thickness, position; + + /* If the prev was underlined, match its appearance. */ + if (s->prev && s->prev->face->underline_p + && s->prev->underline_thickness > 0) + { + thickness = s->prev->underline_thickness; + position = s->prev->underline_position; + } + else + { + struct font *font; + unsigned long descent; + + font=s->font; + descent = s->y + s->height - s->ybase; + + /* Use underline thickness of font, defaulting to 1. */ + thickness = (font && font->underline_thickness > 0) + ? font->underline_thickness : 1; + + /* Determine the offset of underlining from the baseline. */ + if (x_underline_at_descent_line) + position = descent - thickness; + else if (x_use_underline_position_properties + && font && font->underline_position >= 0) + position = font->underline_position; + else if (font) + position = lround (font->descent / 2); + else + position = underline_minimum_offset; + + position = max (position, underline_minimum_offset); + + /* Ensure underlining is not cropped. */ + if (descent <= position) + { + position = descent - 1; + thickness = 1; + } + else if (descent < position + thickness) + thickness = 1; + } + + s->underline_thickness = thickness; + s->underline_position = position; + + r = NSMakeRect (x, s->ybase + position, width, thickness); + + if (face->underline_defaulted_p) + [defaultCol set]; + else + [ns_lookup_indexed_color (face->underline_color, s->f) set]; + NSRectFill (r); + } + + /* Do overline. We follow other terms in using a thickness of 1 + and ignoring overline_margin. */ + if (face->overline_p) + { + NSRect r; + r = NSMakeRect (x, s->y, width, 1); + + if (face->overline_color_defaulted_p) + [defaultCol set]; + else + [ns_lookup_indexed_color (face->overline_color, s->f) set]; + NSRectFill (r); + } + + /* Do strike-through. We follow other terms for thickness and + vertical position.*/ + if (face->strike_through_p) + { + NSRect r; + unsigned long dy; + + dy = lrint ((s->height - 1) / 2); + r = NSMakeRect (x, s->y + dy, width, 1); + + if (face->strike_through_color_defaulted_p) + [defaultCol set]; + else + [ns_lookup_indexed_color (face->strike_through_color, s->f) set]; + NSRectFill (r); + } +} static void ns_draw_box (NSRect r, float thickness, NSColor *col, char left_p, char right_p) @@ -2854,6 +2953,7 @@ char raised_p; NSRect br; struct face *face; + NSColor *tdCol; NSTRACE (ns_dumpglyphs_image); @@ -2882,10 +2982,7 @@ else face = FACE_FROM_ID (s->f, s->first_glyph->face_id); - if (s->hl == DRAW_CURSOR) - [FRAME_CURSOR_COLOR (s->f) set]; - else - [ns_lookup_indexed_color (NS_FACE_BACKGROUND (face), s->f) set]; + [ns_lookup_indexed_color (NS_FACE_BACKGROUND (face), s->f) set]; if (bg_height > s->slice.height || s->img->hmargin || s->img->vmargin || s->img->mask || s->img->pixmap == 0 || s->width != s->background_width) @@ -2923,6 +3020,27 @@ [img compositeToPoint: NSMakePoint (x, y + s->slice.height) operation: NSCompositeSourceOver]; + if (s->hl == DRAW_CURSOR) + { + [FRAME_CURSOR_COLOR (s->f) set]; + if (s->w->phys_cursor_type == FILLED_BOX_CURSOR) + tdCol = ns_lookup_indexed_color (NS_FACE_BACKGROUND (face), s->f); + else + /* Currently on NS img->mask is always 0. Since + get_window_cursor_type specifies a hollow box cursor when on + a non-masked image we never reach this clause. But we put it + in in antipication of better support for image masks on + NS. */ + tdCol = ns_lookup_indexed_color (NS_FACE_FOREGROUND (face), s->f); + } + else + { + tdCol = ns_lookup_indexed_color (NS_FACE_FOREGROUND (face), s->f); + } + + /* Draw underline, overline, strike-through. */ + ns_draw_text_decoration (s, face, tdCol, br.size.width, br.origin.x); + /* Draw relief, if requested */ if (s->img->relief || s->hl ==DRAW_IMAGE_RAISED || s->hl ==DRAW_IMAGE_SUNKEN) { @@ -2967,12 +3085,27 @@ NSRect r[2]; int n, i; struct face *face; + NSColor *fgCol, *bgCol; if (!s->background_filled_p) { n = ns_get_glyph_string_clip_rect (s, r); *r = NSMakeRect (s->x, s->y, s->background_width, s->height); + ns_focus (s->f, r, n); + + if (s->hl == DRAW_MOUSE_FACE) + { + face = FACE_FROM_ID (s->f, MOUSE_HL_INFO (s->f)->mouse_face_face_id); + if (!face) + face = FACE_FROM_ID (s->f, MOUSE_FACE_ID); + } + else + face = FACE_FROM_ID (s->f, s->first_glyph->face_id); + + bgCol = ns_lookup_indexed_color (NS_FACE_BACKGROUND (face), s->f); + fgCol = ns_lookup_indexed_color (NS_FACE_FOREGROUND (face), s->f); + for (i=0; i<n; i++) { if (!s->row->full_width_p) @@ -2998,30 +3131,37 @@ FRAME_PIXEL_WIDTH (s->f)); } + [bgCol set]; + /* NOTE: under NS this is NOT used to draw cursors, but we must avoid overwriting cursor (usually when cursor on a tab) */ if (s->hl == DRAW_CURSOR) { - r[i].origin.x += s->width; - r[i].size.width -= s->width; - } + CGFloat x, width; + + x = r[i].origin.x; + width = s->w->phys_cursor_width; + r[i].size.width -= width; + r[i].origin.x += width; + + NSRectFill (r[i]); + + /* Draw overlining, etc. on the cursor. */ + if (s->w->phys_cursor_type == FILLED_BOX_CURSOR) + ns_draw_text_decoration (s, face, bgCol, width, x); + else + ns_draw_text_decoration (s, face, fgCol, width, x); + } + else + { + NSRectFill (r[i]); + } + + /* Draw overlining, etc. on the stretch glyph (or the part + of the stretch glyph after the cursor). */ + ns_draw_text_decoration (s, face, fgCol, r[i].size.width, + r[i].origin.x); } - - ns_focus (s->f, r, n); - - if (s->hl == DRAW_MOUSE_FACE) - { - face = FACE_FROM_ID (s->f, MOUSE_HL_INFO (s->f)->mouse_face_face_id); - if (!face) - face = FACE_FROM_ID (s->f, MOUSE_FACE_ID); - } - else - face = FACE_FROM_ID (s->f, s->first_glyph->face_id); - - [ns_lookup_indexed_color (NS_FACE_BACKGROUND (face), s->f) set]; - - NSRectFill (r[0]); - NSRectFill (r[1]); ns_unfocus (s->f); s->background_filled_p = 1; } @@ -6556,23 +6696,17 @@ Vx_toolkit_scroll_bars = Qnil; #endif - /* these are unsupported but we need the declarations to avoid whining - messages from cus-start.el */ DEFVAR_BOOL ("x-use-underline-position-properties", x_use_underline_position_properties, - doc: /* NOT SUPPORTED UNDER NS. -*Non-nil means make use of UNDERLINE_POSITION font properties. + doc: /*Non-nil means make use of UNDERLINE_POSITION font properties. A value of nil means ignore them. If you encounter fonts with bogus UNDERLINE_POSITION font properties, for example 7x13 on XFree prior -to 4.1, set this to nil. - -NOTE: Not supported on Mac yet. */); +to 4.1, set this to nil. */); x_use_underline_position_properties = 0; DEFVAR_BOOL ("x-underline-at-descent-line", x_underline_at_descent_line, - doc: /* NOT SUPPORTED UNDER NS. -*Non-nil means to draw the underline at the same place as the descent line. + doc: /* Non-nil means to draw the underline at the same place as the descent line. A value of nil means to draw the underline according to the value of the variable `x-use-underline-position-properties', which is usually at the baseline level. The default value is nil. */); ^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#8863: [PATCH] bug#8863: 23.3; Strikethrough won't display on MacOS 2011-07-26 19:41 ` bug#8863: [PATCH] " Alp Aker @ 2011-07-28 18:26 ` Chong Yidong 0 siblings, 0 replies; 8+ messages in thread From: Chong Yidong @ 2011-07-28 18:26 UTC (permalink / raw) To: Alp Aker; +Cc: Dave Abrahams, 8863 Alp Aker <alptekin.aker@gmail.com> writes: > I'm not a committer, so that will be up to whoever decides to apply > the patch. I should note the code below has only been tested on > 24.0.50; I suspect it should work as it on 23.3, but haven't tried it. > > Sorry for the delay in posting this. This patch is large enough that > I need a copyright assignment, which has taken a few weeks. The > signed papers should have arrived as FSF today, so hopefully the way > will soon be clear to incorporate this code. Committed to trunk, thanks. ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2011-07-28 18:26 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2011-06-14 16:05 bug#8863: 23.3; Strikethrough won't display on MacOS Dave Abrahams 2011-06-18 21:48 ` Chong Yidong 2011-07-02 2:03 ` Dave Abrahams 2011-07-02 5:53 ` Alp Aker 2011-07-03 2:27 ` Dave Abrahams 2011-06-22 18:07 ` Alp Aker 2011-07-26 19:41 ` bug#8863: [PATCH] " Alp Aker 2011-07-28 18:26 ` Chong Yidong
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs.git 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).