Move cursor to right position on screen

This two function change behavior of moving cursor. Now it's same as in other editors. When you move up, or down then cursor move to next screen line, not to next buffer line.

This part change function which is call when user pres short cut for moving cursor

      (global-set-key "\C-p" 'previous-window-line)
      (global-set-key "\C-n" 'next-window-line)
      (global-set-key [up] 'previous-window-line)
      (global-set-key [down] 'next-window-line)
    

Function which define diferent behavior then next-line, or previous-line

(defun previous-window-line (n)
  "Function which move cursor to previous line like previous-line, but not same. Previous-line move curson on previous line in buffer, but this funciton move kursor to previous line which is show on screen."
  (interactive "p")
  (let ((cur-col
         (- (current-column)
            (save-excursion (vertical-motion 0) (current-column)))))
    (vertical-motion (- n))
    (move-to-column (+ (current-column) cur-col)))
  (run-hooks 'auto-line-hook)
  )


(defun next-window-line (n)
  "Function which move cursor to next line like next-line, but not same. Next-line move curson on next line in buffer, but this funciton move kursor to next line which is show on screen."
  (interactive "p")
  (let ((cur-col
         (- (current-column)
            (save-excursion (vertical-motion 0) (current-column)))))
    (vertical-motion n)
    (move-to-column (+ (current-column) cur-col)))
  (run-hooks 'auto-line-hook)
  )