]> code.delx.au - gnu-emacs/blobdiff - src/indent.c
(mail-extr-all-top-level-domains): More domains.
[gnu-emacs] / src / indent.c
index a6fa7a9242001d0a797cdaf519365d44d78fefe8..b4592a2dddf8c9123a35515d22727ec8b970f212 100644 (file)
@@ -23,6 +23,7 @@ Boston, MA 02111-1307, USA.  */
 #include "lisp.h"
 #include "buffer.h"
 #include "charset.h"
+#include "category.h"
 #include "indent.h"
 #include "frame.h"
 #include "window.h"
@@ -281,6 +282,7 @@ however, ^M is treated as end of line when `selective-display' is t.")
 
 /* Cancel any recorded value of the horizontal position.  */
 
+void
 invalidate_current_column ()
 {
   last_known_column_point = 0;
@@ -680,6 +682,9 @@ position_indentation (pos)
        }
       switch (*p++)
        {
+       case 0240:
+         if (! NILP (current_buffer->enable_multibyte_characters))
+           return column;
        case ' ':
          column++;
          break;
@@ -687,7 +692,21 @@ position_indentation (pos)
          column += tab_width - column % tab_width;
          break;
        default:
-         return column;
+         if (ASCII_BYTE_P (p[-1])
+             || NILP (current_buffer->enable_multibyte_characters))
+           return column;
+         {
+           int pos = PTR_CHAR_POS (p - 1);
+           int c = FETCH_MULTIBYTE_CHAR (pos);
+           if (CHAR_HAS_CATEGORY (c, ' '))
+             {
+               column++;
+               INC_POS (pos);
+               p = POS_ADDR (pos);
+             }
+           else
+             return column;
+         }
        }
     }
 }
@@ -1256,7 +1275,8 @@ compute_motion (from, fromvpos, fromhpos, did_motion, to, tovpos, tohpos, width,
                }
            }
 
-         if (dp != 0 && VECTORP (DISP_CHAR_VECTOR (dp, c)))
+         if (dp != 0 && VECTORP (DISP_CHAR_VECTOR (dp, c))
+             && ! (multibyte && BASE_LEADING_CODE_P (c)))
            hpos += XVECTOR (DISP_CHAR_VECTOR (dp, c))->size;
          else if (c >= 040 && c < 0177)
            hpos++;