patch 9.1.0145: v:echospace not correct when 'showcmdloc' != last

Problem:  the amount of available space (v:echospace) on the command
          line is not correct when showcmdloc is drawn into the
          statusline or tabline.
Solution: only add SHOWCMD_COLS to the shown command column when
          'showcmdloc' is set to last (Sam-programs)

closes: #14108

Co-authored-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Sam-programs <130783534+Sam-programs@users.noreply.github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/src/optionstr.c b/src/optionstr.c
index 7f6225f..771423c 100644
--- a/src/optionstr.c
+++ b/src/optionstr.c
@@ -3440,6 +3440,7 @@
     char *
 did_set_showcmdloc(optset_T *args UNUSED)
 {
+    comp_col();
     return did_set_opt_strings(p_sloc, p_sloc_values, FALSE);
 }
 
diff --git a/src/screen.c b/src/screen.c
index 939a335..208b182 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -4536,7 +4536,7 @@
 	if (!last_has_status)
 	    sc_col = ru_col;
     }
-    if (p_sc)
+    if (p_sc && *p_sloc == 'l')
     {
 	sc_col += SHOWCMD_COLS;
 	if (!p_ru || last_has_status)	    // no need for separating space
diff --git a/src/testdir/test_messages.vim b/src/testdir/test_messages.vim
index 48f1bab..8d0a422 100644
--- a/src/testdir/test_messages.vim
+++ b/src/testdir/test_messages.vim
@@ -162,8 +162,12 @@
   call assert_equal(&columns - 12, v:echospace)
   set showcmd ruler
   call assert_equal(&columns - 29, v:echospace)
+  set showcmdloc=statusline
+  call assert_equal(&columns - 19, v:echospace)
+  set showcmdloc=tabline
+  call assert_equal(&columns - 19, v:echospace)
 
-  set ruler& showcmd&
+  set ruler& showcmd& showcmdloc&
 endfunc
 
 func Test_warning_scroll()
diff --git a/src/version.c b/src/version.c
index a17f327..5842f46 100644
--- a/src/version.c
+++ b/src/version.c
@@ -705,6 +705,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    145,
+/**/
     144,
 /**/
     143,