diff --git a/src/cmdexpand.c b/src/cmdexpand.c
index 6ffef0c..e5b96fb 100644
--- a/src/cmdexpand.c
+++ b/src/cmdexpand.c
@@ -4022,7 +4022,7 @@
     {
 	xpc.xp_pattern = pat;
 	xpc.xp_pattern_len = (int)STRLEN(xpc.xp_pattern);
-        xpc.xp_line = pat;
+	xpc.xp_line = pat;
 
 	xpc.xp_context = cmdcomplete_str_to_type(type);
 	if (xpc.xp_context == EXPAND_NOTHING)
@@ -4033,26 +4033,26 @@
 
 	if (xpc.xp_context == EXPAND_USER_DEFINED)
 	{
-            // Must be "custom,funcname" pattern
-            if (STRNCMP(type, "custom,", 7) != 0)
-            {
-                semsg(_(e_invalid_argument_str), type);
-                return;
-            }
+	    // Must be "custom,funcname" pattern
+	    if (STRNCMP(type, "custom,", 7) != 0)
+	    {
+		semsg(_(e_invalid_argument_str), type);
+		return;
+	    }
 
-            xpc.xp_arg = type + 7;
+	    xpc.xp_arg = type + 7;
 	}
 
 	if (xpc.xp_context == EXPAND_USER_LIST)
 	{
-            // Must be "customlist,funcname" pattern
-            if (STRNCMP(type, "customlist,", 11) != 0)
-            {
-                semsg(_(e_invalid_argument_str), type);
-                return;
-            }
+	    // Must be "customlist,funcname" pattern
+	    if (STRNCMP(type, "customlist,", 11) != 0)
+	    {
+		semsg(_(e_invalid_argument_str), type);
+		return;
+	    }
 
-            xpc.xp_arg = type + 11;
+	    xpc.xp_arg = type + 11;
 	}
 
 # if defined(FEAT_MENU)
diff --git a/src/ex_getln.c b/src/ex_getln.c
index 88eba32..ad3a310 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -4167,7 +4167,7 @@
 
     char_u *cmd_compl = cmdcomplete_type_to_str(p->xpc->xp_context);
     if (cmd_compl == NULL)
-        return NULL;
+	return NULL;
 
     if (p->xpc->xp_context == EXPAND_USER_LIST || p->xpc->xp_context == EXPAND_USER_DEFINED)
     {
diff --git a/src/if_py_both.h b/src/if_py_both.h
index c1d7675..6e2ef26 100644
--- a/src/if_py_both.h
+++ b/src/if_py_both.h
@@ -109,7 +109,7 @@
 {
     PyObject *obj = (PyObject *)PyObject_Malloc(objsize);
     if (obj == NULL)
-        return PyErr_NoMemory();
+	return PyErr_NoMemory();
     return PyObject_Init(obj, type);
 }
 # undef PyObject_NEW
@@ -270,7 +270,7 @@
     // This function emulates CPython's implementation.
     PyObject* m = PyImport_AddModule("__main__");
     if (m == NULL)
-        return -1;
+	return -1;
     PyObject* d = PyModule_GetDict(m);
     PyObject* output = Vim_PyRun_String(str, Py_file_input, d, d);
     if (output == NULL)
diff --git a/src/popupwin.c b/src/popupwin.c
index 92195a2..a8ac39d 100644
--- a/src/popupwin.c
+++ b/src/popupwin.c
@@ -817,7 +817,7 @@
     }
 
     if (set_padding_border(dict, wp->w_popup_padding, "padding", 999) == FAIL ||
-        set_padding_border(dict, wp->w_popup_border, "border", 1) == FAIL)
+	set_padding_border(dict, wp->w_popup_border, "border", 1) == FAIL)
 	return FAIL;
 
     di = dict_find(dict, (char_u *)"borderhighlight", -1);
diff --git a/src/quickfix.c b/src/quickfix.c
index 6aa828b..aa431ea 100644
--- a/src/quickfix.c
+++ b/src/quickfix.c
@@ -2180,7 +2180,7 @@
     qfp->qf_end_col = end_col;
     qfp->qf_viscol = vis_col;
     if (user_data == NULL || user_data->v_type == VAR_UNKNOWN)
-        qfp->qf_user_data.v_type = VAR_UNKNOWN;
+	qfp->qf_user_data.v_type = VAR_UNKNOWN;
     else
     {
 	copy_tv(user_data, &qfp->qf_user_data);
diff --git a/src/version.c b/src/version.c
index cc05920..fed588e 100644
--- a/src/version.c
+++ b/src/version.c
@@ -700,6 +700,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1795,
+/**/
     1794,
 /**/
     1793,
diff --git a/src/vim9class.c b/src/vim9class.c
index 4f86a6f..bf1b120 100644
--- a/src/vim9class.c
+++ b/src/vim9class.c
@@ -96,8 +96,8 @@
 	fill_evalarg_from_eap(&evalarg, eap, FALSE);
 	(void)skip_expr_concatenate(&init_arg, &expr_start, &expr_end, &evalarg);
 
-	// No type specified for the member.  Set it to "any" and the correct type will be
-	// set when the object is instantiated.
+	// No type specified for the member.  Set it to "any" and the correct
+	// type will be set when the object is instantiated.
 	if (type == NULL)
 	    type = &t_any;
 
@@ -1743,7 +1743,7 @@
     class_T *cl = obj->obj_class;
 
     if (!cl)
-        return;
+	return;
 
     // the member values are just after the object structure
     typval_T *tv = (typval_T *)(obj + 1);
@@ -1914,8 +1914,8 @@
 }
 
 /*
- * Return TRUE when the class "cl", its base class or one of the implemented interfaces
- * matches the class "other_cl".
+ * Return TRUE when the class "cl", its base class or one of the implemented
+ * interfaces matches the class "other_cl".
  */
     int
 class_instance_of(class_T *cl, class_T *other_cl)
diff --git a/src/vim9compile.c b/src/vim9compile.c
index 09b4bf1..7427f25 100644
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -2075,7 +2075,7 @@
 	// Also for "obj.value".
        char_u *dot = vim_strchr(var_start, '.');
        if (dot == NULL)
-           return FAIL;
+	   return FAIL;
 
 	class_T *cl = lhs->lhs_type->tt_class;
 	type_T *type = class_member_type(cl, dot + 1,
diff --git a/src/viminfo.c b/src/viminfo.c
index fbab05e..d328156 100644
--- a/src/viminfo.c
+++ b/src/viminfo.c
@@ -1804,11 +1804,11 @@
 	    y_ptr->y_array[i] = vp[i + 6].bv_string;
 	    vp[i + 6].bv_string = NULL;
 	}
-        else if (vp[i + 6].bv_type != BVAL_STRING)
-        {
-            free(y_ptr->y_array);
-            y_ptr->y_array = NULL;
-        }
+	else if (vp[i + 6].bv_type != BVAL_STRING)
+	{
+	    free(y_ptr->y_array);
+	    y_ptr->y_array = NULL;
+	}
 	else
 	    y_ptr->y_array[i] = vim_strsave(vp[i + 6].bv_string);
     }
