Emacs can not distinguish shifted or unshifted key operation. And that is why in Emacs the key command is case insensitive.

If you look key binding of C-S-e by pressing F1 then ? then press c, and press Ctrl + Shift + e. Emacs will prompt in mini buffer that the command is translated from C-S-e, and the actual command is C-e. There is no such a thing that you can input command C-E.

What about punctuation?

For letters there may no problems. But it problematic when you want to deal with punctuation.

For example, I want to set C-; to execute move cursor to end of line.

 
(global-set-key [(control ?\;)] 'move-end-of-line)
 

Think about what would happen when we want to select text when moving to end of line.

For the default binding, when we press C-S-e, Emacs will recognize this is translated from C-S-e, and the original command is C-e.

In our case, we will press C-S-;, but Emacs will treat it as C-: and its not treat as shift operation.

There is no binding for C-: in default settings.So we can set it to execute selection and move to end of line.

Here is a solution , but it has a little problem.

 
 
(defun my-select-to-end ()
  (interactive)
  (set-mark-command nil)
  (move-end-of-line nil)
  (setq deactivate-mark nil)
)
(global-set-key [(control ?\:)] 'my-select-to-end)
 

With this binding, now we can press C-S-; which actually is C-: to simulate shift selection. But remember, Emacs wouldn't treat it as an shift operation. We just simulate it programmatically.

This causes problem.

This command behave a bit different form C-S-e, if you execute this command, the text between current position and line end will be selected. But when you hold the Ctrl and Shift and move cursor, for example backward, the key combination will be C-S-b. The selection will be deactivated and a new selection started .

If you select with C-S-e and then do the same thing, the selection keep active, but the right side of the selection will be one char off the line end.

The reason is for C-S-e, its a shift operation, the subsequent shift operation will not deactivate the selection. See Gnu Emacs Manual, 8.6 Shift Selection.

But C-: is not a shift operation, the subsequent shift operation will set a new mark, this will deactivate current selection.

handle-shift-selection and this-command-keys-shift-translated

The so called translated shift key is implemented in function handle-shift-selection which is defined in simple.el

Look at this function.

 
(defun handle-shift-selection ()
  "Activate/deactivate mark depending on invocation thru shift translation.
This function is called by `call-interactively' when a command
with a `^' character in its `interactive' spec is invoked, before
running the command itself.
 
If `shift-select-mode' is enabled and the command was invoked
through shift translation, set the mark and activate the region
temporarily, unless it was already set in this way.  See
`this-command-keys-shift-translated' for the meaning of shift
translation.
 
Otherwise, if the region has been activated temporarily,
deactivate it, and restore the variable `transient-mark-mode' to
its earlier value."
  (cond ((and shift-select-mode this-command-keys-shift-translated)
         (unless (and mark-active
              (eq (car-safe transient-mark-mode) 'only))
       (setq transient-mark-mode
                 (cons 'only
                       (unless (eq transient-mark-mode 'lambda)
                         transient-mark-mode)))
           (push-mark nil nil t)))
        ((eq (car-safe transient-mark-mode) 'only)
         (setq transient-mark-mode (cdr transient-mark-mode))
         (deactivate-mark))))
 

The variable this-command-keys-shift-translated indicates whether current command is a shift operation. Since our C-S-; is treated as C-:, so it will not be a shift operation. What we need to do is set this variable as true manually and then call handle-shift-selection function.

 
(defun my-select-to-end ()
  (interactive )
  (setq this-command-keys-shift-translated t)
  (handle-shift-selection)
  (move-end-of-line nil)
)
 
 

Now the C-; and C-: will behave exactly the same as C-e , C-S-e.