I somehow missed this thread. I have a (mostly) working code achieving the same thing in my personal config. The code is below. Hope it can give you some more ideas.
I am using font-lock for tag alignment. (add-hook 'org-mode-hook (lambda () (font-lock-add-keywords 'org-mode '(yant/org-align-tags) t)) 100) (add-hook 'org-mode-hook (lambda () (add-to-list 'font-lock-extra-managed-props 'org-tag-aligned))) (defun yant/org-align-tags (limit &optional force) "Align all the tags in org buffer." (save-match-data (when (eq major-mode 'org-mode) (while (re-search-forward "^\\*+ \\(.+?\\)\\([ \t]+\\)\\(:\\(?:[^ \n]+:\\)+\\)$" limit t) (when (and (match-string 2) (or force (not (get-text-property (match-beginning 2) 'org-tag-aligned)))) (with-silent-modifications (put-text-property (match-beginning 2) (match-end 2) 'org-tag-aligned t) (put-text-property (if (>= 2 (- (match-end 2) (match-beginning 2))) (match-beginning 2) ;; multiple whitespaces may mean that we are in process of typing (1+ (match-beginning 2))) (match-end 2) 'display `(space . (:align-to (- right (,(+ 3 ;; no idea, but otherwise it is sometimes not enough (string-display-pixel-width org-ellipsis) (string-display-pixel-width (or (match-string 3) "")))))))))))))) (defun string-display-pixel-width (string &optional mode) "Calculate pixel width of STRING. Optional MODE specifies major mode used for display." (with-temp-buffer (with-silent-modifications (setf (buffer-string) string)) (when (fboundp mode) (funcall mode) (font-lock-fontify-buffer)) (if (get-buffer-window (current-buffer)) (car (window-text-pixel-size nil (line-beginning-position) (point))) (set-window-buffer nil (current-buffer)) (car (window-text-pixel-size nil (line-beginning-position) (point)))))) Jeff Filipovits <jrfilipov...@gmail.com> writes: > Adam Spiers <orgm...@adamspiers.org> writes: > >> Hrm, no this isn't good enough. For graphical windows we still >> need >> to set the display text properties to align all tags when the >> buffer >> initially loads. AFAICS there's currently no code to trigger >> this, so >> it would need to be added, and for large files this might >> actually >> cause problems with file loading time unless it was done in the >> background (a bit like fontification can be done). > > > > The upside of this is that it enabled me do to some hacking so now > I can use a variable pitch font in the mu4e headers view and keep > the columns aligned, which makes mu4e much prettier. > > > -- > Jeff Filipovits > Spears & Filipovits, LLC > 1126 Ponce de Leon Avenue > Atlanta, GA 30306 > 678.237.9302 (direct) > j...@civil-rights.law > > All emails confidential to the fullest extent of the law.