In a buffer that contains bidirectional text, setting bidi-paragraph-direction to 'left-to-right aligns the RTL text with the left margin like the LTR text; see the first sexp below and the top buffer in the attached screenshot. Another alternative to get this alignment is to leave bidi-paragraph-direction at its default value of nil and use a space display specification with a suitable value for the :align-to property, but this requires a calculation that seems to depend at least on the font used and the values of `window-width' and `string-width' for the string used (or the corresponding pixel-width values); see the second sexp below and the middle buffer in the attached screenshot. It's also possible to avoid this calculation and use an :align-to value of 0 in combination with setting bidi-paragraph-direction to 'left-to-right; see the third sexp below and the bottom buffer in the attached screenshot. However, as the screenshot shows, this last alternative breaks Arabic text shaping, at least for the fonts I tried (Noto Naskh Arabic, DejaVu Sans and Amiri). If this is not an Emacs bug but a limitation of the current display engine or a HarfBuzz bug, perhaps it should be noted in etc/PROBLEMS. (let* ((a "السّلام عليكم") (b "Hello") (buf (get-buffer-create "Test1"))) (with-current-buffer buf (erase-buffer) (setq bidi-paragraph-direction 'left-to-right) (insert a "\n\n" b) (switch-to-buffer buf))) (let* ((a "السّلام عليكم") (wa (+ (- (window-width) (string-width a)) 0.75)) (b "Hello") (buf (get-buffer-create "Test2"))) (with-current-buffer buf (erase-buffer) (insert (propertize " " 'display `(space :align-to ,wa)) a "\n\n" b) (switch-to-buffer buf))) (let* ((a "السّلام عليكم") (b "Hello") (buf (get-buffer-create "Test3"))) (with-current-buffer buf (erase-buffer) (setq bidi-paragraph-direction 'left-to-right) (insert (propertize " " 'display `(space :align-to 0)) a "\n\n" b) (switch-to-buffer buf)))