diff --git a/src/popupwin.c b/src/popupwin.c
index ee59af2..9e9bf27 100644
--- a/src/popupwin.c
+++ b/src/popupwin.c
@@ -16,11 +16,55 @@
 #ifdef FEAT_TEXT_PROP
 
 /*
+ * Get option value for"key", which is "line" or "col".
+ * Handles "cursor+N" and "cursor-N".
+ */
+    static int
+popup_options_pos(dict_T *dict, char_u *key)
+{
+    dictitem_T	*di;
+    char_u	*val;
+    char_u	*s;
+    char_u	*endp;
+    int		n = 0;
+
+    di = dict_find(dict, key, -1);
+    if (di == NULL)
+	return 0;
+
+    val = tv_get_string(&di->di_tv);
+    if (STRNCMP(val, "cursor", 6) != 0)
+	return dict_get_number(dict, key);
+
+    setcursor_mayforce(TRUE);
+    s = val + 6;
+    if (*s != NUL)
+    {
+	n = strtol((char *)s, (char **)&endp, 10);
+	if (endp != NULL && *skipwhite(endp) != NUL)
+	{
+	    semsg(_(e_invexpr2), val);
+	    return 0;
+	}
+    }
+
+    if (STRCMP(key, "line") == 0)
+	n = screen_screenrow() + 1 + n;
+    else // "col"
+	n = screen_screencol() + 1 + n;
+
+    if (n < 1)
+	n = 1;
+    return n;
+}
+
+/*
  * Go through the options in "dict" and apply them to buffer "buf" displayed in
  * popup window "wp".
+ * When called from f_popup_atcursor() "atcursor" is TRUE.
  */
     static void
-apply_options(win_T *wp, buf_T *buf UNUSED, dict_T *dict)
+apply_options(win_T *wp, buf_T *buf UNUSED, dict_T *dict, int atcursor)
 {
     int	    nr;
     char_u  *str;
@@ -30,8 +74,19 @@
     wp->w_maxwidth = dict_get_number(dict, (char_u *)"maxwidth");
     wp->w_maxheight = dict_get_number(dict, (char_u *)"maxheight");
 
-    wp->w_wantline = dict_get_number(dict, (char_u *)"line");
-    wp->w_wantcol = dict_get_number(dict, (char_u *)"col");
+    if (atcursor)
+    {
+	setcursor_mayforce(TRUE);
+	wp->w_wantline = screen_screenrow();
+	wp->w_wantcol = screen_screencol() + 1;
+    }
+
+    nr = popup_options_pos(dict, (char_u *)"line");
+    if (nr > 0)
+	wp->w_wantline = nr;
+    nr = popup_options_pos(dict, (char_u *)"col");
+    if (nr > 0)
+	wp->w_wantcol = nr;
 
     wp->w_zindex = dict_get_number(dict, (char_u *)"zindex");
 
@@ -215,9 +270,11 @@
 
 /*
  * popup_create({text}, {options})
+ * popup_atcursor({text}, {options})
+ * When called from f_popup_atcursor() "atcursor" is TRUE.
  */
-    void
-f_popup_create(typval_T *argvars, typval_T *rettv)
+    static void
+popup_create(typval_T *argvars, typval_T *rettv, int atcursor)
 {
     win_T   *wp;
     buf_T   *buf;
@@ -309,7 +366,7 @@
     curbuf = curwin->w_buffer;
 
     // Deal with options.
-    apply_options(wp, buf, argvars[1].vval.v_dict);
+    apply_options(wp, buf, argvars[1].vval.v_dict, atcursor);
 
     // set default values
     if (wp->w_zindex == 0)
@@ -323,6 +380,24 @@
 }
 
 /*
+ * popup_create({text}, {options})
+ */
+    void
+f_popup_create(typval_T *argvars, typval_T *rettv)
+{
+    popup_create(argvars, rettv, FALSE);
+}
+
+/*
+ * popup_atcursor({text}, {options})
+ */
+    void
+f_popup_atcursor(typval_T *argvars, typval_T *rettv)
+{
+    popup_create(argvars, rettv, TRUE);
+}
+
+/*
  * Find the popup window with window-ID "id".
  * If the popup window does not exist NULL is returned.
  * If the window is not a popup window, and error message is given.
